线程评级:
Python:加工项目的特定后处理器和运行模式
# 1
你好,
我正在使用Python脚本生成3d打印项目。到目前为止,我还没有弄清楚如何正确使用ProgramStart, AddProgram, RunCode或MakeProgram方法。程序大致如下:
- user会被提示选择一个几何文件
- 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,如果我没有弄错的话。

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

致以最亲切的问候
大卫
你好大卫,

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

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

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

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

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

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


附加文件
. py Command_tester.py(大小:615字节/下载:442)
# 4
你好大卫,
从昨天开始有一个新的更新,将允许你只改变后处理器。你应该使用setParam.例如:

代码:
机器人。setParam(“后处理程序”、“KUKA_KRC4”)
你可以在这里获取最新版本:
//www.w5838.com/downloads/Win64
# 5
太完美了,非常感谢!
# 6
你好,
我想再回到这个话题上来。我的实际问题仍然是关于程序转移到机器人。为了使事情更清楚一些,让我从现状开始讲起。
在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)
然后我会使用

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

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

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


附加文件 缩略图(s)

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

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

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

2-在线编程:
RoboDK不支持使用驱动程序(Run On Robot选项)调用命名子程序。然而,有一个变通办法,你可以调用编号的程序。要做到这一点,你必须触发一个程序,一个程序调用一个数字。使用GUI或API。使用该API的示例如下:
机器人。RunCodeCustom("Program 5", INSTRUCTION_CALL_PROGRAM)

要将此与Extruder命令集成,您可以在RoboDK项目中添加一个名为Extruder的新Python程序,然后使用sys解析传递的参数。argv(类似于RoboDK/Library/Macros/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


附加文件
. py KUKA_KRC2.py(大小:29.94 KB /下载:589)
# 8
嗨,阿尔伯特,
再次感谢你的详细解释和建议。我可以看到这两个选项是如何工作的,在线编程甚至不像我预期的那么糟糕。
尽管如此,我更喜欢离线编程版本,我希望您能评论一下我转移和启动程序的麻烦。
是否有可能将程序传递给机器人,并使用API立即执行?

正如我上面所写的,我的猜测是:
代码:
run_mode = runmode_make_roboprog_and_start # run_mode = 5
程序。MakeProgram (path_folder run_mode)
如果你能再看一下那部分,并告诉我这是否/如何可能,那就太好了。
自动化对我的项目至关重要,这就是为什么我如此渴望解决这个问题。
非常感谢!
# 9
引用: 艾伯特
2-在线编程:
然而,有一个变通办法,你可以调用编号的程序。要做到这一点,你必须触发一个程序,一个程序调用一个数字。使用GUI或API。使用该API的示例如下:
机器人。RunCodeCustom("Program 5", INSTRUCTION_CALL_PROGRAM)

除了我之前的问题,还有一件关于……行为的事情我想知道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秒?
是的,对RunInstruction的调用将阻塞(等待),直到您要执行的程序完成。确保在程序ID和名称之间添加一个空格。例如:
机器人。运行指令("程序2",INSTRUCTION_CALL_PROGRAM)

很抱歉我从API中漏掉了你关于机器人程序启动的问题。这是可能的。默认情况下,此选项仅适用于Universal Robots(考虑到它们是协作的,可以轻松地远程启动程序)。

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

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

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




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