ABB机器人RAPID指令中文翻译 下载本文

RAPID参考手册 指令 张建辉 韩 鹏

1

1.指令1.1.AccSet—降低加速度 用途:

当处理较大负载时使用AccSet指令。它允许减慢加速度和减速度,使机器人有一个更平滑的运动。 该指令只能在主任务T_ROB1中使用,或者如果处于多运动系统,在Motion任务中。 基本范例:

AccSet的基本范例说明如下。 例1 AccSet 50,100;

加速度备限制到正常值的50%。 例2 AccSet 100,50;

加速度斜线限制到正常值的50%。 项目:

AccSet Acc Ramp Acc:

数据类型:num(数值)

加速度和减速度作为正常值的百分比。100%对应最大加速度。最大值:100%。输入值<20%则给出最大加速度的20%。 Ramp 数据类型:num(数值) 加速度和减速度的增加作为正常值的百分比的比例(如图)。通过减小这个数值可以限制震动。100%对应最大比例。最大值:100%,输入值<10%则给出最大比例的10%。 下图说明减小加速度可以平滑运动。 加速度 加速度 加速度

时间 时间 时间 AccSet 100,100 正常加速度 AccSet 30,100 AccSet 100,30 程序执行: 该加速度值应用到机器人和外部轴,直到一个新的AccSet指令执行。 缺省值(100%)在以下情况是自动设置:

? 冷启动

? 加载了新的程序 ? 从头开始执行程序时 语法: AccSet [AccSet “:=”]<数值表达式(IN)>“,”[Ramp “:=”]<数值表达式(IN)>“;” 相关信息: 有关信息 在世界坐标系统中控制加速度 沿着路径降低TCP加速度 定位指令 参看 第590页WorldAccLim--在世界坐标系统中控制加速度 第265页PathAccLim—沿路径降低TCP加速度 RAPID参考手册-RAPID概述,RAPID摘要部分-运动 2

1.2.ActUnit—激活一个机械单元

用途: ActUnit用来激活一个机械单元。 例如当使用普通驱动单元的时候,它可以用来决定哪一个单元被激活。 该指令只能在主任务T_ROB1中使用,或者如果处于多运动系统,在Motion任务中。 基本范例: ActUnit的基本范例说明如下: 例1 ActUnit orbit_a; orbit_a机械单元的激活。 项目: AccUnit MechUnit MechUnit: 机械单元 数据类型:mecunit(机械单元) 要激活的机械单元的名称。 程序执行: 当机器人的和外部轴的实际路径准备好以后,整个路径被清理并且特定的机械单元被激活。这意味着它被机器人控制和监视。 如果多个机械单元共享一个普通驱动单元,这些单元中的一个的激活,也将把该单元连接到普通驱动单元。 限制: 如果在该指令之前有一个运动指令,那个指令的程序中必须带有停止点(区域数据fine),而不是一个通过点,否则将不能进行电源失败后的重启。 AccUnit指令不能在连接到以下任何特定的系统事件的RAPID程序中执行:电源上电,停止,Q停止,重启或者复位。 语法: ActUnit [MechUnit “:=”]<机械单元变量(VAR)>“;” 相关信息: 相关信息 废除机械单元 机械单元 更多例子 参照 第69页DeactUnit—废除一个机械单元 第969页MecUnit—机械单元 第69页DeactUnit—废除一个机械单元 3

1.3.Add—增加一个数字数值

用途:

Add用于增加一个数值到一个数字变量或恒量,或者从一个数字变量或者恒量中减去一个数值。 基本范例: Add的基本范例说明如下: 例1 Add reg1,3;

3被增加到reg1,即reg1=reg1+3。 例2 Add reg1,—reg2

从reg1减去reg2,即reg1=reg1-reg2。 项目: Add Name AddValue Name:

数据类型:数字

将要改变的变量或者恒量的名称。 AddValue: 数据类型:数字 要增加的数值。 语法: Add [Name “:=”]<数字的变量或者恒量(INOUT)>“,”[AddValue“:=”]<数字表达式(IN)>“;” 相关信息: 相关的信息 给变量加1 改变量减1 使用一个任意的表达式改变数据,例如乘法 参看 Incr—增加1,第117页 Decr—减1,第71页 “:=”—赋值,第19页 4

1.4.AliasIO—用别名定义I/O

用途:

AliasIO用来用别名定义一个任意类型的信号,或者用来在内置(built-in)任务模块中使用信号。 在不同的机器人安装中,带别名的信号可以被用来预定义常规程序,而不用在运行之前进行任何的程序更新。 在任何实际信号的使用之前,必须运行AliasIO指令。参看第17页的基本范例来加载模块,第18页更多范例来安装模块。 基本范例: 指令AliasIO的基本范例说明如下: 也可参看第18页更多范例 例1 VAR signaldo alias_do; PROC Prog_start() AliasIO config_do,alias_do; ENDPROC 程序prog_start链接到系统参数的START事件。程序定义的数字输出信号alias_do链接到程序开头配置的数字输出信号config_do。 项目: AliasIO FromSignal, ToSignal; FromSignal: 数据类型:signalxx 或者字符串。

加载的模块:

信号标识符按照配置(数据类型signalxx)命名,信号描述符也从配置中复制。信号必须在IO配置中定义。 安装的模块或者加载的系统模块:

一个相关(CONST、VAR、PERS或者它们的参数)包含信号(数据类型string字符串)的名称,从该信号中,信号描述符在系统中搜索后被复制。信号必须在IO配置中定义。 ToSignal: 数据类型:signalxx 信号标识符按照程序(数据类型signalxx)命名,信号描述符复制到该系统中。信号必须在RAPID程序中声明。 FromSignal和ToSignal项目必须使用(或者找到)相同的数据类型,并且必须是类型signalxx(signalai,signalao,signaldi,signaldo,signalgi或者signalgo)中的一个。 程序执行: 信号描述符数值从FromSignal项目给出的信号复制到ToSignal项目给出的信号。 更多范例: 指令AliasIO的更多范例说明如下。 例1 VAR signaldi alias_di;

PROC prog_start( ) CONST string config_string :=‖config_di‖; AliasIO config_string,alias_di; ENDPROC

程序prog_start链接到系统参数中的START事件。程序定义的数字输入信号alias_di链接到程序开头配置的数字输入信号config_di(通过常量config_string)。 限制:

当开始程序的时候,别名信号直到AliasIO指令执行之后才能使用。

5

指令AliasIO必须放置在

? 或者在程序开始(事件START)时执行的事件程序中

? 或者在每一个程序开始之后(信号使用之前)执行的程序部分。

为了防止错误,不推荐使用把AliasIO信号动态重新链接到不同的物理信号。

语法: AliasIO [FromSignal “:=”]<任意类型的相关(REF)>“,”

[ToSignal“:=”]<任意类型的变量(VAR)>“;” 相关信息: 相关信息 输入/输出指令 通常的输入输出功能性 I/O配置 定义事件程序 加载/安装任务模块 参看 RAPID参考手册-RAPID概述,RAPID摘要部分-输入和输出信号 RAPID参考手册-RAPID概述,运动和I/O原理部分-I/O原理 技术相关手册-系统参数 技术相关手册-系统参数 技术相关手册-系统参数 6

1.5.“:=”—赋值

用途: “:=”指令用来给数据赋一个新值。这一个值可以是包括从常量值到任意的表达式中的任何一个。例如reg1+5*reg3。 基本范例: 指令的基本范例说明如下。 也可参见第19页更多范例。 例1 reg1:=5;

数值5赋给reg1。 例2 reg1:=reg2-reg3;

reg2-reg3计算返回的数值赋给reg1。 例3 counter:=counter+1;

counter增加1。 项目: Data:=Value Data: 数据类型:所有 将被赋新值的数据。 Value: 数据类型:和Data一样。 期望的数值。 更多范例: 该指令的更多范例说明如下。 例1 tool1.tframe.trans.x:=tool1.tframe.trans.x+20;

tool1的TCP在X方向上移动20毫米。 例2 pallet{5,8}:=Abs(value)

pallet矩阵的一个元素被赋予一个等于value变量的绝对值的数值。 限制: 数据(将被改变数值的)不可以是: 常量 非数值数据类型 数值或者数据必须有相似的(相同的或者别名的)数据类型。 语法:

(EBNF) <赋值目标>“:=”<表达式>“;” <赋值目标>::=<变量>|<恒量>|<参数>| 相关信息: 相关信息 表达式 非数值数据类型 给数据赋一个初始数值 参看 RAPID参考手册-RAPID概述,基本特性部分-表达式 RAPID参考手册-RAPID概述,基本特性部分-数据类型 操作员手册-IRC5和FlexPendant,FlexPendant部分编辑数据实例 7

1.6.BitClear—在一个字节数据中清除一个特定位

用途: BitClear用来清除(设为0)定义的字节数据中一个特定的位。 基本范例: 该指令的基本范例说明如下。 例1 CONST num parity_bit:=8;

VAR byte data1:=130; BitClear data1,parity_bit;

