ABB工业机器人编程基础(十一)流程控制:FOR、WHILE 与示教器交互指令

在 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退出循环

会结束当前的 FORWHILE 循环。

指令 功能
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_01 时,示教器显示:

复制代码
工件到位

如果条件不成立,则不会执行 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...ELSETEST 结构更加简洁,程序也更容易阅读和维护。


语法

复制代码
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 退出当前循环,继续执行后续代码。会结束当前的 FORWHILE 循环,并继续执行循环后面的代码。
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