线程评级:
  • 0 (s) - 0平均投票
  • 1
  • 2
  • 3
  • 4
  • 5
程序事件或函数调用3 d印制机控制
# 1
亲爱的社区,

我试图用RoboDK和库卡KRC4控制器3 d打印和我希望控制机器人和挤出机通过RoboDK使用“机器人运行”功能。

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

我希望这种方式之间的错误举措和铝型材仅限于一个移动,因此非常小,以避免机器人或挤出机运行速度比另一个。
到目前为止我已经修改了后置处理程序添加行SetRPM (ExtruderSpeed)和挤出机(PRINT_E_New)括号中的参数F的值和e .当我为函数生成一个程序被传递给机器人程序可以看到在下面的代码示例中结束的时候。

现在我的问题是,如果我运行这个程序通过RoboDK机器人我可以用这些线将调用函数或程序事件发送对应的代码通过以太网连接的controlboard挤出机吗?如果是这样,你知道我的任何类似的代码片段可以适应的代码吗?

我看过很多帖子在论坛里关于3 d打印但没有在这个问题上,或许有更容易的解决方案,我不知道吗?

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


代码:
林{498.500 301.500 X, Y, Z 15.000, 180.000, 0.000 B, C -180.000} C_DIS
MCode (83) ()
MCode (83)
或者美元。CP = 0.02500
SetRPM (0.000)
挤出机(-6.500)
林{498.500 301.500 X, Y, Z 15.000, 180.000, 0.000 B, C -180.000} C_DIS
MCode (107) ()
MCode (107)
或者美元。CP = 0.06000
林{498.500 301.500 X, Y, Z 0.300, 180.000, 0.000 B, C 180.000} C_DIS
或者美元。CP = 0.02500
林{498.500 301.500 X, Y, Z 0.300, 180.000, 0.000 B, C 180.000} C_DIS
或者美元。CP = 0.03000
SetRPM (6000.000)
挤出机(73.713)
林{301.500 301.500 X, Y, Z 0.300, 180.000, 0.000 B, C -180.000} C_DIS
# 2
你好,帕特里克,

后置处理程序和驱动程序是不同的(有工作后置处理程序并不意味着司机会工作)。

做这项工作的最佳方式与司机是触发一个程序一个数字。例如:
挤出机(73)
将于73年通过程序id。然而,这是为了让它工作更简单的调用(程序ID)。例子:
程序1
这将通过program_id数量1。你可以通过一个浮点数(32位精度、更多的信息在这里)。

注意,这是不可能触发程序的名字使用这种方法。你也局限于1的值。我们可以改善它如果你需要传递2或3值。

一旦你通过程序id(作为一个整数或一个十进制值)你需要实现你的行动在司机(SRC文件)。我把样品实现驱动程序文件中的代码和注释。

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


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

谢谢你的回复这实际上帮助很大!我一直在试图修改脚本RDK和后处理程序当我需要机器人司机。我看着司机,发现在目录库卡司机“apikuka”是一个. exe文件,我不能修改但apikukaiiwa.py。
从一眼似乎司机7自由度机器人,我会尽量把它与六自由度机器人,但你能提供apikuka。exe . py文件吗?

我的方法通过添加另一个elif下面这样的问题:

代码:
elif n_cmd_values > = nDOFs_MIN cmd_line.startswith (“MOVL”):
UpdateStatus (ROBOTCOM_WORKING)
#激活监控反馈
ROBOT_MOVING = True
#执行线性移动。j2 RoboDK提供j - 1,…,, j7, x, y, z, w, p, r
如果机器人。SendCmd (MSG_MOVEL cmd_values):
#等待命令被执行
如果ROBOT.recv_acknowledge ():
#通知,我们用这个命令
UpdateStatus (ROBOTCOM_READY)


并改变它如果代码开始“叫挤出机”建立了一个连接通过telnet到挤出机,发送Gcode命令和关闭连接。

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

在阅读第二个消息我意识到你想和挤出机使用电脑交流(而不是机器人)。正确吗?

在这种情况下,集成可能更容易当你可以使用Python程序套接字的通信协议。否则,你可能需要购买库卡以太网/ XML库卡的方式呈现控制器选择这样做。

反应在一个程序调用自定义的方式(如挤出机)您可以创建一个挤出机的脚本。你可以使用sys收集参数。argv如下所示:

代码:
E_Value =没有
#检查如果我们运行这个程序在另一个程序并传递参数
导入系统
如果len (sys.argv) > 1:
E_Value =浮动(sys.argv [1])