变量data1中位号8(parity_bit)将设为0,例如变量data1的内容将从130变成2(整数表示法)。当使用BitClear时数据类型byte的位操作在下图有说明。

项目: BitClear BitData BitPos BitData: 数据类型:字节 整型表示法的位数据,将被改变的数据。 BitPos: 数据类型:数字 BitData中将被设为零的位的位置(1-8)。 限制: 字节数据类型的范围是十进制的0-255。 有效的位的位置为1-8。 语法: BitClear [BitData ?:=‘]<字节变量或者恒量(INOUT)>‘,‘[BitPos‘:=‘]<数字表达式(IN)>‘;‘ 相关信息: 相关信息 在字节数据中设定一个特定的位 检查字节数据中特定的位是否被设置 位的其他功能 参看 BitSet—在字节数据中设定一个特定的位,第23页 BitCheck—检查字节数据中特定的位是否被设置,第654页 RAPID参考手册-RAPID概述,RAPID摘要部分-数学-位功能 8

1.7.BitSet—在字节数据中设定一个特定的位

用途: BitSet用来在定义的字节数据中把一个特定位设为1。 基本范例: 该指令的基本范例说明如下。 例1 CONST num parity_bit:=8;

VAR byte data1:=2; BitSet data1 parity_bit;

变量data1中位号8(parity_bit)将设为1,例如变量data1的内容将从2变成130(整数表示法)。当使用BitClear时数据类型byte的位操作在下图有说明。

项目: BitSet BitData BitPos BitData: 数据类型:字节 整型表示法的位数据,将被改变的数据。 BitPos: 位的位置 数据类型:数字 BitData中将被设为零的位的位置(1-8)。 限制: 字节数据类型的范围是十进制的0-255。 有效的位的位置为1-8。 语法: BitSet [BitData ?:=‘]<字节变量或者恒量(INOUT)>‘,‘[BitPos‘:=‘]<数字表达式(IN)>‘;‘ 相关信息: 相关信息 在字节数据中清除一个特定的位 检查字节数据中特定的位是否被设置 位的其他功能 参看 BitClear—在字节数据中清除一个特定的位,第23页 BitCheck—检查字节数据中特定的位是否被设置,第654页 RAPID参考手册-RAPID概述,RAPID摘要部分-数学-位功能 9

1.8.BookErrNo—定制一个RAPID系统错误号码

用途: BookErrNo用来定制一个新的RAPID系统错误号码。 基本范例: 该指令的基本范例说明如下: 例1 !Introduce a new error number in a glue system

!Note: The new error variable must be declared with the initial value –1; VAR errnum ERR_GLUEFLOW:=-1;

!Book the new RAPID system error number BookErrNo ERR_GLUEFLOW;

变量ERR_GLUEFLOW将被赋给一个空闲的系统错误号码,将在RAPID代码中使用。 !Use the new error number IF dil=0 THEN RAISE ERR_GLUEFLOW; ELSE … ENDIF Error handling ERROR IF ERRNO=ERR_GLUEFLOW THEN …. ELSE … ENDIF 如果数字输入dil是0,新定制的错误号码将被提出并且系统错误变量ERRNO将被设定到新定制的错误号码。这些用户产生的错误的错误处理然后可以像平常一样在错误处理器中处理。 项目: BookErrNo ErrorName ErrorName: 数据类型:errnum 新的RAPID系统错误变量名称。 限制: 新的错误变量不可以像程序变量一样被声明。 新的错误变量必须带初始值-1声明,这就给出一个信息:该错误应该是一个RAPID系统错误。 语法: BookErrNo [ErrorName ?:=‘] ?;‘ 相关信息: 相关信息 错误处理 错误号码 调用一个错误处理器 参看 RAPID参考手册-RAPID概述,基本特性部分-错误恢复 Errnum—错误号码,第941页 RAISE—调用一个错误处理器,第303页 10

1.9.Break—跳出程序执行

用途: Break用来在程序执行中制造一个立即跳出,为了RAPID程序代码调试的目的。 基本范例: 该指令的基本范例说明如下。 例1 …..

Break ….

程序执行停止,为了调试目的的分析变量、数值等成为可能。 程序执行: 该指令立即停止程序执行,不用等机器人或者外部轴到达他们编程的当时运动的目的点。程序执行然后能从下一条指令重新开始。 如果在一些事件程序中有Break指令,程序的执行将被打断,并且没有停止事件程序将被执行。下次同一事件发生的时候事件程序将从开头执行。 语法: Break‘;’ 相关信息: 相关信息 程序活动停止 致命错误后停止 终止程序执行 只停止机器人运动 参看 Stop—停止程序执行,第438页 EXIT—终止程序执行,第92页 EXIT—终止程序执行,第92页 StopMove—停止机器人运动,第442页 11

1.10.CallByVar—通过一个变量调用程序

用途:

CallByVar(Call By Variable)可以使用一个特定的名称,例如proc_name1, proc_name2, proc_name3 … proc_namex通过一个变量调用程序。 基本范例: 该指令的基本范例说明如下: 也可参照第28页更多范例。 例1 reg1:=2;

CallByVar ―proc‖,reg1;

程序proc2被调用。 项目: CallByVar Name Number Name: 数据类型:字符串 程序名称的第一部分,例如proc_name。 Number: 数据类型:数字 程序号码的数字数值。该数值将被转换成一个字符串,给出程序名称的第二部分,例如,1。数值必须是一个正整数。 更多范例: 如何作出程序调用的动态和静态选择的更多范例。 例1— 程序调用的静态选择。

TEST reg1 CASE 1:

Lf_door door_loc; Case 2:

Rf_door door_loc; Case 3:

Lr_door door_loc; Case 4:

Rr_door door_loc; DEFAULT: EXIT; ENDTEST

取决于寄存器reg1的数值是1、2、3或者4,来调用不同的程序来对选择的门完成合适的工作,门位于项目door_loc。

例2— 用RAPID语法动态选择程序调用。

Reg1:=2;

%‖proc‖+NumToStr(reg1,0)% door_loc;

程序proc2和项目door_loc被调用。 限制:所有程序必须有一个特定的名称,例如proc1,proc2,proc3。 例3— 用CallByVar动态选择程序调用。

Reg1:=2;

CallByVar ―proc‖,reg1;

12

程序proc2被调用。限制:所有程序必须有一个特定的名称,如proc1,proc2,proc3,并且没有项目可以被使用。 限制: 只能被用来调用不带参数的程序。 不能用来调用LOCAL(本地)程序。 CallByVar的执行比普通的程序调用要占用多一点的时间。 错误处理: 如果Number项目小于零或者不是一个整数,系统参数ERRNO被设成ERR_ARGVALERR。 如果相关到一个未知的程序,系统参数ERRNO被设成ERR_REFUNKPRC。 如果程序调用错误(不是程序错误),系统参数ERRNO被设成ERR_CALLPROC。 这些错误可以在错误处理器中进行处理。 语法: CallByVar [名称‘:=’]<字符串表达式(IN)>‘,’[号码‘:=’]<数字表达式(IN)>‘;’ 相关信息: 相关信息 调用程序 参照 RAPID参考手册-RAPID概述,基本特性部分-程序 操作员手册-IRC5和FlexPendant 13

1.11.CancelLoad—取消模块的加载

用途: CancelLoad用来取消用StartLoad指令正在加载或者已经加载的模块。 CancelLoad只能用在指令StartLoad和WaitLoad之间。 基本范例: 该指令的基本范例说明如下。 也可参见第30页的更多范例。 例1 ConcelLoad load1

加载load1被取消。 项目: CancelLoad LoadNo LoadNo: 数据类型:loadsession 相关到被StartLoad所开始的加载系列。 更多范例: 如何使用该指令的更多范例说明如下。 例1 VAR loadsession load1;

StartLoad ―HOME:‖\\File:=‖PART_B.MOD‖,load1;

… IF … CancelLoad Load1; StartLoad ―HOME:‖\\File:=‖PART_C.MOD‖,load1; ENDIF … WaitLoad load1; 指令CancelLoad将取消正在进行的PART_B.MOD模块的加载,而要使加载PART_C.MOD成为可能。 错误处理: 如果项目LoadNo指定的变量没有在使用,也就是说没有进行加载,系统变量ERRNO将设为ERR_LOADNO_NOUSE。这个错误然后在错误处理器中可能被处理。 语法: CancelLoad [LoadNo ?:=‘]<加载系列变量(VAR)>‘;‘ 相关信息: 相关信息 在执行过程中加载一个程序模块 把加载的模块连接到任务中 加载系列 加载一个程序模块 卸载一个程序模块 接受未解决的相关 参照 StartLoad—在执行过程中加载一个程序模块,第410页 WaitLoad—把加载的模块连接到任务中,第566页 Loadsession—程序加载系列,第968页 Load—在执行过程中加载一个程序模块,第182页 Unload—在执行过程中卸载一个程序模块,第553页 技术相关手册-系统参数,标题控制器部分-任务类型-检查未解决的相关 14

1.12.CirPathMode—在圆形路径过程中工具再定位

