线程评级:
修改ABB Post用于3D打印
# 1
你好,

我正在使用ABB机器人进行3D打印项目。我已经讲过了3D打印文档关于如何修改后处理器代码以说明挤压值。本文档提出了挤出机电机速度控制的模拟输出。然而,我使用IRC5 DeviceNet的数字I/O与一些同步信号来实现材料挤压。我已经准备好了必要的硬件 我知道如何用ABB软件配置I/O

我想修改后处理器代码(ABB_RAPID_IRC5.py),只在调用Extruder()函数时包含一组围绕MoveL命令的特定命令。到目前为止,我做了以下修改:

代码:
def MoveL(self, pose,关节,conf_RLF=None):
""" "添加一个线性运动""" "
目标= "
如果pose为None:
目标= ' CalcRobT ([% s, % s), % s, \ WObj: = % s)的% (angles_2_str(关节),extaxes_2_str(关节),自我。TOOLDATA self.WOBJDATA)
其他:
#过滤小动作
#如果自我。LAST_POSE不是None, pose也不是None:
# #如果新位置与上一个位置相同,跳过添加新移动
if distance(pose. pos (), self.LAST_POSE. pos ()) < 0.001 and pose_angle_between(pose, self.LAST_POSE) < 0.01:
#返回

#处理3D打印挤出机集成
# self.new_move(pose)(故意禁用)

如果conf_RLF为None:
conf_RLF = [0,0,0]
Cf1 = 0
Cf4 = 0
Cf6 = 0
如果关节不是None并且len(关节)>= 6:
Cf1 = math.floor(关节[0]/90.0)
Cf4 = math.floor(关节[3]/90.0)
Cf6 = math.floor(关节[5]/90.0)
[后,低臂,翻转]= conf_RLF
cfx = 4*REAR + 2*LOWERARM + FLIP
目标= ' [% s,[%, %, %, %我),% s]“% (pose_2_str(姿势),cf1, cf4, cf6,排名,extaxes_2_str(关节))

如果自我。ARC_ON:
# ArcL p100, v100, seam1, weld5 \Weave:= Weave 1, z10, gun1;
self.addline ('ArcL %s,%s,%s,%s,\Weave:=%s,%s,%s,\WObj:=%s;' % (target, self.SPEEDDATA, self.ARC_SEAMDATA, self.ARC_WELDDATA, self.ARC_WEAVEDATA, self.ZONEDATA, self.TOOLDATA, self.WOBJDATA))
elif自我。CLAD_ON:
self.addline ('CladL %s,%s,%s,%s,%s,\WObj:=%s;' % (target, self.SPEEDDATA, self.CLAD_DATA, self.ZONEDATA, self.TOOLDATA, self.WOBJDATA))
其他:
self.addline ('custom code line 1')
self.addline ('custom code line 2')
self.addline ('MoveL %s,%s,%s,%s,\WObj:=%s;' % (target, self.SPEEDDATA, self.ZONEDATA, self.TOOLDATA, self.WOBJDATA))
self.addline ('custom code line 3')

当我做这个修改时,所有的MoveL命令都被这样的自定义代码行包围:
代码:
自定义代码第1行
自定义代码第2行
MoveL命令
自定义代码第3行

但是,我希望插入这些自定义代码行具体的Extruder()函数调用后的move命令。以roboDK生成的RAPID代码为例:

