简介:面向ABB机器人工程师与自动化调试人员的系统选项学习资料,聚焦于RobotWare 6.05体系下各类选装功能的定位与用法,适合需要查阅选项配置、理解功能边界或排查现场问题的初、中级技术人员。压缩包内为1个PDF文件,约3.96MB,内容为ABB官方应用手册的整理版,按手册章节组织,便于按功能模块检索。已有3616人浏览学习,属于该主题下关注度较高的参考文档。文档围绕RobotWare与RobotWare-OS展开,逐项讲解Advanced RAPID的位功能、数据搜索功能、别名I/O信号、配置功能、断电功能与工艺配套功能,每项均配有概述、RAPID组件说明与调用示例;同时涉及控制器软件、IRC5跟踪信息、工作区与文档工具等条目,并在开篇给出手册概述与目录结构。读者可据此快速确认某选项是否满足工艺需求、理解其编程接口与参数含义,并在调试时对照示例完成配置与验证。
1. 一份 120 页的选项手册,到底解决什么现场问题
调一台 IRC5 平台的机器人,工艺那边要“运动中实时判断料有没有到位”,电气那边说“I/O 点数不够了,能不能软件省几根线”,采购那边问“这个 Absolute Accuracy 到底要不要加钱”。三个问题指向同一份东西:系统选项。这份《系统选项介绍》就是 RobotWare 6.05 的选项说明书,按 RobotWare-OS、运动性能两大块,把 Advanced RAPID 九个组件、通信联动类选项、绝对精度与 687-1 家族逐个拆开,给出 RAPID 组件表、系统参数表和代码示例。它不适合当教程从头读到尾,适合当“功能到底归哪个选项、开了之后调哪些参数”的对照表。做产线集成、写 RAPID、做选型报价的三类人,翻它的姿势完全不一样,下面按我的实际用法讲。
2. 选项不是功能开关:RobotWare-OS 的分层结构与 Advanced RAPID 九个组件
很多人把“买选项”理解成打开一个开关,功能就出来了。实际是三层:RobotWare 是控制器操作系统,选项是授权许可,系统参数是配置文件,RAPID 指令是程序里能调用的接口。四者缺一,功能就是不生效。手册的编排也是照这个逻辑走的——每个功能先讲“介绍”,再列“RAPID 组件”,最后给“系统参数”和“示例”。读的时候如果只看示例代码,很容易在真机上翻车,因为示例默认你已经把选项和参数都配好了。
2.1 三层结构怎么对应,先看哪张表
拿到一个功能,我的顺序是固定的:先翻该节的“RAPID 组件”表,确认指令名和数据类型;再翻“系统参数”表,确认要改哪几个参数;最后才看示例代码。原因是 RAPID 指令在没授权时会直接报错,而参数没配对时指令能编译通过但行为不对,后者的排查成本高得多。
以 Advanced RAPID 为例,它下面挂了九个功能:位功能、数据搜索、别名 I/O、配置功能、断电功能、工艺配套、中断功能、用户消息、RAPID 配套。这九个不是平级的独立选项,而是同一个 Advanced RAPID 授权下的不同能力集合,手册把它们并列是为了查阅方便。实际选型时先确认整包,再确认你的程序用到其中哪几个。
| 层次 | 载体 | 出问题时的表现 | 排查入口 |
|---|---|---|---|
| 授权 | 选项密钥/许可文件 | 指令编译报“未知指令” | 系统信息里的选项列表 |
| 参数 | 系统参数配置 | 指令能跑但触发条件不对 | 示教器配置界面 |
| 指令 | RAPID 程序 | 运行时逻辑错误、越界 | 事件日志 + 程序指针 |
| 硬件 | I/O 板、串口、网口 | 信号无反馈、通信超时 | I/O 状态与端口诊断 |
这张表看着简单,但现场九成的“选项不生效”都落在第一层和第二层的混淆上:明明授权有,参数没配,然后怀疑买错了。
2.2 位功能:把八根数字量压进一个字节
位功能是 Advanced RAPID 里最实用、也最容易被忽略的一个。它的价值场景很具体:当你要在机器人程序和 PLC 之间传一组状态位,而现场数字 I/O 点数已经用满,就可以把 8 个布尔状态打包成一个 byte,用 8 个输出点一次传出去,或者反过来把一个字节拆成 8 个状态判断。
VAR byte bStatus; VAR num nIndex; PROC PackStatus() bStatus := 0; ! 第 0 位:夹具闭合到位 IF diGripClosed = 1 THEN bStatus := BitSet(bStatus, 0); ENDIF ! 第 3 位:工件检测有料 IF diPartPresent = 1 THEN bStatus := BitSet(bStatus, 3); ENDIF ! 第 7 位:本循环完成 bStatus := BitSet(bStatus, 7); SetDO doStatusByte, bStatus; ENDPROC PROC UnpackCommand() bStatus := ReadDO? ENDPROC上面第二段是我删掉重写的,因为这里正是第一个坑:RAPID 里读回自己刚 SetDO 的字节,不能想当然。正确做法是单独用一个 byte 变量保存,或者在接收侧用GetDI?这类按位组读取的方式。手册示例给的是发送侧打包,接收侧拆包要用BitGet(bStatus, nIndex)逐位判断:
PROC CheckCommand() bStatus := ReadInputByte(); ! 自定义函数,从 8 个输入点拼字节 IF BitGet(bStatus, 2) = 1 THEN ! 第 2 位为 1:允许启动 StartCycle(); ENDIF IF BitGet(bStatus, 5) = 1 THEN ! 第 5 位为 1:请求复位 ResetCycle(); ENDIF ENDPROC逻辑说明:BitSet(值, 位号)返回置位后的新值,必须重新赋值回去,不能写成BitSet(bStatus, 0);单独一行,那样等于没做。BitGet(值, 位号)返回 0 或 1。位号从 0 开始,一个 byte 是 0 到 7,一个 word 是 0 到 15。
参数说明:打包时顺序要和 PLC 侧严格对齐,PLC 那边如果按大端解析,位序会反过来。我的习惯是先在纸面上画一张位分配表,写清楚第几位是什么信号、正常态是 0 还是 1,然后把这张表贴到电柜门内侧。血泪经验是:位功能本身不难,难的是两边位序没对齐,现象是“偶尔对、偶尔错”,查半天以为是通信干扰。
2.3 数据搜索与别名 I/O:两个省程序行数的功能
数据搜索解决的是“在一张表里按条件找元素”的问题。典型场景是配方管理:现场有 20 种工件,每种对应一组速度、加速度、等待时间,程序启动时按工件号去表里取参数。没有这个功能,就得写一长串 IF 或者 CASE;有了它,可以用循环加提前返回的结构,把查找逻辑收敛成一个函数。
RECORD Recipe num nId; num nSpeed; num nAcc; num nDwell; ENDRECORD VAR Recipe aRecipes{20}; VAR num nFoundIndex := -1; FUNC num FindRecipe(num nTargetId) VAR num i; FOR i FROM 1 TO 20 DO IF aRecipes{i}.nId = nTargetId THEN RETURN i; ENDIF ENDFOR RETURN 0; ! 0 表示未找到 ENDFUNC逻辑说明:RECORD定义结构,数组下标从 1 开始,这是 RAPID 和多数高级语言不一样的地方,写惯了 C 的人第一次必错。返回 0 而不是 -1,是因为 RAPID 的 num 可以负数,但用 0 做哨兵值在后续判断里更省事。
参数说明:数组大小 20 是写死的,改配方数量要同步改声明和循环上界。更稳妥的做法是定义一个常量CONST num nRecipeCount := 20;,声明和循环都用它,改一处就够。这是手册示例里没强调、但工程上必须做的。
别名 I/O 解决的是“同一套程序适配多个工位”的问题。产线上两台同样的设备,一台夹具信号接在diFixture1Close,另一台接在diFixture2Close,程序逻辑完全一样。没有别名功能,只能复制两份程序;有了别名,程序里统一写diGripClose,启动时按工位号做一次映射。
VAR signaldi diGripClose; PROC InitAlias(num nStation) IF nStation = 1 THEN AliasIO diGripClose, diFixture1Close; ELSE AliasIO diGripClose, diFixture2Close; ENDIF ENDPROC逻辑说明:AliasIO把别名信号绑定到物理信号,之后程序里所有对diGripClose的读写都落到实际信号上。注意方向:别名在前,物理信号在后,写反了不报错但映射不上,这是第二个高频坑。
参数说明:别名信号声明用VAR signaldi,如果是组信号要用signaldi对应的组类型。别名关系是运行时的,掉电重启后不保留,所以每次上电都要在初始化流程里调一次。我一般把它放在Main的第一行,而不是散落在各工位程序里。
2.4 中断、用户消息、配置与断电:事件驱动的四个零件
中断功能是让程序“不等”的关键。轮询写法是主循环里不停判断信号,占扫描时间还容易漏;中断写法是信号来了才跳进处理例程。
VAR intnum intPartIn; VAR bool bPartReady := FALSE; PROC Main() CONNECT intPartIn WITH TrapPartIn; ISignalDI diPartPresent, 1, intPartIn; WHILE TRUE DO WaitTime 0.1; ENDWHILE ENDPROC TRAP TrapPartIn bPartReady := TRUE; IDelete intPartIn; ENDTRAP逻辑说明:CONNECT把中断号和处理例程绑定,ISignalDI设定触发条件——信号diPartPresent变为 1 时触发。IDelete取消该中断,防止重复触发。
参数说明:ISignalDI的第二个参数是触发值,第三个是中断号。中断例程里不要写耗时逻辑,只做标志位和状态记录,重活放回主循环。这一点手册提了一句,但没展开:中断里调运动指令,轻则报错,重则让程序指针乱掉。
用户消息功能对应的是示教器上的文本提示,TPWrite、TPErase、UIMsgBox这些指令。配合文本表格文件,可以把提示语从程序里抽出来做成外部文件,改文案不用动程序。配置功能则是运行时读写系统参数,比如按工件切换速度上限。断电功能是掉电瞬间保存关键数据,靠的是系统参数配合,不是纯软件能兜住的——电池状态、保存区大小都要提前确认。
这四个零件单独看都不复杂,组合起来才是产线的常态:中断触发→置标志→主循环读标志→按配方取参数→示教器提示当前工件→掉电保存计数。手册把它们拆成四节讲,实际项目里要自己拼回去。
3. 通信与联动:文件通道、设备命令接口与逻辑交叉连接
Advanced RAPID 之外的选项,解决的是“机器人和外面说话”的问题。这一块选型时最容易多买或少买,因为功能名很像,实际用途差得远。
3.1 文件与串口通道:三种通信模式别混用
File and Serial Channel Handling 提供的是文件读写和串口通信两类能力,串口部分又分基于字符和基于二进制两种模式。字符模式传文本,适合日志、配方、简单协议;二进制模式传原始字节,适合和扫描枪、称重仪这类只吐固定字节流的设备。
VAR iodev fileDev; VAR iodev serialDev; VAR string sLine; PROC WriteLog(string sMsg) Open fileDev, "/hd0a/logs/cycle.log", "a"; WriteStr fileDev, sMsg + "\0A"; Close fileDev; ENDPROC PROC ReadSerial() Open serialDev, "/dev/ser1", "r"; ReadStr serialDev, sLine, 80; Close serialDev; ENDPROC逻辑说明:Open的第三个参数决定模式,"a"是追加,"w"是覆盖写,"r"是读。WriteStr写字符串,\0A是换行符。串口设备路径按控制器实际端口配置,不是固定值。
参数说明:ReadStr的第三个参数是最大读取长度,设备吐的数据超过这个长度会被截断,表现是“偶尔少几个字符”。另一个坑是打开后没关,下一次打开会失败,必须保证Open和Close成对出现,异常分支里也要关。我的习惯是用BookErrNo加错误处理,把Close放到统一出口。
文件与目录管理还有MakeDir、RemoveFile、RenameFile这些,日志轮转就靠它们。注意控制器硬盘分区容量有限,日志文件不清理,跑几个月就会写满,现象是程序某天突然报存储错误。
3.2 设备命令接口与逻辑交叉连接:一个对外,一个对内
Device Command Interface 是让外部设备通过网络给机器人下命令,比如启动、停止、改速度倍率。它和普通的 socket 通信区别在于:DCI 是控制器层面接的命令,不依赖你的 RAPID 程序在跑,所以能做“程序没启动也能控制”的事。
Logical Cross Connections 方向相反,是控制器内部的信号映射,在系统参数里配置 A 信号和 B 信号的逻辑关系,A 置位时 B 自动跟着动,不需要 RAPID 代码参与。适合做安全联锁的软冗余、指示灯跟随、气缸动作确认这类场景。
配置路径:系统参数 → I/O → 逻辑交叉连接 字段示例: SignalA = doCycleRunning SignalB = doTowerGreen 逻辑 = AND 延时 = 0.2 s逻辑说明:上表是参数形态示意,不是代码。配置完成后,doCycleRunning为 1 时,doTowerGreen在 0.2 秒后跟着为 1。延时字段是防抖用的,设 0 会跟着抖。
参数说明:手册在“限制”一节明确写了数量上限和周期限制,配置前先确认你的控制器型号和 RobotWare 版本支持多少条。踩过的坑是:逻辑交叉连接的评估周期和运动周期不是一回事,用在高频信号上会丢边沿,这种情况还是得回到中断。
3.3 电子联动电机与固定位置事件:两个偏工艺的选项
Electronically Linked Motors 是电气联动,一个驱动带两个电机,从动轴跟随主动轴。典型场景是龙门结构、双电机同步驱动。配置的核心是系统参数里定义主从关系,然后校准从动轴位置,再用服务程序做微调。扭矩从动件是另一种模式,从动轴按扭矩跟随,适合有机械约束的场合。
这里的手工步骤比代码多:先用服务程序把从动轴校准到和主动轴同一基准,再验证方向,最后跑微调。方向搞反是最常见的问题,现象是一上电就报跟随误差。校准前一定要把机械脱开或者确认行程内无障碍,这个后悔药没有。
Fixed Position Events 是路径触发,在轨迹的指定位置触发 I/O 动作,涂胶、喷涂、打标都用它。
VAR triggdata trigGlue; PROC GluePath() TriggIO trigGlue, 0, 1.5\DOp:=doGlueOn, 1; TriggL p10, v200, trigGlue, z10, tool0; TriggL p20, v200, trigGlue, fine, tool0; TriggIO trigGlue, 0, 0.5\DOp:=doGlueOff, 0; TriggL p30, v200, trigGlue, z10, tool0; ENDPROC逻辑说明:TriggIO定义触发数据,第二个参数是时间偏移,第三个是距离偏移。TriggL把这组触发数据挂到运动指令上,机器人走到距目标点 1.5 毫米时开胶。
参数说明:距离偏移和速度强相关,速度改了不重算偏移,胶线起点就会漂。我一般把偏移量做成变量,跟速度一起从配方表里取,避免改一处漏一处。触发精度还受z区大小影响,fine点精度最高但节拍慢,量产线要在节拍和胶线质量之间找平衡。
3.4 联网服务与用户日志:出问题后的黑匣子
Connected Services 是远程服务通道,配置分系统参数、连接配置、网关几部分,LAN 3 端口是常用入口。这部分在手册里占了不少篇幅,但实际项目里由集成方和厂内 IT 一起定,工程师个人改动的空间不大。
真正值得花时间的是 User logs。控制器日志、事件日志、用户自定义日志,出问题时这三样就是黑匣子。我的习惯是在关键工位加一行自定义日志,记录工件号、时间戳、当前配方索引,出异常时先看日志时间线,比现场复现快十倍。日志级别不要全开,全开跑一天就几个 G,按模块开。
4. 运动性能选项:绝对精度与 687-1 家族的取舍
运动性能这块是选型报价分歧最大的地方。Absolute Accuracy 要加钱,687-1 家族也要加钱,销售说“精度不够就加”,实际加哪个、什么时候加,得看工艺要求落在哪一类误差上。
4.1 Absolute Accuracy 的补偿理论与适用前提
Absolute Accuracy 解决的是“机器人走到理论坐标点和实际坐标点的偏差”,补偿的是运动学模型误差、减速机误差、连杆制造误差这些系统性偏差。它和重复定位精度不是一回事:重复定位精度是来回走同一个点的一致性,绝对精度是走到指定坐标的准确度。
| 指标 | 含义 | 典型提升手段 |
|---|---|---|
| 重复定位精度 | 多次到同一点的一致性 | 机械本体、减速机 |
| 绝对精度 | 到理论坐标的准确度 | Absolute Accuracy 补偿 |
| 轨迹精度 | 运动过程中的路径偏差 | 687-1 家族、摩擦微调 |
| 工具精度 | TCP 实际位置与设定值偏差 | 工具校准 |
适用场景很明确:离线编程后直接下发、多机器人协作、外部轴与机器人联合运动、需要和视觉坐标对齐的场合。如果只是在线示教点位、重复走同一条轨迹,绝对精度带来的收益有限,钱花在夹具刚性上更值。
4.2 校准、围笼对准与精度衰减排查
Absolute Accuracy 不是买个选项就完事,它依赖出厂校准数据、校准证书、工具校准和框架关系。手册把“机器人准备”单独列了一节,讲出厂证书、配置参数、围笼对准的测量方法,这部分是实操里最容易跳过的。
围笼对准要做的是测量固定装置和机器人的相对关系,把框架关系配对。跳过这步,补偿数据是对的,但基准是错的,现象是“单台机器人很准,一进工作站就偏”。工具校准同理,工具坐标系偏 0.5 毫米,补偿再好也白搭。
精度衰减的排查顺序我固定为:先看有没有撞过、再看工具校准、再看框架关系、最后才怀疑补偿数据。撞机后绝对精度下降是正常的,因为机械零点可能变了,重新校准是唯一办法。维护章节里提到的“影响准确度的维护”,说的就是这类。
4.3 Advanced Shape Tuning 与 Motion Process Mode:摩擦和模式
Advanced Shape Tuning 做的是摩擦微调,分自动和手动两种。自动微调让机器人自己跑一段往返轨迹,采集电流数据拟合摩擦参数;手动微调是在自动结果上按经验修正。系统参数里有一组微调参数,改完要重启生效。
摩擦微调的直接收益是低速爬行和拐角过冲改善。低速爬行表现为“走得很慢的时候一顿一顿”,拐角过冲表现为“拐弯处轨迹鼓出去一块”。这两类问题在涂胶、打磨上很致命,在普通搬运上感知不明显。
Motion Process Mode 是用户自定义运动模式,可以按工艺阶段切换不同的加速度、加加速度限制。比如空行程用激进参数抢节拍,接触工件后切保守参数保质量。配置上先定义模式,再在程序里切换。
! 模式切换示意:进入接触段前切到保守模式 SetMotionMode \ModeName:="ContactMode"; MoveL pContact, v50, fine, tool0; SetMotionMode \ModeName:="NormalMode";逻辑说明:SetMotionMode按名称切换预定义模式,模式本身在系统参数里配。
参数说明:模式切换有过渡时间,不能贴着运动指令切,否则切换过程本身会引入速度波动。我的做法是在进入接触段前 20 到 30 毫米就切。
4.4 Wrist Move 与 Advanced robot motion:手腕和整包
Wrist Move 针对的是手腕姿态运动,切割面框架是它常配合的概念,用于保证切割过程中工具姿态相对工件表面稳定。Advanced robot motion 是 687-1 这个整包,Shape Tuning、Process Mode、Wrist Move 都包含在里面。
选型建议:如果工艺是切割、打磨、涂胶这类对轨迹姿态敏感的,直接上整包,单买其中一个往往不够用;纯搬运、码垛,整包的收益有限,先把夹具和节拍做扎实。
5. 避坑与排查:五条手册没写透的经验
5.1 指令能编译,运行就报错
现象:程序编译通过,一运行就报“指令不可用”或直接停机。
原因:选项授权没有,或者授权有但对应的系统参数没开。RAPID 的部分指令在编译期不校验授权,运行到才报。
解决:先查系统信息里的选项列表,确认选项在;再查该功能的系统参数是否配置并重启生效。两步都过了还报,看事件日志里的错误码,别猜。
5.2 别名 I/O 映射上了,信号不动
现象:AliasIO执行没报错,程序里读写别名信号,物理点没反应。
原因:参数顺序写反,或者别名信号方向和物理信号方向不一致。别名是输入信号,绑到了输出点上,不报错但不生效。
解决:核对该功能的参数表,确认别名与物理信号同为输入或同为输出;再看映射执行时机,掉电重启后别名关系不保留,初始化流程里必须重新执行。
5.3 中断偶尔丢触发
现象:大部分时候正常,偶尔漏一次,节拍快了更明显。
原因:信号持续时间短于中断评估周期,或者中断例程里干了重活导致下一次触发被吞。
解决:缩短信号保持时间不可控的话,改用锁存信号;中断例程里只置标志,不调运动、不写文件;触发后确认是否需要IDelete再重新CONNECT。
5.4 绝对精度加了,离线程序还是偏
现象:选项买了,校准也做了,离线下发的点还是差几毫米。
原因:工具校准、框架关系、围笼对准三处有一处没做,或者离线模型里的机器人型号、选项配置和实机不一致。
解决:按工具→框架→围笼的顺序重做一遍,离线软件里的机器人配置从实机导出,不要手工选型号。
5.5 日志写满导致停机
现象:跑了几个月,某天突然报存储错误,程序停在中途。
原因:自定义日志只写不清,控制器硬盘分区写满。
解决:加日志轮转,按大小或按天切文件,保留最近 N 个;日志级别按模块开,别全局开调试级。
6. 把手册用成选型清单:版本对齐与三个核对动作
这份手册最容易被浪费的地方,是把它当“功能百科”读一遍就放下。我的用法是把它当核对清单,每个项目走三个动作,十分钟能省掉后面几天的返工。
第一个动作是版本对齐。手册封面上的文档编号、修订号、对应的 RobotWare 版本,必须和现场控制器一致。同一个功能在不同版本里的参数名、指令行为会有差异,拿 6.05 的手册去配 6.08 的控制器,参数表对不上是常事。我一般先看系统信息里的 RobotWare 版本,再翻手册对应章节,对不上就去找该版本的文档,不硬套。
第二个动作是选项编号核对。手册里运动性能类选项带方括号编号,比如 Absolute Accuracy 的 603-1、603-2,Advanced robot motion 的 687-1。报价单、授权文件、程序里用到的指令,三处编号要对得上。踩过的坑是:报价单写的是整包,授权文件里只落了子项,程序用到整包里的功能就报错,查半天才发现是商务环节的问题。
| 核对项 | 从哪看 | 对不上时的表现 |
|---|---|---|
| RobotWare 版本 | 系统信息 | 参数名不存在、指令行为差异 |
| 选项编号 | 授权文件/系统信息 | 指令运行时报不可用 |
| 系统参数 | 配置界面 | 功能能跑但触发条件不对 |
| 文档修订号 | 手册封面 | 按旧参数配新版本,配了不生效 |
第三个动作是参数备份。任何涉及系统参数改动的操作,改之前先导出一份配置。逻辑交叉连接、联动电机、摩擦微调这些,改错了不一定马上报错,等发现时已经找不到原始值。备份文件按“日期+项目+改动内容”命名,别用默认名,三个月后你根本认不出哪个是哪个。
最后一个习惯是示例代码不要直接抄。手册里的示例为了讲清一个点,往往省略了错误处理和边界判断,直接贴进项目里,第一次跑通没问题,遇到异常工况就崩。我现在的做法是:示例只用来确认指令签名和参数顺序,逻辑结构自己重写,异常分支一个个补。
从那以后我每次拿到一份新的选项手册,第一件事不是读,是先翻到目录把带方括号编号的选项圈出来,对着现场授权文件核一遍,再决定哪几章值得细看。这个动作花十分钟,能挡掉后面大部分的“买了他不用、用了没买”的扯皮。希望帮到你。
本文还有配套的精品资源,点击获取