工业机器人编程指令详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1 动作控制指令

表3-1为动作控制指令一览表。

表3-1 动作控制指令一览表

3.1.1 Mov(Move)——关节插补

(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'——指定运行轨迹类型为"捷径型"

图3-1中的移动路径及程序如下:

图3-1 移动路径

    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轴方向确定。

3.1.2 Mvs(Move S)

(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轴为基准,离开“终点”的距离(这是便捷指令)。

如图3-2所示。

图3-2 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

    1Mvs P4+ P5,50.0 WthIf M_In(18)= 1,M_Out(20)= 1

(8)指令例句4

从当前点沿TOOL坐标系Z轴方向移动100mm。

    Mvs,-100

参见图3-2。

(9)关于特异点的说明

在图3-3中从“形位(pose)A”到“形位(pose)C”无法直接以“直线插补”到达,需要通过“形位(pose)B”到达。

图3-3 关于特异点的说明

“形位(pose)A”的结构标志为“NONFLIP(下)”。在“形位(pose)C”的结构标志为“FLIP(上)”。

3.1.3 Mvr(Move R)

(1)功能

本指令为三维圆弧插补指令,需要指定“起点”和圆弧中的“通过点”和“终点”。运动轨迹是一段圆弧。如图3-4所示。

图3-4 Mvr指令的运动轨迹

(2)指令格式

Mvr □ <起点>,<通过点>,<终点> □<轨迹类型1>,<插补类型> □附随语句

①<起点>——圆弧的起点。

②<通过点>——圆弧中的一个点。

③<终点>——圆弧的终点。

④<轨迹类型1>——规定运行轨迹是“捷径”还是“绕行”。捷径=0,绕行=1。

⑤<插补类型>——规定“等量旋转”或“3轴直交”或“通过特异点”。等量旋转=0,3轴直交=1,通过特异点=2。

(3)指令例句

    2 Mvr P1,J2,P3'——圆弧插补
    3 Mvr P1,P2,P3 Wth M_Out(17)= 1'——圆弧插补,同时指令输出信号(17)= ON
    4 Mvr P3,(Plt 1,5),P4 WthIf M_In(20)= 1,M_Out(21)= 1'——圆弧插补,同时如果输入信号(20)= 1,则输出信号(21)= ON

3.1.4 Mvr2(Move R2)

(1)功能

本指令是2点圆弧插补指令,需要指定起点、终点和参考点。运动轨迹是一段只通过起点和终点的圆弧。不实际通过参考点(参考点的作用只用于构成圆弧轨迹),如图3-5所示。

图3-5 Mvr2指令的运动轨迹

(2)指令格式

Mvr2 □ <起点>,<终点>,<参考点> □轨迹类型,插补类型 □附随语句

说明:

①轨迹类型:常数1=1,绕行;常数1=0,捷径运行。

②插补类型:常数=0,关节插补;常数=1,直角插补;常数=2,通过特异点。

(3)指令例句

    1 Mvr2 P1,P2,P3
    2 Mvr2 P1,J2,P3
    3 Mvr2 P1,P2,P3 Wth M_Out(17)= 1
    4 Mvr2 P3,(Plt 1,5),P4 WthIf M_In(20)= 1,M_Out(21)= 1

3.1.5 Mvr3(Move R3)

(1)功能

本指令是三点圆弧插补指令,需要指定起点、终点和圆心点,运动轨迹是一段只通过起点和终点的圆弧。如图3-6所示。

图3-6 Mvr3指令的运动轨迹

(2)指令格式

Mvr3 □ <起点>,<终点>,<圆心点> □轨迹类型,插补类型 □附随语句

①起点——圆弧起点;

②终点——圆弧终点;

③圆心点——圆心;

④轨迹类型:常数1=1,绕行;常数1=0,捷径运行。

⑤插补类型:常数=0,关节插补;常数=1,直角插补;常数=2,通过特异点。

(3)指令例句

    1 Mvr3 P1,P2,P3
    2 Mvr3 P1,J2,P3
    3 Mvr3 P1,P2,P3 Wth M_Out(17)= 1
    4 Mvr3 P3,(Plt 1,5),P4 WthIf M_In(20)= 1,M_Out(21)= 1

3.1.6 Mvc(Move C)——三维真圆插补指令

(1)功能

本指令的运动轨迹是一完整的真圆,需要指定起点和圆弧中的两个点。运动轨迹如图3-7所示。

图3-7 Mvc——三维真圆插补指令的运行轨迹

(2)指令格式

Mvc □ <起点>,<通过点1>,<通过点2> □附随语句

①<起点>,<通过点1>,<通过点2>——是圆弧上的3个点。

②<起点>——真圆的“起点”和“终点”。

(3)运动轨迹

从“当前点”开始到“P1”点,是直线轨迹。真圆运动轨迹为<P1>—<P2>—<P3>—<P1>。

(4)指令例句

    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

(5)说明

①本指令的运动轨迹由指定的3个点构成完整的真圆。

②圆弧插补的“形位”为起点“形位”,通过其余2点的“形位”不计。

③从“当前点”开始到“P1”点,是直线插补轨迹。

3.1.7 Mva(Move Arch)——过渡连接型圆弧插补指令

(1)功能

本指令也是关节插补型指令。插补的轨迹从起点到“目标点”为圆弧(如图3-8所示)。圆弧的形状可以由参数或Def Arch指令预先设置,使用本指令指定圆弧编号即可。

图3-8 圆弧插补的轨迹

(2)指令格式

Mva <目标点>,<弧形编号>

<弧形编号>——1~4,由Def Arch指令定义。

(3)指令例句

    1 Def Arch 1,5,5,20,20'——定义弧形并编号
    2 Ovrd 100,20,20'
    3 Accel 100,100,50,50,50,50'
    4 Mov P0'
    5 Mva P1,1'——向P1点做弧形插补。弧形编号= 1
    6 Mva P2,2'——向P2点做弧形插补,弧形编号= 2

(4)说明

①参看Def Arch指令。

②本指令的轨迹是从起点沿“Z轴”弧形上升,到达“目标点”上方后,沿弧形下降到“目标点”。其他点位不当则无法运行。

③如果没有使用Def Arch指令,则以参数预置的轨迹运行。

3.1.8 Mv Tune(Move Tune)

MvTune——最佳动作模式选择指令。

(1)功能

在本指令下,可以选择标准模式、高速定位模式、轨迹优先模式和抑制振动模式。

(2)指令格式

MvTune □ <工作模式>

①<工作模式>=1——标准模式。

②<工作模式>=2——高速定位模式。

③<工作模式>=3——轨迹优先模式。

④<工作模式>=4——抑制振动模式。

(3)指令例句

    LoadSet 1,1'
    MvTune 2'——设置高速定位模式
    Mov P1'
    Mvs P1'
    MvTune 3'——设置轨迹优先模式
    Mvs P3'

3.1.9 Ovrd(Override)

Ovrd——速度倍率设置指令。

(1)功能

本指令用于设置速度倍率,也就是设置速度的百分数,是调速的最常用指令。

(2)指令格式1

Ovrd □ <速度倍率>

(3)指令格式2

Ovrd □ <速度倍率> <上升段速度倍率> <下降段速度倍率>对应MVa指令

(4)指令例句

    1 Ovrd 50'——设置速度倍率= 50%
    2 Mov P1
    3 Mvs P2
    4 Ovrd M_NOvrd'——设置速度倍率为初始值(一般设置初始值= 100% 。)
    5 Mov P1
    6 Ovrd 30,10,10'——设置速度倍率= 30%。上升段速度倍率= 10%,下降段速度倍率= 10%
    7 Mva P3,3'——带弧形运动的定位

(5)说明

①速度倍率与插补类型无关。速度倍率总是有效。

②最大速度倍率为100%。超出报警。

③初始值一般设置100%。

④总的速度倍率=操作面板上倍率×程序中速度倍率。

⑤程序结束END或程序复位后,返回初始倍率。

3.1.10 Spd(Speed)

Spd(Speed)——速度设置指令。

(1)功能

本指令设置直线插补、圆弧插补时的速度,也可以设置最佳速度控制模式,以mm/s为单位设置。

(2)指令格式

Spd □ <速度>

Spd □ M_NSpd(最佳速度控制模式)

<速度>——单位mm/s。

(3)指令例句

    1 Spd 100'——设置速度= 100mm/s
    2 Mvs P1
    3 Spd M_NSpd'——设置初始值(最佳速度控制模式)
    4 Mov P2
    5 Mov P3
    6 Ovrd 80'——速度倍率= 80%
    7 Mov P4
    Ovrd 100'——速度倍率= 100%

(4)说明

①实际速度=操作面板倍率×程序速度倍率×Spd。

②M_NSpd为初始速度设定值(通常为10000)。

3.1.11 JOvrd(J Override)

JOvrd——设置关节轴旋转速度的倍率。

(1)功能

本指令用于设置以关节轴方式运行时的速度倍率。

(2)指令格式

JOvrd □ <速度倍率>

(3)指令例句

    1 JOvrd 50'——设置关节轴运行速度倍率= 50%
    2 Mov P1
    3 JOvrd M_NJOvrd'——设置关节轴运行速度倍率为初始值

3.1.12 Cnt(Continuous)

Cnt(Continuous)——连续轨迹运行。

(1)功能

连续轨迹运行是指机器人控制点在运行通过各位置点时,不做每一点的加减速运行,而是以一条连续的轨迹通过各点。如图3-9所示。

图3-9 连续轨迹运行时的运行轨迹和速度曲线

(2)指令格式

Cnt □ <1/0>[,<数值1>][,<数值2>]

说明:

<1/0> Cnt 1——连续轨迹运行。

  Cnt 0——连续轨迹运行无效。

<数值1>——过渡圆弧尺寸1。

<数值2>——过渡圆弧尺寸2。

在连续轨迹运行,通过“某一位置点”时,其轨迹不实际通过位置点,而是一过渡圆弧,此过渡圆弧轨迹由指定的数值构成,如图3-10所示。

图3-10 连续运行轨迹及过渡尺寸

(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”的设置,其过渡圆弧轨迹如图3-10中虚线所示,圆弧起始点为“减速开始点”。圆弧结束点为“加速结束点”。

3.1.13 Accel(Accelerate)

Accel——设置加减速阶段的“加减速度的倍率”。

(1)功能

设置加减速阶段的“加减速度的倍率”(注意不是速度倍率)。

(2)指令格式

Accel<加速度倍率>,<减速度倍率>,<圆弧上升加减速度倍率>,<圆弧下降加减速度倍率>

(3)指令格式说明

①<加减速度倍率>——用于设置加减速度的“倍率”。

②<圆弧上升加减速度倍率>——对于Mva指令,用于设置圆弧段加减速度的“倍率”。

(4)指令例句

    1 Accel 50,100'——假设标准加速时间= 0.2s,则加速度阶段倍率= 50% ,即0.4s。减速度阶段倍率= 100% ,即0.2s
    2 Mov P1
    3 Accel 100,100'——假设标准加速时间= 0.2s,则加速度阶段倍率= 100% ,即0.2s。减速度阶段倍率= 100% ,即0.2s
    4 Mov P2
    5 Def Arch 1,10,10,25,25,1,0,0'——定义圆弧
    6 Accel 100,100,20,20,20,20'——设置圆弧上升下降阶段加减速度倍率
    7 Mva P3,1

3.1.14 Cmp Jnt(Comp Joint)

Cmp Jnt(Comp Joint)——指定关节轴进入“柔性控制状态”。

(1)功能

本指令用于指定关节轴进入“柔性控制状态”。

(2)指令格式

Cmp □ Jnt □ <轴号>

<轴号>——轴号用一组二进制编码指定。&B000000对应654321轴。

(3)指令例句

    1 Mov P1
    2 Cmp G 0.0,0.0,1.0,1.0,,,,'——指定柔性控制度
    3 Cmp Jnt,&B11'——指定J1轴J2轴进入柔性控制状态
    4 Mov P2
    5 HOpen 1
    6 Mov P1
    7 Cmp Off'——返回常规状态

3.1.15 Cmp Pos(Composition Posture)

Cmp Pos

(1)功能

本指令以直角坐标系为基准,指定伺服轴(CBAZYX)进入“柔性控制工作模式”。

(2)指令格式

Cmp □ Pos,<轴号>

<轴号>——轴号用一组二进制编码指定。&B000000对应CBAZYX轴。

(3)指令例句

    1 Mov P1'
    2 CmpG 0.5,0.5,1.0,0.5,0.5,,,'
    3 Cmp Pos,&B011011'——设置
    4 Mvs P2'
    5 M_Out(10)= 1'
    6 Dly 1.0'
    7 HOpen 1'
    8 Mvs,-100'
    9 Cmp Off'——返回常规状态

3.1.16 Cmp Tool(Composition Tool)

Cmp Tool

(1)功能

以TOOL坐标系为基准,指令伺服轴(CBAZYX)进入“柔性控制工作模式”。

(2)指令格式

Cmp □ Tool,<轴号>

<轴号>——轴号用一组二进制编码指定。&B000000对应CBAZYX轴。

(3)指令例句

    1 Mov P1 '
    2 CmpG 0.5,0.5,1.0,0.5,0.5,,,'
    3 Cmp Tool,&B011011'——指定TOOL坐标系中的
    4 Mvs P2'
    5 M_Out(10110)= 1'
    6 Dly 1.0'
    7 HOpen 1'
    8 Mvs,-100'
    9 Cmp Off'——返回常规状态

3.1.17 Cmp Off(Composition Off)

Cmp Off——解除机器人柔性控制工作模式。

(1)功能

本指令用于解除机器人柔性控制工作模式。

(2)指令格式

Cmp □ Off

(3)指令例句

    1 Mov P1'
    2 CmpG 0.5,0.5,1.0,0.5,0.5,,,'
    3 Cmp Pos,&B011011'——
    4 Mvs P2'
    5 M_Out(10110)= 1'
    6 Dly 0.5'
    7 HOpen 1'
    8 Mvs,-100'
    9 Cmp Off'——"机器人柔性控制工作模式"= OFF

3.1.18 CmpG(Composition Gain)

CmpG(Composition Gain)——设置柔性控制时各轴的增益。

(1)功能

本指令用于设置柔性控制时各轴的“柔性控制增益”。

(2)指令格式

①直角坐标系。

CmpG □[<X轴增益>]□[<Y轴增益 >]□[<Z轴增益 >]□[<A轴增益 >]□[<B轴增益 >]□[<C轴增益 >]

②关节型。

CmpG □[<J1轴增益>]□[<J2轴增益 >]□[<J3轴增益 >]□[<J4轴增益>]□[<J5轴增益 >]□[<J6轴增益 >]

③说明。

[<**轴增益>]——用于设置各轴的“柔性控制增益”。常规状态=1。以“柔性控制增益=1”为基准进行设置。

(3)指令例句

    CmpG ,,0.5,,,,,'——设置Z轴的柔性控制增益= 0.5,省略设置的轴用逗号分隔

(4)说明

①以指令位置与实际位置为比例,像弹簧一样产生作用力(实际位置越接近指令位置,作用力越小)。Cmp G就相当于弹性常数。

②指令位置与实际位置之差可以由状态变量“M_ CmpDst”读出,可用变量“M_ CmpDst”判断动作(例如PIN插入)是否完成。

③柔性控制增益调低时,动作位置精度会降低,因此必须逐步调整确认。

④各型号机器人可以设置的最低“柔性控制增益”如表3-2所示。

表3-2 各型号机器人可以设置的最低“柔性控制增益”

3.1.19 Mxt(Move External)

Mxt——(每隔规定标准时间)读取(以太网)连接的外部设备绝对位置数据进行直接移动的指令。

(1)功能

本指令功能为(每隔规定标准时间)读取(以太网)连接的外部设备绝对位置数据进行直接移动。

(2)指令格式

Mxt<文件编号> □ <位置点数据类型>[□ <滤波时间>]

①<文件编号>——设置(等同于外部设备的)文件号。

②<位置点数据类型>

0:直交坐标点;

1:关节坐标点;

2:脉冲数据。

③<滤波时间>——设置滤波时间。

(3)指令例句

    10 Open "ENET: 192.168.0.2" AS # 1'——指定IP地址192.168.0.2设备(传过来的数据)作为1#文件
    20 Mov P1'
    30 Mxt 1,1,50' ——在实时控制中,从1#文件读取数据,读取的数据为关节坐标。滤波时间50 ms
    40 Mov P1'
    50 Hlt

3.1.20 Oadl(Optimal Acceleration)

Oadl(Optimal Acceleration)——对应抓手及工件条件,选择最佳加减速模式的指令。

(1)功能

本指令根据对应抓手及工件条件,选择最佳加减速时间。所以也称为最佳加减速模式选择指令。

(2)指令格式

Oadl □ <On/Off>

①Oadl On最佳加减速模式=ON。

②Oadl Off最佳加减速模式=OFF。

(3)指令例句

    1 Oadl On'——最佳加减速模式= ON
    2 Mov P1'
    3 LoadSet 1'——设置抓手及工件类型
    4 Mov P2'
    5 HOpen 1'
    6 Mov P3'
    7 HClose 1'
    8 Mov P4'
    9 Oadl Off'——最佳加减速模式= OFF

3.1.21 LoadSet(Load Set)

LoadSet(Load Set)——设置抓手、工件的工作条件。

(1)功能

在实用的机器人系统配置完毕后,抓手及工件的重量,大小和重心位置通过参数已经设置完毕(如图3-11所示)。本指令用于选择不同的抓手编号及工件编号。

图3-11 使用参数对抓手及工件重量和重心位置进行设置

(2)指令格式

LoadSet □ <抓手编号> □ <工件编号>

①<抓手编号>——0~8。对应参数HNDDAT0~8。

②<工件编号>——0~8。对应参数WRKDAT0~8。

(3)指令例句

    1 Oadl ON
    2 LoadSet 1,1'——选择1号抓手HNDDAT1及1号工件WRKDAT1
    3 Mov P1
    4 LoadSet 0,0'——选择0号抓手HNDDAT0及0号工件WRKDAT0
    5 Mov P2
    6 Oadl Off

3.1.22 Prec(Precision)

Prec(Precision)——选择高精度模式有效或无效,用以提高轨迹精度。

(1)功能

本指令选择高精度模式有效或无效,用以提高轨迹精度。

(2)指令格式

Prec □ <On/Off>

Prec On——高精度模式有效。

Prec Off——高精度模式无效。

(3)指令例句

    1 Prec On'——高精度模式有效
    2 Mvs P1
    3 Mvs P2
    4 Prec Off'——高精度模式无效
    5 Mov P1

3.1.23 Torq(Torque)

Torq(Torque)——转矩限制指令。

(1)功能

本指令用于设置各轴的转矩限制值。

(2)指令格式

Torq □ <轴号> □ <转矩限制率>

<转矩限制率>——额定转矩的百分数。

(3)指令例句

    1 Def Act 1,M_Fbd> 10 GoTo * SUB1,S'——如果实际位置与指令位置差M_Fbd大于10mm,则跳转到子程序* SUB1
    2 Act 1= 1
    3 Torq 3,10 '——设置J3轴的转矩限制倍率=  10%
    4 Mvs P1
    5 Mov P2
    …
    100* SUB1
    101 Mov P_Fbc
    102 M_Out(10)= 1
    103 End

3.1.24 JRC(Joint Roll Change)

JRC(Joint Roll Change)——旋转轴坐标值转换指令。

(1)功能

本指令功能是将指定旋转轴坐标值加/减360°后转换为当前坐标值[用于原点设置或不希望当前轴受到形位(pose)标志FLG2的影响]。

(2)指令格式

JRC <[+]<数据>/-<数据>/0>[<轴号>]

①[+]<数据>——以参数JRCQTT设定的值为单位增加或减少的“倍数”。如果未设置参数JRCQTT,则以360°为单位。例如“+2”就是增加720°。“-3”就是减1080°。

②如果<数据>=0,则以参数JRCORG设置的值,再做原点设置(只能用于“用户定义轴”)。

③<轴号>——指定轴号[如果省略轴号,则为“J4轴”(水平机器人RH-F)或“J6轴”(垂直机器人RVH-F)]。

(3)指令例句

    1 Mov P1'——移动到P1点,J6轴向正向旋转
    2 JRC + 1'——将J6轴当前值加360°
    3 Mov P1'
    4 JRC + 1'——将J6轴当前值加360°
    5 Mov P1'
    6 JRC-2'——将J6轴当前值减720°

(4)说明

①本指令只改变对象轴的坐标值,对象轴不运动(可以用于设置原点或其他用途)。

②由于对象轴的坐标值改变,所以需要预先改变对象轴的动作范围,对象轴的动作范围可设置在-2340°~ +2340°。

③优先轴为机器人前端的旋转轴。

④未设置原点时系统会报警。

⑤执行本指令时,机器人会停止。

⑥使用JRC指令时务必设置下列参数:

a.JRCEXE=1,JRC指令生效。

b.用参数MEJAR设置对象轴动作范围。

c.用参数JRCQTT设置JRC 1/-1(JRC n/-n)的动作“单位”。

d.用参数JRCORG设置JRC 0时的原点位置。

3.1.25 Fine(Fine)

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 Fine10 0'——定位精度设置为100脉冲
    8 Mov P4

3.1.26 Fine J(Fine Joint)

Fine J——设置关节轴的旋转定位精度。

(1)功能

本指令设置关节轴的旋转定位精度。

(2)指令格式

Fine □ <定位精度> □ J[□ <轴号>]

(3)指令例句

    1 Fine 1,J'——设置全轴定位精度1°
    2 Mov P1
    3 Fine 0.5,J,2'——设置2轴定位精度0.5°
    4 Mov P2
    5 Fine 0,J,5'——设置5轴定位精度无效
    6 Mov P3
    7 Fine 0,J'——设置全轴定位精度无效
    8 Mov P4

3.1.27 Fine P——以直线距离设置定位精度

(1)功能

本指令以直线距离设置定位精度。

(2)指令格式

Fine □ <直线距离>,P

(3)指令例句

    1 Fine 1,P'——设置定位精度为直线距离1mm
    2 Mov P1
    3 Fine 0,P'——定位精度无效
    4 Mov P2

3.1.28 Servo(Servo)——指令伺服电源的ON/OFF

(1)功能

本指令用于使机器人各轴的伺服ON/OFF。

(2)指令格式

Servo <On/Off> <机器人编号>

(3)指令例句

    1 Servo On'——伺服= ON
    2 * L20:If M_Svo< > 1 GoTo * L20'——等待伺服= ON
    3 Spd M_NSpd
    4 Mov P1
    5 Servo Off'——伺服= OFF

3.1.29 Wth(With)——在插补动作时附加处理的指令

(1)功能

本指令为附加处理指令。附加在插补指令之后,不能单独使用。

(2)指令例句

    Mov P1 Wth M_Out(17)= 1 Dly M1+ 2'

(3)说明

①附加指令与插补指令同时动作。

②附加指令动作的优先级如下:

Com> Act> WthIf(Wth)

3.1.30 WthIf(With If)

WthIf——在插补动作中带有附加条件的附加处理的指令。

(1)功能

本指令也是附加处理指令,只是带有“判断条件”。

(2)指令格式

Mov P1 WthIf □ <判断 条件> □ <处理>

<处理>——处理的内容有赋值、Hlt、Skip。

(3)指令例句

    Mov P1 WthIf M_In(17)= 1,Hlt
    Mvs P2 WthIf M_RSpd> 200,M_Out(17)= 1 Dly M1+ 2
    Mvs P3 WthIf M_Ratio> 15,M_Out(1)= 1

3.1.31 CavChk On——“防碰撞功能”是否生效

(1)功能

本指令用于设置“防碰撞功能”是否生效。

(2)指令格式

CavChk □ <On/Off>[,<机器人CPU号>[,NOErr]]

<On/Off>——On:“防碰撞”停止功能=On;Off:“防碰撞”停止功能=Off。

<机器人CPU号>——设置机器人编号。

[NOErr]——检测到“干涉”时不报警。

参照:1.4.7节碰撞检测功能。

3.1.32 ColLvl(ColLevel)——设置碰撞检测量级

(1)功能

本指令用于设置碰撞检测量级。

(2)指令格式

ColLvl □[<J1轴>]□[<J2轴>]□[<J3轴>]□[<J4轴>][<J5轴>]□[<J6轴>]<J1-J6轴>]——设置各轴碰撞检测量级。

(3)指令例句

    1 ColLvl 80,80,80,80,80,80,,'——设置各轴碰撞检测量级
    2 ColChk On'——碰撞检测有效
    3 Mov P1
    4 ColLvl ,50,50,,,,,'——设置J2,J3轴碰撞检测量级
    5 Mov P2
    6 Dly 0.2'
    7 ColChk Off'——碰撞检测无效
    8 Mov P3

3.2 程序控制流程相关的指令

表3-3为程序流程相关指令一览表。

表3-3 程序流程相关指令一览表

3.2.1 Rem(Remarks)

Rem(Remarks)——标记字符串。

(1)功能

本指令用于使标记字符串成为“指令注释”。

(2)指令格式

Rem □ <指令>

(3)指令例句

    1 Rem * * * MAIN PROGRAM* * *
    2' * * * MAIN PROGRAM* * *
    3 Mov P1'

3.2.2 If…Then…Else…EndIf(If Then Else)

(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的程序结束。如图3-12所示。

图3-12 If…Then…Else…EndIf指令的程序流程

①指令例句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
    400 M2 = - 10
    410 EndIf'——(第1级判断-执行语句结束)

③指令例句3 在对Then及Else的流程处理中,以Break指令跳转到EndIf的下一行(不要使用GoTo指令跳转)。如图3-13所示。

图3-13 If…Then…Else指令中使用Break指令的流程

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

3.2.3 Select Case(Select Case)

Select Case——根据不同的状态选择执行不同的程序块。

(1)功能

本指令用于根据不同的条件选择执行不同的程序块。如图3-14所示。

图3-14 Select Case语句的执行流程

(2)指令格式

Select □ <条件>

Case □ <计算式>

[<处理>]

Break

Case □ <计算式>

[<处理>]

Break

Default

[<处理>]

Break

End □ Select

<条件>——数值表达式。

(3)指令例句

    1 Select MCNT
    2 M1= 10'——此行不执行
    3 Case Is < =  10'——如果MCNT< = 10
    4 Mov P1
    5 Break
    6 Case 11'——如果MCNT= 11 OR MCNT= 12
    7 Case 12
    8 Mov P2
    9 Break
    10 Case 13 To 18'——如果13< =  MCN< = 18
    11 Mov P4
    12 Break
    13 Default'——除上述条件以外
    14 M_Out(10)= 1
    15 Break
    16 End Select

(4)说明

①如果“条件”的数据与某个Case的数据一致,则执行到Break行然后跳转到End Select行。

②如果条件都不符合,就执行Default规定的程序。

③如果没有Default指令规定的程序,就跳到End Select下一行。

3.2.4 GoTo(Go To)

GoTo——无条件跳转。

(1)功能

无条件的跳转到指定的程序分支标记行。

(2)格式

GoTo □ <程序分支标记>

(3)术语

<程序分支标记>标记程序分支

(4)指令样例

    10 GoTo * LBL'跳转到有 * LBL标记的程序行
    :
    100 * LBL
    101 Mov P1

说明:

①必须在程序分支处写标记符号。

②无程序分支处标记符,执行时会发生报警。

3.2.5 GoSub(Return)(Go Subroutine)

GoSub(Return)(Go Subrouine)——调用指定“标记”的子程序。

(1)功能

本指令为调用子程序指令。子程序前有“*”标志。在子程序中必须要有返回指令——Return。这种调用方法与CallP指令的区别是:GoSub指令指定的“子程序”写在“同一程序”内。用“标签”标定“起始行”,以“Return”作为子程序结束并返回“主程序”。而CallP指令调用的程序可以是一个独立的程序。

(2)指令格式

GoSub <子程序标签>

(3)指令例句

    10 GoSub * LBL
    11  End
    …
    100 * LBL
    101 Mov P1
    102 Return'——务必写Return指令

(4)说明

①子程序结束务必写Return指令,不能使用GoTo指令。

②在子程序中还可使用GoSub指令,可以使用800段。

3.2.6 Reset Err(Reset Error)

Reset Err(Reset Error)——报警复位。

(1)功能

本指令用于使报警复位。

(2)指令格式

Reset Err

(3)指令例句

    1 If M_Err= 1 Then Reset Err'——如果有M_Err报警发生,就将报警复位

3.2.7 CallP(Call P)

CallP——调用子程序指令。

(1)功能

本指令用于调用子程序。

(2)指令格式及说明

Call P[程序名][自变量1][自变量2]

①[程序名]——被调用的“子程序”名字。

②[自变量1][自变量2]——设置在子程序中使用的变量,类似于“局部变量”,只在被调用的子程序中有效。

(3)指令例句1

调用子程序时同时指定“自变量”。

    1 M1= 0
    2 CallP "10" ,M1,P1,P2'——调用"10"号子程序,同时指定M1,P1,P2为子程序中使用的变量
    3 M1= 1
    4 CallP "10" ,M1,P1,P2'——调用"10"号子程序,同时指定M1,P1,P2为子程序中使用的变量
    10 CallP "10",M2,P3,P4'——调用"10"号子程序,同时指定M2,P3,P4为子程序中使用的变量
    15 End

    "10"子程序
    1 FPrm M01,P01,P02'——规定与主程序中对应的"变量"
    2 If M01< > 0 Then GoTo * LBL1
    3 Mov P01
    4 * LBL1
    5 Mvs P02
    6 End'——结束(返回主程序)
  

注:在主程序第1步,第4步调用子程序时,“10”子程序变量M01,P01,P02与主程序指定的变量M1,P1,P2相对应。

在主程序第10步调用子程序时,“10”子程序变量M01,P01,P02与主程序指定的变量M2,P3,P4相对应。

主程序与子程序的关系如图3-15所示。

图3-15 主程序与子程序的关系

(4)指令例句2

调用子程序时不指定“自变量”。

    1 Mov P1
    2 CallP "20"'——调用"20"号子程序
    3 Mov P2
    4 CallP "20"'——调用"20"号子程序
    5 End
    "20"子程序
    1 Mov P1'——子程序中的P1与主程序中的P1不同
    2 Mvs P002
    3 M_Out(17)= 1
    End'

(5)说明

①子程序以End结束并返回主程序。如果没有End指令,则在最终行返回主程序。

②CallP指令指定自变量时,在子程序一侧必须用FPrm定义自变量。而且数量类型必须相同,否则发生报警。

③可以执行8级子程序调用。

④TOOL数据在子程序中有效。

3.2.8 FPrm(FPRM)

FPrm——定义子程序中使用“自变量”。

(1)功能

从主程序中调用子程序指令时,如果规定有自变量,就用本指令使主程序定义的“局部变量”在子程序中有效。

(2)指令格式

FPrm <假设自变量> <假设自变量>

(3)指令例句

    < 主程序>
    1 M1= 1
    2 P2= P_Curr
    3 P3= P100
    4 CallP "100",M1,P2,P3'——调用子程序 "100",同时指定了变量M1,P2,P3
    子程序"100"
    1 FPrm M1,P2,P3'——指令从主程序中定义的变量有效
    2 If M1= 1 Then GoTo * LBL
    3 Mov P1
    4 * LBL
    5 Mvs P2
    6 End'

3.2.9 Dly(Delay)

Dly(Delay)——暂停指令(延时指令)。

(1)功能

本指令用于设置程序中的“暂停时间”,也作为构成“脉冲型输出”的方法。

(2)指令格式

①程序暂停型。

Dly <暂停时间>

②设定输出信号=ON的时间(构成脉冲输出)。

M_ Out(1)=1 Dly <时间>

(3)指令例句1

    1 Dly 30'——程序暂停时间30s

(4)指令例句2

设定输出信号=ON的时间(构成脉冲输出)。

    1 M_Out(17)= 1 Dly 0.5'——输出端子(17)= ON时间为0.5s
    2 M_Outb(18)= 1 Dly 0.5'——输出端子(18)= ON时间为0.5s

3.2.10 Hlt(Halt)

Hlt(Halt)——暂时停止程序指令。

(1)功能

本指令为暂停执行程序,程序处于待机状态。如果发出再启动信号,从程序的下一行启动。本指令在分段调试程序时常用。

(2)指令格式

Hlt

(3)指令例句1

    1Hlt'——无条件暂停执行程序

(4)指令例句2

满足某一条件时,执行暂停。

    100 If M_In(18)= 1 Then Hlt'——如果输入信号(18)= ON,则暂停
    200 Mov P1 WthIf M_In(17)= 1,Hlt'——在向P1点移动过程中,如果输入信号(17)= ON,则暂停

(5)说明

①在HLT暂停后,重新发出启动信号,程序从下一行启动执行。

②如果是在附随语句中发生的暂停,重新发出启动信号后,程序从中断处启动执行。

3.2.11 On…GoTo(On Go To)

On …GoTo——不同条件下跳转到不同程序分支处的指令。

(1)功能

本指令是根据不同条件跳转到不同程序分支处的指令。判断条件是计算式,可能有不同的计算结果,根据不同的计算结果跳转到不同程序分支处。本指令与On … GoSub指令的区别是:On … GoSub是跳转到子程序。On …GoTo指令是跳转到某一程序行。如图3-16所示。

图3-1 6 On…GoTo指令的流程

(2)指令格式

On □ <条件计算式> □ GoTo<程序行标签1> <程序行标签2>

(3)指令例句

    On M1 GoTo * ABC1,* LJMP,* LM1_345,* LM1_345,* LM1_345,* L67,* L67
    '如果M1= 1,就跳转到* ABC1行
    如果M1= 2,就跳转到*  LIMP行
    如果M1= 3,M1= 4,M1= 5就跳转到* LM1_345行
    如果M1= 6,M1= 7,就跳转到*  L167行
    11 MOV P500'——M1不等于1~7就跳转到本行
    100 * ABC1
    101 MOV P100'
    102 '…….
    110 MOV P200'
    111 * LJMP
    112 MOV P300'
    113 '…….
    170 * L67
    171 MOV P600''
    172 '…….
    200 * LM1_345
    201 'MOV P400'
    202 '…….

3.2.12 On…GoSub(On Go Subroutine)

(1)功能

根据不同的条件调用不同的子程序。

(2)格式

On □ <式> □GoSub □[<子程序标记> ][,[<子程序标记>]]…

(3)用语

①<式> 数值运算式(作为判断条件)。

②<子程序标记> 记述子程序标记名。最大数为32。

(4)样例

根据M1数值(1~7)调用不同的子程序。

   (M1 = 1,调用子程序ABC1;M1 = 2,调用子程序Lsub; M1= 3、4、5,调用子程序LM1_345; M1=6、7,调用子程序L67)
    1 M1 = M_Inb(16) And &H7
    2 On M1 GoSub * ABC1,* Lsub,* LM1_345,* LM1_345,* LM1_345,* L67,* L67(注意,有7个子程序)
    100 * ABC1
    101 'M1= 1时的程序处理
    102 Return       '务必以Return返回主程序
    121 * Lsub
    122 'M1= 2时的程序处理
    123 Return    '务必以Return返回主程序
    170 * L67
    171 ' M1= 6,M1= ,7时的程序处理
    172 Return    '务必以Return返回主程序
    200 * LM1_345
    201 'M1= 3、M1= 4、M1= 5时的子程序
    202 Return   '务必以Return返回主程序

(5)说明

①以<数值运算式>的值决定调用某个子程序。

例如:<数值运算式>的值=2,即调用第2号记述的子程序。

②<数值运算式>的值大于<调用子程序>个数时,就跳转到下一行。例如<数值运算式>的值=5,<调用子程序>=3个的情况下,会跳转到下一行。

③子程序结束处必须写Return,以返回主程序。

图3-17所示为On…Go Sub指令的流程。

图3-17 On…GoSub指令的流程

3.2.13 While…WEnd(While End)

While … WEnd(While End)——循环指令。

(1)功能

本指令为循环动作指令。如果满足循环条件,则循环执行While至WEnd之间的动作。如果不满足则跳出循环。

(2)指令格式

While □ <循环条件>

处理动作

WEnd

<循环条件>——数据表达式。

(3)指令例句

如果M1在-5~5之间,则循环执行。

    1 While(M1> =-5) And(M1< = 5)'——如果M1在- 5~5之间,则循环执行
    2 M1= -(M1+ 1)'——循环条件处理
    3 M_Out(8)= M1 '
    4WEnd '——循环结束指令
    End '

本指令的循环过程如图3-18所示。

图3-18 循环语句流程

3.2.14 Open(Open)

Open——打开文件指令。

(1)功能

本指令为“启用”某一文件指令。

(2)指令格式

Open □"<文件名>"□[For <模式>]□As □[#]<文件号码>

①<文件名> 记叙文件名。如果使用“通信端口”则为“通信端口名”。

②<模式>

Input——输入模式(从指定的文件里读取数据)。

Ouput——输出模式。

Append——搜索模式。

“省略”——如果省略模式指定,则为“搜索模式”。

(3)指令例句1(通信端口类型)

    1 Open "COM1:" As # 1'——指定1
    2 Mov P_01
    3 Print # 1,P_Curr'——将当前值 "(100.00,200.00,300,00,400.00)(7,0)" 输出到# 1文件
    4 Input # 1,M1,M2,M3'——读取# 1文件中的数据"101.00,202.00,303.00"到M1,M2,M3
    5 P_01.X= M1
    6 P_01.Y= M2
    7 P_01.C= Rad(M3) '
    8 Close'——关闭所有文件
    End

(4)指令例句2(文件类型)

    1 Open "temp.txt" For Append As # 1'——将名为“ temp.txt ”的文件定义为# 1文件
    2 Print # 1,"abc"'——在# 1文件上写"abc"
    3 Close # 1'——关闭# 1文件

3.2.15 Print(Print)

Print——输出数据指令。

(1)功能

本指令为向指定的文件输出数据。

(2)指令格式

Print □ #<文件号> □<数据式1>,<数据式2>,<数据式3>

<数据式>——可以是数值表达式,位置表达式,字符串表达式。

(3)指令例句1

    1 Open "temp.txt" For APPEND As # 1'——将 "temp.txt" 文件视作#  1文件开启
    2 MDATA= 150 '——设置MDATA=  150
    3 Print # 1,"* * * Print TEST* * * "'——向# 1文件输出字符串"* * * Print TEST* * * "
    4 Print # 1'——输出“换行符”
    5 Print # 1,"MDATA= ",MDATA'——输出字符串"MDATA= "之后,接着输出MDATA的具体数据150
    6 Print # 1'——输出“换行符”
    7 Print # 1,"* * * * * * * * * * * * * * * * " '输出字符串 "* * * * * * * * * * * * * * * * * * * * * * * * * * *
    8 End
    输出结果如下:
    * * * Print TEST* * *
    MDATA= 150
    * * * * * * * * * * * * * * * *

(4)说明

①Print指令后为“空白”,即表示输出换行符。注意其应用。

②字符串最大为14字符。

③多个数据以逗号分隔时,输出结果的多个数据有空格。

④多个数据以分号分割时,输出结果的多个数据之间无空格。

⑤以双引号标记“字符串”。

⑥必须输出换行符。

(5)指令例句2

    1 M1= 123.5
    2 P1=(130.5,-117.2,55.1,16.2,0.0,0.0)(1,0)
    3 Print # 1,"OUTPUT TEST" ,M1 ,P1'——以逗号分隔

输出结果:数据之间有空格。

    OUTPUT TEST 123.5(130.5,-117.2,55.1,16.2,0.0,0.0)(1,0)

(6)指令例句3

    3 Print # 1,"OUTPUT TEST"; M1 ; P1'——以分号分隔

输出结果:数据之间无空格。

OUTPUT TEST 123.5(130.5,-117.2,55.1,16.2,0.0,0.0)(1,0)

(7)指令例句4

在语句后面加逗号或分号,不会输出换行结果。

    3 Print # 1,"OUTPUT TEST",'——以逗号结束
    4 Print # 1,M1;'——以分号结束
    5 Print # 1,P1

输出结果:

OUTPUT TEST 123.5(130.5,-117.2,55.1,16.2,0.0,0.0)(1,0)

3.2.16 Input(Input)

Input——文件输入指令。

(1)功能

从指定的文件读取“数据”的指令,读取的数据为ASCII码。

(2)指令格式

Input □ #<文件编号> <输入数据存放变量>[□ <输入数据存放变量>]…

①<文件编号>——指定被读取数据的文件号。

②<输入数据存放变量>——指定读取数据存放的变量名称。

(3)指令例句

    1 Open "temp.txt" For Input As # 1'——指定文件 "temp.txt"为1#文件
    2 Input # 1,CABC$ '——读取1 #文件:读取时从"起首"到"换行"为止的数据被存放到变量"CABC$ "(全部为ASCII码)
    …
    10 Close # 1'——关闭1#文件

(4)说明

如果文件1#的数据为PRN MELFA,125.75,(130.5,-117.2,55.1,16.2,0,0)(1,0)CR

指令:1 Input #1,C1$,M1,P1

则:C1$=MELFA

M1=125.75

P1=(130.5,-117.2,55.1,16.2,0,0)(1,0)

3.2.17 Close(Close)

Close——关闭文件。

(1)功能

将指定的文件(及通信口)关闭。

(2)指令格式

Close □[#]<文件号>[□[# <文件号>]

(3)指令例句

    1 Open "temp.txt" For Append As # 1'——将文件temp.txt作为1
    2 Print # 1,"abc"'——在1
    3 Close # 1'——关闭1

3.2.18 ColChk(Col Check)

ColChk(Col Check)——指令碰撞检测功能有效无效。

(1)功能

本指令用于设置碰撞检测功能有效无效。碰撞检测功能指检测机器人手臂及抓手与周边设备是否发生碰撞,如果发生碰撞立即停止,减少损坏。

(2)指令格式

ColChk □ On[□ NOErr]/Off

①On碰撞检测功能有效。检测到碰撞发生时,立即停机,并发出1010报警。同时伺服=OFF。

②Off碰撞检测功能无效。

③NOErr检测到碰撞发生时,不报警。

(3)指令例句1

检测到碰撞发生时,报警。

    1 ColLvl 80,80,80,80,80,80,,'——设置碰撞检测量级
    2 ColChk On'——碰撞检测功能有效
    3 Mov P1
    4 Mov P2
    5 Dly 0.2'——等待动作完成。也可以使用定位精度指令Fine
    6 ColChk Off'——碰撞检测功能无效
    7 Mov P3

(4)指令例句2

检测到碰撞发生时,使用中断处理。

    1 Def Act 1,M_ColSts(1)= 1 GoTo * HOME,S'——如果检测到碰撞发生,跳转到"HOME"行
    2 Act 1= 1
    3 ColChk On,NOErr'——碰撞检测功能= ON
    4 Mov P1
    5 Mov P2 '
    6 Mov P3
    7 Mov P4
    8 ColChk Off'——碰撞检测功能= OFF
    9 Act 1= 0
    100 * HOME '
    101 ColChk Off'——碰撞检测功能= OFF
    102 Servo On '
    103 PESC= P_ColDir(1)*(-2) '
    104 PDST= P_Fbc(1)+ PESC '
    105 Mvs PDST '
    106 Error 9100 '

(5)说明

①碰撞检测是指机器人移动过程中,实际转矩超出理论转矩达到一定量级后,则判断为“碰撞”,机器人紧急停止。

图3-19中有理论转矩和实际检测到的转矩。如果实际检测到的转矩大于“设置的转矩值”,就报警。

图3-19 “实际转矩”与“设置的检测转矩量级”之间的关系

②碰撞检测功能可以用参数Col设置。

3.2.19 On Com GoSub(ON Communication Go Subroutine)

On Com GoSub(ON Communication Go Subroutine)——如果有来自通信口的指令则跳转执行某子程序。

(1)功能

本指令的功能是:如果有来自通信口的指令则跳转执行某子程序。

(2)指令格式

On □ Com<文件号>GoSub <程序行标签>

(3)指令例句

    1 Open "COM1:" As # 1'——指令"COM1:"作为# 1文件
    2 On Com(1) GoSub * RECV'——如果1
    3 Com(1) On'——指令1
    4 '
    ….. '(如果此区间有从1
    11 '
    12 Mov P1
    13 Com(1) Stop'——指令1
    14 Mov P2
    15 Com(1) On'——指令1
    16 '
    …. '(如果此区间有从1
    26 '
    27 Com(1) Off' ——指令1
    28 Close # 1'——关闭1
    29 End
    …..
    40 * RECV'——子程序起始行标签
    41 Input # 1,M0001'
    42 Input # 1,P0001
    50 Return 1' ——子程序结束

3.2.20 Com On/Com Off/Com Stop(Communication ON/OFF/STOP)

(1)功能

设置从外部通信口传送到机器人一侧的“插入指令”有效无效(相当于划分中断程序的有效区间)。

(2)指令格式

Com <文件号> On——“插入指令”有效。

Com <文件号> Off——“插入指令”无效。

Com <文件号> Stop——“插入指令”暂停。

3.2.21 HOpen/HClose(Hand Open/Hand Close)

HOpen/HClose(Hand Open/Hand Close)——抓手打开/关闭指令。

(1)功能

本指令为抓手的ON/OFF指令。控制抓手的ON/OFF,实质上是控制某一输出信号的ON/OFF,所以在参数上要设置与抓手对应的输出信号。

(2)指令格式

HOpen □ <抓手号码>

HClose □ <抓手号码>

(3)指令例句

    1 HOpen 1'——指令抓手1= ON
    2 Dly 0.2'
    3 HClose 1'——指令抓手1= OFF
    4 Dly 0.2'
    5 Mov PUP

3.2.22 Error(Error)

Error——发出报警信号的指令。

(1)功能

本指令用于在程序中发出报警指令。

(2)指令格式

Error <报警编号>

(3)指令例句1

    1 Error 9000

(4)指令例句2

    4 If M1 < >  0 Then * LERR'——如果M1不等于0 ,则跳转到 * LERR行
    …
    14 * LERR
    15 MERR= 9000+ M1* 10'——根据M1计算报警号
    16 Error MERR '
    17 End

3.2.23 Skip(Skip)

Skip——跳转指令。

(1)功能

本指令的功能是中断执行当前的程序行,跳转到下一程序行。

(2)指令格式

Skip

(3)指令例句

    1 Mov P1 WthIf M_In(17)= 1,Skip'——如果执行Mov P1的过程中M_In(17)= 1,则中断Mov P1的执行,跳到下一程序行
    2 If M_SkipCq= 1 Then Hlt'——如果发生了Skip跳转,则程序暂停

3.2.24 Wait(Wait)

Wait(Wait)——等待指令。

(1)功能

本指令功能为等待条件满足后执行下一段指令。这是常用指令。

(2)指令格式

Wait □ <数值变量>=<常数>

<数值变量>——数值型变量;常用的有输入输出型变量。

(3)指令例句1 信号状态

    1 Wait M_In(1)=  1'——与 * L10:If M_In(1)= 0 Then GoTo * L10功能相同
    2 Wait M_In(3)= 0

(4)指令例句2 多任务区状态

    3 Wait M_Run(2)= 1'——等待任务区2程序启动

(5)指令例句3 变量状态

    Wait M_01= 100'——如果变量"M_01= 100",就执行下一行

3.2.25 Clr(Clear)

Clr(Clear)——清零指令。

(1)功能

本指令用于对输出信号、局部变量、外部变量及数据“清零”。

(2)指令格式

Clr □ <TYPE>

<TYPE>——清零类型。

①<TYPE>=1输出信号复位。

②<TYPE>=2局部变量及数组清零。

③<TYPE>=3外部变量及数组清零。但公共变量不清零。

(3)指令例句1 类型1

    Clr 1'——将输出信号复位

(4)指令例句2 类型2

    Dim MA(10)
    Def Inte IVAL
    Clr 2'——MA(1)~MA(10)及变量IVA及程序内局部变量清零

(5)指令例句3 类型3

    Clr 3'——外部变量及数组清零

(6)指令例句4 类型0

    Clr 0'——同时执行类型1~3清零

3.2.26 END——程序段结束指令

(1)功能

END指令在主程序内表示程序结束。在子程序内表示子程序结束并返回主程序。

(2)指令格式

END

(3)指令例句

    1 Mov P1
    2 GoSub * ABC
    3 End'——主程序结束
    …
    10 * ABC
    11 M1= 1
    12 Return

(4)说明

①如果需要程序中途停止并处于中断状态,应该使用“HLT”指令。

②可以在程序中多处编制“END”指令。也可以在程序的结束处不编制“END”指令。

3.2.27 For □ Next——循环指令

(1)功能

本指令为循环指令。

(2)指令格式

For<计数器> = <初始值> To<结束值> Step <增量>

Next<计数器>

①<计数器>——循环判断条件。

②Step <增量>——每次循环增加的数值。

(3)指令例句(求1~10的和)

    1 MSUM= 0'——设置"MSUM= 0"
    2 For M1= 1 To 10'——设置M1从1~10为循环条件。单步增量= 1
    3 MSUM= MSUM+ M1'——计算公式
    4 Next M1

(4)说明

①循环嵌套为16级。

②跳出循环不能使用GoTo语句;使用LOOP语句。

3.2.28 Return——子程序/中断程序结束及返回

(1)功能

本指令是子程序结束及返回指令。

(2)指令格式

Return <返回程序行指定方式>

Return ——子程序结束及返回。

<返回程序行指定方式>——0,返回到中断发生的“程序步”;1,返回到中断发生的“程序步”的下一步。

(3)指令例句1(子程序调用)

    1 ' * * * MAIN PROGRAM* * *
    2 GoSub * SUB_INIT'——跳转到子程序*  SUB_INIT行
    3 Mov P1
    …
    100 ' * * * SUB INIT* * *  '
    101 * SUB_INIT'——子程序标记
    102 PSTART= P1
    103 M100= 123
    104 Return 1'——返回到“子程序调用指令”的下一行(即第3步)

(4)指令例句2(中断程序调用)

    1 Def Act 1,M_In(17)= 1 GoSub * Lact'——定义Act 1对应的中断程序
    2 Act 1= 1 '
    …
    10 * Lact '
    11 Act 1= 0 '
    12 M_Timer(1)= 0 '
    13 Mov P2 '
    14 Wait M_In(17)= 0 '
    15 Act 1= 1 '
    16 Return 0'——返回到发生“中断”的单步

(5)说明

以GoSub指令调用子程序,必须以Return作为子程序的结束。

3.2.29 Label(标签、指针)

(1)功能

“标签”用于为程序的分支处做标记,属于程序结构流程用标记。

(2)指令例句

    1 * SUB1'——* SUB1即是“标签”
    2 If M1= 1 Then GoTo * SUB1
    3 * LBL1:If M_In(19)= 0 Then GoTo * LBL1'——* LBL1即是标签

3.3 定义指令

表3-4为定义指令一览表。

表3-4 定义指令一览表

3.3.1 Dim(Dim)

Dim——定义数组。

(1)功能

本指令用于定义“数据组”——“一组同类型数据变量”,可以到3维数组。

(2)指令格式

Dim <变量名>(<数据个数>,<数据个数>,<数据个数>),<变量名>(<数据个数>,<数据个数>,<数据个数>)

(3)指令例句

    1 Dim PDATA(10)'——定义PDATA为"位置点变量数组",该数组内有"PDATA1"~"PDATA10"共10个"位置点变量"
    2 Dim MDATA#(5)'——定义MDATA# 为双精度实数型变量组,该数组内有"MDATA# 1"~"MDATA#5"共5个变量
    3 Dim M1%(6)'——定义M1%为整数型变量组,该数组内有"M1% 1"~"M1% 6"共6个变量
    4 Dim M2!(4) '——定义M2!为单精度实数数型变量组,该数组内有"M2! 1"~"M2! 4"共4个变量
    5 Dim M3&(5)'——定义M3&为长精度整数型变量组,该数组内有"M3&1"~"M3&5"共5个变量
    6 Dim CMOJI(7)'——定义CMOJI为"字符串变量数组",该数组内有"CMOJI1"~"CMOJI7"共7个"字符串变量"

3.3.2 Def Plt(Define Pallet)

(1)功能

Pallet指令也翻译为“托盘指令”、“码垛指令”,实际上是一个计算矩阵方格中各“点位中心”(位置)的指令,该指令需要设置“矩阵方格”有几行几列、起点终点、对角点位置、计数方向。因该指令通常用于码垛动作,所以也就被称为“码垛指令”。

(2)指令格式

Def □ Plt □ <托盘号> □ <起点> □ <终点A> □ <终点B> □

[<对角点>]□ <列数A> □ <行数B> □ <托盘类型>

①Def Plt——定义“托盘结构”指令。

②Plt——指定托盘中的某一点。

(3)指令样例1

如图3-20所示。

图3-20 托盘的定义及类型(一)

    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、对角点。

①托盘号——系统可设置8个托盘。本数据设置第几号托盘。

②起点/终点/对角点——如图3-20所示,用“位置点”设置。

③<列数A>——起点与终点A之间列数。

④<行数B>——起点与终点B之间行数。

⑤<托盘类型>——设置托盘中“各位置点”分布类型。

1=Z字型;2=顺排型;3=圆弧型;11=Z字型;12=顺排型;13=圆弧型。

(4)指令样例2

如图3-21所示。

图3-21 托盘的定义及类型(二)

①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
    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'

3.3.3 Plt(Pallet)

(1)功能

计算托盘(矩阵)内各格子点位置。

(2)格式Plt □ <托盘号码>,<格子点号码>

(3)术语

①< 托盘号码> ——选择在Def Plt指令中设置的号码,以变量或常数指定。

②< 格子点号码>——设置托盘内的格子号码,以变量或常数指定。

(4)样例

    1 Def Plt 1,P1,P2,P3,P4,4,3,1   '定义1
    2 '
    3 M1= 1  'M1(计数器 )初始化
    4 * LOOP
    5 Mov PICK,50  '向取工件位置上空50mm移动
    6 Ovrd 50
    7 Mvs PICK
    8 HClose 1    '抓手闭
    9 Dly 0.5   '抓手闭后等待0.5s
    10 Ovrd 100
    11 Mvs,50 '往现在位置上空50mm移动
    12 PLACE =  Plt 1,M1 '计算第M1号的位置
    13 Mov PLACE,50  '向PLACE位置上空50mm移动
    14 Ovrd 50
    15 Mvs PLACE
    16 HOpen 1 '抓手开
    17 Dly 0.5
    18 Ovrd 100
    19 Mvs,50  '往现在位置上空50mm移动
    20 M1= M1+ 1   '计数器加算
    21 If M1 < = 12 Then * LOOP    '计数在范围内的话,从* LOOP开始循环处理
    22 Mov PICK,50

说明:

①以Def Plt指令定义托盘的格子点位置。

②托盘号码最多可以同时1~8,8个同时定义。

③请注意格子点的位置会依据Def Plt定义的指定方向而有所不同。

④设置超过最大格子点号码会发生报警。

⑤将托盘的格子点作为移动指令的“目标位置”时,在下例中,如果没有用括号括起,会发生报警。

Mov(Plt 1,5 )

3.3.4 Def Act(Define Act)

Def Act——“中断程序”。

(1)功能

本指令用于定义“中断程序”,定义执行中断程序的条件及中断程序的动作。

(2)指令格式及说明

Def Act <中断程序级别> <条件> <执行动作> <类型>

①<中断程序级别>——设置中断程序的级别(中断程序号)。

②<条件>——是否执行“中断程序”的判断条件。

③<执行动作>——中断程序动作内容。

④<类型>——中断程序的执行时间点,也就是主程序的停止类型:

省略:停止类型1,以100%速度倍率正常停止。

S:停止类型2,以最短时间,最短距离减速停止。

L:停止类型3,执行完当前程序行后才停止。

(3)指令例句

    1 Def Act 1,M_In(17)= 1 GoSub * L100'——定义ACT1中断程序为:如果输入信号(17)= ON,则跳转到子程序 *  L100
    2 Def Act 2,MFG1 And MFG2 GoTo * L200'——定义ACT2中断程序:如果"MFG1与MFG2"的"逻辑AND"运算= 真,则跳转到子程序*  L200
    3 Def Act 3,M_Timer(1)> 10500 GoSub * LBL'——定义ACT3中断程序为:如果计时器时间大于10500ms则跳转到子程序 *  LBL
    10 * L100:M_Timer(1)= 0'——计时器M_Timer(1)设置= 0
    11 Act 3= 1 '——Act 3动作区间有效
    12 Return 0
    :
    20 * L200:Mov P_Safe
    21 End
    :
    30 * LBL
    31 M_Timer(1)= 0'——计时器M_Timer(1)设置= 0
    32 Act 3= 0'——Act 3动作区间无效
    32 Return 0

(4)说明

①中断程序从“跳转起始行”到“Return”结束;

②中断程序级别以号码1~8表示,数字越小越优先,如ACT1优先于ACT2;

③执行中断程序时,主程序的停止类型如图3-22、图3-23所示。

图3-22 停止类型1(停止过程中的行程相同)

图3-23 停止类型2(以最短时间,最短距离减速停止)和停止类型3(执行完主程序当前行后,再执行中断程序)

3.3.5 Act(Act)

Act——设置“(被定义的)中断程序”的有效工作区间。

(1)功能

Act指令有两重意义:

①Act1~Act8是“中断程序”的程序级别标志。

②Act n=1 Act n=0划出了中断程序Act n的生效区间。

(2)指令格式

Act □ <被定义的程序级别标志>=<1>——中断程序可执行区间起始标志。

Act □ <被定义的程序级别标志>=<0>——中断程序可执行区间结束标志。

指令格式说明:

<被定义的程序级别标志>——设置中断程序的“程序级别标志”。

(3)指令例句1

    1 Def Act 1,M_In(1)= 1 GoSub * INTR'——定义Act1对应的"中断程序"
    2 Mov P1
    3 Act 1= 1'——"ACT1定义的中断程序"动作区间生效
    4 Mov P2
    5 Act 1= 0'——"ACT1定义的中断程序"动作区间无效
    10 * INTR'
    11 If M_In(1)= 1 GoTo * INTR'——M_IN(1)(LOOP)
    12 Return 0'

(4)指令例句2

    1 Def Act 1,M_In(1)= 1 GoSub * INTR'——定义"ACT1"对应的"中断程序"
    2 Mov P1
    3 Act 1= 1'——"ACT1"动作区间生效
    4 Mov P2
    10 * INTR
    11 Act 1= 0'——"Act1"动作区间无效
    12 M_Out(10)= 1'
    Return 1'

(5)说明

①Act 0为最优先状态。程序启动时即为“Act 0=1”状态。如果“Act 0=0”,则“Act 1~8=1”也无效。

②中断程序的结束(返回)由“Return 1”或“Return 0”指定。

Return 1——转入主程序的下一行;

Return 0——跳转到主程序中“中断程序”的发生行。

3.3.6 Def Arch(Define Arch)

Def Arch——定义在Mva指令下的弧形形状。

(1)功能

本指令用于定义在Mva指令下的弧形形状。如图3-24所示。

图3-24 Mva运行轨迹各部示意图

(2)指令格式

Def Arch <弧形编号>[<上升移动量>][<下降移动量>][<上升待避量>][<下降待避量>][<插补形式>][<插补类型1> □ <插补类型2>]

(3)说明

①Mva是“圆弧过渡插补指令”;其弧形形状可以由本指令定义。各参数示意如表3-5所示。

表3-5 参数与弧形编号及数值

②插补类型:设置直线插补或关节插补。直线插补=1,关节插补=0。

③插补类型1:移动路径,远路径/捷径选择,远路径=1,捷径=0。

④插补类型2:3轴直交/等量旋转选择,3轴直交=1,等量旋转=0。

如果未指定弧形编号,则使用初始值,初始值可以用参数设置,如表3-6所示。

表3-6 参数与弧形编号插补类型

(4)指令例句

    1 Def Arch 1,5,5,20,20
    2 Mva P1,1'——以弧形编号Arch1定义的轨迹运行
    3 Dly 0.3
    4 Mva P2,2'——没有定义弧形编号Arch2时,以初始值运行
    5 Dly 0.3

3.3.7 Def Jnt(Define Joint)

Def Jnt(Define Joint)——定义关节型变量。

(1)功能

常规的关节型变量是以“J”为起首字母,如果不是以“J”为起首字母的关节型变量,就使用本指令定义。

(2)指令格式

Def □ Jnt □ <关节变量名>[<关节变量名>]…

(3)指令例句

    1 Def Jnt SAFE '——定义"退避点SAFE"为关节型变量
    2 Mov J1 '
    3 SAFE =(-50,120,30,300,0,0,0,0) '——设置退避点数据
    4 Mov SAFE'——移动到"退避点"

3.3.8 Def Pos(Define Position)

Def Pos(Define Position)——定义直交型变量。

(1)功能

本指令用于将变量定义为直交型。常规直交型变量以“P”起首。若是定义非“P”起首的直交型变量则使用本指令。

(2)指令格式

Def □ Pos <位置变量名>,<位置变量名>

(3)指令例句

    1 Def Pos WORKSET'——定义WORKSET为"直交型变量"
    2 Mov P1 '
    3 WORKSET=(250,460,100,0,0,-90,0,0)(0,0)'——定义WORKSET具体数据
    4 Mov WORKSET'——移动到"WORKSET"点

3.3.9 Def Inte/Def Long/Def Float/Def Double

Def Inte/Def Long/Def Float/Def Double——定义变量的数值类型。

(1)功能

定义变量为数值型变量并指定精度(如单精度、双精度等)。

(2)指令格式

Def □ Inte □ <数值变量名> □[□ <数值变量名>]…

Def □ Long □<数值变量名> □[□ <数值变量名>]…

Def □ Float □ <数值变量名> □[□ <数值变量名>]…

Def □ Double □ <数值变量名> □[□ <数值变量名>]…

(3)指令例句1:定义整数型变量

    1 Def Inte WORK1,WORK2'——定义变量WORK1,WORK2为整数型变量
    2 WORK1 =  100'——WORK1=  100
    3 WORK2 =  10.562'——WORK2 =  11
    WORK2 =  10.12'——WORK2 =  10

(4)指令例句2:定义长精度整数型变量

    1 Def Long WORK3
    2 WORK3 =  12345

(5)指令例句3:定义单精度型实数变量

    1 Def Float WORK4
    2 WORK4 =  123.468'——WORK4= 123.468000

(6)指令例句4:定义双精度型实数变量

    1 Def Double WORK5'
    2 WORK5 =  100/3'——WORK5 =  33.333332061767599

(7)说明

①以Inte定义的变量为整数型,范围:-32768 ~ +32767 □。

②以Long定义的变量为长整数型,范围:-2147483648 ~ 2147483647。

③以Float定义的变量为单精度型实数,范围:±3.40282347e+38。

④以Double定义的变量为单精度型实数,范围:±1.7976931348623157e+308 □。

3.3.10 Def Char(Define Character)

Def Char(Define Character)——对字符串类型的变量进行定义。

(1)功能

本指令用于定义不是“C”为起首字母的“字符串类型”的变量。“C”起首的“字符串类型”变量不需定义。

(2)指令格式

Def □ Char □ <字符串> □[□ <字符串>]…

<字符串>——需要定义为变量的“字符串”。

(3)指令例句

    1 Def Char MESSAGE'——定义MESSAGE为字符串变量
    2 MESSAGE =  "WORKSET" '——将 "WORKSET"代入MESSAGE

CMSG ="ABC" CMSG也是字符串变量,但“CMSG”以“C”为起首字母,所以无须定义。

(4)说明

①字符串变量最大16个字符。

②本指令可定义多个字符串。

3.3.11 Def IO(Define IO)

Def IO(Define IO)——定义输入输出变量。

(1)功能

本指令用于定义输入输出变量。常规的输入输出变量用M_ In,M_ Out/8、M_ Inb,M_Outb/1 6、M_Inw,M_ Outw表示,除此之外,还需要使用更特殊范围的输入输出信号,就使用本指令。

(2)指令格式

Def IO <输入输出变量名> = <指定信号类型> <输入输出编号>[<Mask信息>]

①<输入输出变量名>——设置变量名称。

②<指定信号类型>——指定“位(1 bit)”,“字节(8 bit)”,“字符(1 6 bit)”其中一个。

③<输入输出编号>——指定“输入输出信号”编号。

④<Mask信息>——特殊情况使用。

(3)指令例句1

    1 Def IO PORT1 =  Bit,6'——定义变量PORT1为"bit"型变量。对应输出地址编号= 6
    10 PORT1 =  1'——指令输出信号(6)= ON
    20 PORT1 =  0'——指令输出信号(6)= OFF 。
    21 M1 =  PORT1'——将输出信号6的状态赋予M 1

(4)指令例句2

将PORT2以字节的形式处理。Mask信息指定为十六进制0F。

    1 Def IO PORT2 =  Byte,5,&H0F'——定义PORT2为字节型变量,对应输出信号地址编号为"5"
    10 PORT2 =  &HFF'——定义输出信号(5)~(12)= ON
    20 M2 =  PORT2'——将输出信号PORT2的状态赋予M2 □

(5)指令例句3

    1 Def IO PORT3 =  Word,8,&H0FFF'——定义PORT3为字符型变量,对应输出信号地址编号为"8"
    10 PORT3 =  9'——输出信号(8)~(11)= ON
    20 M3 =  PORT3'——将输出信号PORT3的状态赋予M3

3.3.12 Def FN(Define Function)

Def FN(Define Function)——定义任意函数。

(1)功能

本指令用于定义任意函数。

(2)指令格式

Def □ FN<识别文字><名称>[(<自变量>[□ <自变量>]…)]=<函数计算式>

(3)说明

①<识别文字>——用于识别函数分类的文字。

M——数值型。

C——字符串型。

P——位置型。

J——关节型。

②<名称>——需要定义的函数“名称”。

③<自变量>——函数中使用的自变量。

④<函数计算式>——函数计算方法。

(4)指令例句

    1 Def FN M Ave(ma,mb)=(ma+ mb)/2'——定义一个数值型函数。函数名称"Ave",有两个自变量。函数计算是求平均值
    2 MDATA1= 20
    3 MDATA2= 30
    4 MAVE= FNMAve(MDATA1,MDATA2)'——将20和30的平均值25代入变量MAVE
    5 Def FNpAdd(PA,PB)= PA+ PB'——定义一个位置型函数。函数名称"Add",有两个自变量位置点。函数计算是位置点加法运算
    6 P10= FNpAdd(P1,P2)'——将运算后的位置点代入P10

(5)说明

FN+<名称>会成为函数名称,例:

数值型函数FNMMAX以M为识别符。

字符串函数FNCAME$以C为识别符(在语句后面以$记述)。

3.3.13 Tool(Tool)

Tool(Tool)——TOOL数据的指令。

(1)功能

本指令用于设置TOOL的数据,适用于双抓手的场合,TOOL数据包括抓手长度、机械I/F位置、形位(pose)。

(2)指令格式

Tool □ <Tool数据>

<Tool数据>——以位置点表达的Tool数据。

(3)指令例句1

直接以数据设置:

    1 Tool(100,0,100,0,0,0)'——设置一个新的Tool坐标系。新坐标系原点
    2 Mvs P1
    3 Tool P_NTool'——返回初始值(机械IF,法兰面)

(4)指令例句2

以直角坐标系内的位置点设置:

    1 Tool PTL01
    2 Mvs P1

如果PTL01位置坐标为(100,0,100,0,0,0,0,0),则与指令例句1相同。

(5)说明

①本指令适用于双抓手的场合。每个抓手的“控制点”不同。单抓手的情况下一般使用参数MEXTL设置即可。

②使用TOOL指令设置的数据存储在参数MEXTL中。

③可以使用变量M_Tool,将MEXTL1~4设置到Tool数据中。

3.3.14 Base(Base)

Base——设置一个新的“世界坐标系”。

(1)功能

本指令通过设置偏置坐标建立一个新的“世界坐标系”。“偏置坐标”为以“世界坐标系”为基准观察到“基本坐标系原点”的坐标值。“世界坐标系”与“基本坐标系”的关系如图3-25所示。

图3-25 “世界坐标系”与“基本坐标系”的关系

(2)指令格式

Base □ <新原点>'——用新原点表示一个新的“世界坐标系”。

Base □ <坐标系编号>——用“坐标系编号”选择一个新的“世界坐标系”。

0:系统初始坐标系P_NBase。P_NBase=(0,0,0,0,0,0)。

1~8:工件坐标系1~8。

(3)指令例句1

    1 Base(50,100,0,0,0,90)'——以"新原点"设置一个新的"世界坐标系"。这个点是"基本坐标系原点"在新坐标系内的坐标值
    2 Mvs P1'
    3 Base P2'——以"P2点"为基点设置一个新的"世界坐标系"
    4 Mvs P1'
    5 Base 0'——返回初始"世界坐标系"

(4)指令例句2——以“坐标系编号”选择“坐标系”

    1 Base 1'——选择1号坐标系WK1CORD
    2 Mvs P1'
    3 Base 2'——选择2号坐标系WK2CORD
    4 Mvs P1'
    5 Base 0'——选择初始"世界坐标系"

(5)说明

①新原点数据是从“新世界坐标系”观察到“基本坐标系原点”的位置数据,即“基本坐标系”在“新世界坐标系”中位置。

②使用“当前位置点”建立一“新世界坐标系”时可以使用“Base Inv(P1)”指令(必须对“P1点”进行逆变换)。

3.3.15 Title(Title)

Title(Title)——以文本形式显示程序内容的指令。

(1)功能

本指令用于以文本形式显示程序内容,在其他计算机软件中的机器人栏目中显示“程序内容”。

(2)指令格式

Title □ <文字>

(3)指令例句

    1 Title "机器人Loader Program"
    2 Mvs P1
    3 Mvs P2

3.3.16 赋值指令(代入指令)

(1)功能

本指令用于对变量赋值(代入运算)。

(2)指令格式1

<变量名>=<计算式1>

(3)指令格式2

脉冲输出型

<变量名>=<计算式>Dly <计算式2>

<计算式1>——数值表达式。

(4)指令例句

    10 P100= P1+ P2* 2'——代入位置变量
    20 M_Out(10)= 1'——指令输出信号(10)= ON
    M_Out(17)= 1 Dly 2.0'——指令输出信号(17)= ON的时间为2s

(5)说明

①脉冲输出型指令,其输出=ON的时间与下一行指令同时执行。

②如果下一行为END指令,则程序立即结束。但经过设定的时间后,输出信号=OFF。