我知道这不是你寻找的东西。

艾伯特


附加文件
. py Extruder.py(尺寸:1.79 KB /下载:570)
# 5
艾伯特的辉煌!它的工作原理!你救了我的一天:D

我只是注意到附加文件当我去后,我和Telnet相反但段戒烟如果在模拟模式是整洁的,我将添加,在我最终使用的脚本发布一些细节一旦我通过测试,以防别人也有同样的问题。

谢谢你!
# 6
你好PatrickC,

我也试图通过python脚本实现挤压RoboDK在线编程的发那科6轴机器人。你想出了一个解决方案呢?我自己,我试图使用Printrun库(从Pronterface项目)发送一些刀位点命令到挤出机,但我不能使它工作。

你能分享一些关于脚本的细节你向前发展吗?任何帮助将不胜感激。

谢谢!

摩根富林明
# 7
你使用一个定制机吗?

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

嗨,摩根富林明,

抱歉没有回复。平心而论我是印刷。我挤出机由duet2控制所以它可以接待gcode通过http get请求。这使得它很直接。你可以适应的速度使用预处理程序后插入一个函数调用每个机器人速度变化,然后调用函数一样的挤出机工作的电话但变换mm / s robodk gcode的毫米/分钟和纠正的横截面挤压线相比,纤维横截面。
下面你会发现代码,你将不得不使用的ip的各自的董事会。

挤出机
代码:
e_value =没有
从robolink进口* #努尔为了Nutzung RoboDK
RDK = Robolink ()
#检查如果我们运行这个程序在另一个程序并传递参数
导入系统
如果len (sys.argv) > 1:
e_value =浮动(sys.argv [1])
代码= ' G1 E + str (e_value)
#打印(消息)#用于测试目的
RDK。ShowMessage(代码,弹出= False) #为测试目的为弹出设置为True,设置为False或注释用来避免阻塞
如果RDK.RunMode () = = RUNMODE_SIMULATE:
辞职()

进口的要求
params = {}“gcode”:代码
r = requests.get (“http://192.168.2.114/rr_status?type=1”)

#打印(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 =没有
从robolink进口* #努尔为了Nutzung RoboDK
RDK = Robolink ()
#检查如果我们运行这个程序在另一个程序并传递参数
导入系统
如果len (sys.argv) > 1:
e_value =浮动(sys.argv [1])
f_transform = f_value * 60 * 1.5676 # mm / s毫米/分钟和适应线crossection问美联储灯丝Q /π* (2.85 / 2)²
代码= ' G1 F + str (f_transform)
#打印(消息)#用于测试目的
RDK。ShowMessage(代码,弹出= False) #为测试目的为弹出设置为True,设置为False或注释用来避免阻塞
如果RDK.RunMode () = = RUNMODE_SIMULATE:
辞职()

进口的要求
params = {}“gcode”:代码
r = requests.get (“http://192.168.2.114/rr_status?type=1”)

#打印(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 ()

#问用户选择一个程序:
学监= RDK。ItemUserPick(“选择一个程序修改”,ITEM_TYPE_PROGRAM)
如果不是prog.Valid ():
打印(“取消或没有计划行动”)
辞职()

#问用户输入一个函数调用,每个动作后将被添加:
打印(“程序选择:”+ prog.Name ())
ins_call = ' SetExtSpeed '
# mbox(“输入一个程序调用添加每次运动”后,输入=“SynchRobot”)
如果不是ins_call:
打印(“取消行动”)
辞职()

遍历所有指令在一个程序:
ins_id = 0
ins_count = prog.InstructionCount ()
虽然ins_id < ins_count:
#检索指令
ins_nom、ins_type move_type isjointtarget,姿势,关节= prog.Instruction (ins_id)
如果ins_type = = INS_TYPE_CHANGESPEED:
#选择运动指令作为参考
prog.InstructionSelect (ins_id)
值= prog.Instruction (ins_id)
name = value [0]
进口再保险
匹配= re.findall (“(+ -) ? \ d + \。\ d +”,名称)

#添加一个新程序调用
掠夺。RunInstruction (ins_call + '(' +匹配[0]+ ')',INSTRUCTION_CALL_PROGRAM)

#推进一个额外的指令,我们添加了另一个指令
ins_id = ins_id + 1
ins_count = ins_count + 1

ins_id = ins_id + 1
你好PatrickC,

它已经有一段时间我看了论坛,我错过了你的回复。非常感谢你与我分享这些脚本。我要看一看,让你知道结果。

问候,

摩根富林明




用户浏览这个线程:
1客人(年代)