跳到主要内容

15.1 变量类型

15.1.1 Int

说明

整型 int 变量的取值范围是 -2147483647 ~ 2147483647,建议赋值在规定范围内,如果超过范围则会随机赋值,使用时请不要超过最大取值范围。

示例

在变量列表中定义:
15.1.1
表示定义了一个整型的变量类型的数据 counter,且初始值等于 4。

15.1.2 Double

说明

浮点数,使用 8 个字节存储,使用时请不要超出取值范围。

示例

在变量列表中定义:
15.1.2
表示定义了一个浮点型的变量 time,且初始值等于 1.5。

15.1.3 Bool

说明

bool 型变量主要用于状态或逻辑判断,取值为 true 或者 false。
当被赋值 int 或 double 值时,非 0 取值为 true,0 取值为 false。

示例

在变量列表中定义:
15.1.3
表示定义了一个 bool 型的变量 ifClose,且初始值为 true。

15.1.4 String

说明

字符串类型变量由多个字母或者数字组成。
注意:在 RL 文本中定义时必须放在双引号 "" 内。

示例

在变量列表中定义:
15.1.4
表示定义了一个字符串变量 name,并初始化为"rokae"。

字符串类型变量支持 " + "操作,可实现字符串拼接。
例如:
name = "Rok" + "ae"
表示变量name被赋值为"Rokae"。

15.1.5 Array

说明

数组是由相同类型的变量组成的集合,可以是一维也可以是多维。数组中的元素使用下标来访问,每一维的下标都从 1 开始。数组总长度不允许超过 1000。

示例

在变量列表中定义:
15.1.5
表示定义了一个二维数组,包含 16 个整型变量,将数组的第一行第 6 个元素赋值为 8。

15.1.6 byte

说明

byte 表示 RL 语言中的无符号字节,相当于 C++ 中的 unsigned char。
取值范围 0~255,不允许为负值。一般用于 SocketSendByte 指令。
当 byte 变量值超过 255 时,会自动进行截断,只保留低 8 位的值。,比如var byte data2 =288,截断后data2 的值为32。

示例

在变量中定义:
15.1.6
定义了一个byte 类型变量data,它的值为177。

15.1.7 clock

说明

clock 用于计时,clock 指令就像用于计时的秒表。
clock 类型存储的时间精度是 0.001s,最大时间间隔 45 天(即 45×24×3600 秒)。

示例

在变量中定义:
15.1.7
下面的例子显示了如何使用变量类型 clock:
例1:
VAR clock clock1;
ClkStart(clock1);
ClkStop(clock1);
interval = ClkRead(clock1);
ClkReset(clock1);
interval(预先声明的 double 变量)读到的是 ClkStart 和 ClkStop 之间的时间间隔,单位是 s。

15.1.8 隐式类型转换

说明

目前,在变量列表中设置数据时,限制了数据类型,即不符合变量类型的值不能成功输入,从而避免类型隐式转化。

示例

在定义整型变量 counter 时,只能输入整数,而不能输入小数。

15.1.9 Confdata

说明

confdata(Robot Configuration Data)用于定义空间目标点对应的形态配置数据。
由于机器人多采用旋转关节,任何一个关节在 1° 和 361° 时表现出来的状态是一样的,因此在选定机器人的形态后,还需要采取其他措施来处理关节的多圈性问题。
对于工业机器人和 xMate ER 协作机器人,我们以象限数的方法来标记关节角度的大致范围,例如当关节角度位于 0~90 度时其象限数为 0,关节角度为 90~180 度时记为 1,每隔 90 度增减 1。角度为负数时,相应的象限数也为负数。如下图所示:左图为关节角度为负时的情形,右图为关节角度为正时的情形。对于机器人关节而言,逆时针转动角度增加,顺时针转动角度减小。在下图中,某关节顺时针转动,关节角度减小,则关节角度对应的confdata 变化分别为-1→-2→-3→-4 和3→2→1→0。
15.1.9
对于 xMate CR 和 SR 协作机器人,我们在 confdata 中直接记录各关节角度向下取整的数值。
此外,同一个笛卡尔空间目标点对应多组不同的运动学逆解,因此需要使用 confdata 来明确指定选择哪一个形态。

定义

需要 7 个参数来构成完整的 confdata,包括:
cf1:数据类型 int,1 轴角度对应的象限或向下取整的关节角度。
cf2:数据类型 int,2 轴角度对应的象限或向下取整的关节角度。
cf3:数据类型 int,3 轴角度对应的象限或向下取整的关节角度。
cf4:数据类型 int,4 轴角度对应的象限或向下取整的关节角度。
cf5:数据类型 int,5 轴角度对应的象限或向下取整的关节角度。
cf6:数据类型 int,6 轴角度对应的象限或向下取整的关节角度。
cf7:数据类型 int,7 轴角度对应的象限或向下取整的关节角度。
cfx:数据类型 int,机器人使用的形态配置编号,取整范围 0~8。

示例