代码:
挤出机(-0.800);
MoveL [[80.484, 81.324, 5.000), (0.000000, 0.000000, -1.000000, 0.000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],v35, z1, rdkTool, \ WObj: = rdkWObj;
MoveL [[80.484, 81.324, 0.600), (0.000000, 0.000000, -1.000000, 0.000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],v180, z1, rdkTool, \ WObj: = rdkWObj;
MoveL [[80.484, 81.324, 0.600), (0.000000, 0.000000, -1.000000, 0.000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],v180, z1, rdkTool, \ WObj: = rdkWObj;
MoveL [[80.484, 81.324, 0.200), (0.000000, 0.000000, -1.000000, 0.000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],v180, z1, rdkTool, \ WObj: = rdkWObj;

我只希望拳头MoveL被自定义代码行包围,而不是连续的MoveL命令。有人能帮我修改帖子来实现这一点吗?

PS:我正在使用ABB_RAPID_IRC5.py post文件的旧版本(不是实现模拟控制的新版本;虽然我可以访问,以及),因为我需要确切的E值从slic3r(未转换为ExtruderSpeed()函数)

任何帮助都将不胜感激!
嗨rakshithb174,

我只是随便说说而已。
难道你不能在你的后处理器中创建一个标志(也许是一个全局变量),初始化为FALSE和
当你进入后处理器的挤压部分时,变成TRUE。

然后在你的MoveL部分,你可以根据标志状态调整你的代码。

就像这样:

代码:
if Flag_Extrude == True:

self.addline ('custom code line 1')
self.addline ('custom code line 2')
self.addline ('MoveL %s,%s,%s,%s,\WObj:=%s;' % (target, self.SPEEDDATA, self.ZONEDATA, self.TOOLDATA, self.WOBJDATA))
self.addline ('custom code line 3')

Flag_Extrude = False

其他:

self.addline ('MoveL %s,%s,%s,%s,\WObj:=%s;' % (target, self.SPEEDDATA, self.ZONEDATA, self.TOOLDATA, self.WOBJDATA))

这样就可以为Extrude()命令后的第一个MoveL添加你想要的三行。

祝你有愉快的一天。
杰里米
# 3
嗨,杰里米,

谢谢你的建议。

我在RobotPost类下定义了一个全局标志“EXTRUDE_ON”,如下所示:
代码:
类RobotPost(对象):
"""机器人post对象""" "
# ------------------------ 使用以下variabl定制你的文章

#挤出标志
EXTRUDE_ON = False
在这之后,我编辑了“RunCode”函数调用,当收到extrtruder()时设置EXTRUDE_ON标志
代码:
def RunCode(self, code, is_function_call=False):
添加代码或函数调用"""
如果is_function_call:
Code = Code。Replace (' ', '_')
Code_lower = code.lower()

如果code_lower.startswith(挤出机():
#当挤出机调用被拦截时,设置挤出机标志为true
自我。trude_on = True

self.addline (code + ';')
其他:
if code. startwith ('END')或code. startwith ('ELSEIF'):
#删除ENDWHILE或ENDIF后的选项卡
自我。TAB = self.TAB[:-len(ONETAB)]

#用2个空格替换每个制表符
self.addline(代码。Replace ('\t', ' '))

如果代码。startwith ('IF ')或code. startwith (
'ELSEIF ')或代码。startswith(“同时”):
#添加TAB(一个TAB =两个空格)
自我。TAB = self。TAB + onetab
最后,我编辑了MoveL函数代码,使其仅在EXTRUDE_ON标志为True时包含自定义行
代码:
def MoveL(self, pose,关节,conf_RLF=None):
""" "添加一个线性运动""" "
目标= "
如果pose为None:
目标= r 'CalcRobT ((% s, % s), % s, \ WObj: = % s) ' % (angles_2_str (
关节),extaxes_2_str(关节),self。TOOLDATA self.WOBJDATA)
其他:
#过滤小动作
# if self。LAST_POSE不是None, pose也不是None:
# #如果新位置与上一个位置相同,跳过添加新移动
if distance(pose. pos (), self.LAST_POSE. pos ()) < 0.001 and pose_angle_between(pose, self.LAST_POSE) < 0.01:
#返回

#处理3D打印挤出机集成
# self.new_move(构成)

如果conf_RLF为None:
conf_RLF = [0,0,0]
Cf1 = 0
Cf4 = 0
Cf6 = 0
如果关节不是None并且len(关节)>= 6:
Cf1 =数学。地板(接头[0]/ 90.0)
Cf4 =数学。地板(接头[3]/ 90.0)
Cf6 =数学。地板(接头[5]/ 90.0)
[后,低臂,翻转]= conf_RLF
cfx = 4 * REAR + 2 * LOWERARM + FLIP
目标= '[%s,[%i,%i,%i],%s]' % (pose_2_str(
姿态),cf1, cf4, cf6, cfx, extaxes_2_str(关节))

如果自我。ARC_ON:
# ArcL p100, v100, seam1, weld5 \Weave:= Weave 1, z10, gun1;
self.addline (
r' arc %s,%s,%s,%s,\Weave:=%s,%s,%s,\WObj:=%s;
(目标,
自我。SPEEDDATA,
自我。ARC_SEAMDATA,
自我。ARC_WELDDATA,
自我。ARC_WEAVEDATA,
自我。ZONEDATA,
自我。TOOLDATA,
self.WOBJDATA))
elif自我。CLAD_ON:
self.addline (
r' cladl %s,%s,%s,%s,%s,\WObj:=%s;' %
(目标,
自我。SPEEDDATA,
自我。CLAD_DATA,
自我。ZONEDATA,
自我。TOOLDATA,
self.WOBJDATA))
elif自我。EXTRUDE_ON:
#挤出机呼叫标志为ON。用自定义代码包围MoveL
self.addline ('custom code 1')
self.addline ('custom code 2')
self.addline (
r'移动%s,%s,%s,%s,\WObj:=%s;' %
(目标,
自我。SPEEDDATA,
自我。ZONEDATA,
自我。TOOLDATA,
self.WOBJDATA))
self.addline ('custom code 3')
自我。EXTRDUDE_ON = False
其他:
self.addline (
r'移动%s,%s,%s,%s,\WObj:=%s;' %
(目标,
自我。SPEEDDATA,
自我。ZONEDATA,
自我。TOOLDATA,
self.WOBJDATA))
然而,当我使用这篇文章时,所有MoveL命令被自定义代码行包装
以下是原始帖子产生的代码片段
代码:
%%%
版本:1
语言:英语
%%%
模块MOD_Tmp1

PROC Prg_Tmp1 ()

ConfJ \;
ConfL \;
!显示R3DP_Extruder_Tool
MoveL [[80.484, 81.324, 5.000), (0.00000000, 0.00000000, -1.00000000, 0.00000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],[35.00,500,5000,1000],z1, R3DP_Extruder_Tool, \ WObj: = BedOrigin;
MoveL [[80.484, 81.324, 0.600), (0.00000000, 0.00000000, -1.00000000, 0.00000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],[180.00,500,5000,1000],z1, R3DP_Extruder_Tool, \ WObj: = BedOrigin;
MoveL [[80.484, 81.324, 0.600), (0.00000000, 0.00000000, -1.00000000, 0.00000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],[180.00,500,5000,1000],z1, R3DP_Extruder_Tool, \ WObj: = BedOrigin;
MoveL [[80.484, 81.324, 0.200), (0.00000000, 0.00000000, -1.00000000, 0.00000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],[180.00,500,5000,1000],z1, R3DP_Extruder_Tool, \ WObj: = BedOrigin;
挤出机(0.800);
MoveL [[80.484, 81.324, 0.200), (0.00000000, 0.00000000, -1.00000000, 0.00000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],[35.00,500,5000,1000],z1, R3DP_Extruder_Tool, \ WObj: = BedOrigin;
MoveL [[80.484, 81.324, 0.200), (0.00000000, 0.00000000, -1.00000000, 0.00000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],v20, z1, R3DP_Extruder_Tool, \ WObj: = BedOrigin;
挤出机(0.072);
这是我修改后得到的结果:
代码:
%%%
版本:1
语言:英语
%%%
模块MOD_Tmp1

PROC Prg_Tmp1 ()

ConfJ \;
ConfL \;
!显示R3DP_Extruder_Tool
自定义代码1
自定义代码2
MoveL [[80.484, 81.324, 5.000), (0.00000000, 0.00000000, -1.00000000, 0.00000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],[35.00,500,5000,1000],z1, R3DP_Extruder_Tool, \ WObj: = BedOrigin;
自定义代码3
自定义代码1
自定义代码2
MoveL [[80.484, 81.324, 0.600), (0.00000000, 0.00000000, -1.00000000, 0.00000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],[180.00,500,5000,1000],z1, R3DP_Extruder_Tool, \ WObj: = BedOrigin;
自定义代码3
自定义代码1
自定义代码2
MoveL [[80.484, 81.324, 0.600), (0.00000000, 0.00000000, -1.00000000, 0.00000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],[180.00,500,5000,1000],z1, R3DP_Extruder_Tool, \ WObj: = BedOrigin;
自定义代码3
自定义代码1
自定义代码2
MoveL [[80.484, 81.324, 0.200), (0.00000000, 0.00000000, -1.00000000, 0.00000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],[180.00,500,5000,1000],z1, R3DP_Extruder_Tool, \ WObj: = BedOrigin;
自定义代码3
挤出机(0.800);
自定义代码1
自定义代码2
MoveL [[80.484, 81.324, 0.200), (0.00000000, 0.00000000, -1.00000000, 0.00000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],[35.00,500,5000,1000],z1, R3DP_Extruder_Tool, \ WObj: = BedOrigin;
自定义代码3
自定义代码1
自定义代码2
MoveL [[80.484, 81.324, 0.200), (0.00000000, 0.00000000, -1.00000000, 0.00000000), (1, - 1, 0, 1], [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],v20, z1, R3DP_Extruder_Tool, \ WObj: = BedOrigin;
自定义代码3
挤出机(0.072);
我遗漏了什么吗?
在ABB_RAPID_IRC5.py的末尾有一个部分用于测试文章。我添加了一个简单的挤出机调用,看看它是否被正确地拾取:
代码:
ef test_post ():
""用基本程序测试职位"""

机器人=机器人邮局(
r 'ABB_RAPID_IRC5’,
r' abb IRB 6700-155/2.85',
6,
axes_type = [
“R”,
“R”,
“R”,
“R”,
“R”,
' R '])

robot.ProgStart (r 'Prog1”)
机器人。RunMessage (
r'程序由RoboDK 3.1.5在18/05/2017 11:02:41'为ABB IRB 6700-155/2.85生成,
真正的)
机器人。使用标称运动学。”,真的)
robot.setFrame(Pose([0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.000000, 0.000000]), -1, r' abb IRB 6700-155/2.85 Base')
robot.setTool(Pose([380.000000, 0.000000, 200.000000,
0.000000, 90.000000, 0.000000]), 1, r'工具1')
robot.setSpeed (2000.000)
robot.MoveJ(Pose([2103.102861, 0.000000, 1955.294643, -
180.000000,
3.591795,
180.000000]), [0.00000, 3.93969, -
14.73451, 0.00000, 14.38662, -
0.00000], [0.0, 0.0, 0.0])
robot.MoveJ(Pose([2065.661612, 700.455189, 1358.819971,180.000000, -
3.591795,
180.000000]), [22.50953, 5.58534, 8.15717, 67.51143, -
24.42689,
64.06258], [0.0, 0.0, 1.0])
robot.Pause (500.0)
robot.setSpeed (100.000)
#机器人。RunCode (r 'ArcLStart’,真的)
robot.RunCode (r 'Extruder(0.800)”)
当我只运行post文件来检查post处理器代码是否正常工作时,我得到以下输出:
代码:
ConfJ \;
ConfL \;
!由RoboDK 3.1.5在18/05/2017 11:02:41为ABB IRB 6700-155/2.85生成的程序
!使用名义运动学。
MoveAbsJ [[0.000000, 3.939690, -14.734510, 0.000000, 14.386620, -0.000000), (9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],v2000型,z1, Tool1, \ WObj: = ABBIRB6700155285Base;
MoveAbsJ [[22.509530, 5.585340, 8.157170, 67.511430, -24.426890, -64.062580), (9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],v2000型,z1, Tool1, \ WObj: = ABBIRB6700155285Base;
WaitTime 0.500;
挤出机(0.800)
MoveL [[2065.662, 1074.198, 1358.820), (0.03023582, -0.26288229, -0.96431880, 0.00824257), (0, 0, 1, 1) [9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年9 e + 09年]],v100, z1, Tool1, \ WObj: = ABBIRB6700155285Base;
看起来post不是接Extruder()调用?但是输出文件已经正确地添加了自定义代码行。我很困惑。你能帮我一下吗?
# 4
你能附上你修改过的后期处理器吗?
我会在我这边做一些测试,这样可以节省一些时间。

杰里米
# 5
嗨,杰里米,

我附上了ABB修改后的Post文件,请查收。

另外,你通常使用什么编辑器来编辑python文件?我使用notepad++,有时这会导致不一致的间距和缩进错误。


附加文件
. py ABB_RAPID_IRC5_Modified.py(大小:44.01 KB /下载:565)
# 6
通常使用PyCharm编辑python文件。
社区版是免费的,专业版是免费的,如果你是学生的话。

我来看看你的档案。
你还可以发给我3d打印文件,包括挤出调用。这样可以节省我一些时间。

杰里米
# 7
你是指使用修改后的帖子输出的。mod文件吗?我在附件中包含了原帖子和修改后的帖子的输出文件。


附加文件
. zip ABB_RAPID_IRC5_Modified.zip(大小:226.29 KB /下载:416)
# 8
你好@杰里米

你有机会检查修改后的后处理器文件吗?如果你有任何问题请告诉我。

另外,关于robodk 3d打印项目如何解析slic3r生成的gcode文件,在MoveL命令中创建MoveL命令和配置数据(用于ABB机器人),您有任何文档或源代码吗?
# 9
嗨rakshithb174,

我发现你的问题了。
你打错了……看看你是怎么写的:

代码:
自我。EXTRUDE_ON = False

在变量名“EXTRDUDE_ON”中有一个太多的“D”。
现在它工作得很好,修改我建议你在我的第一个消息。

祝你有愉快的一天。
杰里米




浏览此线程的用户:
1客人(年代)