RoboDK论坛
Python:加工项目的特定后处理器和运行模式可打印版本

+- RoboDK论坛(//www.w5838.com/forum
+——论坛:RoboDK (EN) (//www.w5838.com/forum/Forum-RoboDK-EN
+——论坛:RoboDK API (//www.w5838.com/forum/Forum-RoboDK-API
+——线程:Python:加工项目的特定后处理器和运行模式(/ Thread-Python-Specific-post-processor-and-run-mode-for-machining-project

页: 1 2


Python:加工项目的特定后处理器和运行模式-DavidG-02-12-2019

你好,
我正在使用Python脚本生成一个3d打印项目。到目前为止,我还没有弄清楚如何正确使用ProgramStart, AddProgram, RunCode或MakeProgram方法。程序大致如下:
-提示用户选择一个几何文件
- object被加载到RoboDK使用

代码:
PrintPart = RDK。AddFile (GeomFile、家长=框架)
-使用添加加工项目

代码:
PrintProject = RDK.AddMachiningProject(名称、机器人)
-对象被添加到加工项目中:

代码:
PrintProject.setMachiningParameters (= PrintPart部分)
通过这种方式,打印对象附加到加工项目,RoboDK自动生成一个RoboDK程序。到目前为止一切顺利。
现在我想把RoboDK程序翻译成一个真正的机器人程序。这引发了两个问题。
1)我怎么做,使用特定的后处理器?
我目前正在使用MakeProgram将机器人程序保存到一个文件夹。这是可行的,但并不令人满意,因为它默认使用KRC2后置处理器。我需要用另一个。
2)我实际上不想把程序保存到一个文件夹中,所以MakeProgram可能是完全错误的。我要么想去
A)将程序发送到并在机器人上运行。根据我的理解,这应该是指RunMode = 6。或
b)将程序发送到机器人,并独立于RoboDK和笔记本电脑在机器人上运行。这应该是RunMode = 5。

如果我遗漏了什么重要信息,请告诉我。我不知道该用什么方法来实现这些目标。
我已经尝试过API文档中所示的ProgramStart,但它似乎不能用于自动生成的打印程序。另一方面,这似乎是唯一的方法,让我选择后处理器。
如果有任何建议,我们将不胜感激。

致以最亲切的问候
大卫


RE: Pyton:加工项目的特定后处理器和运行模式-艾伯特-02-13-2019

你好大卫,

不可能通过API创建3D打印项目。我们将尝试及时添加这一新功能。此时,以下调用创建一个曲线跟踪项目,如果对象有曲线或点,则创建一个点跟踪项目:
PrintProject.setMachiningParameters (= PrintPart部分)

要指定机器人后处理程序,您可以手动更改后处理程序(右键单击程序并选择select post processor)并保存项目。在这种情况下,它将使用选定的最后一个后处理器。

还可以指定使用的机器人后处理器ProgramStart.例如:
RDK。ProgramStart(“ProgramName”、“C: / MyProgramFolder”、“KUKA_KRC4”,机器人)
但是,这假设您直接从Python生成程序(而不是使用MakeProgram)。在最坏的情况下,使用当前版本,如果您不想手动进行更改(后处理器设置存储在RDK文件和robot文件中),则可以生成一个虚拟/空程序来更改后处理器。

如果你已经准备好了路径/加工项目,你可以执行以下操作生成程序并自动发送给机器人:

update_result = PrintProject。更新()
程序= PrintProject.getLink (ITEM_TYPE_PROGRAM)
run_mode = RUNMODE_MAKE_ROBOTPROG_AND_UPLOAD
程序。MakeProgram(path_folder run_mode)

这与右键单击程序并选择“将程序发送给机器人”是一样的。


RE: Pyton:加工项目的特定后处理器和运行模式-DavidG-02-13-2019

