在 ABB RAPID 编程中,流程控制可以让机器人重复执行任务,而示教器交互指令则可以实现程序与操作人员之间的信息交互。
本文介绍 FOR 循环 、WHILE 循环 以及 其他常用指令。
一、FOR 循环
FOR 循环用于已知循环次数的场景,系统会自动完成变量递增。
语法
FOR i FROM 起始值 TO 结束值 DO
程序
ENDFOR
例如:
FOR i FROM 0 TO 5 DO
TPWrite "Hello";
ENDFOR
表示循环执行 6 次。
示例程序
PROC rFor()
FOR i FROM 0 TO 5 DO
Set do10_0;
WaitDI di10_0,1;
Reset do10_0;
rPickQZ;
GripLoad loadQZ;
MoveJ Offs(pPutQZ,0,42*i,50), maxSpeed, z50, tVacuum\WObj:=wobjQP;
MoveL Offs(pPutQZ,0,42*i,0), maxSpeed, fine, tVacuum\WObj:=wobjQP;
Reset do10_2;
WaitTime 1;
GripLoad load0;
MoveJ Offs(pPutQZ,0,42*i,50), maxSpeed, z50, tVacuum\WObj:=wobjQP;
ENDFOR
ENDPROC
程序说明
变量 i 每循环一次自动增加 1。
程序中的:
Offs(pPutQZ,0,42*i,0)
表示机器人每完成一次放料,就沿 Y 方向偏移 42 mm。
例如:
| i | Y方向偏移 |
|---|---|
| 0 | 0 mm |
| 1 | 42 mm |
| 2 | 84 mm |
| 3 | 126 mm |
| 4 | 168 mm |
| 5 | 210 mm |
这种方式常用于:
-
产品阵列摆放
-
码垛
-
多工位加工
二、WHILE 循环
WHILE 循环适用于未知循环次数的场景,只要条件成立,程序就会一直执行。可以搭配 Break(Prog.Flow)使用。
语法
WHILE 条件 DO
程序
ENDWHILE
例如:
PROC rWhile()
j := 0;
WHILE j < 3 DO
j := j + 1;
ENDWHILE
ENDPROC
程序说明
程序运行过程如下:
j=0
↓
j<3
↓
j=j+1
↓
j=1
↓
j<3
↓
j=2
↓
j<3
↓
j=3
↓
退出循环
WHILE 循环通常用于:
-
等待条件满足
-
持续检测输入信号
-
不确定循环次数的任务
三、BREAK 和 Exit退出循环
会结束当前的 FOR 或 WHILE 循环。
| 指令 | 功能 |
|---|---|
BREAK |
退出当前循环,继续执行后续代码 |
EXIT |
直接结束当前例行程序(Procedure) |
四、FOR 与 WHILE 区别
| 对比项 | FOR | WHILE |
|---|---|---|
| 循环次数 | 已知 | 未知 |
| 自动计数 | ✔ | ✘ |
| 是否需要手动修改变量 | 否 | 是 |
| 常见应用 | 码垛、阵列 | 条件判断、信号检测 |
一般来说:
-
FOR 适合固定次数循环。
-
WHILE 适合根据条件决定是否继续执行。
五、TPErase
TPErase 用于清空示教器上的提示信息。(Communicate里面)
语法
TPErase;
例如:
TPErase;
TPWrite "程序开始";
程序运行后,会先清除示教器原有信息,再显示新的提示。
常用于:
-
程序初始化
-
清空历史提示
-
调试程序
六、TPWrite
TPWrite 用于在示教器上显示提示信息。
语法
TPWrite "文本内容";
例如:
TPWrite "开始取料";
示教器会显示:
开始取料
也可以用于提示程序当前运行状态,例如:
TPWrite "等待工件到位";
常用于:
-
调试程序
-
显示运行步骤
-
提示操作人员
七、TPReadNum
TPReadNum 用于从示教器读取用户输入的数字。
程序运行到该指令时,会暂停等待输入。
语法
TPReadNum numValue,"请输入数字";
例如:
VAR num qty;
TPReadNum qty,"请输入搬运数量";
示教器会弹出输入框:
请输入搬运数量:
假设输入:
6
则变量:
qty=6;
随后即可在程序中使用,例如:
FOR i FROM 1 TO qty DO
rPickQZ;
ENDFOR
实现根据输入数量自动完成搬运。
八、IF 条件判断
IF 用于根据条件决定是否执行某段程序,是 RAPID 中最常用的流程控制语句。
注:条件需要更改数据类型为number
语法
IF 条件 THEN
程序
ENDIF
例如:
IF di10_0=1 THEN
TPWrite "工件到位";
ENDIF
程序说明:
当输入信号 di10_0 为 1 时,示教器显示:
工件到位
如果条件不成立,则不会执行 TPWrite。
IF...ELSE
当需要根据不同条件执行不同程序时,可以使用 ELSE。
IF di10_0=1 THEN
TPWrite "开始抓取";
ELSE
TPWrite "等待工件";
ENDIF
程序运行逻辑:
判断 di10_0
│
┌────┴────┐
│ │
di10_0=1 否
│ │
开始抓取 等待工件
适用场景
- 判断工件是否到位
- 判断夹爪是否夹紧
- 判断真空是否建立
- 判断机器人运行状态
九、GOTO 跳转
GOTO 用于将程序直接跳转到指定标签继续执行。搭配 Label命令使用。(Prog.Flow标签里面)
语法
GOTO 标签名;
例如:
PROC rGoto()
TPWrite "程序开始";
GOTO NextStep;
TPWrite "不会执行";
NextStep:
TPWrite "程序结束";
ENDPROC
程序执行结果:
程序开始
↓
跳转到 NextStep
↓
程序结束
由于执行了 GOTO NextStep;,中间 "不会执行" 的代码会被跳过。

