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

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

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

  • KUKA_KRC4:生成与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=
修改或创建Post Processor:
  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文件的文本编辑器,如记事本或Python IDLE(右键单击<代码类="docutils literal notranslate">py文件,然后,选择<代码类="docutils literal notranslate">编辑与闲置)

  2. 做任何必要的修改。

  3. 要获得结果的预览:双击<代码类="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) -如果RoboDK中的默认设置设置为在保存程序后不显示该程序,则为False。否则,字符串将提供首选文本编辑器的路径

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 ()) -工具相对于参考坐标系的姿态目标。如果目标被定义为联合目标,则Pose可以为None

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

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

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

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

  • conf_RLF(int列表) -机器人配置为3个int的列表:[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="//www.sinclairbody.com/doc/en/PythonAPI/_images/math/6b8f91198c7c80fbb17ae885fe40f725fab78a49.svg" alt="毫米/秒">

setAcceleration ( accel_mmss )
参数

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

setSpeedJoints ( speed_degs )
参数

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

setAccelerationJoints ( accel_degss )
参数

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

setZoneData ( zone_mm )
参数

zone_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) -要显示在teach挂坠上或作为代码注释的消息

  • iscomment(保龄球)—如果消息不一定要显示在teach挂起上,而是作为代码的注释,则为True

addline ( 换行符 )
参数

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

addlog ( 换行符 )
参数

换行符(str) -新线

