第4章:RAPID语言入门
各位同学,今天我们来聊聊ABB机器人的“母语”——RAPID语言。说实话,我刚入行那会儿,面对一堆指令和括号,心里也犯过嘀咕。但干久了你会发现,RAPID其实挺“实在”的,它不像C++那么绕,也不像Python那么随意。它就是为了让机器人干活而生的。
4.1 RAPID程序结构:从“骨架”说起
一个RAPID程序,说白了就是一套“动作剧本”。它由几个固定部分拼起来。我习惯把程序结构想象成人的骨架:
- 程序模块(Program Module):这是主程序,存放主要的运动逻辑。比如“搬运流程”、“焊接路径”。
- 系统模块(System Module):这是后台程序,存放全局数据、系统参数。比如工具数据、工件坐标系。
- 主程序(Main Routine):每个模块里都有一个叫
main的入口。机器人一启动,就先找它。 - 例行程序(Routine):相当于子函数。你可以把重复的动作打包成一个例行程序,比如“抓取”、“放置”。
核心要点:程序模块负责“做什么”,系统模块负责“用什么工具做”。两者缺一不可。
举个例子,一个简单的搬运程序结构长这样:
MODULE PickAndPlace ! 程序模块
PROC main() ! 主程序入口
MoveHome;
PickPart;
PlacePart;
ENDPROC
PROC MoveHome() ! 例行程序:回到原点
MoveL [[0,0,500],[1,0,0,0]], v500, fine, tool0;
ENDPROC
PROC PickPart() ! 例行程序:抓取
MoveL [[300,0,100],[1,0,0,0]], v200, fine, tool0;
SetDO gripper, 1; ! 夹爪闭合
ENDPROC
ENDMODULE
嗯,这里要注意:ENDPROC和ENDMODULE必须成对出现。少一个,机器人就罢工给你看。我曾经在调试时漏了一个ENDMODULE,结果整个程序编译不过去,找了半小时才发现。
4.2 数据类型:机器人认识哪些“东西”?
机器人不认识“苹果”或“螺丝”,它只认数字、坐标和字符串。RAPID的数据类型,说白了就是给机器人“翻译”用的。
| 数据类型 | 说明 | 示例 |
|---|---|---|
num |
数值,整数或小数 | 10、3.14 |
string |
字符串,用双引号括起来 | "Hello" |
bool |
布尔值,真或假 | TRUE、FALSE |
robtarget |
机器人目标位置(含姿态) | [[x,y,z],[q1,q2,q3,q4]] |
speeddata |
速度数据 | v100、v500 |
zonedata |
转弯区数据 | fine、z10 |
我个人习惯把robtarget叫做“坐标包”,因为它里面不光有位置(x,y,z),还有姿态(四元数)。你想想看,如果只给位置不给姿态,机器人到了那个点,手腕可能歪着,那就没法干活了。
小技巧:定义速度时,v500表示500mm/s。但实际项目中,我一般不会用满速。比如抓取动作,我常用v200,因为太快了容易把工件甩飞。
4.3 变量与常量:数据怎么“存”和“取”?
变量就像你手里的便签纸,可以随时改内容。常量就像刻在石头上的字,改不了。RAPID里声明变量和常量很简单:
VAR num speed := 100; ! 变量,可以改
CONST num max_speed := 500; ! 常量,不能改
VAR string part_name := "螺丝";
为什么要有常量?我在一个项目中,客户要求机器人最大速度不能超过300mm/s。如果我用变量,万一哪个调试员手一抖改成500,那工件就飞了。用常量,编译时就锁死,谁也改不了。
变量还有作用域之分:
- 全局变量:在模块顶部声明,整个程序都能用。
- 局部变量:在例行程序内部声明,只有那个程序能用。
警告:别滥用全局变量。我曾经见过一个程序,全局变量用了上百个,结果改一个变量,整个程序都跟着乱。能用局部变量就别用全局的。
4.4 表达式与运算符:让机器人“算账”
机器人不光会动,还会算。表达式就是让机器人做数学题。运算符分几类:
算术运算符
VAR num a := 10;
VAR num b := 3;
VAR num c := a + b; ! 加法,c=13
VAR num d := a - b; ! 减法,d=7
VAR num e := a * b; ! 乘法,e=30
VAR num f := a / b; ! 除法,f=3.333
VAR num g := a MOD b; ! 取余,g=1
取余(MOD)在项目中很有用。比如你要让机器人每抓10个工件就停下来清理一下,可以写:
IF (counter MOD 10) = 0 THEN
! 执行清理动作
ENDIF
比较运算符
说白了就是“比大小”:
= =:等于(注意是两个等号)< >:不等于<、>、<=、>=:小于、大于、小于等于、大于等于
逻辑运算符
用于组合条件:
AND:且OR:或NOT:非
举个例子,你要让机器人在“安全门关闭”且“工件到位”时才启动:
IF (door_closed = TRUE) AND (part_present = TRUE) THEN
! 启动程序
ENDIF
避坑指南:我曾经在写条件判断时,把= =写成了=。结果机器人把赋值当成了比较,程序逻辑全乱了。记住:比较用两个等号,赋值用一个等号。
4.5 知识体系总览
下面这张图,是我自己总结的RAPID语言入门知识结构。你可以把它当成一张“地图”,学完这章后,对照着看看自己掌握了哪些:
这张图把本章的四个核心模块串起来了。你从“程序结构”出发,理解骨架;然后学“数据类型”,知道机器人认识什么;再学“变量与常量”,学会怎么存数据;最后用“表达式与运算符”让数据动起来。一环扣一环。
我的建议:学RAPID别死记硬背。你可以在仿真软件里新建一个程序,把今天讲的代码敲一遍。哪怕只是让机器人动一下,也比看十遍书强。我记得我第一次写RAPID程序,就是让机器人画了个“8”字,虽然简单,但那种成就感,嗯,你试了就知道。