同一个末端笛卡尔位姿有多组不同的逆解,cfx 使用 0~8 这 8 个整数代表各组逆解,详细解释如下:
对于 6 轴工业机器人、xMate ER 协作机器人和 7 轴机器人:
15.1.9 1
对于 xMate CR 协作机器人(Cfx=0 表示离 cf1~6 所代表的关节角度较近的解):
15.1.9 2
对于 xMate SR 协作机器人,cfx 恒为 0,表示离 cf1~6 所代表的关节角度较近的解。
对于 3 轴工业机器人和 4 轴工业机器人:
15.1.9 3

15.1.10 Jointtarget

说明

存储机器人关节角度和外部轴位置。

定义

robax,机器人关节角度(Robot Axis),数据类型 double,包含 7 个double 型的成员,分别存储机器人 7 个关节的角度 Degree。
extax,外部轴位置(External Axis),数据类型 double,包含 6 个 double 型的成员,最多可存储 6 个外部轴的位置信息。如果外部轴为旋转轴,则单位是角度 Degree;如果外部轴为直线轴,则单位是毫米 mm。

示例

在变量列表中定义:
15.1.10
上述语句定义了一个名为 "jointtarget0"的关节空间的点,除六轴为 90 度外,机器人其他轴角度均为 0 度,第一个外部轴位置为 10 度或 10 毫米,取决于外部轴类型。

结构体赋值

jointtarget j1 = J:{-268.649031, 321.536626, 259.344893, 55.143011, 66.111070, 169.543340, 29.916387}{EJ 0,0,0,0,0,0};
说明:
1、J:{…​} 表示机器人 7 个关节的角度,类型为 double。
2、{EJ …​} 表示 6 个外部轴的位置信息,类型为 double,本例中全部设置为 0。

15.1.11 load

说明

load 变量类型用于存储机器人负载的动力学参数。
机器人的负载主要有两种:

  • 安装在机器人末端的工具或工件本身

  • 工具所抓起/吸起来的物体

load 型变量不支持单独创建,只能作为 tool 型变量的成员在标定工具界面手动修改,或者使用负载辨识功能由控制系统自动修改。
正确定义负载的动力学参数可以使得机器人获得最佳性能。错误的定义可能会导致如下后果:

  • 机器人无法最大化利用伺服系统的能力,导致性能下降。

  • 路径精度降低,定位误差变大。

  • 机械部件过载导致寿命降低或损坏

定义

在 xCore 系统中负载被当做刚体来处理,用于描述负载的参数如下:
mass,质量(Mass),数据类型 double,用于描述负载的质量,单位是千克 kg。
cogx,质心(Center of Gravity)在 X 方向的偏移量,数据类型 double。如果工具安装在机器人上,则 cogx 记录负载质心在工具坐标系下 X 方向的偏移量;如果使用外部工具功能,则 cogx 记录被抓手夹持的负载质心在工件坐标系下 X 方向的偏移量。
cogy,质心(Center of Gravity)在 Y 方向的偏移量,数据类型 double。如果工具安装在机器人上,则 cogy 记录负载质心在工具坐标系下 Y 方向的偏移量;如果使用外部工具功能,则 cogy 记录被抓手夹持的负载质心在工件坐标系下 Y 方向的偏移量。
cogz,质心(Center of Gravity)在 Z 方向的偏移量,数据类型 double。如果工具安装在机器人上,则 cogz 记录负载质心在工具坐标系下 Z 方向的偏移量;如果使用外部工具功能,则 cogz 记录被抓手夹持的负载质心在工件坐标系下 Z 方向的偏移量。
q1~q4,四元数,记录负载惯量主轴的方向,数据类型 double。
当工具安装在机器人上时,惯量主轴的方向是在工具坐标系下描述的,见下图:
15.1.11 1
当使用外部工具时,惯量主轴的方向是在工件坐标系下描述的,见下图:
15.1.11 2
Ix,惯量 x,数据类型 double,负载沿 x 主轴的惯量,单位 kg·m²。
Iy,惯量 y,数据类型 double,负载沿 y 主轴的惯量,单位 kg·m²。
Iz,惯量 z,数据类型 double,负载沿 z 主轴的惯量,单位 kg·m²。
注意:正确定义负载惯量有助于提升机器人运动精度,尤其是搬运较大物体的情况下。如果ix、iy、iz 都被设置为零,则负载将会被当做一个质点来处理。通常情况下,如果负载质心到法兰中心点的距离小于负载本身的最大尺寸时,就应该对负载惯量进行定义,如下图:
15.1.11 3

15.1.12 orient

说明

存储坐标系或空间刚体的姿态信息。orient 类型的变量不支持单独创建或者修改,仅作为某些变量的成员变量。

定义

RL 语言系统使用四元数来表示姿态,因此共有 4 个分量:
q1,数据类型 double,四元数的第一个分量。
q2,数据类型 double,四元数的第二个分量。
q3,数据类型 double,四元数的第三个分量。
q4,数据类型 double,四元数的第四个分量。

备注

