bool
num
string
其他类型的数据类型都是以上三种数据类型的扩展类型。
Robtarget:机器人目标点数据
Trans:工具中心点相对于当前工件坐标系的位置,包含XYZ,单位mm。
Rot:(姿态——四元数),q1,q2,q3,q4,这四个数字的平方和为1。可能涉及到四元数和欧拉角的切换。
Robconf:(使用较少)表示机器人轴配置,包括cf1,cf4,cf6,cfx,前三者表示第一轴、第四轴、第六轴象限数,cdx取决于机械臂类型,对应数据类型是confdata,用来约束机器人姿态,共8种姿态。
问:为什么只关注1,4,6轴呢?有什么相同点?
答:1,4,6轴是旋转轴,2,3,5轴是摆动轴。旋转轴可能超过一圈,整个范围是400°,这样之后就不知道旋转了多少了,10°和370°无法分辨,这时候通过象限来约束。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R5RLnIKN-1638839685044)(C:\Users\Megamind\OneDrive\ABB机器人6个关节轴示意图)]
extax:外轴数据,表示旋转轴或者线性轴,默认为9E9,表示未包含外轴。
例1:
CONST robtarget p1:=[[600,500,225.3],[1,0,0,0],[1,1,0,0],[11,12.3,9E9,9E9,9E9,9E9]];
CongfL:指定机器人在线性运动及圆弧运动过程中是否严格遵循程序中已设定的轴配置参数。默认情况下轴配置监控是打开的,当关闭轴配置监控后,机器人在运动过程中采取最接近当前轴配置数据的某种配置到达指定目标点。(关闭轴监控后,机器人采取最少改变当前轴配置数据的形式完成指令)
例2:
目标点p10种数据[1,0,1,0]就是目标点的轴配置数据;
CONST robtarget p10:=[[*,*,*],[*,*,*,*],[1,0,1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
PROC rMove()
ConfL \Off;
MoveL p10, v1000, fine. tool0; // 机器人自动匹配一组最接近当前各种关节轴姿态的轴配置数据移动到目标点p10,到达该点时,轴配置数据不一定是程序中指定的[1,0,1,0].
ENDPROC
某些应用场合,如离线编程创建目标点或手动示教相邻两目标点间轴配置数据相差较大时,在机器人运动过程中容易出现报警“轴配置错误”而造成停机,此种情况下,若对轴配置要求较高,则一般通过添加中间过渡点,若对轴配置要求不高,则可通过指令ConfL \Off关闭轴监控,使机器人自动匹配可行的轴配置来达到指定目标点。
此外,ConfJ指令针对的是关节线性运动,例如MoveJ运动过程中轴配置监控状态的设置。
注意:
手动状态下,不管设置的speeddata是多少,限速250mm/s
自动状态下,设置的speeddata,机器人根据speeddata实际是设定值运动。
moveabsJ一般用在第一条指令和最后一条指令中,用来回到home点
VAR变量
程序运行过程中可以被赋值,运动结束,VAR返回默认值
PERS可变量
程序运行结束,PERS保留最后值
CONST常量
你懂的
CalcJointT - 计算机器人位置的接头角
VAR jointtarget jointpos1;
CONST robtarget p1 := […];
jointpos1 := CalcJointT(p1, tool1 \WObj:=wobj1);
CalcRobT - 根据接头位置,计算机器人位置
VAR robtarget p1;
CONST jointtarget jointpos1 := […];
p1 := CalcRobT(jointpos1, tool1 \WObj:=wobj1);
CPos - 读取当前位置(pos)数据
VAR pos pos1;
MoveL *, v500, fine \Inpos := inpos50, tool1;
pos1 := CPos(\Tool:=tool1 \WObj:=wobj0);
CRobT - 读取当前位置(机器人位置)数据
VAR robtarget p1;
MoveL *, v500, fine \Inpos := inpos50, tool1;
p1 := CRobT(\Tool:=tool1 \WObj:=wobj0);
六轴机器人无法避免奇异点,四轴没有这个问题。输入目标点后,机器人逆运算出来得到多个轴配置的情况,机器人无法运动,此时报错奇异点。腕奇异点最常见。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ejAkqwv-1638839685046)(C:\Users\Megamind\OneDrive\ABB机器人奇异点)]
手动操作时只需要切换到单轴模式打破奇异点状态就行;
编程时遇到奇异点怎么办:
Tooldata:用于描述工具(例如,焊枪或者夹具)的特征,次类特征包括工具坐标系TCP的位置和方位以及工具负载的物理特征,如果工具是固定在空间中,则工具数据定义在大地坐标系种该工具的位置和方位,并且描述机器人所移动夹具的负载。
负载数据必须准确设定,否则往往会引起以下后果:
参数:Robhold
数据类型:bool
定义机器人是否夹持工具:TRUE 、FALSE
参数:tframe
数据类型:pose:[[x,y,z],[q1,q2,q3,q4]]
工具坐标系,即TCP的位置和工具方向,机器人夹持工具则其相对于腕坐标系tool0(末端法兰盘中心),固定工具(非机器人夹持工具)则其相对于大地坐标系;
注意:不同的工具安装方式(夹持/固定)需要对应的Robhold参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OmD7Ihz8-1638839685046)(C:\Users\Megamind\OneDrive\TCP坐标系)]
参数:tLoad,
数据类型:Loaddata:[mass,[x,y,z],[q1,q2,q3,q4],[ix,iy,iz]]
Wobjdata:用于描述机器人处理的弓箭特征,有如下优势。
参数:robhold,其他同上
参数:ufprog
数据类型:bool
规定是否使用固定的用户坐标系:TRUE——固定的用户坐标系;FALSE——可移动的用户坐标系,即使用外轴协调,同时以半协调模式用于MultiMove系统
参数:ufmec
数据类型:string
用于协调机械臂移动的机械单元,仅在可移动的用户坐标系种进行规定(ufprog为FALSE)
规定系统参数中所定义的机械单元名称,例如Track_1
参数:uframe
数据类型:pose
如果机器人正夹持着工具,则在世界坐标系中定义用户坐标系;如果使用固定工具,则在腕坐标系种定义用户坐标系。
对于可移动的用户坐标系(ufprog为FALSE),由本系统对用户坐标系进行持续定义。
参数:oframe
数据类型:pose
目标坐标系相对于用户坐标系:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SgIF3KYa-1638839685047)(C:\Users\Megamind\OneDrive\image-20211121212436673.png)]
MoveL Offs(p1, 100, 50, 9), v100, …
注意:工具坐标系原点tcp和工具原点不一定重合,tool0时(即未安装任何工具时)两者重合,安装了工具之后就不一定重合了,比如焊枪tcp是距离焊枪头10mm位置浮空的地方,而tool0是安装法兰中心,也就是tcp。
工具重量mass很重要,重心cog也很重要,对机器人运动控制影响很大。
ABB可以通过“甩枪”来计算工具重心。工具长度尽量在4臂长度的一半以下,不能使用太长的工具,不然重心甩不出来。
TCP通过4中不同的姿态,标定同一个物体。新建一个tool2_abb_zhuhai,选中=>编辑=>定义。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L2gRfbuv-1638839685047)(C:\Users\Megamind\OneDrive\ABB机器人标定——4点法(TCP法)])
tool的三个要点:1. 重量kg 2. 重心cog(X,Y,Z),相对于安装法兰中心的坐标 3.TCP
工件坐标系同有特定附加属性的坐标系。它主要用于简化编程,工件坐标系拥有两个框架,用户框架——与大地基坐标相关和工件框架——用户框架相关。
具有两个作用:一是方便用户以工件平面方向为参考手动操纵调试;二是当工件位置更改后,通过重新定义该坐标系,机器人即可正常作业,不需要对机器人程序进行修改。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WDqvMhqN-1638839685048)(C:\Users\Megamind\OneDrive\ABB机器人工件坐标系标定)]
这三点的要求,X1–>X2是X轴正方向,Y1点与X1X2连线不共线,原点是Y1与X1X2延长线的垂线的交点。
三个点用打印机打出来,然后操纵机器人去对纸上的三个点。要使机器人运动轨迹与工件坐标系三轴尽量平行
CRobT 读取当前位置(机器人位置)数据和CJointT 用于读取机械臂轴和外轴的当前角度。
CRobT 示例
VAR robtarget p1;
MoveL *, v500, fine \Inpos := inpos50, tool1;
p1 := CRobT(\Tool:=tool1 \WObj:=wobj0);
CJointT 示例
VAR jointtarget joints;
joints := CJointT();
search搜索
SearchL: 在直线运动时,机器人会监控一个数字输入信号或者持续变量,当信号或者持续变量的值变为所需值时,机器人立即读取当前位置。
例1:
SearchL di1, sp, p10, v100, probe;
以v100的速度,使probe的TCP沿直线朝位置p10 移动。当信号di1的值改变为有效时,将位置储存在sp中,但是机械臂不停止。
例子2:
SearchL \Stop, di2, sp, p10, v100, probe;
将probe的TCP沿直线朝位置p10移动。当信号di2的数值改变为有效时,将位置储存在sp中,且机械臂立即停止。
DefFrame - 定义一个坐标系
DefFrame(Define Frame),用于计算一个坐标系,并从三个位置来定义该坐标系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-emgr29Ow-1638839685048)(C:\Users\Megamind\OneDrive\DefFrame定义坐标系)]
与工件坐标系相关的三个位置p1- p3,用于定义新的坐标系frame1。第一个位置p1,定义新坐标系的原点。第二个位置p2,定义x轴的方向。第三个位置p3,定义xy平面的位置。可将已确定的frame1用作位移坐标系,如以下例子所示:
注意一定是CONST三个常量定点,才可以定义框架
CONST robtarget p1 := […];
CONST robtarget p2 := […];
CONST robtarget p3 := […];
VAR pose frame1;
… …
frame1 := DefFrame (p1, p2, p3);
… …
!Activation of the displacement defined by frame1
PDispSet frame1;
返回值 :数据类型:pose 。计算出的坐标系。 计算与有效工件坐标系相关。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aUDqJRbn-1638839685049)(C:\Users\Megamind\OneDrive\注意图标)]
OrientZYX(Orient from Euler ZYX angles)用于建立一个包含欧拉角的定向变量。
以下示例介绍了函数OrientZYX。 例 1:
VAR num anglex:=30;
VAR num angley:=45;
VAR num anglez:=90;
VAR pose object;
…
object.rot := OrientZYX(anglez, angley, anglex);
返回值
数据类型:orient 。根据欧拉角来确定方位。
EulerZYX(Euler ZYX rotations)用于从orient类型变量获取欧拉角分量。
VAR num anglex;
VAR num angley;
VAR num anglez;
VAR pose object;
anglex := EulerZYX(\X, object.rot);
angley := EulerZYX(\Y, object.rot);
anglez := EulerZYX(\Z, object.rot);
clock数据必须定义为变量类型,最小即使单位1ms
计时指令和函数
ClkStart开始计时
ClkStop停止计时
ClkReset复位时钟
ClkRead读取时钟数值
TPWrite - 写入FlexPendant示教器
TPReadDnum - 从FlexPendant示教器读取编号
TPReadNum - 从FlexPendant示教器读取编号
TPReadFK - 读取功能键
例子:
PROC Routine1()
TPReadNum reg2, “How many products should you buy?”;
reg1 := 0;
count := 0;
WHILE reg1 < reg2 DO
MoveL [[921.11,95.78,1097.92],[0.499999,-1.4298E-7,0.866026,3.02225E-8],[0,-2,1,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]], v1000, z50, tool1;
reg1 := reg1 + 1;
TPWrite “”\Num:=reg1;
ENDWHILE
TPWrite “while complete”;
ENDPROC
例子:
TPReadFK reg1, “More?”, stEmpty, stEmpty, stEmpty, “Yes”, “No”;
例子:
VAR intnum intno1; // d定义中断号
IDelete intno1; //取消当前中断符号intno1的连接,及初始化
CONNECT intno1 WITH tTrap; // 将终端符号与中断程序tTrap连接
ISignalDI di1,1,intno1;
例子:
以下实例介绍了指令ISignalDI:
例 1
VAR intnum sig1int;
PROC main()
CONNECT sig1int WITH iroutine1;
ISignalDI di1,1,sig1int;
下达关于每当数字信号输入信号di1设置为1时出现中断的指令。随后,调用iroutine1软中断程序。
例 2 ISignalDI di1,0,sig1int;
下达关于每当数字信号输入信号di1设置为0时出现中断的指令。
例 3 ISignalDI \Single, di1,1,sig1int;
仅下达数字信号输入信号di1首次设置为1时出现中断的指令。
VelSet的作用是增加或减少所有后续运动指令的已编程速度。该指令也被用来限制最大TCP速度。 本指令仅可用于主任务T_ROB1,或者如果在MultiMove系统中,则可用于运动任务中。
例子:
VelSet 50, 800;
将所有的编程速率降至指令中值的50%。不允许TCP速率超过800 mm/s。
AccSet用于搬运易碎品或减轻振动和路径误差。它能放慢加减速的增减率,从而让机器人的运动更加平顺。 本指令仅可用于主任务T_ROB1,或者如果在MultiMove系统中,则可用于运动任务中。
例子:
AccSet 50, 50;
加速度增减率被限制在正常值的50%,将加速度限制在正常值的50%。
CounterPerMeter
标定:输送链每运行一米,
计算公式:CounterPerMeter = (位置2-位置1)* 当前
本案例中:
CounterPerMeter = (1592.64
错误处理程序
任意程序都可以有一个错误处理程序
PROC Routine1()
ERROR
ENDPROC
错误类型:
EXIT;
RETURN;返回上一级程序
TRYNEXT;执行导致错误的语句之后的语句
RETRY;最多个可以4次
,或者如果在MultiMove系统中,则可用于运动任务中。
例子:
VelSet 50, 800;
将所有的编程速率降至指令中值的50%。不允许TCP速率超过800 mm/s。
AccSet用于搬运易碎品或减轻振动和路径误差。它能放慢加减速的增减率,从而让机器人的运动更加平顺。 本指令仅可用于主任务T_ROB1,或者如果在MultiMove系统中,则可用于运动任务中。
例子:
AccSet 50, 50;
加速度增减率被限制在正常值的50%,将加速度限制在正常值的50%。
CounterPerMeter
标定:输送链每运行一米,
计算公式:CounterPerMeter = (位置2-位置1)* 当前
本案例中:
CounterPerMeter = (1592.64
错误处理程序
任意程序都可以有一个错误处理程序
PROC Routine1()
ERROR
ENDPROC
错误类型:
EXIT;
RETURN;返回上一级程序
TRYNEXT;执行导致错误的语句之后的语句
RETRY;最多个可以4次