当前位置: 首页 > news >正文

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

例如:

iY方向偏移
00 mm
142 mm
284 mm
3126 mm
4168 mm
5210 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 区别

对比项FORWHILE
循环次数已知未知
自动计数
是否需要手动修改变量
常见应用码垛、阵列条件判断、信号检测

一般来说:

  • 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执行程序
1rPickVacuum
2rPickQZ
3rPutQZ
其他提示输入错误

这种方式常用于模式切换或菜单选择。


TEST 与 IF 的区别

对比项IFTEST
判断条件任意条件同一变量的多个取值
代码结构多个 IF...ELSECASE 分支
可读性一般更清晰
适用场景单个条件判断多分支选择

例如:

使用 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
http://www.jsqmd.com/news/1093275/

相关文章:

  • Java毕设项目:便民助老资源统筹服务平台基于前后端分离实现 数字化爱老助老公益服务管理平台设计与开发 (源码+文档,讲解、调试运行,定制等)
  • 前端控制器管理化技术请求分发与视图解析
  • rocky linux安装教程:VMware虚拟机图文讲解部署Rocky Linux 9(附镜像包)
  • 量化盯盘辅助工具:不同AI工具在信息整理与复盘环节的分工用法
  • Casbin 学习指南
  • RAG检索准不准怎么量化:recall@k和MRR实操
  • 总结 6.29
  • Vue 组件通信的多种实现思路
  • Kali Linux中Skipfish扫描DVWA靶场:从工具使用到漏洞验证实战
  • 基于本地大语言模型的AI助手中间件:ai-berkshire部署与集成指南
  • 哈工大高级算法课程期末2026.6复习经验 (本科生的专业限选,选修课)
  • 银行网点实时语音识别解决方案客服沟通合规质检 业务沟通全量留痕
  • GLM-5.2 编程实战全解:744B MoE、1M 无损上下文、Code Arena 全球第一,国产开源长程 Coding 模型怎么用
  • 12 java面试题: JDK 动态代理 CGLIB 动态代理 的区别和联系是什么
  • 【精通】SmartWriter v2.3:流式写作引擎 — Streaming 五种模式深度实战
  • 【黑科技软件】windows电脑鼠标连点器:自动连点+录制回放+屏幕识图,一款软件全搞定(支持中文)
  • 背景介绍与痛点分析
  • Ubuntu CentOS 安装配置SSH完整教程
  • 2026年Vue3项目架构从零到一:目录、分层、代码,每一行都给你说明白
  • ISP Pipeline中径向递减锐化方案实现(四)
  • 华为MetaERP Oracle EBS、SAP(S/4HANA)、华为 MetaERP 全体系深度对比 + 实操业务示例总览三大产品定位Oracle EBS R12:美国甲骨文传统成熟 ERP,
  • 深度解析STL缩略图生成器:Windows文件资源管理器3D预览完整实现指南
  • Day5:用户端用例执行与缺陷管理
  • 一、linux系统安装与环境准备
  • YgoMaster终极PvP对战指南:如何轻松实现局域网联机与好友对战
  • 基于大数据+Hadoop的多维度用户画像构建与个性化推荐应用研究
  • 中山市电感微久智造蜘蛛手编带机厂家
  • 游戏程序化内容生成地形建筑与任务
  • 【Excel】使用“数据透视表”统计所有项的工作量
  • Google Play大改版,AI全面进入 ,游戏出海的商店逻辑全变了