通常情况下我们使用旋转矩阵来描述刚体的姿态,四元数是另一种更为简洁的姿态描述方式。四元数的四个分量满足如下关系:q1^2 + q2^2 + q3^2 + q4^2 = 1
旋转矩阵和四元数之间可以相互转换,假设有一个旋转矩阵R:
15.1.12 1
则:
15.1.12 2

15.1.13 pos

说明

用来存储三维空间的位置信息。
pos 类型的变量不支持单独创建或者修改,仅作为某些变量的成员变量。

定义

RL 语言系统使用笛卡尔坐标系来描述三维空间,因此 pos 变量有 x、y、z 三个分量。
X,数据类型 double,位置的 x 坐标。
Y,数据类型 double,位置的 y 坐标。
Z,数据类型 double,位置的 z 坐标。

15.1.14 pose

说明

存储笛卡尔空间的位置和姿态。

定义

X,数据类型 double,位置的 X 坐标。
Y,数据类型 double,位置的 Y 坐标。
Z,数据类型 double,位置的 Z 坐标。
Q1,数据类型 double,四元数的第一个分量。
Q2,数据类型 double,四元数的第二个分量。
Q3,数据类型 double,四元数的第三个分量。
Q4,数据类型 double,四元数的第四个分量。

结构体赋值

pose pose_obj = PE:{{X,Y,Z},{Q1,Q2,Q3,Q4}};
参数含义见上方定义。
具体示例:pose pose_obj = PE:{{100,100,100},{1,0,0,0}};
该结构体支持对欧拉角进行赋值,详情见 robtarget 结构体说明。

15.1.15 robtarget

说明

存储三维空间的笛卡尔位置和姿态,用于 MoveJ、MoveL、MoveC 以及 MoveT 指令。
由于机器人运动学逆解存在多解性,对于同一个目标位姿,机器人往往可以采用多种不同的形态到达,为了明确的指定采用哪一种配置形态,robtarget 变量中还包含了机器人配置(Robot Configuration)数据。
robtarget 类型的变量在通过辅助编程插入运动指令时自动创建,手动更改变量内部的值可能会导致 Pose 和 ConfData 不对应,机器人无法正常执行运动指令。
注意:机器人程序中使用笛卡尔位置和姿态均是在工件坐标系下定义的。如果最终使用的工件与最初编程时使用的工件不一样,会导致机器人的运动偏离期望路径。因此对于以下两种情况要确认工件的变更不会造成危险:

  • 使用“修改指令”功能更改指令的 wobj 参数时;

  • 实际使用的工件与程序指令中使用的工件不一样时。

不当使用会导致人员受伤或设备损坏!

定义

Trans,空间位置,数据类型 pos,保存在参考坐标系下的位置偏移量。
Rot,姿态,数据类型 orient,保存在参考坐标系下的姿态。
Conf,机器人配置数据(Robot Configuration),数据类型 confdata,保存机器人的位形配置数据,详见confdata介绍。
Extax,外部轴信息(External Axes),数据类型 double,extax 包含 6 个 double 型的成员,最多可存储 6 个外部轴的位置信息。如果外部轴为旋转轴,则单位是角度 Degree;如果外部轴为直线轴,则单位是毫米 mm。

示例

15.1.15
定义了一个名为p1 的笛卡尔位姿,其位置与姿态(四元数表示)如上所示,臂角角度为10 °,1,3,5,7 轴的角度均处于0 ~ 90°之间,机器人对应第一组位型构型(详见confdata),所有外部轴处于零位。

结构体赋值

robtarget rob1 = p:{{849.572593, -347.654631, 35.341636},{-0.361604, 0.078279, 0.640346, -0.673106}, -1.058584}{cfg 1,2,3,4,5,6,7,8}{EJ 1,2,3,4,5,6};
说明:p:{{空间位置 Trans},{姿态 Rot}, 臂角}{cfg 机器人配置数据 Conf}{EJ 外部轴信息 Extax}
从 3.2 版本开始,robtarget 类型支持直接对欧拉角(即 A、B、C)进行赋值操作。在 3.1 及更早版本中,仅支持通过四元数(q1–q4)设置旋转姿态。
示例代码(伪代码):
PROC main()
robtarget p1;
// 3.1 及之前版本:仅支持四元数赋值
p1.rot.q1 = 1;
p1.rot.q2 = 0;
p1.rot.q3 = 0;
p1.rot.q4 = 0;

// 3.2 版本新增:支持欧拉角赋值
p1.rot.a = someVariable; // 变量
p1.rot.b = 90.0; // 常量
p1.rot.c = reg1; // 寄存器
// 注意:a、b、c 的数据类型为 double
ENDPROC

注意

欧拉角的单位为度(°)
对欧拉角赋值时,赋值源可以是变量、常量或寄存器,只要其值可隐式转换为 double 类型即可。

robtarget 内部同时维护欧拉角(A/B/C)和四元数(q1–q4)两套表示。当其中任一表示被修改时,另一表示将自动同步更新(前提是数据合法)。