用途:

CirPathMode(圆形路径模式)使在圆周运动中选择不同的模式再定位工具成为可能。 该指令只能被使用在主任务T_ROB1,或者如果在多运动系统中,使用在运动任务中。 基本范例: 该指令的基本范例说明如下: 例1 CirPathMode \\PathFrame

在所有成功的圆形运行过程中,从开始点到ToPoint的实际路径格式中工具再定位的标准模式。这是系统中的缺省值。 例2 CirPathMode \\ObjectFrame

在所有成功的圆形运行过程中,从开始点到ToPoint的实际对象格式中工具再定位的修改的模式。 例3 CirPathMode \\CirPointOri

在所有成功的圆形运行过程中,从开始点通过程序中的CirPoint再定位到ToPoint的工具再定位的标准模式。 描述: PathFrame 以下表格中的图显示了标准模式\\PathFrame下的工具再定位。 说明 描述 箭头显示了工具从腕部中心点到工具中心点也就是编程点。腕部中心点的路径在图中用虚线点出。 \\PathFrame模式使工具绕圆柱得到相同的角度变得容易。机器人手腕将不能突破CirPoint中编程的方向。 以下表格中的图显示了用固定工具方向的标准模式\\PathFrame的使用。 说明 描述 该图片显示了用倾斜工具和\\PathFrame模式在圆的中心获得的工具方向。 和下图中使用\\ObjectFrame模式的相比较。 ObjectFrame 下表中的图显示了修改的模式\\ObjectFrame和固定工具方向的使用。 说明 描述 15

该图片显示了用倾斜工具和\\ObjectFrame模式在圆的中心获得的工具方向。 该模式将做出和MoveL用相同方法的工具的线性再定位。机器人手腕将不能穿过CirPoint中编程的方向。 和上图中使用\\PathFrame模式的相比较。 CirPointOri 以下表格中的图显示了标准模式\\PathFrame和修改的模式\\CirPointOri之间不同的工具再定位。 说明 描述 箭头显示了工具从腕部中心点到工具中心点也就是编程点。腕部中心点的不同路径在图中用虚线点出。 \\CirPointOri模式使机器人手腕突破CirPoint中编程的方向。 项目: CirPathMode [ \\PathFrame] | [ \\ObjectFrame] | [ \\CirPointOri] [\\PathFrame] 数据类型:switch 在圆周运动过程中,工具的再定位在实际路径格式中的从开始点方向到ToPoint方向连续完成。这是系统中的标准模式。 [ \\ObjectFrame] 数据类型:switch 在圆周运动中,工具的再定位在实际对象格式中从开始点方向到ToPoint方向连续完成。 [ \\CirPointOri]

数据类型:switch 在圆周运动中,工具的再定位在实际对象格式中从开始点方向到程序中CirPoint方向再到ToPoint方向连续完成。

只有编程的CirPointMode;没有任何转换导致和CirPointMode\\PathFrame相同的结果。 程序执行: 特定的圆形工具再定位模式应用于下一个执行的机器人任意类型的圆周运动(MoveC,SearchC,TriggC,MoveCDO,MoveCSync,ArcC,PaintC…)并且直到新的CirPathMode(或者旧的CirPathReori)指令执行之前都有效。 标准的圆形再定位程序(CirPathMode \\PathFrame)在以下情况下自动设定:

? 冷启动

? 当加载一个新的程序 ? 当从开头执行程序时 限制: 该指令只影响圆周运动。 当使用\\CirPointOri模式时,CirPoint必须在点A和点B之间,按照下图是圆周运动在CirPoint突破程序中的方向。

16

如果工作在手腕单一点区域附近并且SingArea\\Wrist指令已经被执行,指令CirPathMode将没有影响,因为系统那时候选择另一种圆周运动(关节插补)的工具再定位模式。

