3.后处理器
有关后置处理器的更多资料,请浏览以下两个连结:

RoboDK配备了许多后置处理器,为许多机器人品牌(如ABB, Fanuc, KUKA, Motoman, UR,…)提供支持。后置处理器位于文件夹中:<代码类=”docutils literal notranslate">C: / RoboDK /文章/.每个Post Processor都是一个.py文件。你必须把<代码类=”docutils literal notranslate">py后置处理器文件<代码类=”docutils literal notranslate">C: / RoboDK /文章/使用已提供给您的后处理程序。要删除现有的后处理程序,只需删除相应的后处理程序即可<代码类=”docutils literal notranslate">py文件位于<代码类=”docutils literal notranslate">C: / RoboDK /文章/.

例如,对于库卡机器人,可以使用以下后置处理器:
  • KUKA_KRC2:生成与KUKA KRC2控制器兼容的SRC程序文件。

  • 生成与KUKA KRC4控制器兼容的SRC程序文件。

  • 使用KUKA生成JAVA程序。日出平台,库卡IIWA机器人所需。

必须安装Python并与RoboDK一起工作才能正确使用后置处理器(如何安装).

遵循RoboDK中的以下步骤将机器人链接到特定的后处理器:
  1. 双击机器人打开机器人面板。

  2. 选择<代码类=”docutils literal notranslate">参数在右上角。

  3. 选择<代码类=”docutils literal notranslate">选择帖子处理器.

或者,您可以右键单击某个程序,然后选择<代码类=”docutils literal notranslate">选择帖子处理器.

_images / PostProcessorSelect.png”src=
修改或创建后处理程序:
  1. 选择<代码类=”docutils literal notranslate">增设/编辑帖子处理器.

  2. 选择现有的后处理程序或创建一个新的后处理程序。如果您决定创建一个新的Post Processor,将提供一个类似本节中提供的示例的模板。

  3. 您可以使用文本编辑器或Python编辑器编辑Post Processor。

Python编辑器允许您在模块末尾给出一个示例程序来快速测试Post Processor。您还可以执行Post Processor文件,以查看它将生成的输出示例(双击<代码类=”docutils literal notranslate">py文件,或右键单击<代码类=”docutils literal notranslate">py文件,然后选择<代码类=”docutils literal notranslate">开放).

不使用RoboDK也可以手动编辑Post Processor:
  1. 进入文件夹<代码类=”docutils literal notranslate">C: / RoboDK /文章/然后打开相应的<代码类=”docutils literal notranslate">py使用文本编辑器(如Notepad或Python IDLE)创建文件(右键单击<代码类=”docutils literal notranslate">py然后,选择文件<代码类=”docutils literal notranslate">编辑与闲置)

  2. 进行必要的修改。

  3. 要预览结果:双击postprocessor来运行Post Processor<代码类=”docutils literal notranslate">py文件(或右键单击,然后选择<代码类=”docutils literal notranslate">开放,如下图所示)。

或者,您可以使用Python编辑器(如Python IDLE)运行并预览结果。

_images / PostProcessorPreview.png”src=

3.1.后处理器方法
类 samplepost。 RobotPost ( robotpost=没有一个,robotname=没有一个,robot_axes=6,**kwargs )
ProgStart ( progname )
参数

progname(str) -程序的名称

ProgFinish ( progname ) samplepost.RobotPost.ProgStart ()是执行。

提示: ProgFinish在程序完成所有指令后触发。

参数

progname(str) -程序的名称

ProgSave ( 文件夹,progname,ask_user=假,show_result=假 )
参数
  • 文件夹(str) -保存程序的文件夹提示

  • progname(str) -程序名称作为保存程序的提示

  • ask_user(保龄球,str)—如果RoboDK中的默认设置设置为提示用户选择文件夹,则为True

  • show_result(保龄球,str) - False如果RoboDK的默认设置设置为不显示程序一旦保存。否则,将提供一个字符串,其中包含首选文本编辑器的路径

ProgSendRobot ( robot_ip,remote_path,ftp_user,ftp_pass )
参数
  • robot_ip(str) -机器人的IP地址

  • remote_path(str) -机器人的远程路径

  • ftp_user(str) - FTP用户凭证

  • ftp_pass(str) - FTP用户密码