3.2.后置处理程序的例子
样品后置处理程序
#版权所有2015-2021 - RoboDK公司- //www.sinclairbody.com/#根据Apache许可2.0版本(“许可”)获得许可;#除非遵守许可证,否则您不能使用此文件。您可以在以下网站获得许可证的副本# http://www.apache.org/licenses/license - 2.0除非适用法律要求或书面同意,软件#根据许可发布的是“按现状”发布的,#没有任何形式的保证或条件,无论是明示的或暗示的。#查看许可证,了解具体的语言管理权限和#许可下的限制。# ----------------------------------------------------这个文件是一个用于生成程序的POST PROCESSOR脚本示例#用于使用RoboDK的通用机器人#编辑/测试POST PROCESSOR脚本文件:#选择“程序”->“添加/编辑Post Processor”,然后选择您的帖子或创建一个新的帖子。您可以使用任何文本编辑器或Python编辑器编辑此文件。使用Python编辑器可以快速计算文件末尾的示例程序。# Python应该与RoboDK一起自动安装#你也可以手动编辑POST处理器:# 1-使用Python IDLE打开*.py文件(右键单击-> Edit with IDLE)# 2-做出必要的改变运行文件打开Python Shell: Run ->运行模块(默认为F5)自动调用"test_post()"函数或者,您可以使用文本编辑器编辑此文件,并使用Python运行它#要使用POST PROCESSOR文件,必须将*.py文件放在"C:/RoboDK/Posts/"#在RoboDK中为你的机器人选择一个特定的后处理器,你必须遵循以下步骤:打开机器人面板(双击一个机器人)# 2-选择参数# 3-选择“解锁高级选项”# 4-在“Robot brand”框中选择你的帖子作为文件名#删除一个已有的POST PROCESSOR脚本,只需删除这个文件(.py文件)## ----------------------------------------------------更多关于RoboDK后处理器和离线编程的信息:2022世界杯8强赛时间# //www.sinclairbody.com/help后处理程序# //www.sinclairbody.com/doc/PythonAPI/postprocessor.html# ----------------------------------------------------# ----------------------------------------------------#导入RoboDK工具从robodk.robomath进口*从robodk.robodialogs进口*从robodk.robofileio进口*# ----------------------------------------------------defpose_2_str(构成):根据控制器的语法/格式将机器人姿态目标转换为字符串。:参数位姿:4x4位姿矩阵:类型构成::甲:“robodk.robomath.Mat”:return: position作为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(关节):根据控制器的语法/格式将机器人关节目标转换为字符串。:param关节:作为列表的机器人关节:类型接头:浮动列表:return: joint格式为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 robbotpost:后置处理器名称:类型robotpost: str:param robotname:机器人名称:类型robotname: str:param robot_axes:机器人的轴数:类型robot_axes: int"""自我.ROBOT_POST=robotpost自我.ROBOT_NAME=robotname自我.掠夺=[]自我.日志=”自我.nAxes=robot_axesdefProgStart(自我,progname):"""启动一个有名字的新程序。可以同时生成多个程序。* * * *:每当必须生成一个新程序时,就会触发ProgStart。:param progname:程序名:类型progname: str"""自我.addline(“PROC% s()的%progname)defProgFinish(自我,progname):此方法用于定义程序或过程的结束。一个模块可以有多个程序。在另一个指令:meth:`samplepost. botpost之前不会执行其他指令。ProgStart”执行。* * * *:ProgFinish在程序的所有指令完成后被触发。:param progname:程序名:类型progname: str"""自我.addline(“ENDPROC”)defProgSave(自我,文件夹,progname,ask_user=假,show_result=假):”““保存项目。此方法在处理完所有程序后执行。* * * *:在所有程序和指令执行完毕后触发ProgSave。:param folder:保存程序的文件夹提示:类型文件夹:str:param progname:程序名,提示保存程序:类型progname: 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") as fid:与开放(filesave,“w”,编码=“utf - 8”)作为支撑材:为行在自我.掠夺:支撑材.写(行)支撑材.写("\ n")打印(保存:% s\ n'%filesave)#---------------------- 显示结果如果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):""使用提供的参数向机器人发送一个程序。如果我们选择了“Send Program to Robot”选项,这个方法将在ProgSave之后立即执行。连接参数必须在RoboDK的机器人连接菜单中提供。:param robot_ip:机器人的IP地址:类型robot_ip: str:param remote_path:机器人远端路径:类型remote_path: str:param ftp_user: FTP用户证书:类型ftp_user: str:param ftp_pass: FTP用户密码:类型ftp_pass: str"""UploadFTP(自我.PROG_FILES,robot_ip,remote_path,ftp_user,ftp_pass)defMoveJ(自我,构成,关节,conf_RLF=没有一个):定义一个关节运动。* * * *:MoveJ是由RoboDK指令程序->移动联合指令触发的。:param pose:工具相对于参考系的姿态目标。如果目标被定义为联合目标,则Pose可以为None:类型构成::甲:“robodk.robomath.Mat”:param关节:作为列表的机器人关节:类型接头:浮动列表:param conf_RLF:机器人配置为3个整数的列表:[REAR, LOWER-ARM, FLIP]。[0,0,0]表示[前、上臂和非翻转]配置:类型conf_RLF: int列表"""自我.addline(“MOVJ”+joints_2_str(关节))defMoveL(自我,构成,关节,conf_RLF=没有一个):定义一个线性运动。* * * *:移动是由RoboDK指令程序->移动线性指令触发的。:param pose:工具相对于参考系的姿态目标。如果目标被定义为联合目标,则Pose可以为None:类型构成::甲:“robodk.robomath.Mat”:param关节:作为列表的机器人关节:类型接头:浮动列表:param conf_RLF:机器人配置为3个整数的列表:[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指令程序->移动循环指令触发。:param pose1:定义弧线(路径点)的点的姿态目标:类型pose1::甲:“robodk.robomath.Mat”:param pose2:弧线末端的姿态目标(最终点):类型pose2::甲:“robodk.robomath.Mat”:param joints1:该路径点的机器人关节:类型joints1:浮动列表:param 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指令触发。:param pose:参考坐标系相对于机器人基础坐标系的姿态:类型构成::甲:“robodk.robomath.Mat”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指令Program->Set Tool Frame instruction触发。:param pose: TCP帧相对于机器人基帧的姿态:类型构成::甲:“robodk.robomath.Mat”:param tool_id:参考帧的编号(如果可用):类型tool_id: int,无:param tool_name: RoboDK中定义的参考帧的名称:类型tool_name: str"""自我.addline(“TOOL_FRAME”+pose_2_str(构成))def暂停(自我,time_ms):定义程序中的暂停(包括动作)。如果暂停必须引起机器人停止,直到用户希望继续程序,则Time_ms为负。* * * *:暂停由RoboDK指令Program->Pause instruction触发。:param time_ms:暂停时间,单位为毫秒:类型time_ms:浮动"""如果time_ms<0:自我.addline(“暂停”)其他的:自我.addline(”等% .3f'%(time_ms*0.001))defsetSpeed(自我,speed_mms):改变机器人速度(单位:mm/s)* * * *:setSpeed由RoboDK指令Program->Set Speed指令触发。:param speed_mms:速度:math: ' mm/s ':类型speed_mms:浮动"""自我.addlog('setSpeed未定义(% .2fmms) '%speed_mms)defsetAcceleration(自我,accel_mmss):改变机器人加速度(单位:mm/s2)* * * *:setAcceleration由RoboDK指令Program->Set Speed指令触发。必须提供加速度值。:param acceler_mmss:速度在:math: ' mm/s^2 ':类型accel_mmss:浮动"""自我.addlog(“setAcceleration没有定义”)defsetSpeedJoints(自我,speed_degs):"""改变机器人关节速度(deg/s)* * * *:setspeedjoint由RoboDK指令Program->Set Speed指令触发。必须提供一个联合速度值。:param speed_degs:速度:math: ' deg/s ':类型speed_degs:浮动"""自我.addlog(“setSpeedJoints没有定义”)defsetAccelerationJoints(自我,accel_degss):改变机器人关节加速度(单位:deg/s2)* * * *:setaccelerationjoint由RoboDK指令Program->Set Speed指令触发。必须提供一个关节加速度值。:param acceler_degss: speed in:math: ' deg/s^2 ':类型accel_degss:浮动"""自我.addlog(“setAccelerationJoints没有定义”)defsetZoneData(自我,zone_mm):更改平滑半径(也称为舍入、混合半径、CNT、APO或区域数据)。如果这个参数较高,它有助于使移动更流畅* * * *:setZoneData由RoboDK指令Program->设置舍入指令触发。:param zone_mm:舍入半径,单位为mm:类型zone_mm:浮动"""自我.addlog('setZoneData未定义(% .1f毫米)”%zone_mm)defsetDO(自我,io_var,io_value):将变量(通常是数字输出)设置为给定值。此方法也可用于设置其他变量。* * * *:setDO由RoboDK指令Program->设置或等待I/O指令触发。:param io_var:要设置的变量,以STR或int形式提供: io_var类型:int, STRio_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指令触发。io_var:要等待的变量,以STR或int形式提供: io_var类型:int, STRio_value:变量的值,以str、float或int形式提供io_value: int, float, STR:param 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指令Program->函数调用指令触发。:参数代码:要调用的代码或过程: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:要显示在teach挂坠上或作为代码注释的消息消息类型:str:param iscomment:如果消息不是必须显示在teach挂起上,而是作为代码的注释,则为True:类型iscomment: bool"""如果iscomment:自我.addline(“%”+消息)其他的:#自我。addlog('显示未实现的教学挂起的消息(%s)' %消息)自我.addline(%显示消息:'+消息)# ------------------ 私人  ----------------------defaddline(自我,换行符):"""添加一个新的程序行。这是只由其他方法使用的私有方法。:参数newline:要添加的新行。:类型换行:str"""自我.掠夺.附加(换行符)defaddlog(自我,换行符):"""向日志中添加一条消息。这是只由其他方法使用的私有方法。当程序生成时,将显示日志,以显示机器人程序生成时的任何问题。:param 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.日志)输入(“按回车键关闭…”)如果__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速度数据rdkSpeed:= [500,500,500,500];VAR extjoint rdkExtax:= [9E9,9E9,9E9,9E9,9E9];PROC Weld_Hexagon() !Program generated by RoboDK for ABB IRB 1600ID-4/1.5 on 29/11/2014 17:42:31 ConfJ \ on;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