四元数合法性处理规则:
四元数必须满足归一化条件(平方和为1),单次赋值后校验:每次对q1、q2、q3 或q4 中任意一个分量赋值后,系统会检查当前四元数是否合法:
若合法:同步更新对应的欧拉角(A/B/C)。
若不合法:不更新欧拉角,保留其原有值。
整体赋值后仍不合法:即使完成全部四元数分量赋值,若最终四元数仍不满足归一化条件,则欧拉角保持不变。此时,系统将在执行运动指令时进行合法性校验,并可能报错或自动归一化(具体行为由运动指令实现决定)。

欧拉角赋值行为说明:
当对a、b 或c 中任意一个分量赋值后,系统会立即根据当前完整的欧拉角值重新计算对应的四元数,并更新rot.q1–q4。
由四元数推导出的欧拉角不会覆盖用户显式设置的欧拉角值。欧拉角也保持原值。这是因为两种表示在数学上等价,无需冗余更新。

15.1.16 signalxx

说明

signalxx 类型的变量用于描述输入与输出信号。
所有 signalxx 类型的变量都需要在“IO 信号列表”中进行定义,然后在程序中使用,不支持在程序中直接声明。
signalxx 目前仅支持数字输入输出,包括如下变量类型:
15.1.16
signaldo 和signalgo 类型仅包含信号的引用,可使用单独的指令(例如Set DO、SetGO 等)来进行赋值。
signaldi 和signalgi 可用于在程序中直接获取所对应输入信号的值。
注意:

  • 不支持在程序中定义/声明 signalxx 类型的变量,如果出现这种用法,程序将会报错。在使用 signalxx 类型的变量之前,请首先在 IO 信号列表中进行配置。

  • signalxx 型变量的作用域为 System,与其他作用域类型的关系为 System > GLOBAL > LOCAL。

  • 如果 IO 配置界面的 Signal 与 RL 程序中声明的变量重名,那么较低作用域级别的变量将被选中。

示例

例1:
// 使用数字输入的状态作为判断条件
IF (di1 == true)
do something…
ENDIF

例2:
//使用数字组输入的状态作为判断条件,例如定义组输入gi2 映射了Profinet IO 的第一个byte 的前三个bit,那么当bit0 ~bit2 的值分别为0,1,1 时,gi2 的值为110(换算成int 型为6),组输出(signalgo)同理。
IF (gi2 == 6)
do something…
ENDIF

15.1.17 speed

说明

用来定义机器人和外部轴的运动速度。
为方便用户使用,系统预设了常用的速度变量,可通过辅助编程直接选择使用。

定义

speed 型变量包含 5 个成员变量,分别是:关节速度百分比、TCP 线速度、空间旋转速度、外轴线速度、外轴角速度。
关节速度百分比(Joint Velocity Percentage):数据类型 double,用于指定关节运动指令时的运动速度,适用于 MoveAbsJ 和 MoveJ 指令,取值范围 1%~100%。
TCP 线速度(Linear Velocity):数据类型 double,定义工具中心点的线速度,取值范围 0.001 毫米/秒 ~ 7000 毫米/秒。
空间旋转速度(Orientation Velocity):数据类型 double,定义工具的旋转速度,取值范围 0.001 度/秒 ~ 500 度/秒。
外部轴线速度:数据类型 double,定义外部直线轴的运动速度,取值范围 0 毫米/秒 ~ 5000 毫米/秒。
外部轴角速度:数据类型 double,定义外部旋转轴的运动速度,取值范围 0 度/秒 ~ 1000 度/秒。

示例

在变量列表中定义:
15.1.17 1
定义了一个名为 speed0 的 speed 变量,其中关节旋转速度为最大允许速度的 40%,TCP 线速度为 300 mm/s,空间旋转速度为 100°/s,外轴角速度为 1000°/s,外轴线速度为 200 mm/s。

结构体赋值

speed speed0 = v:{40,300,100,1000,200};
说明:定义了一个名为speed0 的speed 变量,其中关节旋转速度为最大允许速度的40%,TCP线速度为300 mm/s,空间旋转速度为100°/s,外轴角速度为1000°/s,外轴线速度为200mm/s。

系统预定义了常用的速度变量,具体如下表所示:

名称 关节速度百分比 TCP 线速度 空间旋转速度 外部轴角速度 外部轴线速度

v5

1%

5 mm/s

200°/s

5°/s

2 mm/s

v10

3%

10 mm/s

200°/s

10°/s

5 mm/s

v25

5%

25 mm/s

200°/s

25°/s

12 mm/s

v30

5%

30 mm/s

200°/s

30°/s

15 mm/s

v40

5%

40 mm/s

200°/s

40°/s

20 mm/s

v50

8%

50 mm/s

200°/s

50°/s

25 mm/s

v60

8%

60 mm/s

200°/s

60°/s

30 mm/s

v80

8%

80 mm/s

200°/s

80°/s

40 mm/s

v100

10%

100 mm/s

200°/s

100°/s

50 mm/s

v150

15%

150 mm/s

200°/s

150°/s

