# 🤖 ABB RAPID 编程语言常用数据类型与 API 中文参考手册> 📘 版本:v1.0
> 🧩 适用平台:ABB RobotStudio / IRC5 控制器
> 🧠 内容说明:
> 本文档汇总 RAPID 语言中常用 **数据类型** 与 **API 指令函数**,适合中级及以上开发者查阅。
> 包含运动控制、坐标系统、变量类型、逻辑控制、I/O、系统函数等。
🧾 一、基础数据类型(Basic Types)
| 类型 | 描述 | 示例 |
|---|
num | 数值型,可为整数或小数 | VAR num speed := 100; |
bool | 布尔型,取值 TRUE/FALSE | VAR bool flag := TRUE; |
string | 字符串类型 | VAR string name := "Robot1"; |
time | 时间类型(单位秒) | VAR time tWait := 1.5; |
clock | 系统时钟类型 | VAR clock c1; |
speeddata | 运动速度数据结构 | v100, v50 |
zonedata | 路径圆滑区结构 | z10, fine |
pose | 位姿(位置+旋转) | [ [100,0,50],[1,0,0,0] ] |
orient | 方向(四元数) | [1,0,0,0] |
robtarget | 机器人目标位置 | [ [x,y,z],[q1,q2,q3,q4],[cf1,cf4,cf6,cfX],[e1,e2,e3,e4] ] |
jointtarget | 关节目标角度 | [ [j1..j6],[e1..e6] ] |
tooldata | 工具数据 | 见下 |
wobjdata | 工件坐标数据 | 见下 |
confdata | 姿态配置数据 | [cf1,cf4,cf6,cfX] |
extjoint | 外部轴角度结构 | [e1,e2,e3,e4,e5,e6] |
triggdata | 触发信号数据 | 用于定时或距离触发 I/O |
🧩 二、复杂结构类型(Structure Types)
1️⃣ 工具数据(tooldata)
PERS tooldata tool1 := [TRUE,[[10,0,100],[1,0,0,0]],[1,[0,0,50],[1,0,0,0],0.01,0.01,0.01]
];
| 字段 | 含义 |
|---|
robhold | 工具是否由机器人持有(TRUE/FALSE) |
tcp | 工具中心点位置与方向 |
loaddata | 质量、重心与惯性 |
2️⃣ 工件数据(wobjdata)
PERS wobjdata wobj0 := [FALSE,TRUE,"",[[0,0,0],[1,0,0,0]],[[0,0,0],[1,0,0,0]]
];
| 字段 | 含义 |
|---|
ufprog | 用户帧是否编程定义 |
uframe | 用户坐标系 |
oframe | 工件原点 |
active | 是否激活工件 |
3️⃣ 机器人目标位置(robtarget)
VAR robtarget p1 := [[500,0,300],[0.707,0,0.707,0],[0,0,1,0],[9E9,9E9,9E9,9E9]
];
| 元素 | 含义 |
|---|
[x,y,z] | 空间坐标(mm) |
[q1,q2,q3,q4] | 姿态(四元数) |
[cf1,cf4,cf6,cfX] | 姿态配置 |
[ext1..ext4] | 外部轴位置 |
4️⃣ 关节角度(jointtarget)
VAR jointtarget jHome := [[0,0,0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]
];
| 元素 | 含义 |
|---|
[j1..j6] | 机器人6轴关节角度(度) |
[ext1..ext6] | 外部轴角度 |
⚙️ 三、变量修饰符
| 修饰符 | 含义 | 示例 |
|---|
VAR | 普通变量(临时有效) | VAR num count := 0; |
PERS | 持久变量(掉电保存) | PERS bool ready := TRUE; |
CONST | 常量(不可修改) | CONST num PI := 3.14159; |
TASK | 任务间共享变量 | TASK PERS bool flag; |
🧠 四、程序控制 API
| 指令 | 功能 | 示例 |
|---|
IF ... THEN ... ELSE ... ENDIF | 条件判断 | IF x>5 THEN y:=1; ENDIF |
FOR ... TO ... ENDFOR | 循环 | FOR i FROM 1 TO 5 DO ... ENDFOR |
WHILE ... DO ... ENDWHILE | 条件循环 | WHILE NOT ready DO WaitTime 0.1; ENDWHILE |
SELECT ... CASE ... ENDSELECT | 多分支 | 类似 switch |
TRY ... CATCH ... ENDTRY | 异常处理 | 捕获运行错误 |
🦾 五、运动指令(Motion API)
| 指令 | 功能 | 示例 |
|---|
MoveJ | 关节插补运动 | MoveJ p1, v100, z10, tool1; |
MoveL | 笛卡尔直线运动 | MoveL p2, v50, fine, tool1; |
MoveC | 圆弧运动 | MoveC p1, p2, v100, z10, tool1; |
MoveAbsJ | 绝对关节运动 | MoveAbsJ jHome, v100, fine, tool1; |
MoveExtJ | 含外部轴运动 | MoveExtJ jExt, v200, fine, tool1; |
StopMove | 停止运动 | StopMove; |
⚡ 六、路径与速度控制
| 参数 | 类型 | 示例 | 说明 |
|---|
| 速度 | speeddata | v100 | mm/s 或 度/s |
| 精度 | zonedata | z10, fine | 路径平滑度 |
| 工具 | tooldata | tool1 | 当前工具定义 |
| 工件 | wobjdata | wobj0 | 当前工件坐标系 |
🔌 七、I/O 控制 API
| 指令 | 功能 | 示例 |
|---|
SetDO | 设置数字输出为高电平 | SetDO doStart,1; |
ResetDO | 设置数字输出为低电平 | ResetDO doStart; |
PulseDO | 输出脉冲信号 | PulseDO do1, 0.3; |
WaitDI | 等待数字输入 | WaitDI diReady,1; |
ISignalDI | 定义输入中断 | ISignalDI diStop, StopTrap; |
TRAP ... ENDTRAP | 定义中断处理逻辑 | TRAP StopTrap ... ENDTRAP |
🕐 八、时间与等待 API
| 指令 | 功能 | 示例 |
|---|
WaitTime | 等待指定秒数 | WaitTime 1.0; |
WaitUntil | 等待条件成立 | WaitUntil ready=TRUE; |
WaitDI | 等待数字输入 | WaitDI diDone,1; |
💬 九、输出与调试
| 指令 | 功能 | 示例 |
|---|
TPWrite | 向示教器输出文本 | TPWrite "程序启动"; |
ErrWrite | 输出错误日志 | ErrWrite "错误"; |
Write | 控制台输出 | Write "调试信息"; |
🧮 十、数学与位姿函数
| 函数 | 功能 | 示例 |
|---|
Offs(p,x,y,z) | 按XYZ偏移 | MoveL Offs(p1,0,0,100), v50, fine, tool1; |
RelTool(p) | 相对工具偏移 | MoveL RelTool(p1,[0,0,50]),v100,fine,tool1; |
InvPose(p) | 求逆位姿 | p2 := InvPose(p1); |
PoseMult(a,b) | 位姿相乘 | p3 := PoseMult(a,b); |
PoseTrans(a,b) | 位姿变换 | p := PoseTrans(a,b); |
CPos() | 当前笛卡尔位置 | VAR pose p := CPos(); |
CRobT() | 当前 robtarget | VAR robtarget p := CRobT(); |
CJointT() | 当前关节位置 | VAR jointtarget j := CJointT(); |
🧱 十一、常用系统变量
| 系统变量 | 含义 |
|---|
speedoverride | 实时速度倍率 |
stopmove | 停止运动标志 |
tool0, tool1 | 工具数据全局变量 |
wobj0 | 默认工件坐标 |
ERRNO | 最近错误编号 |
TASK_PERS | 跨任务变量修饰符 |
📘 十二、程序示例
MODULE DemoPERS tooldata tool1 := [TRUE,[[10,0,100],[1,0,0,0]],[1,[0,0,50],[1,0,0,0],0.01,0.01,0.01]];PERS wobjdata wobj0 := [FALSE,TRUE,"",[[0,0,0],[1,0,0,0]],[[0,0,0],[1,0,0,0]]];PROC main()TPWrite "程序启动";MoveJ pHome, v100, fine, tool1;WaitTime 0.5;MoveL Offs(pTarget,0,0,100), v50, fine, tool1;TPWrite "到达目标";ENDPROC
ENDMODULE
🧩 十三、参考命名规范
| 类别 | 建议前缀 | 示例 |
|---|
| 数字输入 | di | diStart, diStop |
| 数字输出 | do | doLight, doClamp |
| 位置点 | p | pHome, pTarget |
| 工具数据 | tool | tool1, toolGripper |
| 工件数据 | wobj | wobjTable |
📚 附录:常见系统常量
| 常量 | 说明 |
|---|
TRUE / FALSE | 布尔值 |
fine | 精确停止点 |
vmax | 最大速度 |
9E9 | 外部轴未定义标志 |
🧠 提示:
- RAPID 为强类型语言,声明类型必须一致。
- 四元数必须归一化,否则会导致姿态误差。
fine 区域表示“运动停止点”,而 z10 等代表“路径过渡区”。- 所有 I/O 名称必须与硬件配置一致。