嗨,阿尔伯特,
谢谢你的解释。你是对的,我没有完全准确,我的意思是一个后续点项目。
但是,手动选择后处理器不是一个选项。我必须使用API。你建议创建一个虚拟程序来改变机器人的设置,这听起来很公平。不幸的是,它似乎不像我尝试的那样工作(见附件)。
该脚本打开RoboDK,添加我的机器人,并在我选择的文件夹中创建一个空程序。这些都很好,
但如果我检查机器人的设置,它仍然使用KRC2后处理器。
你能告诉我我的手术有什么问题吗?


RE: Pyton:加工项目的特定后处理器和运行模式-艾伯特-02-14-2019

你好大卫,
从昨天开始有一个新的更新,只允许你更改后处理器。你应该使用setParam.例如:

代码:
机器人。setParam(“后处理程序”、“KUKA_KRC4”)
你可以在这里获得最新版本:
//www.w5838.com/downloads/Win64


RE: Pyton:加工项目的特定后处理器和运行模式-DavidG-02-15-2019

太好了,非常感谢!


RE: Pyton:加工项目的特定后处理器和运行模式-DavidG-03-28-2019

你好,
我想再回到这个话题上来。我的实际问题仍然是关于程序转移到机器人。为了让事情更清楚一点让我从现在的情况开始。
加工项目的程序已经在RoboDK中准备好了。因为我用它进行3D打印,我使用推荐的Slic3r-Software来生成路径和打印参数。仍然造成困难的是Extruder()调用(见附件)。到目前为止,它们作为程序调用包含在RoboDK程序中,但当程序运行时,它们会被跳过,因为没有名为Extruder(2.000)、Extruder(2.011)、Extruder(2.064)等子程序。我需要将挤出机的值转换为I/ o值,以便它们可以转移到我的打印设备。

我能想到两种(合理的)方法来做到这一点,我想知道这是否可能。这两种选择的主要区别在于程序传递给机器人的方式。

1)我可以写一个脚本,在RoboDK中循环整个程序,检索每个挤出机调用,并用I/O指令替换它。这应该是可能的,对吧?
然后我会用

代码:
program.setRunType (PROGRAM_RUN_ON_ROBOT)
并使用KUKAVARPROXY在机器人上执行程序,假设它不仅支持机器人的运动,而且支持I/O指令。
这真的不是我的首选选项,因为它很可能会花很多时间来循环通过程序和替换每个挤出机调用。我的测试对象非常小,但已经有大约370k行指令。我更喜欢选项2)。

2)我以适当的方式定制后处理器,我已经尝试过了,这对我来说似乎更复杂。与阿尔伯特的建议类似,
引用: run_mode = RUNMODE_MAKE_ROBOTPROG_AND_UPLOAD

程序。MakeProgram(path_folder run_mode)
然后我会用

代码:
运行模式= RUNMODE_MAKE_ROBOTPROG_AND_START #运行模式= 5
程序。MakeProgram (path_folder run_mode)
将程序传送到机器人上并在机器人上执行。
这将是最好的解决方案,尽管还有一些事情不清楚。在选择path_folder时我需要考虑什么?我假设我必须使用ftp设置来访问机器人控制器,但是我必须把程序放在哪里呢?您是否有使用这种方法和KRC4控制器的经验,甚至可能有一个示例程序?我在尝试之前提前询问,因为其他几个与KUKA打交道的董事会表示,我需要做的事情介于困难和不可能之间。根据其他用户的说法,文件传输有一些限制是可能的,但远程启动一个程序被认为是不可能的,因为安全问题。不管怎样,如果RoboDK可以的话,我很乐意证明他们都是错的。

总结一下,我需要:
-修改我的程序或使用脚本或定制后处理器(这不是问题)
-将程序传递给机器人
-在机器人上执行程序(自动)

我希望有一个解决方案,我很感激帮助和支持。


RE: Pyton:加工项目的特定后处理器和运行模式-艾伯特-04-02-2019

我建议您应用以下修改来考虑挤出机调用:

1-离线编程:
我们最新的KUKA KRC2后处理器(KUKA机器人使用的默认后处理器,附件)考虑了挤出机命令,可以很容易地在后处理器中定制。我建议您看一看文件的可配置部分(大约第75行),以及RunCode如何解析Extruder调用(第631行)。