75 mm/s

v200

20%

200 mm/s

200°/s

200°/s

100 mm/s

v300

30%

300 mm/s

200°/s

300°/s

150 mm/s

v400

40%

400 mm/s

200°/s

400°/s

200 mm/s

v500

50%

500 mm/s

200°/s

500°/s

250 mm/s

v600

60%

600 mm/s

200°/s

600°/s

300 mm/s

v800

70%

800 mm/s

200°/s

800°/s

400 mm/s

v1000

100%

1000 mm/s

200°/s

1000°/s

500 mm/s

v1500

100%

1500 mm/s

200°/s

1500°/s

750 mm/s

v2000

100%

2000 mm/s

200°/s

2000°/s

1000 mm/s

v3000

100%

3000 mm/s

200°/s

3000°/s

1000 mm/s

v4000

100%

4000 mm/s

200°/s

4000°/s

1000 mm/s

vmax

100%

-

-

-

-

系统预定义的 speed 变量中所有的空间旋转速度都是 200°/s,如果对机器人末端的旋转速度有特殊要求,可根据工艺要求自行定义新的 speed 变量以便使用。

vmax 是唯一一个可以由用户配置的预定义参数,修改方法在8.4.6中已介绍。

15.1.18 tool

说明

tool 型变量用来记录工具参数,包括机器人所用工具的 TCP、姿态以及动力学参数。
机器人使用工具与外部环境交互,因此 tool 变量会从以下几个方面影响机器人的运动:
只有工具中心点 TCP 会按照编程的路径和速度运动,当机器人执行一个空间纯旋转运动时,只有 TCP 会保持不动;
编程时指定的运动路径和速度均是指工具坐标系相对于工件坐标系运动的路径和速度,因此更换良好标定后的工具或工件不影响路径的形状和速度大小;
当使用外部工具时,编程的速度指的是工件的速度(相对于外部工具)。
注意:当使用外部工具时,tool 变量中的 tframe 记录外部工具的零点位置和姿态偏移量,而 tload 则用来记录机器人末端所安装的用于抓取工件的手抓的动力学参数。
tool 型变量的数据都存储在数据库中,加载程序时由程序编辑器从数据库中读出,因此请不要尝试在程序编辑器中直接对 tool 型变量直接修改,以免造成不可预知的错误。如果需要修改 tool 型变量,请通过标定界面进行修改。
请务必正确定义机器人末端负载的动力学参数,包括工具本身以及由工具抓取的物体两部分。错误的定义可能会导致如下后果:

  • 机器人无法最大化利用伺服系统的能力,导致性能下降;

  • 路径精度降低,定位误差变大;

机械部件过载导致寿命降低或损坏。

示例

Robhold:数据类型 bool,定义工具是否安装在机器人上,True 表示工具安装在机器人上,False 表示工具没有安装在机器人上,当前正在使用外部工具。在进行Jog 或者执行程序时,同时使用的工具/工件组合中,robhold 参数只能有一个为True,即如果工具的robhold 为True,则对应的工件robhold 就必须为false,反之亦然,否则机器人会给出错误提示,并无法进行Jog 或执行相应的程序语句。
Tframe:工具坐标系(Tool Frame),数据类型 pose,记录所用工具的工具坐标系,包括 TCP 相对于机器人末端法兰坐标系在 x、y、z 三个方向的偏移量和姿态偏移量,单位是毫米。工具坐标系相对于法兰坐标系的姿态偏移量,用四元数表示,见下图:
15.1.18 1
15.1.18 2
Tload:工具的动力学参数,数据类型 load,记录工具的动力学参数。对于普通工具来讲, tload 描述整个工具的动力学参数,对于外部工具来讲,tload 描述机器人用来夹持工件的手抓的动力学参数。对于安装在机器人上的普通工具来讲,其load 参数包括: 工具的质量(重量),单位kg; 工具的重心,在法兰坐标系下描述,单位毫米;惯量主轴的方向,在法兰坐标系下描述; 以及工具沿惯量主轴的惯量大小,单位kg·m²。如果所有的惯量分量都定义为0 kg·m²,则该工具会被当做一个质点(Point Mass)来处理。

注意:
当使用外部工具功能时,工具的TCP 和姿态是相对于世界坐标系定义的。
如果机器人使用的是外部工具,那tload 成员则用来记录安装在机器人上的手抓的动力学参数,具体的参数含义保持不变。
请注意tload 成员仅仅定义机器人用来(夹持工件的)手抓的动力学参数,被夹持的工件的动力学参数并不包含在内,为了保证机器人在任何情况下都获得最佳性能,需要定义两个tool 变量来处理这种情况:

  • 一个tool 保存手抓本身的所有参数;

  • 另一个tool 保存手抓+被夹持工件的所有参数; 在使用时,通过在运动语句中使用不同的工具来实现有无负载的切换功能。

结构体赋值

