在 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。例如iY方向偏移00 mm142 mm284 mm3126 mm4168 mm5210 mm这种方式常用于产品阵列摆放码垛多工位加工二、WHILE 循环WHILE 循环适用于未知循环次数的场景只要条件成立程序就会一直执行。可以搭配BreakProg.Flow使用。语法WHILE 条件 DO 程序 ENDWHILE例如PROC rWhile() j : 0; WHILE j 3 DO j : j 1; ENDWHILE ENDPROC程序说明程序运行过程如下j0 ↓ j3 ↓ jj1 ↓ j1 ↓ j3 ↓ j2 ↓ j3 ↓ j3 ↓ 退出循环WHILE 循环通常用于等待条件满足持续检测输入信号不确定循环次数的任务三、BREAK 和 Exit退出循环会结束当前的FOR或WHILE循环。指令功能BREAK退出当前循环继续执行后续代码EXIT直接结束当前例行程序Procedure四、FOR 与 WHILE 区别对比项FORWHILE循环次数已知未知自动计数✔✘是否需要手动修改变量否是常见应用码垛、阵列条件判断、信号检测一般来说FOR适合固定次数循环。WHILE适合根据条件决定是否继续执行。五、TPEraseTPErase 用于清空示教器上的提示信息。Communicate里面语法TPErase;例如TPErase; TPWrite 程序开始;程序运行后会先清除示教器原有信息再显示新的提示。常用于程序初始化清空历史提示调试程序六、TPWriteTPWrite 用于在示教器上显示提示信息。语法TPWrite 文本内容;例如TPWrite 开始取料;示教器会显示开始取料也可以用于提示程序当前运行状态例如TPWrite 等待工件到位;常用于调试程序显示运行步骤提示操作人员七、TPReadNumTPReadNum 用于从示教器读取用户输入的数字。程序运行到该指令时会暂停等待输入。语法TPReadNum numValue,请输入数字;例如VAR num qty; TPReadNum qty,请输入搬运数量;示教器会弹出输入框请输入搬运数量假设输入6则变量qty6;随后即可在程序中使用例如FOR i FROM 1 TO qty DO rPickQZ; ENDFOR实现根据输入数量自动完成搬运。八、IF 条件判断IF 用于根据条件决定是否执行某段程序是 RAPID 中最常用的流程控制语句。注条件需要更改数据类型为number语法IF 条件 THEN 程序 ENDIF例如IF di10_01 THEN TPWrite 工件到位; ENDIF程序说明当输入信号di10_0为1时示教器显示工件到位如果条件不成立则不会执行TPWrite。IF...ELSE当需要根据不同条件执行不同程序时可以使用 ELSE。IF di10_01 THEN TPWrite 开始抓取; ELSE TPWrite 等待工件; ENDIF程序运行逻辑判断 di10_0 │ ┌────┴────┐ │ │ di10_01 否 │ │ 开始抓取 等待工件适用场景判断工件是否到位判断夹爪是否夹紧判断真空是否建立判断机器人运行状态九、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_01 THEN GOTO Pick; ENDIF TPWrite 等待工件; Pick: TPWrite 开始取料; ENDPROC程序说明当di10_01时程序直接跳转到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执行程序1rPickVacuum2rPickQZ3rPutQZ其他提示输入错误这种方式常用于模式切换或菜单选择。TEST 与 IF 的区别对比项IFTEST判断条件任意条件同一变量的多个取值代码结构多个 IF...ELSECASE 分支可读性一般更清晰适用场景单个条件判断多分支选择例如使用 IFIF mode1 THEN rPickVacuum; ELSEIF mode2 THEN rPickQZ; ELSEIF mode3 THEN rPutQZ; ELSE TPWrite 输入错误; ENDIF使用 TESTTEST mode CASE 1: rPickVacuum; CASE 2: rPickQZ; CASE 3: Break; DEFAULT: TPWrite 输入错误; ENDTEST可以看到TEST 在分支较多时更加简洁程序结构也更加清晰。适用场景TEST常用于以下场景设备模式切换自动 / 手动模式选择产品型号选择菜单功能选择多工位加工不同例行程序调用小结本文介绍了 RAPID 编程中常用的流程控制和示教器交互指令指令功能FOR固定次数循环WHILE条件循环BREAK退出当前循环继续执行后续代码。会结束当前的FOR或WHILE循环并继续执行循环后面的代码。TEXT直接结束当前例行程序ProcedureTPErase清空示教器提示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