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。