tool tool0 = {工具是否手持,{{工具位置},{工具姿态四元数}},{质量,{重心X,重心Y,重心Z},{负载姿态四元数},惯量ix,惯量iy,惯量iz}};
工具是否手持:true,手持;false,外部。
示例:tool tool0 = {true,{{0,0,0},{1,0,0,0}},{0,{0,0,0},{1,0,0,0},0,0,0}};
该结构体支持对负载的欧拉角进行赋值,详情见 robtarget 结构体说明。

15.1.19 Trigdata

说明

trigdata 用于存储有关机器人移动期间触发事件的信息数据,包括触发条件和触发动作。
触发条件通常是机器人到达路径上的指定位置点;触发动作具体形式可以是设置 IO、设置变量等。
trigdata 类型的变量不能通过赋值操作符进行定义,只能通过特定的 RL 指令来定义,因此每一个 trigdata 类型的变量内存储什么样的信息,取决于所使用的 Trig 指令,例如 TrigIO 等;
最终在运动指令 TrigL、TrigC、TrigJ 中,以该数据作为参数使用。

示例

下面的例子显示了如何使用trigdata:
例1
VAR trigdata gripopen;
TrigIO(gripopen, 0.5, do1, true);
TrigL(p1, v500, gripopen, fine, tool1);

15.1.20 wobj

说明

wobj 是工件(Work Object)的缩写,工件指被机器人加工、处理、搬运的物体。
所有运动指令中使用的位置都是在工件坐标系下定义的(如果没有指定工件坐标系,则默认在世界坐标系下定义,世界坐标系可以被看作是 wobj0),这样做有如下几个好处:

  • 很多加工点的位置可以从工件的设计图纸中获得并直接使用。

  • 当机器人被重新安装或者工件被移动后,只需要重新标定工件坐标系就可以直接复用之前的程序,避免了重新编程。

  • 在配备合适传感器的情况下,可以自动补偿工件的震动或者轻微移动。

正常情况下,如果不定义专门的工件坐标系,那么控制系统将把世界坐标系当作默认的工件坐标系wobj0。但是当使用外部工具时,必须要定义工件坐标系,因为此时编程的路径和速度是指工件的路径和速度,而不是工具的。
通常工件坐标系是相对于用户坐标系定义的,但是如果用户未指定用户坐标系,则工件坐标系默认相对于世界坐标系定义,详见机器人坐标系统。
工件实际上由两个坐标系组成,分别是用户坐标系和工件坐标系,在工件坐标系的上层插入一个用户坐标系,是为了支持有多个相同工件需要加工的情况,有关坐标系定义关系的解释详见“定义”部分有关oframe 的解释。

定义

Robhold,定义该工件是否安装在机器人上。True 表示工件安装在机器人上,当前正在使用外部工具;False 表示工件没有安装在机器人上,当前正在使用普通工具。
Ufprog,用户坐标系是否移动(User Frame Programmed),变量类型 bool,定义用户坐标系是固定的还是移动的。e.g 定义在外部变位机或者其他机器人上。该值多用于当需要机器人与变位机或其他机器人协调运动时。
Ufmec,用户坐标系关联的机械单元(User Frame Mechanical Unit),数据类型 string,用机械单元名称的方式来指定用户坐标系与哪个机械单元绑定。
Oframe,工件坐标系(Work Object Frame),数据类型 pose,存储工件坐标系的原点和姿态。
uframe_id,用户坐标系(User Frame)id,数据类型 int,存储用户坐标系的 id。可通过id 找到对应的用户坐标系。
在使用普通工具时(非外部工具),坐标系的定义链为:工件坐标系相对于用户坐标系定义;用户坐标系相对于世界坐标系定义。
15.1.20 1

当使用外部工具时,坐标系的定义链为:工件坐标系相对于用户坐标系定义;用户坐标系相对于法兰坐标系定义。
15.1.20 2

结构体赋值

wobj wobj0 = {Robhold, Ufprog, Ufmec, Oframe, uframe_id, {质量,{重心X,重心Y,重心Z},{负载姿态四元数},惯量ix,惯量iy,惯量iz}};
参数含义见本表格“定义”部分。
示例:wobj wobj0 = {false, true, "robot", {0,0,0}, {1,0,0,0}, 0, {0,{0,0,0},{1,0,0,0},0,0,0}};
该结构体支持对负载的欧拉角进行赋值,详情见 robtarget 结构体说明。

15.1.21 zone

说明

zone 变量用于定义某一个运动如何结束或者说定义两条运动轨迹之间转弯区的大小。
对于同一个机器人指令目标点,在运动指令中有两种处理方式:

  • 当做停止点处理:机器人将运动到目标点且到达目标点时的速度为 0,之后才会继续执行下一条指令;

  • 当做过渡点处理:机器人不会运动到目标点,而是从距离该目标点若干毫米的地方开始转向往下一个目标点运动,转弯路径会偏离编程路径。。两条轨迹之间的过渡区域我们称之为转弯区,见下图:
    15.1.21 1

定义的转弯区的大小不能超过路径长度的一半,如果超过,系统会自动将转弯区缩小到总路径长度一半大小。使用转弯区可以避免机器人频繁启停,显著减少节拍时间。