IF 与 GOTO 配合使用
GOTO 常与 IF 条件判断配合,实现程序流程跳转。
PROC rGoto()
IF di10_0=1 THEN
GOTO Pick;
ENDIF
TPWrite "等待工件";
Pick:
TPWrite "开始取料";
ENDPROC
程序说明:
- 当 di10_0=1 时,程序直接跳转到 Pick 标签。
- 当条件不满足时,先执行
"等待工件",然后继续向下运行。
适用场景
- 流程切换
- 异常处理
- 报警恢复
- 多分支程序
注意: 在实际项目中,推荐优先使用 IF...THEN...ELSE 、循环语句和例行程序(Procedure)组织程序逻辑。
GOTO虽然可以实现快速跳转,但过多使用容易使程序逻辑混乱,因此一般仅在特殊流程控制或异常处理时使用。
十、TEST 多分支判断
TEST 用于根据变量的不同取值执行不同的程序,适用于多个条件分支判断。
相比多个 IF...ELSE,TEST 结构更加简洁,程序也更容易阅读和维护。
语法
TEST 变量
CASE 值1:
程序
CASE 值2:
程序
DEFAULT:
程序
ENDTEST
示例一:根据编号执行不同程序
PROC rTest()
VAR num choose:=2;
TEST choose
CASE 1:
TPWrite "开始取料";
CASE 2:
TPWrite "开始放料";
CASE 3:
TPWrite "程序结束";
DEFAULT:
TPWrite "输入错误";
ENDTEST
ENDPROC
程序运行结果:
当:
choose = 2
示教器显示:
开始放料
示例二:选择运行不同例行程序
PROC rSelect()
VAR num mode:=1;
TEST mode
CASE 1:
rPickVacuum;
CASE 2:
rPickQZ;
CASE 3:
rPutQZ;
DEFAULT:
TPWrite "请选择正确模式";
ENDTEST
ENDPROC
程序说明:
根据变量 mode 的值,调用不同的例行程序。
例如:
| mode | 执行程序 |
|---|---|
| 1 | rPickVacuum |
| 2 | rPickQZ |
| 3 | rPutQZ |
| 其他 | 提示输入错误 |
这种方式常用于模式切换或菜单选择。
TEST 与 IF 的区别
| 对比项 | IF | TEST |
|---|---|---|
| 判断条件 | 任意条件 | 同一变量的多个取值 |
| 代码结构 | 多个 IF...ELSE | CASE 分支 |
| 可读性 | 一般 | 更清晰 |
| 适用场景 | 单个条件判断 | 多分支选择 |
例如:
使用 IF:
IF mode=1 THEN
rPickVacuum;
ELSEIF mode=2 THEN
rPickQZ;
ELSEIF mode=3 THEN
rPutQZ;
ELSE
TPWrite "输入错误";
ENDIF
使用 TEST:
TEST mode
CASE 1:
rPickVacuum;
CASE 2:
rPickQZ;
CASE 3:
Break;
DEFAULT:
TPWrite "输入错误";
ENDTEST
可以看到,TEST 在分支较多时更加简洁,程序结构也更加清晰。
适用场景
TEST 常用于以下场景:
- 设备模式切换
- 自动 / 手动模式选择
- 产品型号选择
- 菜单功能选择
- 多工位加工
- 不同例行程序调用
小结
本文介绍了 RAPID 编程中常用的流程控制和示教器交互指令:
| 指令 | 功能 |
|---|---|
| FOR | 固定次数循环 |
| WHILE | 条件循环 |
| BREAK | 退出当前循环,继续执行后续代码。会结束当前的 FOR 或 WHILE 循环,并继续执行循环后面的代码。 |
| TEXT | 直接结束当前例行程序(Procedure) |
| TPErase | 清空示教器提示 |
| TPWrite | 显示提示信息 |
| TPReadNum | 读取用户输入数字 |
| IF | 用于条件判断,决定程序是否执行某段代码 |
| GOTO | 用于跳转到指定标签继续执行 |
| TEST | 适用于根据同一个变量的不同取值执行不同的程序 |
掌握这些指令后,可以实现循环搬运、阵列码垛、人机交互等功能,也是 ABB 工业机器人编程中最常用的基础知识。
PROC main()
TPErase;
TPWrite "hello";
label1:
TPReadNum userInputVal, "InputYourValue";
IF userInputVal = 1 THEN
TPWrite "1111";
ELSEIF userInputVal = 2 THEN
TPWrite "2222";
ELSE
GOTO label1;
ENDIF
ENDPROC