我强烈建议您重命名这个后处理器,如果您自定义它,因为新的RoboDK安装将覆盖这个文件。

2-在线编程:
RoboDK不支持使用驱动程序(Run On Robot选项)调用命名子程序。但是,对此有一个变通方法,您可以调用编号的程序。要做到这一点,你必须触发一个程序一个程序调用一个数字。使用GUI或API。一个使用API的例子是:
机器人。INSTRUCTION_CALL_PROGRAM RunCodeCustom(“项目5”)

要将它与Extruder命令集成,您可以在RoboDK项目中添加一个名为Extruder的新Python程序,然后使用sys。argv(类似于RoboDK/Library/宏/ArcOn.py的例子)。

这就是RoboDKSync。SRC文件看起来是这样的。一旦程序被触发,您可以通过检索程序id自定义操作。实际上,您可以使用传递的参数作为E值(程序id)。

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



RE: Pyton:加工项目的特定后处理器和运行模式-DavidG-04-02-2019

嗨,阿尔伯特,
再次感谢您的详细解释和建议。我可以看到这两种选择是如何工作的,在线编程甚至不像我想象的那么糟糕。
但是我更喜欢离线编程版本,我想请您对我转移和启动程序的困难进行评论。
是否有可能将程序转移到机器人上,并使用API立即执行它?

正如我上面所写的,我的猜测是:
代码:
运行模式= RUNMODE_MAKE_ROBOTPROG_AND_START #运行模式= 5
程序。MakeProgram (path_folder run_mode)
如果你能再看一下那部分,并告诉我这是否/如何可能,那就太好了。
自动化对我的项目至关重要,这就是为什么我如此渴望解决这个问题。
谢谢!


Python:用于加工项目的特定后处理器和运行模式-DavidG-05-01-2019

引用: 艾伯特
2-在线编程:
但是,对此有一个变通方法,您可以调用编号的程序。要做到这一点,你必须触发一个程序一个程序调用一个数字。使用GUI或API。一个使用API的例子是:
机器人。INSTRUCTION_CALL_PROGRAM RunCodeCustom(“项目5”)

除了我之前的问题,还有一件事我想知道RunCodeCustom(或RunInstruction).是RunInstruction对python的阻塞调用?
假设我的代码是这样的:


代码:
机器人。RunInstruction (program01 INSTRUCTION_CALL_PROGRAM)

机器人。RunInstruction (program02 INSTRUCTION_CALL_PROGRAM)


program01和program02在RoboDKsync.src的自定义部分中定义。
RunInstruction如果调用成功,则应该返回0。这是否意味着它要等到program01是结束还是返回0 ifprogram01现有的吗?
或者换句话说,如果program01包含WAIT = 5s,它是否在调用program02之前等待5秒?


Python:用于加工项目的特定后处理器和运行模式-艾伯特-05-01-2019

是的,对RunInstruction的调用将阻塞(等待),直到您想要执行的程序完成。确保在程序的ID和名称之间添加了一个空格。例如:
机器人。INSTRUCTION_CALL_PROGRAM RunInstruction(“项目2”)

很抱歉,我没有注意到你关于从API启动机器人上程序的问题。这是可能的。默认情况下,该选项只适用于通用机器人(鉴于它们是协作的,可以轻松地远程启动一个程序)。

您可以在后处理器的ProgSendRobot调用中自定义这个实现。如果您需要帮助来实现KUKA机器人的这种行为,请告诉我们。

代码:
ProgSendRobot(self, robot_ip, remote_path, ftp_user, ftp_pass):
"""使用提供的机器人IP向机器人发送程序。
如果我们选择,这个方法会在ProgSave之后立即执行
选项“发送程序到机器人”。
可以提供连接参数(IP和端口)
在RoboDK的机器人连接菜单中或硬编码在这里"""

UploadFTP(自我。PROG_FILES, robot_ip, remote_path, ftp_user, ftp_pass)