MoveJ ( 构成,关节,conf_RLF=没有一个 )
参数
  • 构成(robodk.robomath.Mat ()) -工具相对于参考系的姿态目标。如果目标被定义为联合目标,姿态可以为None

  • 关节(浮动列表)——机器人关节作为列表

  • conf_RLF(int列表) -机器人配置为3个整数列表:[REAR, LOWER-ARM, FLIP]。[0,0,0]表示[前,上臂和非翻转]配置

MoveL ( 构成,关节,conf_RLF=没有一个 )
参数
  • 构成(robodk.robomath.Mat ()) -工具相对于参考系的姿态目标。如果目标被定义为联合目标,姿态可以为None

  • 关节(浮动列表)——机器人关节作为列表

  • conf_RLF(int列表) -机器人配置为3个整数列表:[REAR, LOWER-ARM, FLIP]。[0,0,0]表示[前,上臂和非翻转]配置

MoveC ( pose1,joints1,pose2,joints2,conf_RLF_1=没有一个,conf_RLF_2=没有一个 )
参数
  • pose1(robodk.robomath.Mat ()) -定义弧线(路径点)的点的姿态目标

  • pose2(robodk.robomath.Mat ()) -弧线末端的姿态目标(最后一点)

  • joints1(浮动列表) -航路点的机器人关节

  • joints2(浮动列表)——机器人关节的最后一点

  • conf_RLF_1(int列表) -航路点的机器人配置

  • conf_RLF_2(int列表)——机器人构型的最后一点

setFrame ( 构成,frame_id=没有一个,frame_name=没有一个 )
参数
  • 构成(robodk.robomath.Mat ()) -参考系相对于机器人基架的位姿

  • frame_id(int,没有一个) -参考帧的编号(如果可用)

  • frame_name(str) - RoboDK中定义的参考系名称

setTool ( 构成,tool_id=没有一个,tool_name=没有一个 )
参数
  • 构成(robodk.robomath.Mat ()) - TCP帧相对于机器人基础框架的位姿

  • tool_id(int,没有一个) -参考帧的编号(如果可用)

  • tool_name(str) - RoboDK中定义的参考系名称

暂停 ( time_ms )
参数

time_ms(浮动) -暂停时间,以毫秒为单位

setSpeed ( speed_mms )
参数

speed_mms(浮动) -速度<我mg class="math" src="//m.sinclairbody.com/www/doc/en/PythonAPI/_images/math/6b8f91198c7c80fbb17ae885fe40f725fab78a49.svg" alt="毫米/秒”>

setAcceleration ( accel_mmss )
参数

accel_mmss(浮动) -速度<我mg class="math" src="//m.sinclairbody.com/www/doc/en/PythonAPI/_images/math/f4358b5dabd003f14451dcc35d051f60cd4f0c1d.svg" alt="毫米/秒^ 2”>

setSpeedJoints ( speed_degs )
参数

speed_degs(浮动) -速度<我mg class="math" src="//m.sinclairbody.com/www/doc/en/PythonAPI/_images/math/96d2273fb077de249ed1cad011d40ecb94078fd8.svg" alt="度/秒”>

setAccelerationJoints ( accel_degss )
参数

accel_degss(浮动) -速度<我mg class="math" src="//m.sinclairbody.com/www/doc/en/PythonAPI/_images/math/19e1a7c31e2cd2376253c0465e8e9c5fb61c2ef9.svg" alt="度/秒^ 2”>

setZoneData ( zone_mm )
参数

zone_mm(浮动) -舍入半径,单位为mm

setDO ( io_var,io_value )
参数
  • io_var(int,str) -要设置的变量,以STR或int形式提供

  • io_value(int,浮动,str) -变量的值,以str、float或int形式提供

waitDI ( io_var,io_value,timeout_ms=-1 )
参数
  • io_var(int,str) -等待的变量,以STR或int形式提供

  • io_value(int,浮动,str) -变量的值,以str、float或int形式提供

  • timeout_ms(浮动,int) -最大等待时间

RunCode ( 代码,is_function_call=假 )
参数
  • 代码(str)——要调用的代码或过程

  • is_function_call(保龄球) -如果提供的代码是要调用的特定函数,则为True