注意:
在某些特定情况下转弯区会被取消,系统会上报“转弯区被取消 Corner Path Failed”日志,可能的原因包括

  • 转弯区长度过小(0.01 mm/0.00001 rad);

  • 前后两条轨迹中的至少一条长度过小(1 mm/0.001 rad);

  • 前后两条轨迹接近平行且运动方向相反;

  • 前后两条轨迹纯旋转运动转轴反向,如前一条只有末端轴正转,后一条只有末端轴反转。

  • 产生“转弯区被取消”警告时,程序自动将受到影响的语句目标点当做停止点处理。

  • 除了以上几种特殊情况外,所有的逻辑指令也会导致其上一条运动指令的转弯区被取消。

定义

关节轨迹和笛卡尔空间轨迹使用不同的参数来定义转弯区,所以该变量包括 distance 和 percent 两部分。
Distance,笛卡尔空间转弯区大小,数据类型 double,用于 MoveL、MoveC 和 MoveT 指令,定义笛卡尔空间轨迹的转弯区大小,即当机器人运动到距离目标点还有 distance 毫米的地方时,开始转向往下一个目标点运动,单位是毫米,取值范围 0 ~ 200 mm。
Percent,转弯百分比,数据类型 double,用于 MoveJ 和 MoveAbsJ,表示距离目标角度还有多远时开始转弯,100% 表示整个转动角度值的一半;对于只有空间纯旋转运动的 MoveL 指令,也会使用 Percent 参数,而不使用 Distance。

示例

在变量列表中定义:
15.1.21 2
定义了一个zone 变量,其中笛卡尔空间转弯区大小为100 mm,关节空间转弯区大小为50%。

结构体赋值

zone z1 = s:{Distance, Percent};
参数含义见本表格“定义”部分。
示例:zone z1 = s:{1,1};

系统预定义了常用的转弯区变量,具体如下表所示。

名称 笛卡尔空间转弯区大小 转弯百分比

fine

0 mm

0%

z0

0.005 mm

0.0005%

z1

1 mm

1%

z5

5 mm

3%

z10

10 mm

5%

z15

15 mm

8%

z20

20 mm

10%

z30

30 mm

15%

z40

40 mm

20%

z50

50 mm

25%

z60

60 mm

30%

z80

80 mm

40%

z100

100 mm

50%

z150

150 mm

75%

z200

200 mm

100%

15.1.22 torqueinfo

说明

用来描述机器人受到力和力矩信息。
内部包括轴空间力矩信息以及笛卡尔空间力矩信息两个部分。

定义

joint_torque,数据类型,轴空间力矩信息;
cart_torque,数据类型,笛卡尔空间力矩信息;
joint_torque.measure_torque,数据类型 double 数组,轴空间测量力信息,力传感器测量到的各轴所受力矩;
joint_torque.external_torque,数据类型 double 数组,轴空间外部力信息,控制器根据机器人模型和测量力计算出的各轴所受力矩信息;
cart_torque.m_force,数据类型 double 数组,笛卡尔空间(xyz)各个方向受到的力的大小;
cart_torque.m_torque,数据类型 double 数组,笛卡尔空间(xyz)各个方向受到的力矩的大小;

示例

下面的例子显示了如何使用变量类型torqueinfo:
例 1
TorqueInfo tmp_info = GetEndtoolTorque(tool1, wobj1);
// 获得在 tool1 wobj1 条件下机器人末端工具的力矩信息结构体

print(tmp_info.joint_torque.measure_torque);
print(tmp_info.joint_torque.external_torque);
// 打印各个轴的测量力和外部力

print(tmp_info.cart_torque.m_torque);
// 打印笛卡尔空间力矩

print(tmp_info.cart_torque.m_force[1]);
print(tmp_info.cart_torque.m_torque[1]);
// 打印 X 方向的力和力矩信息

15.1.23 SocketServer

说明

在控制器上建立 Socket TCP 服务器,用来监听外部设备以客户端身份发起的连接。该服务器仅用来监听连接请求,支持多连接。当连接建立之后,会生成一个新的 SocketConn 对象来进行通信。
注意:

  • 系统资源申请和释放需要一定时间来处理,不要频繁创建(OpenDev)和销毁(CloseDev)服务器资源,创建和销毁资源期间推荐保留至少 500ms 时间间隔,否则系统资源会超负荷导致出现问题。

  • 该语句仅仅创建了一个服务器资源对象,但是并没有完成服务器创建。服务器需要通过 OpenDev 和 SocketAccept 来进入监听状态。

  • 支持服务器一对多连接。

定义

Ip,数据类型 string,控制系统使用 ip 参数来匹配网卡,并使用对应的网卡进行网络监听。该参数如果设置为 "0.0.0.0" 则表示监听所有网卡的连接。通常设置为 "0.0.0.0" 即可。
Port,数据类型 int,监听端口。外部客户端发起连接时,需要指定服务器端口为此设置的数值。
Name,数据类型 string,RL 程序中使用,此服务器的唯一标识。工程内唯一,多任务间可共享使用,不可命名冲突。

