第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

嗯,这里要注意:ENDPROCENDMODULE必须成对出现。少一个,机器人就罢工给你看。我曾经在调试时漏了一个ENDMODULE,结果整个程序编译不过去,找了半小时才发现。

4.2 数据类型:机器人认识哪些“东西”?

机器人不认识“苹果”或“螺丝”,它只认数字、坐标和字符串。RAPID的数据类型,说白了就是给机器人“翻译”用的。

数据类型 说明 示例
num 数值,整数或小数 103.14
string 字符串,用双引号括起来 "Hello"
bool 布尔值,真或假 TRUEFALSE
robtarget 机器人目标位置(含姿态) [[x,y,z],[q1,q2,q3,q4]]
speeddata 速度数据 v100v500
zonedata 转弯区数据 finez10

我个人习惯把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语言入门 程序结构 程序模块 系统模块 主程序/例行程序 数据类型 num / string / bool robtarget speeddata / zonedata 变量与常量 VAR(变量) CONST(常量) 全局/局部作用域 表达式与运算符 算术 / 比较 / 逻辑 实践应用 运动控制 / 逻辑判断

这张图把本章的四个核心模块串起来了。你从“程序结构”出发,理解骨架;然后学“数据类型”,知道机器人认识什么;再学“变量与常量”,学会怎么存数据;最后用“表达式与运算符”让数据动起来。一环扣一环。

我的建议:学RAPID别死记硬背。你可以在仿真软件里新建一个程序,把今天讲的代码敲一遍。哪怕只是让机器人动一下,也比看十遍书强。我记得我第一次写RAPID程序,就是让机器人画了个“8”字,虽然简单,但那种成就感,嗯,你试了就知道。


专注资料整理