线程评级:
  • 0票(s) - 0平均
  • 1
  • 2
  • 3.
  • 4
  • 5
程序事件或功能调用3D打印挤出机控制
# 1
亲爱的社区,

我试图使用RoboDK和库卡与KRC4控制器进行3D打印,我希望通过RoboDK使用“在机器人上运行”功能来控制机器人和挤出机。

我的想法是有三个非常相似的函数调用“SetRPM”,“Extruder”和“MCode”。SetRPM给出F值,Extruder给出G1命令的E值,MCode给出G代码的所有M命令。然后,这些函数将通过以太网使用TCP/IP将这些值作为文本字符串发送到挤出机的控制器板,然后将相应的移动发送给机器人,然后继续执行程序。

我希望通过这种方式,移动和挤出之间的错误被限制为一次移动,因此非常小,以避免机器人或挤出机运行速度比另一个快。
到目前为止,我已经修改了后处理器,因此它添加了SetRPM(ExtruderSpeed)和Extruder(PRINT_E_New)行,括号中的参数是F和e的值。当我为函数生成程序时,这些函数被传递给机器人程序,正如您可以在下面的代码示例中看到的那样。

我现在的问题是,如果我通过RoboDK在机器人上运行这个程序,我可以使用这些行来调用函数或程序事件,然后通过以太网连接将相应的代码发送到挤出机的控制板吗?如果是这样,你知道有什么类似的代码片段我可以改编的代码吗?

我在论坛上看到了很多关于3D打印的帖子,但没有一个有这个问题,也许有一个更容易的解决方案,我不知道?

致以最亲切的问候
帕特里克


代码:
Lin {x 301.500, y 498.500, z 15.000, a 180.000, b 0.000, c -180.000} c_dis
MCode (83) ()
MCode (83)
或者美元。Cp = 0.02500
SetRPM (0.000)
挤出机(-6.500)
Lin {x 301.500, y 498.500, z 15.000, a 180.000, b 0.000, c -180.000} c_dis
MCode (107) ()
MCode (107)
或者美元。Cp = 0.06000
Lin {x 301.500, y 498.500, z 0.300, a 180.000, b 0.000, c 180.000} c_dis
或者美元。Cp = 0.02500
Lin {x 301.500, y 498.500, z 0.300, a 180.000, b 0.000, c 180.000} c_dis
或者美元。Cp = 0.03000
SetRPM (6000.000)
挤出机(73.713)
Lin {x 301.500, y 301.500, z 0.300, a 180.000, b 0.000, c -180.000} c_dis
# 2
你好,帕特里克,

后置处理器和驱动程序是不同的(有一个工作的后置处理器并不意味着驱动程序将工作)。

让这个功能与驱动程序一起工作的最好方法是用一个数字触发一个程序。例如:
挤出机(73)
将传递程序id 73。但是,这样设计是为了使它能够用于更简单的调用(程序ID)。例子:
程序1
这将传递program_id编号1。您可以传递一个浮点数(32位精度,更多信息)在这里).

请注意,使用此方法不可能按名称触发程序。您也被限制为一个值。如果你需要的话,我们可以将其改进为传递2或3个值。

一旦您传递了程序id(作为一个整数或十进制值),您需要在驱动程序(SRC文件)中实现您的操作。我在驱动程序文件中附加了示例实现代码和注释。

