2.2 动作指令
2.2.1 关节插补
(1)功能
Mov(Move)——从“起点(当前点)”向“终点”做关节插补运行。以各轴等量旋转的角度实现插补运行简称为“关节插补”(插补就是各轴联动运行)。
(2)指令格式
Mov□<终点>□[,<近点>][轨迹类型<常数1>,<常数2>][<附随语句>]
(3)例句
Mov(Plt 1,10),100 Wth M_Out(17)= 1
说明:MOV语句是关节插补。从起点到终点,各轴等量旋转实现插补运行。其运行轨迹因此无法准确描述。
①“终点”指目标点。
②“近点”指接近“终点”的一个点;在实际工作中,往往需要快进到终点的附近,再运动到终点。“近点”在“终点”的Z轴方向位置。根据符号确定是上方或下方。使用近点设置,是一种快速定位的方法。
③“类型常数”用于设置运行轨迹。
常数1=1,绕行;常数1=0,捷径运行。
绕行是指按示教轨迹,可能大于180°轨迹运行。捷径指按最短轨迹,即小于180°轨迹运行。
④附随语句 Wth、IFWITH,指在执行本指令时,同时执行其他的指令。
(4)样例程序
Mov P1'——移动到P1点 Mov P1+ P2'——移动到P1+ P2的位置点 Mov P1* P2'——移动到P1* P2位置点 Mov P1,- 50'——移动到P1点上方50mm的位置点 Mov P1 Wth M_Out(17)= 1'——向P1点移动同时指令输出信号(17)= ON Mov P1 WthIf M_In(20)= 1,Skip'——向P1移动的同时,如果输入信号(20)= ON,就跳到下一行 Mov P1 Type 1,0'——指定运行轨迹类型为"捷径型"
图2-3所示的移动路径其程序如下:
图2-3 程序及移动路径
1 Mov P1'——移动到P1点 2 Mov P2,- 50'——移动到P2点上方50mm位置点即近点 3 Mov P2'——移动到P2点 4 Mov P3,- 100,Wth M_Out(17)= 1'——移动到P3点上方100mm位置点,同时指令输出信号(17)= ON 5 Mov P3'——移动到P3点 6 Mov P3□- 100'——移动到P3点上方100mm位置点 7 End'
注意
近点位置以TOOL坐标系的Z轴方向确定。
2.2.2 直线插补
(1)功能
本指令为直线插补指令,从起点向终点做插补运行。运行轨迹为“直线”。
(2)指令格式1
Mvs□<终点>□,<近点距离>,[<轨迹类型常数1>,<插补类型常数2>][<附随语句>]
(3)指令格式2
Mvs□<离开距离>□[<轨迹类型常数1>,<插补类型常数2>][<附随语句>]
(4)对指令格式的说明
①<终点> 目标位置点。
②<近点距离> 以TOOL坐标系的Z轴为基准,到“终点”的距离(实际是一个“接近点”),往往用做快进,工进的分界点。
③<轨迹类型常数1> 常数1=1,绕行;常数1=0,捷径运行。
④插补类型 常数=0,关节插补;常数=1,直角插补;常数=2,通过特异点。
⑤<离开距离> 在指令格式2中的<离开距离>是以TOOL坐标系的Z轴为基准,离开“终点”的距离。这是一个便捷指令。
如图2-4所示。
图2-4 Mvs指令的移动轨迹
(5)指令例句1
向终点做直线运动。
1 Mvs P1
(6)指令例句2
向“接近点”做直线运动,实际到达“接近点”,同时指令输出信号(17)=ON。
1 Mvs P1,- 100.0 Wth M_Out(17)= 1
(7)指令例句3
向终点做直线运动(终点=P4+P5,“终点”经过加运算),实际到达“接近点”,同时如果输入信号(18)=ON,则指令输出信号(20)=ON。
1 Mvs P4+ P5,50.0 WthIf M_In(18)= 1,M_Out(20)= 1
(8)指令例句4
从当前点沿TOOL坐标系Z轴方向移动100mm。
Mvs,- 100
参见图2-4。
2.2.3 Mvc(Move C)——三维真圆插补指令
(1)功能
本指令的运动轨迹是一个完整的真圆,需要指定起点和圆弧中的两个点。运动轨迹如图2-5所示。
图2-5 Mvc——三维真圆插补指令的运行轨迹
(2)指令格式
Mvc□<起点>,<通过点1>,<通过点2>□附随语句
(3)术语
①< 起点 >,< 通过点1 >,< 通过点2>——是圆弧上的3个点。
②<起点>——真圆的“起点”和“终点”。
(4)运动轨迹
从“当前点”开始到“P1”点,是直线轨迹。真圆运动轨迹为<P1>—<P2>—<P3>—<P1>。
(5)指令例句
1 Mvc P1,P2,P3'——真圆插补 2 Mvc P1,J2,P3'——真圆插补 3 Mvc P1,P2,P3 Wth M_Out(17)= 1'——真圆插补同时输出信号(17)= ON 4 Mvc P3,(Plt 1,5),P4 WthIf M_In(20)= 1,M_Out(21)= 1'——真圆插补同时如果输入信号(20)= 1,则输出信号(21)= ON
(6)说明
①本指令的运动轨迹由指定的3个点构成完整的真圆。
②圆弧插补的“形位”为起点“形位”。通过其余2点的“形位”不计。
③从“当前点”开始到“P1”点,是直线插补轨迹。
2.2.4 Cnt(Continuous)——连续轨迹运行
(1)功能
连续轨迹运行是指在运行通过各位置点时,不做每一点的加减速运行,而是以一条连续的轨迹通过各点。如图2-6所示。
图2-6 连续轨迹运行时的运行轨迹和速度曲线
(2)指令格式
Cnt□<1/0>[,<数值1>][,<数值2>]
说明:
<1/0>Cnt 1——连续轨迹运行。
Cnt 0——连续轨迹运行无效。
<数值1>——过渡圆弧尺寸1。
<数值2>——过渡圆弧尺寸2。
在连续轨迹运行,通过“某一位置点”时,其轨迹不实际通过位置点,而是一过渡圆弧,这过渡圆弧轨迹由指定的数值构成,如图2-7所示。
图2-7 连续运行轨迹及过渡尺寸
(3)程序样例
1 Cnt 0'——连续轨迹运行无效 2 Mvs P1'——移动到P1点 3 Cnt 1'——连续轨迹运行有效 4 Mvs P2'——移动到P2点 5 Cnt 1,100,200'——指定过渡圆弧数据100mm/200mm 6 Mvs P3'——移动到P3点 7 Cnt 1,300'——指定过渡圆弧数据300mm/300mm 8 Mov P4'——移动到P4点 9 Cnt 0'——连续轨迹运行无效 10 Mov P5'——移动到P5点
(4)说明
①从Cnt1到Cnt0的区间为连续轨迹运行有效区间。
②系统初始值为:Cnt0(连续轨迹运行无效)。
③如果省略“数值1”“数值2”的设置,其过渡圆弧轨迹如图2-7中虚线所示,圆弧起始点为“减速开始点”。圆弧结束点为“加速结束点”。
2.2.5 加减速时间与速度控制
(1)加减速时间与速度控制相关指令
各机器人的最大速度由其技术规范确定。参见1.2.1节。以下指令除Spd外均为“速度倍率”指令。
①Accel——加减速度倍率指令(%)。设置加减速度的百分数。
②Ovrd——速度倍率指令(%)。设置全部轴的速度百分数。
③JOvrd——关节运行速度的倍率指令(%)。
④Spd——抓手运行速度(mm/s)指令。
⑤Oadl——选择最佳加减速模式有效无效。
(2)指令样例
Accel'——加减速度倍率为100% Accel,60,80'——加速度倍率= 60% ,减速度倍率= 80% Ovrd 50'——运行速度倍率= 50% JOvrd 70'——关节插补速度倍率= 70% Spd 30'——设置抓手基准点速度30mm/s Oadl ON.'——最佳加减速模式有效
图2-8表示了程序样例的动作轨迹及速度倍率。
图2-8 动作轨迹及速度倍率
(3)程序样例(参见图2-8)
1 Ovrd 100'——设置速度倍率= 100% 2 Mvs P1' 3 Mvs P2,- 50' 4 Ovrd 50'——设置速度倍率= 50% 5 Mvs P2' 6 Spd 120'——设置抓手基准点速度= 120mm/s,因倍率= 50% ,所以实际速度= 60mm/s 7 Ovrd 100'——设置速度倍率= 100% 8 Accel 70,70'——设置加减速度倍率= 70% 9 Mvs P3' 10 Spd M_NSpd'——设置抓手基准点速度= 初始值 11 JOvrd 70'——设置关节插补速度倍率= 70% 12 Accel'——设置加减速度倍率= 100% 13 Mvs □- 50' 14 Mvs P1' 15 End
2.2.6 Fine定位精度
(1)功能
定位精度——定位精度用脉冲数表示,即指令脉冲与反馈脉冲的差值。脉冲数越小,定位精度越高。
(2)指令格式
Fine □<脉冲数>,<轴号>
(3)术语说明
<脉冲数>——表示定位精度。用常数或变量设置。
<轴号>——设置对应的运动轴。
(4)程序样例
1 Fine 300'——设置定位精度为300脉冲。全轴通用 2 Mov P1 3 Fine 100,2'——设置第2轴定位精度为100脉冲 4 Mov P2 5 Fine 0,5'——定位精度设置无效 6 Mov P3 7 Fine 100'——定位精度设置为100脉冲 8 Mov P4
2.2.7 Prec高精度轨迹控制
(1)功能
高精度控制是指启用机器人高精度运行轨迹的功能。
(2)指令格式
Prec□ON——高精度轨迹运行有效。
Prec□OFF——高精度轨迹运行无效。
(3)程序样例
本程序对应的运动轨迹如图2-9所示。
图2-9 高精度运行轨迹
1 Mov P1,- 50' 2 Ovrd 50' 3 Mvs P1' 4 Prec,On'——高精度轨迹运行有效 5 Mvs P2'——从P1到P2以高精度轨迹运行 6 Mvs P3'——从P2到P3以高精度轨迹运行 7 Mvs P4'——从P3到P4以高精度轨迹运行 8 Mvs P1'——从P4到P1以高精度轨迹运行 9 Prec Off'——关闭高精度轨迹运行功能 10 Mvs P1,- 50' 11 End
2.2.8 抓手TOOL控制
(1)功能
抓手控制指令实际上是控制抓手的开启、闭合指令(必须在参数中设置输出信号控制抓手。通过指令相关的输出信号ON/OFF也可以达到相同效果)。如图2-10所示。
图2-10 抓手控制
(2)指令格式
HOpen打开抓手。
HClose关闭抓手。
Tool设置TOOL坐标系。
(3)指令样例
HOpen 1'——打开抓手1
HOpen 2'——打开抓手2
HClose 1'——关闭抓手1
HClose 2'——关闭抓手2
Tool(0,0,9 5,0,0,0)……设置新的TOOL坐标系
(4)程序样例
本程序对应的运动轨迹如图2-10所示。
1 Tool(0,0,95,0,0,0)'——设置新的TOOL坐标系原点。距离机械法兰面 2 Mvs P1,- 50 3 Ovrd 50' 4 Mvs P1' 5 Dly 0.5' 6 HClose 1'——抓手1闭合 7 Dly 0.5' 8 Ovrd 100' 9 Mvs,- 50' 10 Mvs P2,- 50' 11 Ovrd 50' 12 Mvs P2' 13 Dly 0.5' 14 HOpen 1'——抓手1张开 15 Dly 0.5' 16 Ovrd 100' 17 Mvs,- 50' 18 End
2.2.9 PALLET(码垛)指令
(1)功能
PALLET指令也翻译为“托盘指令”“码垛指令”,实际上是一个计算矩阵方格中各“点位中心”(位置)的指令,该指令需要设置“矩阵方格”有几行几列、起点终点、对角点位置、计数方向。因该指令通常用于码垛动作,所以也就被称为“码垛指令”。托盘的定义及类型见图2-11、图2-12。
图2-11 托盘的定义及类型(一)
图2-12 托盘的定义及类型(二)
(2)指令格式
Def □ Plt □ <托盘号> □ <起点> □ <终点A> □ <终点B> □[<对角点>]□ <列数A> □ <行数B> □ <托盘类型>
①Def Plt定义“托盘结构”指令。
②Plt指定托盘中的某一点。
③托盘号 系统可设置8个托盘。本数据设置第几号托盘。
④起点/终点/对角点 如图2-11所示。用“位置点”设置。
⑤<列数A> 起点与终点A之间列数。
⑥<行数B> 起点与终点B之间行数。
⑦<托盘类型> 设置托盘中“各位置点”分布类型。
1=Z字型;2=顺排型;3=圆弧型;11=Z字型;12=顺排型;13=圆弧型。
(3)指令样例1
1 Def Plt 1,P1,P2,P3,□,3,4,1'——3点型托盘定义指令 2 Def Plt 1,P1,P2,P3,P4,3,4,1'——4点型托盘定义指令
3点型托盘定义指令——指令中只给出起点、终点A、终点B;
4点型托盘定义指令——指令中给出起点、终点A、终点B、对角点。
(4)指令样例2
①Def Plt 1,P1,P2,P3,P4,4,3,1'——定义1号托盘。4点定义。4列×3行。Z字型格式
②Def Plt 2,P1,P2,P3,,8,5,2'——定义2号托盘。3点定义。8列×5行。顺排型格式(注意3点型指令在书写时在终点B后有两个“逗号”)
③Def Plt 3,P1,P2,P3,,5,1,3'——定义3号托盘。3点定义。圆弧型格式(注意3点型指令在书写时在终点B后有两个“逗号”)
④(Plt 1,5)'——1号托盘第5点
⑤(Plt 1,M1)'——1号托盘第M1点(M1为变量)
(5)程序样例1
1 P3.A= P2.A'——设定"形位(pose)"P3点 2 P3.B= P2.B' 3 P3.C= P2.C' 4 P4.A= P2.A' 5 P4.B= P2.B' 6 P4.C= P2.C' 7 P5.A= P2.A' 8 P5.B= P2.B' 9 P5.C= P2.C' 10 Def Plt 1,P2,P3,P4,P5,3,5,2'——设定1号托盘,3×5格,顺排型 11 M1= 1'——设置M1变量 12 * LOOP'——循环指令LOOP 13 Mov P1,- 50' 14 Ovrd 50' 15 Mvs P1' 16 HClose 1'——1 17 Dly 0.5' 18 Ovrd 100' 19 Mvs,- 50' 20 P10=(Plt 1,M1)'——定义P10点为1号托盘"M1"点,M1为变量 21 Mov P10,- 50' 22 Ovrd 50' 23 Mvs P10'——运行到P10点 24 HOpen 1'——打开抓手1 25 Dly 0.5' 26 Ovrd 100' 27 Mvs,- 50' 28 M1= M1+ 1'——M1做变量运算 29 If M1<= 15 Then * LOOP'——循环指令判断条件。如果M1小于等于15,则继续循环。根据此循环完成对托盘1所有"位置点"的动作 30 End'
(6)程序样例2
形位(pose)在±180°附近的状态。
1 If Deg(P2.C)<0 Then GoTo* MINUS'如果P2点 2 If Deg(P3.C)<- 178 Then P3.C = P3.C+ Rad(+ 360)'——如果P3点 3 If Deg(P4.C)<- 178 Then P4.C = P4.C+ Rad(+ 360)'——如果P4点 4 If Deg(P5.C)<- 178 Then P5.C= P5.C+ Rad(+ 360)'——如果P5点 5 GoTo * DEFINE'——跳转到Level DEFINE行 6 * MINUS'——Level MINUS 7 If Deg(P3.C)>+ 178 Then P3.C= P3.C- Rad(+ 360)'——如果P3点 8 If Deg(P4.C)>+ 178 Then P4.C= P4.C- Rad(+ 360)'——如果P4点 9 If Deg(P5.C)>+ 178 Then P5.C= P5.C- Rad(+ 360)'——如果P5点 10 * DEFINE'——程序分支标志DEFINE□ 11 Def Plt 1,P2,P3,P4,P5,3,5,2'——定义1# 托盘。3×5格。顺排型 12 M1= 1'——M1为变量 13 * LOOP'——循环指令 Level LOOP□ 14 Mov P1,- 50 15 Ovrd 50' 16 Mvs P1' 17 HClose 1'——1号抓手闭合 18 Dly 0.5' 19 Ovrd 100' 20 Mvs,- 50' 21 P10=(Plt 1□M1)'——定义P10点(为1号托盘中的M1点。M1为变量) 22 Mov P10,- 50' 23 Ovrd 50' 24 Mvs P10' 25 HOpen 1'——打开抓手1 26 Dly 0.5' 27 Ovrd 100' 28 Mvs,- 50' 29 M1= M1+ 1'——变量M1运算 30 If M1<= 15 Then * LOOP'——循环判断条件,如果M1小于等于15,则继续循环。执行15个点的抓取动作 31 End'
2.3 程序结构指令
2.3.1 无条件跳转指令
GoTo——无条件跳转。
On GoTo——对应于指定的变量值进行相应行的跳转(1,2,3,4,…)。
2.3.2 根据条件执行程序分支跳转的指令
(1)功能
本指令是根据“条件”执行“程序分支跳转”的指令,是改变程序流程的基本指令。
(2)指令格式1
If<判断条件式>Then<流程1>□[Else<流程2>]
①这种指令格式是在程序一行里书写的判断-执行语句。如果“条件成立”就执行Then后面的程序指令。如果“条件不成立”执行Else后面的程序指令。
②指令例句1
10 If M1>10 Then * L100'——如果M1大于10,则跳转到* L100行 11 If M1>10 Then GoTo * L20 Else GoTo * L30'——如果M1大于10,则跳转到* L20行,否则跳转到* L30行
(3)指令格式2
如果判断-跳转指令的处理内容较多,无法在一行程序里表示,就使用指令格式2。
If<判断条件式>
Then
<流程1>
Else
<流程2>]
EndIf
如果“条件成立”则执行Then后面一直到Else的程序行。
如果“条件不成立”则执行Else后面到EndIf的程序行。EndIf用于表示流程2的程序结束。
①指令例句1
10 If M1>10 Then' 如果M1大于10,则 11M1= 10 12 Mov P1 13 Else' 否则 14M1= - 10 15Mov P2 16 EndIf
②指令例句2 多级If…Then…Else…EndIf嵌套。
30 If M1>10 Then' (第1级判断-执行语句) 31 If M2>20 Then' (第2级判断-执行语句) 32 M1= 10 33 M2= 10 34 Else 35 M1= 0 36 M2= 0 37 EndIf' (第2级判断-执行语句结束) 38 Else 39 M1= - 10 40 M2= - 10 41 EndIf' (第1级判断-执行语句结束)
③指令例句3 在对Then及Else的流程处理中,以Break指令跳转到EndIf的下一行。从If Then EndIf的流程中跳转出来(不要使用GoTo指令跳转)。
30 If M1>10 Then'——(第1级判断-执行语句) 31 If M2>20 Then Break'——如果M2>20就跳转出本级判断执行语句(本例中为39行) 32 M1= 10 33 M2= 10 34 Else 35 M1= - 10 36 If M2>20 Then Break'——如果M2>20就跳转出本级判断执行语句(本例中为39行) 37 M2= - 10 38 EndIf 39 If M_BrkCq= 1 Then Hlt 40 Mov P1
(4)说明
①多行型指令If…Then…Else…EndIf必须书写EndIf,不得省略,否则无法确定“流程2”的结束位置。
②不要使用GoTo指令跳转到本指令之外。
③嵌套多级指令最大为8级。
④在对Then及Else的流程处理中,以Break指令跳转到EndIf的下一行。