该指令代替旧的指令CirPathReori(即使在将来也可以使用,但是在文档中不再介绍。 语法: CirPathMode ?;‘ [?\\‘PathFrame] | [?\\‘ObjectFrame] | [?\\‘CirPointOri] 相关信息: 相关信息 插补 运动设定数据 圆周运动指令 参照 RAPID参考手册-RAPID概述,运动和I/O原理部分-程序执行过程中的定位 Motsetdata—运动设定数据,第971页 MoveC—使机器人圆周运动,第209页 17

1.13.Clear—清除数值

用途: Clear用来清除一个数字变量或恒量,即把它设为零。 基本范例: 该指令的基本范例说明如下。 例1 Clear reg1;

Reg1被清除,即reg1:=0。 项目: Clear Name Name: 数据类型:数字 即将清除的变量或恒量的名称。 语法: Clear [Name ?:=‘] <数字的变量或者恒量(INOUT)> ?;‘ 相关信息: 相关信息 给变量加1 使变量减1 给变量增加任何值 使用任意值改变数据 参看 Incr—给变量加1,第117页 Decr—变量减1,第71页 Add—增加数字数值,第16页 “:=”—给变量赋值,第19页 18

1.14.ClearIOBuff—清除串行通道的输入缓冲器

用途: ClearIOBuff用来清理串行通道的输入缓冲器。所有来自串口通道的缓冲的字母将被丢弃。 基本范例: 该指令的基本范例说明如下。 例1 VAR iodev channel2;

Open ―com2:‖, channel2 \\Bin; ClearIOBuff channel2; WaitTime 0.1;

相关到channel2的串行通道的输入缓冲器被清空。等待时间保证足够时间来完成清空操作。 项目: ClearIOBuff IODevice IODevice: 数据类型:iodev 将被清空缓冲器的串行通道的名称(相关)。 程序执行: 所有输入串行通道的缓冲器的字母被清除。下一个读取指令将等待来自通道的新的指令。 限制: 该指令只能被串行通道使用。不等待操作完成的通知。在每一次使用中,推荐在指令后使用0.1秒的等待时间,来给操作足够的时间。 错误处理: 如果要在一个文件上使用该指令(清除文件),系统变量ERRNO将被设成ERR_FILEACC。该错误可以在错误处理器中处理。 语法: ClearIOBuff [IODevice ?:=‘] ‘;’ 相关信息: 相关信息 打开一个串行通道 参看 RAPID参考手册-RAPID概述,RAPID摘要部分-通讯 19

1.15.ClearPath—清除当前路径

用途: ClearPath清除当前运动路径层次上(基本层次或者StorePath层次)的整个运动路径。 运动路径是指在ClearPath执行的时候,从RAPID已经执行但是机器人没有完成的运动开始所有的运动段落。 在ClearPath指令执行前机器人必须在停止点位置,或者用StopMove指令停止机器人。 基本范例: 该指令的基本范例说明如下。

在下列程序例子中,机器人从初始位置到达p1点。在点px,信号dil将指示有效负载被丢掉。在陷阱程序gohome中,继续执行。机器人将在px停止运动(开始跳出),路径将被清除,机器人将移动到初始位置。错误将被提高到调用minicycle程序,并且整个用户定义的程序循环proc1,proc2将被再次从开始执行。 例1 VAR intnum drop_payload;

CONST errnum ERR_DROP_LOAD:=-1;

PROC minicycle( ) BookErrNo ERR_DROP_LOAD; Proc1; … ERROR (ERR_DROP_LOAD) RETRY; ENDPROC

PROC proc1( ) … proc2; … ENDPROC

PROC proc2( )

CONNECT drop_payload WITH gohome; IsignalDI \\Single, dil, 1, drop_payload; MoveL p1,v500,fine,gripper; ………….

Idelete drop_payload

20

ENDPROC

TRAP gohome

StopMove \\Quick; ClearPath;

Idelete drop_payload;

MoveL home, v500, fine, gripper; RAISE ERR_DROP_LOAD; ERROR RAISE; ENDTROP

如果正在运行相同的程序,但是在陷阱程序gohome中没有使用StopMove和ClearPath,在回到初始位置home之前机器人将继续运动到p1位置。 如果编程时在MoveL home中使用飞点(zone)代替停止点(fine),在调用minicycle程序中的错误处理器的过程中,运动将会继续并且直到运动准备好。 语法: ClearPath ?;‘ 相关信息: 相关信息 停止机器人运动 错误恢复 参看 StopMove—停止机器人运动,第442页 RAPID参考手册-RAPID概述,RAPID摘要部分-错误恢复 RAPID参考手册-RAPID概述,基本特性部分-错误恢复 21

1.16.ClearRawBytes—清除原始字节数据的内容

用途: ClearRawBytes用来把原始字节变量的所有内容设为0。 基本范例: 指令的基本范例说明如下。 例1 VAR rawbytes raw_data;

VAR num integer :=8 VAR num float :=13.4;

PackRawBytes integer, raw_data, 1 \\IntX :=DINT;

PackRawBytes float,raw_data, (RawBytesLen(raw_data)+1) \\Float4;

ClearRawBytes raw_data \\FromIndex :=5;

在前4个字节里,放入integer的数值(从索引1开始),从索引5开始的后4个字节里放入了float的数值。 例子中的最后一个指令清除了Raw_data 的内容,从索引5开始,例如float将被清除,但是integer被保存在raw_data 中。当前Raw_data中有效字节的长度被设为4。 项目: ClearRawbytes RawData [ \\FromIndex ] RawData: 数据类型:原始字节 RawData是将被清除的数据容器。 [ \\FromIndex ]: 数据类型:数字 带有指定的[ \\FromIndex ],将从[ \\FromIndex ]开始清除RawData的内容。 一直到头的所有东西都被清除。 如果没有指定[ \\FromIndex ],从索引1开始的所有数据将被清除。 程序执行: 在指定的变量中,从索引1(缺省)开始或者从\\FromIndex开始的数据被复位到0。 指定变量中有效字节的当前长度被设为0(缺省)或者如果\\FromIndex使用的话为(\\FromIndex-1)。 语法: ClearRawBytes [RawData ?:=‘]<原始字节类型的变量(VAR)>

[?\\‘FromIndex‘:=‘<数字类型的表达式(IN)>] ‘ ; ‘

相关信息: 相关信息 原始字节的数据 得到原始字节数据的长度 复制原始字节数据的内容 将设备网标题打包进原始字节数据 将数据打包进原始字节数据 写入原始字节数据 读取原始字节数据 从原始字节数据将数据拆包 参看 Rawbytes—原始数据,第994页 RawBytesLen—得到原始字节数据的长度,第806页 CopyRawBytes—复制原始字节数据的内容,第58页 PackDNHeader—将设备网标题打包进原始字节数据,第258页 PackRawBytes—将数据打包进原始字节数据,第261页 WriteRawBytes—写入原始字节数据,第604页 ReadRawBytes—读取原始字节数据,第319页 UnpackRawBytes—从原始字节数据中将数据拆包,第556页 22

1.17.ClkReset—复位一个用来计时的时钟

用途: ClkReset用来复位一个用来计时的停止监视功能的时钟。该指令在使用时钟指令之前使用,用来确保它归零。

基本范例: 该指令的基本范例说明如下。 例1 CleReset Clock1;

时钟Clock1 被复位。 项目: ClkReset Clock Clock: 数据类型:时钟 要复位的时钟的名称。 程序执行: 当时钟被复位,它被设为0。 如果时钟正在运行,它将被停止然后复位。 语法: ClkReset [ Clock ?:=‘ ] <时钟类型的变量(VAR)> ?;‘ 相关信息: 相关信息 其他时钟指令 参看 RAPID参考手册-RAPID概述,RAPID摘要部分-系统和时间 23

1.18.ClkStart—开始一个用来计时的时钟

用途: ClkStart用来开始一个用于计时的停止-监视功能的时钟。 基本范例: 该指令的基本范例说明如下。 也可参看第43页的更多范例。 例1 ClkStart Clock1

时钟Clock1 开始计时。 项目:

ClkStart Clock Clock: 数据类型:时钟 将要开始计时的时钟的名称。 程序执行: 当时钟开始计时,它将运行并且继续计秒直到它停止。当让它开始计时的程序停止的时候,时钟继续运行。但是,你想要计时的事件可能不再有效。例如,如果程序测量输入的等待时间,当程序停止的时候,输入已经被接收。在这种情况下,当程序停止的时候,程序将不能“看到”事件的发生。 当机器人电源断电的时候,只要备份电池保留包含时钟变量的程序,始终将继续运行。 如果时钟正在运行,它可以被读取、停止或者复位。 更多范例: 该指令的更多范例说明如下。 例1 VAR clock clock2;

VAR num time;

ClkReset clock2; ClkStart clock2; WaitUntil dil =1; ClkStop clock2; Time:=ClkRead(clock2);

Dil变成1的等待时间被测量。 错误处理: 如果时钟运行了4,294,967秒(49天17个小时2分钟47秒),它将超载并且系统变量ERRNO被设成ERR_OVERFLOW。 该错误可以在错误处理器中处理。 语法: ClkStart [ Clock ?:=‘ ] <时钟类型的变量(VAR)> ?;‘ 相关信息: 相关信息 其他时钟指令 描述在 RAPID参考手册-RAPID概述,RAPID摘要部分-系统和时间 24

1.19.ClkStop—停止一个用来计时的时钟

用途: ClkStop用来停止一个用于计时的停止-监视功能的时钟。 基本范例: 该指令的基本范例说明如下。 ClkStop Clock1

时钟Clock1 停止计时。 项目:

ClkStop Clock Clock: 数据类型:时钟 将要停止计时的时钟的名称。 程序执行: 当时钟停止计时,它将停止运行。 如果时钟被停止,它可以被读取、再次开始或者复位。 错误处理: 如果时钟运行了4,294,967秒(49天17个小时2分钟47秒),它将超载并且系统变量ERRNO被设成ERR_OVERFLOW。 该错误可以在错误处理器中处理。 语法: ClkStop [ Clock ?:=‘ ] <时钟类型的变量(VAR)> ?;‘ 相关信息: 相关信息 其他时钟指令 更多例子 参看 RAPID参考手册-RAPID概述,RAPID摘要部分-系统和时间 ClkStart—开始一个用来计时的时钟,第43页 25

1.20.Close—关闭一个文件或者串行通道

用途: Close用来关闭一个文件或者串行通道。 基本范例: 该指令的基本范例说明如下。 例1 Close channel2;

被channel2相关到的串行通道被关闭。 项目: Close IODevice IODevice: 数据类型:iodev 将要被关闭的文件或者串行通道的名称(相关)。 程序执行: 指定的文件或者串行通道被关闭并且在读或写之前必须重新打开。如果它已经被关闭,该指令被忽略。 语法: Close [ IODevice ?:=‘ ] ?;‘ 相关信息: 相关信息 打开一个文件或者串行通道 参看 RAPID参考手册-RAPID概述,RAPID摘要部分-通讯 26

1.21.CloseDir—关闭一个目录

用途: CloseDir用来关闭一个目录,和OpenDir达到平衡。 基本范例: 该指令的基本范例说明如下。 例1 PROC lsdir(string dirname)

VAR dir directory; VAR string filename;

OpenDir directory,dirname;

WHILE ReadDir(directory,filename) DO TPWrite filename; ENDWHILE

CloseDir directory; ENDPEOC

该例子打印出指定目录下所有文件或者子目录名称。 项目: CloseDir Dev Dev: 数据类型:dir 一个相关到OpenDir指令取得的目录的变量。 语法: CloseDir[ Dev‘:=‘ ] ‘;’ 相关信息: 相关信息 目录 制作一个目录 打开一个目录 读取一个目录 删除一个目录 删除一个文件 重新命名一个文件 参看 Dir—文件目录结构,第938页 MakeDir—创建一个新的目录,第192页 OpenDir—打开一个目录,第256页 ReadDir—在一个目录中读取下一个入口,第810页 RemoveDir—删除一个目录,第322页 RemoveFile—删除一个文件,第324页 RenameFile—重新命名一个文件,第325页 27

1.22.comment—注释

用途: comment只是用来使程序容易理解。对程序的执行没有影响。 基本范例: 该指令的基本范例说明如下。 例1 !Goto the position above pallet

MoveL p100, v500, z20, tool1;

一个注释被插入程序,使程序更容易理解。 项目: !Comment Comment: 文本字符串。 任何文本。 程序执行: 执行该指令的时候不会发生什么。 语法: (EBNF) ‘!’{<字母>} 相关信息: 相关信息 注释中允许的字母 数据或者程序声明中的注释 参看 RAPID参考手册-RAPID概述,基本特征部分-基本元素 RAPID参考手册-RAPID概述,基本特征部分-基本元素 28

1.23.Compact IF—如果满足一个条件,那么。。。(执行一个指令)

用途: 如果满足一个给定的条件,只有将执行一个单一指令的时候才使用Compact IF。 如果不同的指令将被执行,取决于给定的条件是否满足,使用IF指令。 基本范例: 该指令的基本范例说明如下: 例1 IF reg1 >5 GOTO next;

如果reg1大于5,程序继续从下一个标签执行。 例2 IF conter >10 Set do1;

如果conter >10,那么do1信号被设置。 项目: IF Condition… Condition: 数据类型:bool 指令的执行必须满足的条件。 语法: (EBNF) IF<条件表达式>(<指令> | ) ?;‘ 相关信息: 相关信息 条件(逻辑表达式) IF 带多个指令 参看 RAPID参考手册-RAPID概述,基本特性部分-表达式 IF—如果一个条件满足,那么。。。;否则。。。,第115页 29

1.24.ConfJ—在关节运动过程中控制配置

用途: ConfJ(配置关节)用来指定在关节运动过程中是否控制机器人配置。如果不控制,机器人有时候会使用与程序中不同的配置。 ConfJ \\Off时,机器人不能转变主轴配置-它将寻找和当前途径具有相同主轴配置的途径,但是它移动到轴4和轴6的最近的腕配置。 该指令只能使用在主任务中,或者在多运动系统中,使用在运动任务中。 基本范例: 该指令的基本范例说明如下。 例1 ConfJ \\Off;

MoveJ *, v1000, fine, tool1;

机器人移动到编程位置和方向。如果该位置可以用多种不同的方式到达、用多种轴配置,将选择最近的可能位置。 例2 ConfJ \\On;

MoveJ *, v1000, fine, tool1;

机器人移动到程序中的位置、方向和轴配置。如果这是不可能的,程序执行将停止。 项目: ConfJ [\\On] | [\\Off ] [\\On]: 数据类型:switch 机器人通常移动到遍编程中的轴配置。如果不能使用编程中的位置和方向,程序执行停止。 IRB5400机器人将移动到程序中的轴配置或者是接近程序中的轴配置的轴配置。如果它不能到达程序中的轴配置的话,程序的执行也不会停止。 [\\Off]: 数据类型:switch 机器人通常运动到最接近的轴配置。 程序执行: 如果选择了项目\On( 或者没有选择项目),机器人通常运动到编程的轴位置。不过不能使用程序中的位置和方向,在运动开始之前程序执行就停止。 如果选择了项目\\Off,机器人通常运动到最近接的轴配置。如果配置被错误地手动指定,或者如果执行了程序移植,这将可能和程序中的不一样。 控制配置(ConfJ \\On)是缺省值。这被自动设置:

? 冷启动时 ? 新程序被加载 ? 从头开始程序执行

语法: ConfJ [ ?\\‘ On] | [ ?\\‘ Off] ?;‘ 相关信息: 相关信息 处理不同的配置 线性运动中的机器人配置 参看 RAPID参考手册-RAPID概述,运动和I/O原理部分-机器人配置 ConfL—在线性运动过程中监视配置,第52页 30

1.25.ConfL—在线性运动过程中监视配置

用途: ConfJ(配置关节)用来指定在线性或者圆周运动过程中是否监视机器人配置。如果不监视,执行时候的配置可能和程序中的配置不一样。当模式改变为关节运动的时候,也可能导致不可预知的清扫机器人运动。 该指令只能使用在主任务中,或者在多运动系统中,使用在运动任务中。 注意!在IRB5400机器人中,无论在ConfL中怎么指定,监视总是关闭的。 基本范例: 该指令的基本范例说明如下。 例1 ConfL \\On;

MoveL *, v1000, fine, tool1;

当从当前位置不能到达程序中的配置时,程序执行停止。 例2 SingArea \\Wrist;

ConfL \\On;

MoveL *, v1000, fine, tool1;

机器人运动到编程位置、方向和腕部轴配置。如果不能到达,程序执行停止。 例3 ConfL \\Off;

MoveJ *, v1000, fine, tool1;

机器人移动到程序中的位置和方向,但是到达最近的可能轴配置,这可能和程序中的轴位置不同。 项目: ConfL [\\On] | [\\Off ] [\\On]: 数据类型:switch 机器人配置被监视。 [\\Off]: 数据类型:switch 机器人配置不被监视。 程序执行: 在线性或者圆周运动过程中,机器人通常运动到拥有最接近的可能轴配置的程序中的位置和方向。如果选择了项目\On( 或者没有选择项目),如果有从当前位置不能到达程序中的位置的风险,程序执行立即停止。然而,虽然腕部轴可能继续朝错误的配置运动,仍旧可以重启程序。在停止点,机器人将检查所有轴的配置是否都到达,不仅仅是腕部轴。 如果也使用了SingArea \\Wrist,机器人总是运动到程序中的腕部轴配置,并且在停止点将检查剩余的轴配置。 如果选择了项目\\Off,就没有监视。 对于ConfL \\On 和\\Off,避免问题的一个简单的规则就是插入中间点,使点之间的每一个轴的运动小于90度。更精确地说,任意一对轴(1+4),(1+6),(3+4),(3+6)的运动的和不应该超过180度。 如果在一个大运动中使用了ConfL \\Off,带错误50050位置不能到达或者错误50080位置不匹配的程序,可能导致直接或者延迟停止。在带有ConfL \\Off的程序中,推荐运动到带“ConfJ \\On+MoveJ”或者“ConfL \\On+SingArea\\Wrist +MoveL”作为为不同的程序部分的开始点的已知配置点。 监视被激活是缺省值。这被自动设置:

? 冷启动时 ? 新程序被加载 ? 从头开始程序执行

语法:

31

ConfL

[ ?\\‘ On] | [ ?\\‘ Off] ?;‘

相关信息: 相关信息 处理不同的配置 关节运动中的机器人配置 在单一点周围定义插补 参看 RAPID参考手册-RAPID概述,运动和I/O原理部分-机器人配置 ConfJ—在关节运动过程中控制配置,第52页 SingArea—在单一点周围定义插补,第377页

32

1.26,CONNECT—把中断连接到陷阱程序

用途: CONNECT用来找到中断的特性,并且把它连接到陷阱程序。中断通过给中断事件排序和指定他的特性定义。这样,当事件发生的时候,陷阱程序自动执行。 基本范例: 该指令的基本范例说明如下: 例1 VAR intnum feeder_low;

CONNECT feeder_low WITH feeder_empty; IsignalDI dil, 1, feeder_low;

创建了一个中断特性,该特性连接到陷阱程序feeder_empty。当输入dil变高的时候将有一个中断。用另一句话说,当信号变高的时候,feeder_empty陷阱程序将被执行。 项目: CONNECT Interrupt WITH Trap routine Interrupt: 数据类型:中断号码 将被中断特性赋值的变量。它必须在一个程序中(routine data)声明。 Trap routine: 标示符。 陷阱程序的名称。 程序执行: 变量被赋予一个中断特性,当排序或者废除中断的时候应当使用该特性。该特性也连接到指定的陷阱程序。 注意! 当程序指针设定到任务的主程序的时候任务中的所有中断取消,必须重新连接。电源失败或者热启动不会影响中断。 限制: 一个中断(中断特性)不能连接到多个中断程序。但是,不同的中断可以连接到相同的陷阱程序。 当一个中断被连接到一个陷阱程序后,不能重新连接或者转换到另一个程序;它首先必须使用Idelete指令删除。 当程序执行停止的时候到来的中断或者没有处理的中断将被忽略。当在程序中步进的时候,也不考虑中断。 错误处理: 如果中断变量已经连接到陷阱程序,系统变量ERRNO被设成ERR_ALRDYCNT。 如果中断变量不是一个相关到的变量,系统变量ERRNO被设成ERR_CNTNOTVAR。 如果没有更多可用的中断号,系统变量ERRNO被设成ERR_INOMAX。 这些错误可以在错误处理器中进行处理。 语法: (EBNF) CONNECT WITH ?;‘ ::= | | ::= 相关信息: 相关信息

参看 33

中断摘要 中断管理得更多信息 中断的数据类型 取消一个中断 RAPID参考手册—RAPID概述,RAPID摘要—中断部分 RAPID参考手册—RAPID概述,基本特征—中断部分 第955页intnum—中断特性 第109页IDelete—取消一个中断 34

1.27.CopyFile—复制一个文件

用途: CopyFile用来对一个已存文件进行复制。 基本范例: 指令CopyFile的基本范例说明如下: 例1 CopyFile “HOME:/myfile”,“HOME:/yourfile”;

文件myfile复制到yourfile。这两个文件是相同的。 CopyFile “HOME:/myfile”,“HOME:/mydir/yourfile”; 文件myfile复制到mydir中的yourfile。 项目: CopyFile OldPath NewPath OldPath: 数据类型:字符串。

复制文件源的完整路径。 NewPath: 数据类型:字符串。 文件要复制到的位置的完整路径。 程序执行: 指定的OldPath中的文件复制到NewPath中指定的文件。 错误处理: 如果NewPath中指定的文件已经存在,系统变量ERRNO设为ERR_FILEEXIST。该错误可以在错误处理器中进行处理。 语法: CopyFile [OldPath‘ :=‘ ] < 字符串表达式(IN)> ?,‘ [NewPath‘ :=‘ ] <字符串表达式(IN)>‘;‘ 相关信息: 相关信息 制作一个路径 删除一个路径 重命名一个文件 删除一个文件 检查文件类型 查看文件大小 检查文件系统大小 参看 第192页MakeDir—创建一个新路径 第322页RemoveDir—删除一个路径 第325页RenameFile—重命名一个文件 第324页RemoveFile—删除一个文件 第745页IsFile—检查一个文件的类型 第718页FileSize—重新得到一个文件的大小 第724页FSSize—重新获得一个文件系统的大小 35

1.28.CopyRawBytes—复制rawbytes数据的内容

用途: CopyRawBytes用来从原始数据变量中复制所有或者部分内容到另一个中。 基本范例: 指令的基本范例说明如下: 例1 VAR rawbytes from_raw_data;

VAR rawbytes to_raw_data; VAR num integer :=8 VAR num float :=13.4;

ClearRawBytes from_raw_data;

PackRawBytes integer, from_raw_data, 1 \\IntX := DINT;

PackRawBytes float, from_raw_data, (RawBytesLen(from_raw_data) +1) \\Float4; CopyRawBytes from_raw_data, 1, to_raw_data, 3, RawBytesLen(from_raw_data) ;

在本例中,rawbytes类型的from_raw_data首先被清除,即所有字节设为0。然后integer的数值放置在前四个字节,后四个字节中放置float的数值。 在用数据填充from_raw_data后,8个字节的内容被复制到to_raw_data,从位置3开始。 项目: CopyRawBytes FromRawData FromIndex ToRawData ToIndex [ \\NoOfBytes ] FromRawData: 数据类型:rawdata FromRawData是一个数据容器,rawbytes数据从这里复制。 FromIndex: 数据类型:num FromIndex是指FromRawData中的一个位置,要复制的数据从这里开始,索引从1开始。 ToRawData: 数据类型:rawbytes ToRawData是一个数据容器,rawbytes数据被复制到这里。 ToIndex: 数据类型:num ToIndex是ToRawData中的中的一个位置,要复制的数据放置在这里。每一个东西都复制到结尾。索引从1开始。

[\\NoOfBytes]: 数据类型:num 用\\NoOfBytes指定的数据是从FromRawData复制到ToRawData的字节数。 如果\\NoOfBytes没有指定,FromRawData中的所有从FromIndex到FromRawData的有效字节的当前长度的末尾都被复制。 程序执行: 在程序执行过程中,数据从一个rawbytes变量复制到另一个变量。 变量ToRawData中有效字节的当前长度被设为:

? ToIndex+复制的字节数-1

? 如果完整的复制操作在原有变量ToRawData中有效字节的当前长度范围内,变量ToRawData中有效字

节的当前长度不改变。

限制:

36

CopyRawBytes不能用来从一个rawbytes变量中的一些数据复制到同一个rawbytes变量的其它部分。 语法: CopyRawBytes [FromRawData ?:=‘ ] < rawbytes类型的变量(VAR)>‘ , ? [FromIndex‘ :=‘ ] < num类型的表达式(IN)> ?,‘ [ToRawData‘ :=‘ ] < rawbytes类型的变量(VAR)>‘ , ? [ToIndex‘ :=‘ ] < num类型的表达式(IN)> [?\\‘NoOfBytes‘ :=‘ < num类型的表达式(IN)> ]‘;‘ 相关信息: 相关信息 Rawbytes数据 获得rawbytes数据的长度 清除rawbytes数据的内容 把设备网的标题打包进rawbytes数据 把数据打包进rawbytes数据 写rawbytes数据 读rawbytes数据 从rawbytes数据解压数据 参看 第994页rawbytes—原始数据 第806页RawBytesLen—获得rawbytes数据的长度 第40页ClearRawBytes—清除rawbytes数据的内容 第258页PackDNHeader—把设备网标题打包进rawbytes数据 第261页PackRawBytes—把数据打包进rawbytes数据 第604页WriteRawBytes—写rawbytes数据 第319页ReadRawBytes—读rawbytes数据 第556页UnpackRawBytes—从rawbytes数据中解压数据 37

1.29.CorrClear—删除所有修正发生器

描述: CorrClear用来删除所有连接的修正发生器。该指令用来删除所有之前由修正发生器提供的偏移。 基本范例: 该指令的基本范例说明如下: 例1 CorrClear;

该指令删除所有连接的修正发生器。 注意:

确保所有修正发生器(已连接的)在程序开始的时候都被删除的一个简单方法是在START事件routine中运行CorrClear。参看系统参数—标题:控制器 语法: CorrClear ‘;’ 相关信息: 相关信息 连接到修正发生器 从修正发生器断开连接 写修正发生器 读取当前总偏移量 修正描述符 参看 第61页CorrCon—连接到一个修正发生器 第66页CorrDiscon—从修正发生器断开连接 第67页CorrWrite写修正发生器 第685页CorrRead—读取当前总偏移量 第934页corrdescr—修正发生器描述符 38

1.30.CorrCon—连接到一个修正发生器

用途: CorrCon用来连接到一个修正发生器。 基本范例: 该指令的基本范例说明如下: 也可参照第61页更多范例。 例1 VAR corrdescr id;

CorrCon id;

参考的修正发生器符合变脸id的预定。 项目: CorrCon Descr Descr: 数据类型:corrdescr 修正发生器的描述符。 更多范例: 该指令得更多范例说明如下: 路径坐标系统: 所有路径修正(路径上的偏移量)都被加入路径坐标系统。路径坐标系统按照以下说明定义: P=路径坐标系统 T=工具坐标系统

? 路径坐标X轴作为路径的正切值被给出。

? 路径坐标Y轴由工具坐标轴Z和路径坐标轴X交叉产生。 ? 路径坐标轴Z由路径坐标轴X和路径坐标轴Y交叉产生。 应用范例: 用路径修正的一个应用实例是机器人拿着装有两个传感器的工具,监测到到工作对象的垂直和水平距离。下图说明了路径修正装置。

程序范例: CONST num TARGET_DIST := 5; CONST num SCALE_FACTOR := 0.5; VAR intnum intno1; VAR corrdesc hori_id; VAR corrdesc vert_id; VAR pos total_offset; VAR signalai hori_sig; VAR signalai vert_sig; VAR pos write_offset; PROC PathRoutine( ) ! 连接到修正发生器寻找水平和垂直方向。 CorrCon hori_id; CorrCon Vert_id;

39

TRAP ReadSensors ! 计算水平修正值并进行修正。 Write_offset.x := 0; Write_offset.y := (hori_sig – TARGET_DIST) *SCALE_FACTOR; Write_offset.z :=0; CorrWrite hori_id, write_offset; ! 计算垂直修正值并进行修正。 Write_offset.x := 0; Write_offset.y := 0; Write_offset.z := (vert_sig – TARGET_DIST) *SCALE_FACTOR; CorrWrite vert_id, write_offset; ! 再次设定中断。 IDelete intno1; CONNECT intno1 WITH R诶的Sensors; ITimer\\singel 0.2, intno1; ENDTRAP 程序解释: 两个修正发生器用指令CorrCon连接。每一个修正发生器用一个独立的corrdesc类型的描述符(hori_id和vert_id)参考。 两个传感器每一个都用一个修正发生器。 设置了一个计时器中断以5赫兹的频率来调用陷阱程序ReadSensors。路径修正需要的偏移量在陷阱程序中计算并且通过指令CorrWrite被写到相应的修正发生器(由hori_id和vert_id参考)。所有的修正将会立即对路径起影响。当使用路径修正器的时候,MoveL指令必须使用可选项目Corr来编程。否则,将不会执行修正。 当第一个MoveL指令准备好的时候,用CorrRead功能来读取由所有连接的修正发生器提供的所有的修正的总数(路径修正总数)。总的垂直路径的修正的结果用TPWrite指令写到示教器上。 CorrDiscon将断开垂直修正(由描述符vert_id参考)的修正发生器。由该修正发生器添加的所有修正将从

40

!设定一个5赫兹的计时器中断。陷阱程序将读取传感器数值并计算路径修正值。

CONNECT intno1 WITH ReadSensors; Itimer\\singel 0.2, intno1

! 计时器跟踪开始的位置。

MoveJ P10,v100,z10,tool1; !用垂直和水平方向运行MoveL。 MoveL p20,v100,z10,tool1\\Corr;

! 读取所有修正发生器增加的总的修正值。 Total_offset := CorrRead( );

! 在示教器上写出垂直修正的总数。 TPWrite “垂直修正的总数是:”\\Num:=total_offset.z;

! 断开垂直方向上修正发生器的连接。谁拼修正将不受影响。 CorrDiscon vert_id;

! 只在水平中断方向上运行MoveL。 MoveL p30,v100,z10,tool1 \\Corr; ! 删除所有突出连接的修正发生器。

!在这种情况下,仅存的修正发生器就是水平方向的修正发生器。 CorrClear; !删除计时器中断。 IDelete intno1; ENDPROC

总路径修正中删除。由水平修正的修正发生器添加的修正仍旧保留。 最后,CorrClear功能将删除所有保留的连接修正发生器和之前累加的修正。在这种情况下,只有水平修正的修正发生器将被删除。计时器中断也将由Idelete指令删除。 修正发生器: 下图说明了修正发生器。

X Y z 路径坐标轴

0 0 3 垂直修正发生器,带有它自身修正的总数

0 1 0 水平路径发生器,带有它则身修正的总数

- - - 没连接的修正发生器

- - - 没连接的修正发生器

- - - 没连接的修正发生器

0 1 3 由所有连接的修正发生器完成的所有修正的总数 限制: 最多可以同时连接5个修正发生器。连接的修正发生器控制器重启后不能幸存。 语法: CorrCon [ Descr ? :=‘ ] < corrdiscr类型的变量(VAR)> ?;‘ 相关信息: 相关信息 断开修正发生器 写入修正发生器 读取当前总偏移量 删除所有修正发生器 修正发生器描述符 参看 第66页CorrDiscon—断开修正发生器 第67页CorrWrite—写入修正发生器 第685页CorrRead—读取当前总偏移量 第60页CorrClear—删除所有修正发生器 第934页corrdescr—修正发生器描述符 41

1.31.CorrDiscon-断开修正发生器 1.32.CorrWrite-向修正发生器写数据 1.33.DeactUnit-解除一个机械单元 1.34.Decr-(让变量或恒量的数值)减1 1.35.1.36.1.37.1.38.1.39.1.40.1.41.1.42.1.43.1.44.1.45.1.46.1.47.

DitherAct-激活一个软件伺服的抖动 DitherDeact-解除一个软件伺服的抖动 DropSensor-丢弃传感器上的对象

DropWObject-丢弃conveyor上的工作对象 EoffsOff-解除一个外部轴的偏移 EoffsOn-激活一个外部轴的偏移

EoffsSet-用一个已知的数值激活一个外部轴的偏移 EraseModule-擦除一个程序模块 ErrLog-写一个错误信息

ErrRaise-写一个警告并且调用一个错误处理句柄 ErrWrite-写一个错误信息 EXIT-终止程序执行

ExitCycle-跳出当前循环并执行下一个指令

42

1.48.FOR-重复给定数量的次数 1.49.GetDataVal-获得数据对象的数值 1.50.GetSysData-获得系统数据

1.51.GetTrapData-获得当前TRAP的中断数据 1.52.1.53.1.54.1.55.1.56.1.57.1.58.1.59.1.60.1.61.1.62.1.63.1.64.

GOTO-执行一个新指令

GripLoad-定义机器人的有效载荷

HollowWristReset-复位IRB5402和IRB5403的凹形腕部Idelete-取消一个中断 Idisable-废除一个中断 Ienable-使能中断

Ierror-定制一个错误处理的中断

IF-如果满足一个条件,那么。。。;否则。。。。。 Incr-(用来给一个数字型的变量和恒量)加1 IndAMove-独立绝对位置移动 IndCMove-独立连续运动 IndDMove-独立相对位置运动 IndReset-独立复位

43

1.65.IndRMove-独立相关位置移动

1.66.InvertDO-改变数字输出信号的数值(0->1,1->0) 1.67.IOBusState-获得I/O总线的状态 1.68.IODisable-废除I/O单元 1.69.1.70.1.71.1.72.1.73.1.74.1.75.1.76.1.77.1.78.1.79.1.80.1.81.

IOEnable-使能一个I/O单元

Ipers-恒变量的数值改变的时候发生中断 IsignalAI-从模拟输入信号发生中断 IsignalAO-从模拟输出信号发生中断 IsignalDI-从数字输入信号中定制一个中断 IsignalDO-从一个数字输出信号中发生中断 IsignalGI-从组数字输入信号中发生中断 IsignalGO-从组数字输出信号中发生中断 Isleep-解除一个中断 Itimer-定制一个定时的中断 IvarValue-定制一个可变的数值中断 Iwatch-激活一个中断 label-行名称

44

1.82.Load-在执行过程中加载一个程序模块 1.83.LoadId-加载一个工具或有效载荷的辨识符 1.84.MakeDir-创建一个新路径

1.85.ManLoadIdProc-加载IRBP机械手的辨识符 1.86.MechUnitLoad-为机械单元定义一个有效载荷 1.87.MotionSup-解除/激活运动监视 1.88.MoveAbsJ—把机器人移动到绝对轴位置

用途: MoveAbsJ(绝对关节移动)用来把机器人或者外部轴移动到一个绝对位置,该位置在轴定位中定义。 使用实例:

? 终点是一个单一点

? 对于IR6400C中的不明确的位置,例如携带超过机器人范围的工具运动。

MoveAbsJ指令中机器人的最终位置,既不受工具或者工作对象的影响,也不受激活程序更换的影响。但是机器人要用到这些数据来计算负载、TCP速度和转角点。相同的工具可以被用在相邻的运动指令中。

机器人和外部轴沿着一个非直线的路径移动到目标位置。所有轴在同一时间运动到目标位置。 该指令只能被用在主任务T_ROB1中,或者在多运动系统中的运动任务中。 基本范例: 该指令的基本范例说明如下。 也可参看第207页更多范例。 例1 MoveAbsJ p50, v1000, z50, tool2;

机器人将携带工具tool2沿着一个非线性路径到绝对轴位置p50,以速度数据v1000和zone数据z50。 例2 MoveAbsJ *, v1000\\T:=5, fine, grip3;

机器人将携带工具grip3沿着一个非线性路径到一个停止点,该停止点在指令中作为一个绝对轴位置存储(用*标示)。整个运动需要5秒钟。 项目: MoveAbsJ [\\Conc] ToJointPos [\\ID] [\\NoEOffs] Speed [\\V] | [\\T] Zone [\\Z] [\\Inpos] Tool [\\Wobj] [\\Conc]: 并发事件 数据类型:switch 当机器人正在移动的时候执行的后续指令。该项目通常不使用,但是当和外部设备通讯、不需要同步的时候可以用来缩短循环周期。 当使用项目\\Conc的时候,连续运动指令的数量限制为5。在包含StorePath-RestoPath的程序段中不允许包含项目\\Conc的运动指令。 如果该项目忽略并且ToJointPos不是一个停止点,在机器人到达程序zone之前一段时间后续指令就开始执

45

行了。 该项目不能用在多运动系统的坐标同步运动中。 ToJointPos: 到达的关节位置。 数据类型:jointtarget 机器人和外部轴的绝对目标轴位置。它被定义为一个命名的位置或者直接存储在指令中(在指令中用*标示)。 [\\ID]: 同步ID 数据类型:identno 该项目必须使用在多运动系统中,如果并列了同步运动,则不允许在其他任何情况下使用。 指定的ID号在所有协同的程序任务中必须相同。该ID号保证在routine中运动不会混乱。 [\\NoEOffs]: 没有外部偏移量 数据类型:switch 如果项目\\NoEOffs设为1,MoveAbsJ运动将不受外部轴的激活偏移量的影响。 Speed: 数据类型:speeddata 运动所用的速度数据。速度数据定义了TCP、工具再定位和外部轴的速度。 [\\V]: 速度 数据类型:num 该项目用来在指令中直接指定TCP的速度,单位mm/s,它替代在速度数据中指定的相应的速度。 [\\T]: 时间 数据类型:num 该项目用来指定机器人运动的总时间,单位秒。它替代相应的速度数据。 Zone: 数据类型:zonedata 运动的zone数据。Zone数据描述了产生的转角路径的大小。 [\\z ]: Zone 数据类型:num 该项目用来在指令中直接指定机器人TCP的位置精度。转角路径的长度用毫米给出,替代zone数据中指定的相应数据。 [\\Inpos ]: 到位 数据类型:stoppointdata(停止点数据) 改项目用来指定机器人TCP在停止点位置的收敛性判别标准。该停止点数据代替在zone参数中指定的zone。 Tool: 数据类型:tooldata 运动过程中所携带的工具。 TCP的位置和工具的负载在工具数据中定义。TCP位置用来计算运动的速度和转角路径。 [\\Wobj ]: 工作对象 数据类型:wobjdata

46

在运动过程中使用的工作对象。 如果机器人抓着工具的时候,该项目可以忽略。但是,如果机器人抓着工作对象, 也就是说工具是静止的,或者带有外部轴,那么该项目必须指定。 在有并列工具或者有并列外部轴的情况下,系统使用该数据计算运动的速度和转角路径,该数据在工作对象中定义。 程序执行: MoveAbsJ运动不会受激活的程序转移的影响,并且如果使用了可选项目\\NoEOffs,将没有外部轴的偏移。如果不使用\\NoEOffs,外部轴的目标位置将会受到激活的外部轴偏移的影响。工具按照轴角度插补移动到绝对轴目标位置。这就是说每一个轴都按照固定的速度运动,并且所有轴都在同一时间到达目标位置,这样就形成一个非线性的路径。 总的来说,TCP大约按照编程的速度运动。在TCP运动的同时,工具重新定向,并且外部轴也在运动。如果重新定向的或者外部轴的程序要求的速度不能达到,TCP的速度将被减小。 当转换到路径的下一段的时候通常会产生转角路径。如果停止点在Zone数据中指定,只有在机器人和外部轴到达合适的轴位置的时候程序才能继续执行。 更多范例: 关于如何使用该指令,更多范例说明如下: 例1 MoveAbsJ *, v2000\\V:=2200, z40 \\Z:=45, grip3;

Grip3沿着一个非线性路径运动到一个存储在指令中的一个绝对轴位置。执行的运动数据为v2000和z40。TCP的速度大小是2200mm/s,zone的大小是45mm。 例2 MoveAbsJ p5, v2000, fine \\Inpos :=inpos50, grip3;

Grip3沿着一个非线性路径运动到绝对轴位置p5。当停止点fine的50%的位置条件和50%的速度条件满足的时候,机器人认为它已经到达位置。它等待条件满足最多等2秒。参看stoppointdata类型的预定义数据inpos50。 例3 MoveAbsJ \\Conc, *, v2000, z40, grip3;

Grip3沿着一个非线性路径运动到一个存储在指令中的一个绝对轴位置。当机器人运动的时候,也执行了并发的逻辑指令。 例4 MoveAbsJ \\Conc, * \\NoEOffs, v2000, z40, grip3;

和以上的指令相同的运动,但是它不受外部轴的激活的偏移量的影响。 例5 GripLoad obj_mass;

MoveAbsJ start, v2000, z40, grip3 \\Wobj:=obj;

机器人把和固定工具grip3相关的工作对象obj沿着一个非线性路径移动到绝对轴位置start。 限制: 为了能够后台运行中包括指令MoveAbsJ,并且避免单一点和模糊区的问题,并发指令满足以下的要求是很必要的(参看下图) 下图显示了后台运行MoveAbsJ指令的一些限制。

语法: MoveAbsJ [?\\‘ Conc ?,‘ ] [ ToJointPos‘ :=‘ ] <关节目标表达式(IN)> [ ?\\‘ ID ?:=‘ ] [ ?\\‘ NoEOffs ] ?,‘ [ Speed ?:=‘ ] [ ?\\‘ V ?:=‘ ] | [ ?\\‘ T‘ :=‘ ] ?,‘ [?\\‘ Z ?:=‖ ] [ ?\\‘ Inpos‘ :=‘ ] ?,‘ [Tool ?:=‘ ] [?\\‘Wobj‘ :=‘ wobjdata类型的恒量(PRS)> ] ?;‘ 相关信息:

47

相关信息 其它定位指令 关节目标的定义 速度的定义 Zone数据的定义 停止点数据的定义 工具的定义 工作对象的定义 运动综述 并发的程序执行 参看 RAPID参考手册—RAPID概述,RAPID摘要—运动部分 第959页Jointtarget—关节位置数据 第1010页speeddata—速度数据 第1047页zonedata—zone数据 第1014页stoppointdata—停止点数据 第1031页tooldata—工具数据 第1039页wobjdata—工作对象数据 RAPID参考手册—RAPID概述,运动和I/O原理部分 RAPID参考手册—RAPID概述,运动和I/O原理—用逻辑指令同步部分 1.89.MoveC—让机器人做圆周运动

用途: 该指令用来让机器人TCP沿圆周运动到一个给定的目标点。在运动过程中,相对圆的方向通常保持不变。 该指令只能在主任务T_ROB1中使用,在多运动系统中的运动任务中使用。 基本范例: 该指令的基本范例说明如下: 也可参看第212页更多范例。 例1 Move p1, p2, v500, z30, tool2; Tool2的TCP圆周运动到p2,速度数据位v500, zone数据为z30.圆由开始点、中间点p1和目标点p2确定。 例2 MoveC *, *, v500 \\T:=5, fine, grip3;

Grip3的TCP沿圆周运动到存储在指令中的fine点(第二个*标记)。中间点也存储在指令中(第一个*标记)。整个运动需要5秒钟。 例3 MoveL p1, v500, fine, tool1; MoveC p2, p3, v500, z20, tool1; MoveC p4, p1, v500, fine, tool1; 下图说明了怎么用两个MoveC指令画一个完整的圆。

P1 P4 P2 P3

项目: MoveC [\\Conc] CirPoint ToPoint [\\ID] Speed [\\V] | [\\T] Zone [\\z] [\\Inpos] Tool [\\Wobj] [\\Corr] [ \\Conc]: 并发事件 数据类型:switch

当机器人运动的同时,后续的指令开始执行。该项目通常不使用,但是当使用飞点(flyby points)时,可

48

以用来避免由CPU过载引起的不想要的停止。当使用高速度并且编程点相距较近时这是很有用的。例如,当和外部设备通讯并且外部设备和机器人通讯不要求同步的时候,这个项目也很有用。

使用项目\\Conc的时候,连续的运动指令的数量限制为5个。在包括StorePath—RestorePath的程序段中不允许使用带有\\Conc项目的运动指令。 如果不使用该项目,并且ToPoint不是停止点,在机器人到达程序zone之前一段时间后续指令就开始执行了。在多运动系统中的坐标同步运动中不能使用该项目。 CirPoint: 数据类型:robtarget 机器人的圆轴上的中间点。这是圆轴上处于起点和终点之间的点。为了获得最好的精度,最好选择起点和终点的中间位置附近的点。如果太接近起点或者终点,机器人将会报警。中间点定义为一个命名的位置或者直接存储在指令中(在指令中用*标记)。不使用外部轴的位置。 ToPoint: 数据类型:robtarget 机器人和外部轴的目标点。定义为一个命名的位置或者直接存储在指令中(在指令中用*标记)。 [ \\ID ]: 同步ID 数据类型:identno 该项目必须使用在多运动系统中,如果并列了同步运动,则不允许在其他任何情况下使用。 指定的ID号在所有协同的程序任务中必须相同。该ID号保证在routine中运动不会混乱。 如果并列了同步运动,不允许在其他任何情况下使用。 Speed: 数据类型:speeddata 应用到运动中的速度数据。速度数据定义TCP、工具再定位和外部轴的速度。 [ \\V]: 速度 数据类型:num 该项目用来在指令中直接指定TCP的速度,单位mm/s。它代替速度数据中指定的相应的速度。 [\\T]: 时间 数据类型:num 该项目用来指定机器人和外部轴运动的总时间,单位秒。它代替相应的速度数据。 Zone: 数据类型:zonedata 运动的zone数据。它描述产生的转角路径的大小。 [ \\Z]: Zone 数据类型:num 该项目用来在指令中直接指定机器人TCP的位置精度。转角路径的长度以毫米为单位给出,它代替zone数据中指定的zone。 [\\Inpos ]: 到位 数据类型:stoppointdata(停止点数据) 改项目用来指定机器人TCP在停止点位置的收敛性判别标准。该停止点数据代替在zone参数中指定的zone。 Tool: 数据类型:tooldata 运动过程中所使用的工具。TCP是运动到指定目标的点。

49

[\\Wobj ]: 工作对象 数据类型:wobjdata 机器人在指令中定位的相关到的工作对象。 该项目可以忽略,如果忽略了,定位相关到世界坐标系。在另一方面,如果使用了静态TCP或者并列外部轴,为了执行相关到工作对象的圆周,该项目必须被指定。 [ \\Corr ]: 改正 数据类型:switch 如果使用该项目的话,通过CorrWrite指令写到改正入口的改正数据将被添加到路径和目标位置。 程序执行: 机器人和外部单元以下说明移动到目标位置:

? 工具的TCP按照程序中的定常速度作圆周运动。

? 工具按照定常速度重新定向,从开始位置的方向到目标点的方向。

? 重新定向相对于圆周路径执行。因此如果开始点和目标点的方向相对于路径是相同的,在移动过程中

相对方向保持不变(参看下图)。 下图说明了圆周运动过程中的工具方向。

圆周点的方向没有到达,它只是用来区别重新定向中两个可能的方向。沿着路径重新定向的精度只取决于开始点和目标点的方向。

圆周运动过程中的工具方向的不同模式在指令CirPathMode中有描述。

非并列的外部轴以定常速度执行,目的是和机器人轴同时到达目标点。圆周点中的位置没有用到。 如果重新定向或者外部轴不能达到程序中的速度,TCP得速度将被减小。

当运动转换到路径中的下一段的时候通常会产生转角路径。如果停止点在zone数据中指定,在机器人和外部轴到达合适位置的时候,程序才能继续执行。 更多范例: 如何使用该指令得更多范例说明如下: 例1 MoveC *, *, v500 \\V:=550, z40 \\Z:=45, grip3;

Grip3的TCP圆周运动到存储在指令中的位置。运动中把数据设定到v500和z40执行;TCP的速度是550mm/s,zone的大小是45mm。 例2 MoveC p5, p6, v2000, fine \\Inpos := inpos50, grip3;

Grip3的TCP圆周运动到停止点p6。当停止点fine的50%的位置条件和50%的速度条件满足的时候,机器人认为它到达该点。它等待条件满足最多等两秒。参看stoppointdata数据类型的预定义数据inpos50。 例3 MoveC \\Conc, *, *, v500, z40, grip3;

Grip3的TCP圆周运动到指令中存储的位置。圆周点也存储在指令中。当机器人移动的时候,执行后续逻辑指令。 例4 MoveC cir1, p15, v500, z40, grip3 \\Wobj :=fixture;

Grip3的TCP经过圆周点cir1圆周运动到位置p15。这些位置在fixture的对象并列系统中指定。 限制: 对于cirPoint和Topoint如何放置有一些限制,如下图描述:

? 起点和ToPoint之间的最小距离是0.1毫米。 ? 起点和CirPoint之间的最小距离是0.1毫米。

? 从起点到CirPoint和ToPoint之间的最小角度是1度。

在接近这些限制的时候,精度将会很差,即如果圆的起点和ToPoint相距较近,圆倾斜引起的缺陷可能远大于编程点所使用的精度。

确保机器人在程序执行过程中可以到达Circle Point(圆周点),必要的话把圆再分段。

50