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的下一行。