RunMessage ( 消息,iscomment=假 )
参数
  • 消息(str) -在教学挂件上显示的消息或作为代码的注释

  • iscomment(保龄球) -如果消息不需要显示在教学挂件上,而是作为代码的注释,则为True

addline ( 换行符 )
参数

换行符(str) -要添加的新行。

addlog ( 换行符 )
参数

换行符(str) -新线

3.2.后置处理器示例
样本后置处理器
RoboDK Inc. - //m.sinclairbody.com/版权所有#根据Apache许可证2.0版(“许可证”)进行许可;除非遵守许可,否则您不得使用此文件。您可以从以下网址获得许可证的副本# http://www.apache.org/licenses/license - 2.0除非适用法律要求或书面同意,软件在许可证下分发的是按“现状”分发的,无任何明示或暗示的保证或条件。#请参阅许可证,以了解具体的语言管理权限和许可证下的限制。# ----------------------------------------------------这个文件是一个示例POST PROCESSOR脚本来生成程序#与RoboDK的通用机器人#编辑/测试POST PROCESSOR脚本文件:选择“程序”->“添加/编辑后处理器”,然后选择你的文章或创建一个新的。您可以使用任何文本编辑器或Python编辑器编辑此文件。使用Python编辑器可以快速评估该文件末尾的示例程序。# Python应该与RoboDK一起自动安装#你也可以手动编辑POST处理器:# 1-使用Python IDLE打开*.py文件(右键单击-> Edit with IDLE)2 .做必要的改变# 3-运行文件打开Python Shell: Run -> Run模块(默认为F5)# 4-自动调用“test_post()”函数#或者,你可以使用文本编辑器编辑这个文件,然后用Python运行它#要使用POST PROCESSOR文件,你必须把*.py文件放在"C:/RoboDK/Posts/"目录下。要在RoboDK中为你的机器人选择一个特定的POST PROCESSOR,你必须遵循以下步骤:打开机器人面板(双击一个机器人)# 2-选择“参数”# 3-选择“解锁高级选项”# 4-在“Robot brand”框中选择你的帖子作为文件名##要删除现有的POST PROCESSOR脚本,只需删除这个文件(.py文件)## ----------------------------------------------------更多关于RoboDK后处理器和离线编程的信息:2022世界杯8强赛时间# //m.sinclairbody.com/help后处理程序# //m.sinclairbody.com/doc/PythonAPI/postprocessor.html# ----------------------------------------------------# ----------------------------------------------------#导入RoboDK工具从robodk.robomath进口*从robodk.robodialogs进口*从robodk.robofileio进口*# ----------------------------------------------------defpose_2_str(构成):"""根据控制器的语法/格式将机器人姿态目标转换为字符串。参数姿态:4x4姿态矩阵:type pose::meth: ' robodk.robomath.Mat ':返回:XYZWPR字符串的位置: rtype: str”“”[x,y,z,r,p,w]=pose_2_xyzrpw(构成)返回(“X% .3fY% .3fZ% .3fR% .3fP% .3fW% .3f'%(x,y,z,r,p,w))defjoints_2_str(关节):"""根据控制器的语法/格式将机器人关节目标转换为字符串。参数关节:机器人关节列表:型接头:浮动列表:返回:J1-Jn字符串的联合格式: rtype: str”“”str=''数据=[“一个”,“B”,“C”,' D ',“E”,“F”,‘G’,“H”,“我”,“J”,“K”,“L”]为我在范围(len(关节)):str=str+('% s % .6f'%(数据[我],关节[我)))str=str[:-1]返回str# ----------------------------------------------------处理机器人指令/语法的对象类类RobotPost(对象):""" "机器人后处理器对象""" "#设置程序扩展PROG_EXT=“三”# --------------------------------------------------------#其他变量ROBOT_POST=''ROBOT_NAME=''PROG_FILES=[]掠夺=[]日志=''nAxes=6def__init__(自我,robotpost=没有一个,robotname=没有一个,robot_axes=6,**kwargs):"""创建一个新的后置处理器。:param robotpost:后置处理器的名称类型robotpost: STR:param robotname:机器人名称:类型robotname: STR:param robot_axes:机器人的轴数:type robot_axes: int”“”自我.ROBOT_POST=robotpost自我.ROBOT_NAME=robotname自我.掠夺=[]自我.日志=''自我.nAxes=robot_axesdefProgStart(自我,progname):"""启动一个给定名称的新程序。可以同时生成多个程序。* * * *:每次必须生成新程序时,都会触发ProgStart。:param programname:程序名程序名:STR”“”自我.addline(“PROC% s()的%progname)defProgFinish(自我,progname):执行此方法是为了定义程序或过程的结束。一个模块可以有多个程序。在另一个:meth: ' samplepost.RobotPost之前不会执行其他指令。执行“ProgStart”。* * * *:在程序的所有指令之后触发ProgFinish。:param programname:程序名程序名:STR”“”自我.addline(“ENDPROC”)defProgSave(自我,文件夹,progname,ask_user=假,show_result=假):"""保存程序。该方法在处理完所有程序后执行。* * * *:在执行完所有程序和指令后触发ProgSave。:param folder:保存程序的文件夹提示:类型文件夹:STR:param programname:程序名作为保存程序的提示程序名:STR:param ask_user:如果在RoboDK中设置了默认设置来提示用户选择文件夹,则为True类型ask_user: bool, STR:param show_result: False表示RoboDK默认设置为保存后不显示程序。否则,将提供一个字符串,其中包含首选文本编辑器的路径:类型show_result: bool, STR”“”progname=progname+“。”+自我.PROG_EXT如果ask_user或不DirExists(文件夹):filesave=getSaveFile(文件夹,progname,“将程序另存为…”)如果filesave是不没有一个:filesave=filesave.名字其他的:返回其他的:filesave=文件夹+' / '+progname#日本控制器需要shift_jis编解码器和替换错误,以避免在不支持的字符上抛出错误#with open(filesave, "w", encoding="shift_jis", errors="replace")作为fid:与开放(filesave,“w”,编码=“utf - 8”)作为支撑材:为行在自我.掠夺:支撑材.写(行)支撑材.写(”\ n”)打印(保存:% s\ n'%filesave)#---------------------- show result如果show_result:如果类型(show_result)是str:#打开文件与提供的应用程序进口子流程p=子流程.Popen([show_result,filesave])其他的:#使用默认应用程序打开文件进口操作系统操作系统.startfile(filesave)如果len(自我.日志)>0:mbox(程序生成日志:\ n \ n'+自我.日志)defProgSendRobot(自我,robot_ip,remote_path,ftp_user,ftp_pass):"""使用提供的参数向机器人发送程序。这个方法在ProgSave之后执行,如果我们选择了“Send Program to Robot”选项。连接参数必须在RoboDK的机器人连接菜单中提供。:param robot_ip:机器人的IP地址:类型robot_ip: STR:param remote_path:机器人的远端路径:类型remote_path: STR参数ftp_user: FTP用户凭据:类型ftp_user: STR:参数ftp_pass: FTP用户密码:类型ftp_pass: STR”“”UploadFTP(自我.PROG_FILES,robot_ip,remote_path,ftp_user,ftp_pass)defMoveJ(自我,构成,关节,conf_RLF=没有一个):"""定义一个关节运动。* * * *:MoveJ是由RoboDK指令Program->Move Joint instruction触发的。:参数姿态:工具相对于参考系的姿态目标。如果目标被定义为联合目标,姿态可以为None:type pose::meth: ' robodk.robomath.Mat '参数关节:机器人关节列表:型接头:浮动列表:param conf_RLF:机器人配置为3个int的列表:[REAR, LOWER-ARM, FLIP]。[0,0,0]表示[前,上臂和非翻转]配置:类型conf_RLF: int列表”“”自我.addline(“MOVJ”+joints_2_str(关节))defMoveL(自我,构成,关节,conf_RLF=没有一个):"""定义线性运动。* * * *:移动是由RoboDK指令程序->移动线性指令触发的。:参数姿态:工具相对于参考系的姿态目标。如果目标被定义为联合目标,姿态可以为None:type pose::meth: ' robodk.robomath.Mat '参数关节:机器人关节列表:型接头:浮动列表:param conf_RLF:机器人配置为3个int的列表:[REAR, LOWER-ARM, FLIP]。[0,0,0]表示[前,上臂和非翻转]配置:类型conf_RLF: int列表”“”自我.addline(“MOVL”+pose_2_str(构成))defMoveC(自我,pose1,joints1,pose2,joints2,conf_RLF_1=没有一个,conf_RLF_2=没有一个):"""定义圆周运动。* * * *:MoveC是由RoboDK指令Program->Move Circular instruction触发的。:param pose1:定义圆弧(航路点)的点的姿态目标:type pos1::meth: ' robodk.robomath.Mat '参数pos2:圆弧末端的姿态目标(最后一点):type pose2::meth: ' robodk.robomath.Mat ':param joints1:航点的机器人关节类型joints1:浮点列表:参数joints2:机器人最后一点的关节类型joints2:浮点列表:param conf_RLF_1:路点的机器人配置:类型conf_RLF_1: int列表:param conf_RLF_2:最终点的机器人配置:类型conf_RLF_2: int列表”“”自我.addline(“MOVC”+pose_2_str(pose1)+' '+pose_2_str(pose2))defsetFrame(自我,构成,frame_id=没有一个,frame_name=没有一个):""" "定义一个相对于机器人基架的新的参考系。这个参考系用于跟踪运动指令使用的姿态目标。* * * *:setFrame是由RoboDK指令Program->Set Reference Frame指令触发的。参数位姿:参考系相对于机器人基架的位姿:type pose::meth: ' robodk.robomath.Mat ':param frame_id:参考帧的编号(如果可用):类型frame_id: int,无:param frame_name: RoboDK中定义的参考帧名称:类型frame_name: STR”“”自我.addline(“BASE_FRAME”+pose_2_str(构成))defsetTool(自我,构成,tool_id=没有一个,tool_name=没有一个):""" "改变机器人TCP(工具中心点)相对于机器人法兰。在笛卡尔坐标系中定义的任何运动都假定它使用所提供的最后一个参考系和工具架。* * * *:setTool是由RoboDK指令程序->设置工具框架指令触发的。:参数姿态:TCP帧相对于机器人基架的姿态:type pose::meth: ' robodk.robomath.Mat '参数tool_id:参考帧的编号(如果可用):类型tool_id: int,无:param tool_name: RoboDK中定义的参考帧名称:类型tool_name: STR”“”自我.addline(“TOOL_FRAME”+pose_2_str(构成))def暂停(自我,time_ms):"""定义程序中的暂停(包括移动)。如果暂停必须引起机器人停止,直到用户希望继续程序,则Time_ms为负值。* * * *:暂停是由RoboDK指令程序->暂停指令触发的。:param time_ms:暂停时间,单位为毫秒:类型time_ms: float”“”如果time_ms<0:自我.addline(“暂停”)其他的:自我.addline(”等% .3f'%(time_ms*0.001))defsetSpeed(自我,speed_mms):"""改变机器人速度(单位:mm/s)* * * *:setSpeed是由RoboDK指令Program->Set Speed指令触发的。参数:speed_mm: speed in:math: ' mm/s ':类型speed_mm:浮动”“”自我.addlog('setSpeed not defined ' (% .2fmms) '%speed_mms)defsetAcceleration(自我,accel_mmss):"""改变机器人的加速度(单位:mm/s2)* * * *:setAcceleration是由RoboDK指令Program->Set Speed instruction触发的。必须提供加速度值。:param acceler_mmss: speed in:math: ' mm/s^2 ':类型:accel_mmss: float”“”自我.addlog('setAcceleration未定义')defsetSpeedJoints(自我,speed_degs):“”“改变机器人关节速度(以度/秒为单位)* * * *:setspeedjoint是由RoboDK指令Program->Set Speed instruction触发的。必须提供连接速度值。参数:speed_degs: speed in:math: ' deg/s ':类型speed_degs:浮动”“”自我.addlog(" setspeedjoint未定义")defsetAccelerationJoints(自我,accel_degss):“”“改变机器人关节加速度(单位为度/s2)* * * *:setaccelerationjoint是由RoboDK指令Program->Set Speed instruction触发的。必须提供关节加速度值。:param acceler_degss: speed in:math: ' deg/s^2 '类型:accel_degss: float”“”自我.addlog(' setaccelerationjointnot defined')defsetZoneData(自我,zone_mm):“”“改变平滑半径(也称为舍入,混合半径,CNT, APO或区域数据)。如果此参数较高,则有助于使移动更平滑* * * *:setZoneData是由RoboDK指令Program->Set舍入指令触发的。:参数zone_mm:舍入半径,单位为mm:type zone_mm: float”“”自我.addlog(setZoneData not defined (% .1f毫米)”%zone_mm)defsetDO(自我,io_var,io_value):"""将变量(通常是数字输出)设置为给定值。此方法也可用于设置其他变量。* * * *:setDO是由RoboDK指令Program->Set or Wait I/O指令触发的。param io_var:要设置的变量,以STR或int类型提供:类型io_var: int, STR:param io_value:变量的值,以str、float或int形式提供:类型io_value: int, float, STR”“”如果类型(io_var)! =str:#设置io_var为数字时的默认变量名io_var=出[% s]“%str(io_var)如果类型(io_value)! =str:#设置io_value为数字时的默认变量值如果io_value>0:io_value=“真正的”其他的:io_value=“假”#此时,io_var和io_value必须是字符串值自我.addline('% s=% s'%(io_var,io_value))defwaitDI(自我,io_var,io_value,timeout_ms= -1):等待变量(通常是数字输入)获得给定值io_value。此方法也可用于设置其他变量。可选地,可以提供超时。* * * *:waitDI是由RoboDK指令Program->Set或Wait I/O指令触发的。:param io_var:等待的变量,作为STR或int类型提供:类型io_var: int, STR:param io_value:变量的值,以str、float或int形式提供:类型io_value: int, float, STR:参数timeout_ms:最大等待时间:类型timeout_ms: float, int”“”如果类型(io_var)! =str:#设置io_var为数字时的默认变量名io_var=”(% s]“%str(io_var)如果类型(io_value)! =str:#设置io_value为数字时的默认变量值如果io_value>0:io_value=“真正的”其他的:io_value=“假”#此时,io_var和io_value必须是字符串值如果timeout_ms<0:自我.addline(的等待% s==% s'%(io_var,io_value))其他的:自我.addline(的等待% s==% sTIMEOUT =% .1f'%(io_var,io_value,timeout_ms))defRunCode(自我,代码,is_function_call=假):"""添加代码或函数调用。* * * *:RunCode是由RoboDK指令程序->函数调用指令触发的。参数代码:要调用的代码或过程:param is_function_call:如果提供的代码是要调用的特定函数,则为True:类型代码:STR:类型is_function_call: bool”“”如果is_function_call:代码.取代(' ',“_”)如果不代码.endswith(“)”):代码=代码+“()”自我.addline(代码)其他的:自我.addline(代码)defRunMessage(自我,消息,iscomment=假):"""在机器人控制器屏幕显示消息(教学挂件)* * * *:RunMessage是由RoboDK指令Program->Show Message instruction触发的。参数message:要显示在教学挂件上或作为代码注释的消息:类型消息:STR:param iscomment:如果消息不需要显示在教学挂件上,而是作为代码的注释显示,则为True:类型iscomment: bool”“”如果iscomment:自我.addline(“%”+消息)其他的:#自我。addlog('显示未实现的教学挂件上的消息(%s)' % message)自我.addline('%显示消息:'+消息)# ------------------ 私人  ----------------------defaddline(自我,换行符):“”“添加一个新的程序行。这是一个仅由其他方法使用的私有方法。:param newline:添加新行。:type newline: STR”“”自我.掠夺.附加(换行符)defaddlog(自我,换行符):"""向日志中添加一条消息。这是一个仅由其他方法使用的私有方法。程序生成时显示日志,以显示机器人程序生成时出现的任何问题。:param newline:换行:type newline: STR”“”自我.日志=自我.日志+换行符+'\ n'# -------------------------------------------------# ------------ 出于测试目的  ---------------deftest_post():用一个简单的程序测试后置处理器从robodk.robomath进口PosePP作为pr=RobotPost()r.ProgStart(“程序”)r.RunMessage(RoboDK使用自定义后置处理器生成的程序,真正的)r.setFrame(p(807.766544,-963.699898,41.478944,0,0,0))r.setTool(p(62.5,-108.253175,One hundred.,-60,90,0))r.MoveJ(p(200,200,500,180,0,180),[-46.18419,-6.77518,-20.54925,71.38674,49.58727,-302.54752])r.MoveL(p(200,250,348.734575,180,0,-150),[-41.62707,-8.89064,-30.01809,60.62329,49.66749,-258.98418])r.MoveL(p(200,200,262.132034,180,0,-150),[-43.73892,-3.91728,-35.77935,58.57566,54.11615,-253.81122])r.RunMessage(“打开空气阀1”)r.RunCode(“TCP_On”,真正的)r.暂停(1000)r.MoveL(p(200,250,348.734575,180,0,-150),[-41.62707,-8.89064,-30.01809,60.62329,49.66749,-258.98418])r.MoveL(p(250,300,278.023897,180,0,-150),[-37.52588,-6.32628,-34.59693,53.52525,49.24426,-251.44677])r.MoveL(p(250,250,191.421356,180,0,-150),[-39.75778,-1.04537,-40.37883,52.09118,54.15317,-246.94403])r.RunMessage(“关闭空气阀”)r.RunCode(“TCP_Off”,真正的)r.暂停(1000)r.MoveL(p(250,300,278.023897,180,0,-150),[-37.52588,-6.32628,-34.59693,53.52525,49.24426,-251.44677])r.MoveL(p(250,200,278.023897,180,0,-150),[-41.85389,-1.95619,-34.89154,57.43912,52.34162,-253.73403])r.MoveL(p(250,150,191.421356,180,0,-150),[-43.82111,3.29703,-40.29493,56.02402,56.61169,-249.23532])r.MoveJ(没有一个,[-46.18419,-6.77518,-20.54925,71.38674,49.58727,-302.54752])r.ProgFinish(“程序”)# robot.ProgSave(“。”,“计划”,真的)为行在r.掠夺:打印(行)如果len(r.日志)>0:mbox(程序生成日志:\ n \ n'+r.日志)输入(“按Enter键关闭…”)如果__name__==“__main__”:"""模块自己执行时调用的过程:test_post()"""test_post()