示例

例1
SocketServer ss = {"192.168.0.160", 8090, "svr"};
// 仅监听 ip 配置为 192.168.0.160 的网卡
SocketConn conn = SocketAccept("svr");
例2
SocketServer ss = {"0.0.0.0", 8090, "svr"};
// 监听机器人所有网卡
SocketConn conn = SocketAccept("svr");

15.1.24 SocketConn

说明

Socket TCP 连接对象,可用于对外部设备的通信。分为两种类型:

  • 机器人作为客户端,通过该对象发起向外部设备 TCP 服务器的连接和通信。

  • 机器人作为服务器,当外部设备的 TCP 客户端发起连接之后,产生的与对端设备的通信连接。

定义

Ip,数据类型 string,机器人作为客户端使用时,该参数表示外部设备服务器的 ip;机器人作为服务器使用时,当外部设备建立连接后,该参数表示外部客户端的 ip。
Port,数据类型 int,监听端口。机器人发起连接时,需要指定外部设备服务器端口。
Name,数据类型 string,RL 程序中使用,此连接的唯一标识。工程内唯一,多任务间可共享使用,连接之间以及连接与服务器的命名不能有冲突。
Cache,数据类型 int,缓存大小,表示接收数据最多可以缓存的数量。可缺省,默认值为 1。
Suffix,数据类型 string,结束符,表示一条消息的结束。可缺省,默认值为 "\r"
Attr, 数据类型 string,连接属性。

  • "incoming":本地为服务器,由对端客户端连入。

  • "outgoing":本地为客户端,连接外部服务器。

  • "及其他:不可用连接,表示还没有打开连接或者查找到未建立过的连接。

State:数据类型 string,当前通信连接状态。Closed:连接已关闭;establish:连接已建立正常使用中。

注意:

  • 做客户端使用时,ip、port信息应该由用户编程设置。做服务端使用时,ip、port应该从accept指令自动获取。连接建立以后不要轻易修改这两个值,除非您非常清楚这两项的使用,避免程序逻辑使用出错。

  • suffix随时可以重新设置,在下一次read之前可以生效。谨慎使用该功能,否则会造成通信数据错误。suffix应该在进行通信之前设置好,就不要再更改了。

示例

例1
// 服务器 ip 为 "192.168.0.202",端口号 8090,此连接名称为 "clt",缓存缺省为 1,后缀缺省为 "\r"
SocketConn scnn1 = {"192.168.0.202", 8090, "clt"};

例2
// 服务器 ip 为 "192.168.0.203",端口号 8091,此连接名称为 "clt1",缓存为 2,后缀缺省为 "\r"
SocketConn scnn2 = {"192.168.0.203", 8091, "clt1", 2};

例3
// 服务器 ip 为 "192.168.0.204",端口号 8092,此连接名称为 "clt2",缓存为 2,后缀为 "\n"
SocketConn scnn3 = {"192.168.0.204", 8092, "clt2", 2, "\n"};

例4
// 作为服务器使用,外部设备建立连接以后
//服务器ip为"192.168.0.204",端口号8092,此连接名称为“clt2”,缓存为2,后缀为”\n”
SocketConn conn = SocketAccept("svr1");
Print(conn.ip); // 外部设备的 ip
Print(conn.port); // 外部设备产生该连接所使用的端口
Print(conn.cache); // 接收消息缓冲区队列
Print(conn.suffix); // 收发后缀

15.1.25 FCBoxVol

说明

定义一个空间立方体,用于力控开启之后的位置监控或终止条件。

定义

Xmax 表示立方体边界在 x 正方向的坐标值;
Xmin 表示立方体边界在 x 负方向的坐标值;
Ymax 表示立方体边界在 y 正方向的坐标值;
Ymin 表示立方体边界在 y 负方向的坐标值;
Zmax 表示立方体边界在 z 正方向的坐标值;
Zmin 表示立方体边界在 z 负方向的坐标值;

示例

15.1.25

结构体赋值

FcBoxVol fcboxvol0 = FCBV:{Xmin, Xmax, Ymin, Ymax, Zmin, Zmax};
参数含义见本表格“定义”部分。
示例:FcBoxVol fcboxvol0 = FCBV:{0,1,2,3,4,5};

15.1.26 FCSphereVol

说明

定义一个空间球体,用于力控开启之后的位置监控或终止条件。

定义

Xc:空间球体球心坐标在 x 方向的坐标值;
Yc:空间球体球心坐标在 y 方向的坐标值;
Zc:空间球体球心坐标在 z 方向的坐标值;
Radius:空间球半径;

示例

15.1.26

结构体赋值

FcSphereVol fc = FCSV:{xc, yc, zc, radius};
参数含义见本表格“定义”部分。
示例:FcSphereVol fc = FCSV:{1,2,3,4};

15.1.27 intnum

说明

用作中断的标识。一个 intnum 变量只能标识一个中断。

示例

15.1.27