代码:
-----运行COM_VALUE1 ---------程序
;(从RoboDK触发:使用机器人。runcodecustomm(“程序id”,INSTRUCTION_CALL_PROGRAM)
program_id = COM_VALUE1
开关program_id
案例1
;——运行程序1——
;钻()
;-------------------
案例2
;——运行程序2——
;削减()
;-------------------
ENDSWITCH


艾伯特
# 3
嗨,阿尔伯特,

谢谢你的回复,这真的很有帮助!当我需要的是机器人驱动程序时,我一直在尝试修改RDK和Postprocessor中的脚本。我查看了驱动程序所在的目录,发现kuka驱动程序“apikuka”是一个.exe文件,我无法修改,但有一个apikukaiiwa.py。
从一个快速看,似乎驱动程序是一个机器人与7个自由度,我将尝试让它与我们的6自由度机器人工作,但你能提供apikuka.exe作为。py文件?

我会通过添加另一个像下面这样的小精灵来解决这个问题:

代码:
如果n_cmd_values >= nDOFs_MIN and cmd_line.startswith("MOVL"):
UpdateStatus (ROBOTCOM_WORKING)
#激活监视器反馈
ROBOT_MOVING = True
#执行线性移动。RoboDK提供j1,j2,…,j6,j7,x,y,z,w,p,r
如果机器人。SendCmd (MSG_MOVEL cmd_values):
#等待命令执行
如果ROBOT.recv_acknowledge ():
#通知我们已经完成了这个命令
UpdateStatus (ROBOTCOM_READY)


并将其更改为,如果代码以“Call Extruder”开头,它将通过telnet与挤出机建立连接,发送Gcode命令并关闭连接。

致以最亲切的问候
帕特里克
你好,帕特里克,

在阅读第二条消息后,我意识到你想使用计算机(不是机器人)与挤出机通信。正确吗?

在这种情况下,集成可能更容易,因为您可以使用Python编写套接字通信协议。否则,您可能需要购买KUKA以太网/XML选项来使用KUKA KRC控制器。

要以自定义方式响应程序调用(如Extruder),您可以创建一个Extruder脚本,如附件所示。可以使用sys收集参数。Argv如下所示:

代码:
E_Value =无
检查我们是否在另一个程序中运行这个程序并传递参数
导入系统
如果len(sys.argv) > 1:
E_Value = float(sys.argv[1])

让我知道,如果这不是你正在寻找。

艾伯特


附加文件
. py Extruder.py(大小:1.79 KB /下载:5雷电竞app下载安卓83)
# 5
阿尔伯特,太棒了!它的工作原理!你救了我的一天

我只是注意到附件文件,当我去张贴这个,我去了Telnet代替,但段退出,如果在模拟模式是整洁的,我会添加,并张贴一些细节的脚本,我最终使用一旦我通过测试,以防别人有同样的问题。

谢谢你!
# 6
你好PatrickC,

我还试图通过RoboDK中的python脚本实现挤出,用于我们发那科6轴机器人的在线编程。你最终想出解决办法了吗?我自己,我试图使用Printrun库(从Pronterface项目)发送一些g代码命令到挤出机,但我不能使它工作。

你能分享一些关于你开发的脚本的细节吗?任何帮助将是非常感激的。

非常感谢!

摩根富林明
# 7
您是否使用定制的挤出机?

如果是这样,我建议你只发送原始字符串或二进制数据来更新挤出机的速度。您可以实现自己的协议,只发送必要的信息到挤出机。
# 8
嗨,艾伯特。我使用Arduino控制器与马林固件来驱动挤出机。我想解释RoboDK的挤出机(x.xxx)功能,将我自己的g代码发送到马林固件。
# 9
(02-14-2020, 02:37 pm)JFCh写道:嗨,艾伯特。我使用Arduino控制器与马林固件来驱动挤出机。我想解释RoboDK的挤出机(x.xxx)功能,将我自己的g代码发送到马林固件。

嗨,摩根富林明,

很抱歉没有早点回复。说句公道话,我当时在打印。我的挤出机是由duet2控制的,所以它可以通过http get请求接收gcode。这就很直接了。您可以使用预处理器来调整速度,在每次机器人速度变化后插入一个函数调用,然后调用一个与挤出机调用相同的函数,但将mm/s从robodk转换为gcode中的mm/min,并与您的长丝截面相比,对挤出线的横截面进行校正。
您将在下面找到代码,您必须使用各自电路板的ip。

挤出机
代码:
e_value =无
从RoboDK中导入* #nur fuer Nutzung
RDK = Robolink()
检查我们是否在另一个程序中运行这个程序并传递参数
导入系统
如果len(sys.argv) > 1:
E_value = float(sys.argv[1])
代码= 'G1 E' + str(e_value)
#print(message) #用于测试
RDK。ShowMessage(code, popup=False) #用于测试目的,为弹出设置为True,为避免阻塞设置为False或注释掉
如果RDK.RunMode() == RUNMODE_SIMULATE:
辞职()

进口的要求
Params = {"gcode": code}
R = requests.get("http://192.168.2.114/rr_status?type=1")

# print(r.json()) #用于测试
R = requests.get("http://192.168.2.114/rr_gcode", params=params) #成功了!
# r = requests.get("http://192.168.0.100/rr_gcode?gcode=G1 Z100") #这个工作!
#打印(r.json ())
速度
代码:
f_value =无
从RoboDK中导入* #nur fuer Nutzung
RDK = Robolink()
检查我们是否在另一个程序中运行这个程序并传递参数
导入系统
如果len(sys.argv) > 1:
E_value = float(sys.argv[1])
f_transform=f_value * 60 * 1.5676 # mm/s,单位为mm/min,线截面Q对馈线灯丝Q/pi*(2.85/2)²的适应
code = 'G1 F' + str(f_transform)
#print(message) #用于测试
RDK。ShowMessage(code, popup=False) #用于测试目的,为弹出设置为True,为避免阻塞设置为False或注释掉
如果RDK.RunMode() == RUNMODE_SIMULATE:
辞职()

进口的要求
Params = {"gcode": code}
R = requests.get("http://192.168.2.114/rr_status?type=1")

#print(r.json()) #用于测试
R = requests.get("http://192.168.2.114/rr_gcode", params=params) #成功了!
# r = requests.get("http://192.168.0.100/rr_gcode?gcode=G1 Z100") #这也有效!
#打印(r.json ())

预处理程序:
代码:
从robolink导入* # API与RoboDK通信
从robodk导入* #基本矩阵操作
RDK = Robolink()

#要求用户选择一个程序:
prog = RDK。ItemUserPick(“选择一个要修改的程序”,ITEM_TYPE_PROGRAM)
如果不是prog.Valid():
打印("操作取消或无程序可用")
辞职()

#要求用户输入一个函数调用,在每次移动后添加:
print("Program selected: " + Program . name ())
ins_call = 'SetExtSpeed'
#mbox("每次移动后输入一个程序调用",entry="SynchRobot")
如果不是ins_call:
打印(“取消行动”)
辞职()

遍历程序中的所有指令:
Ins_id = 0
ins_count = prog.InstructionCount()
当ins_id < ins_count:
#检索指令
ins_nom, ins_type, move_type, isjointttarget, pose, joint = prog.Instruction(ins_id)
如果ins_type == INS_TYPE_CHANGESPEED:
#选择移动指令作为参考
prog.InstructionSelect (ins_id)
value = prog.Instruction(ins_id)
Name = value[0]
进口再保险
Matches = re.findall("[+-]?\d+\。\ d +”,名称)

添加一个新的程序调用
掠夺。运行指令(ins_call + '(' + matches[0] + ')', INSTRUCTION_CALL_PROGRAM)

#在我们刚刚添加了一条指令的基础上再添加一条指令
Ins_id = Ins_id + 1
Ins_count = Ins_count + 1

Ins_id = Ins_id + 1
你好PatrickC,

已经有一段时间了,因为我看了论坛,我错过了你的回复。非常感谢你和我分享剧本。我去看看,然后告诉你结果。

问候,

摩根富林明




浏览此主题的用户:
1客人(年代)

Baidu
map