3.3.后置处理器示例输出
Weld_Hexagon。型号为ABB IRC5机器人
模块MOD_Weld_Hexagon珀耳斯wobjdata rdkWObj: =(假的,真的,”,[(0,0,0),[1 0 0,0]],[[0,0,0),[1 0 0,0]];珀耳斯tooldata rdkTool: =(真的,[[0,0,0),[1 0 0,0]],[3 [0,0200][1,0,0,0),0,0,0.005]];VAR speeddata:= [500,500,500,500];VAR extjoint rdkExtax:= [9E9,9E9,9E9,9E9,9E9];PROC Weld_Hexagon() !由RoboDK生成的ABB IRB 1600ID-4/1.5程序(29/11/2014 17:42:31)ConfL \;rdkWObj.oframe: = (0, 0, 0), (1, 0, 0, 0);rdkWObj.uframe: = (0, 0, 0), (1, 0, 0, 0);rdkTool.tframe: = (0371 3), [0.92387953, 0, 0.38268343, 0];MoveAbsJ [[-0,-19.143793,-7.978668,0,49.189506,-0]],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj; MoveJ [[1010.634,-114.491,662.29],[0,0,1,0],[-1,0,-1,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj; WeldStart; MoveL [[810.634,-114.491,662.29],[0,0,1,0],[-1,0,-1,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj; MoveL [[910.634,58.715,662.29],[0,0,1,0],[0,-1,0,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj; MoveL [[1110.634,58.715,662.29],[0,0,1,0],[0,-1,0,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj; MoveL [[1210.634,-114.491,662.29],[0,0,1,0],[-1,0,-1,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj; MoveL [[1110.634,-287.696,662.29],[0,0,1,0],[-1,0,-1,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj; MoveL [[910.634,-287.696,662.29],[0,0,1,0],[-1,0,-1,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj; MoveL [[810.634,-114.491,662.29],[0,0,1,0],[-1,0,-1,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj; WeldStop; MoveL [[1010.634,-114.491,662.29],[0,0,1,0],[-1,0,-1,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj; MoveAbsJ [[-0,-19.143793,-7.978668,0,49.189506,-0]],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj; ConfJ \On; ConfL \On; ENDPROC ENDMODULE