☰
ABB机器人组合信号配置与RAPID调试实战:从位映射到握手避坑
2026/10/15 6:25:00 网站建设 项目流程

简介:资源为ABB机器人组合信号GO/GI的应用说明,面向工业自动化工程师、机器人调试人员及需要与PLC进行复杂IO通讯的技术人员。文档系统讲解了组合输入输出的概念,对比传统DO/DI处理多信号时的程序臃肿与误判问题,并详细描述GO信号的配置流程、地址填写规则以及基于二进制原理的信号值计算方法,同时说明GI的配置思路与GO类似、方向相反。资料包共1个文件,类型为PDF,大小约1.16MB,便于下载后直接阅读或部署到现场作为参考。该资源已有928人学习,内容涵盖信号类型介绍、配置步骤、地址连续与不连续时的填写方式、GO值计算实例,以及组合信号在解决设备间通信问题上的实际价值。读者通过研读可掌握组输出与组输入信号的配置逻辑和数值换算方法,理解如何用GO/GI替代繁复的多点DO/DI控制,提升程序简洁度和通信准确性,对ABB机器人自动化项目的调试与维护具有较强实用参考作用。

1. 组合信号到底在组合什么:从一根线到一个字节

做机器人工作站集成的人,迟早会碰上这么一档子事:PLC侧只剩几个空余的DI/DO点,却要把工位号、配方号、夹具状态、安全联锁一起发给机器人。一根一根端子排太奢侈,读的时候还要担心多个信号不在同一时刻到达。ABB控制器里的组合信号(也叫组信号,Group Signal)解决的就是这个问题:把若干路数字量输入或输出打包成一个整体数值,程序里读一次就能拿到一个完整的数字。它不是把线变少,而是把信息变厚。

这个方案适合谁?正在做ABB机器人工作站联调的电气工程师、刚接手现场设备的调试工程师,以及想把PLC和机器人之间握手逻辑做得更稳妥的人。你不需要多深的底子,但需要知道配置入口在哪、硬件怎么接、程序怎么读,以及数值对不上时该怎么查。这篇文章就是按这个路径写的:先理解数据模型,再动手配置,然后是RAPID程序里的用法,最后是现场最容易翻车的几个坑。如果只想赶紧解决问题,可以直接跳到第5章。

2. 先分清数字量、组信号和模拟量:ABB I/O体系里谁在干活

2.1 数字量、组信号与模拟量:三种信号的本质区别

ABB机器人的I/O系统里,信号按数据宽度分成三类:数字信号只占1位,取值只能是0或1;组合信号把连续N位打包成一个整体数值;模拟量信号则把电压或电流转换成0~65535以内的数值,用于压力、位移这类连续过程量。三者物理上可能走同一张I/O板卡,差别主要在软件映射和程序读取方式。

组合信号和数字信号最容易被混淆,因为它们可以接到同一个物理端子上。区别在于:数字信号只解释其中一个位,其他位即使接了线也不生效;组合信号把多个位一次性解释成一个整数。工艺上需要“同时到达”的多个条件,用组合信号传递是最稳的做法。比如PLC要同时表达“工位号=2、配方号=5”,拆成两路数字信号分别传,接收端存在半个扫描周期的中间态;合成一个字节传,机器人读到的是一个整体,不存在“读到一半”的情况。

选型时我一般用这个经验法则:凡是多个输入组合起来表示一个状态的,优先用组合信号;凡是一个独立开关控制一个独立动作的,保留数字信号。不要为了减少信号数量把所有的数字量都塞进组合信号里,因为组合信号没有“位与位之间的优先级”,某一位被干扰时整个数值都会异常,排查难度直线上升。下表是三种信号最直接的对比:

信号类型数据宽度取值范围典型场景
数字信号1位0或1安全门、启动按钮、报警灯
组合信号N位(常用8/16位)0 ~ 2^N-1工位号、配方号、故障代码
模拟量信号12/16位0~4095或0~65535压力、温度、位置反馈

组合信号在IRC5和OmniCore控制器上都支持配置,差异只在菜单结构和使用的总线类型,核心逻辑一致。

2.2 常见I/O板卡与组合信号的接线关系

谈到物理接线,先得看板卡。ABB控制器常见的数字I/O板卡型号有DSQC 651、DSQC 652、DSQC 653等,它们的数字输入输出通道数从8路到16路不等,具体端子号分布一定要以现场控制柜的接线图为准。我遇到过用旧图纸配新柜子导致DI全部错位的情况,排查了整整半天,最后发现是板卡型号不同、端子排列完全不同。

组合信号有一个硬性限制:必须映射在同一张板卡或同一个总线设备的连续地址段上,不能跨设备拼一个组合信号。比如DSQC 652有16路数字输入,第0~7位可以作为组合信号gi_status,物理上对应前8个输入端子;第8~15位可以另作一组或留作独立数字量。这样做的好处是接线规律、程序里也好辨认。

接线时务必注意公共端和供电地。组合信号的每一位都使用相同参考地,如果PLC和机器人控制器来自两个不同的开关电源,最好在两端之间拉一根0V等电位线,否则读到的数值会随机跳变。这个问题在长距离走线时尤其明显,后面第5章会详细讲。

另外一点建议:布线上严格按位序来,bit0接第一个端子、bit1接第二个端子,依次类推,不要自作聪明跳线。虽然在配置里可以按实际顺序重新映射,但维护的人不一定知道这个“错位关系”,半年后接手的电工大概率要骂人。

2.3 组信号的数据模型:位数、范围、位序与符号

组合信号在控制器内部就是一个无符号整数,最低位叫bit0,最高位取决于配置的位数。配置8位,取值范围0~255;配置4位,取值范围0~15;配置16位,取值范围0~65535。举例来说,数值6写成二进制是00000110,意味着bit1和bit2为1,其余位为0。

位序是调试里最容易出问题的地方。PLC侧把“最低位”接到“最高位”的端子上,读出来就会完全变样。同样发6,如果位序反向,机器人读到的可能是96(二进制01100000),而不是6。所以联调时第一件事不是看程序,而是先确认两端对bit0的定义一致。

ABB的组合信号没有符号位,永远是正整数。如果需要表达负值,比如负温度,PLC侧要做偏移处理,例如实际温度-20℃发80,机器人读出来再减去100。这个约定要写进联调文档,否则两边各按各的理解做事,数值对不上就成了玄学。

3. 在RobotStudio里配置组合信号:从I/O总线到信号映射

3.1 打开I/O配置的正确入口

我在现场配置组合信号一般直接在RobotStudio里操作,也可以在示教器的控制面板里完成。先连上控制器,切到手动模式,然后在RobotStudio左侧浏览树展开控制器,进入“控制面板→配置→I/O System”窗口。这里默认展示已经定义好的各类信号。

一个常见误区是把“I/O Device”当成信号配置的主界面。I/O Device管的是总线板卡和硬件设备本身,组合信号的逻辑定义在“Signal”下完成,两者别搞混。进到Signal页面后,能看到所有数字量输入输出、组合信号、模拟量信号的列表。

动手改之前,先做一件事:把当前配置导出备份。后面干任何配置变更,我都会把原配置文件复制到U盘或本地工程里。组合信号配置错了不会炸设备,但会浪费大量联调时间,有备份就有后悔药。

3.2 新建组合信号的最小操作与参数表

新建一个组合信号的操作并不复杂,我习惯按下面四步走:

  1. 在Signal页面点“新建”。
  2. 填写信号名称和类型。
  3. 指定要挂载的设备,以及在该设备上的地址映射。
  4. 确认并重启控制器让配置生效。

下面是新建一个8位输入组合信号最常用的参数配置:

参数配置值说明
Namegi_status与PLC约定好的信号名
Type of SignalGroup Input输入组合信号
Assigned to Deviced652绑定的I/O设备
Device Mapping0-7使用该设备第0到第7位
Filter0数字滤波时间
Category空分类标签,可选

Device Mapping是这里最关键的参数。0-7表示把这台设备从第0位开始的连续8位打包成组合信号。如果配置成0-3,那就是一个4位组合信号,范围0~15。要注意的是,Mapping范围不能和其他信号重叠,否则控制器会提示地址冲突,拒绝启动配置。

选Type of Signal时,也容易出错。如果只是往PLC方向发状态,应该选Group Output;如果是接收PLC送来的指令,选Group Input。选成Digital Input只会把映射区间的第一位当成普通数字量,其余位被忽略,这也是“信号看起来建了但读不到值”的一个常见原因。

3.3 配置生效:热启动和冷启动的区别

组合信号配置保存后,系统会提示重启I/O系统或控制器。在ABB里通常有“热启动”和“冷启动”两种选择,它们的代价很不一样。热启动只重启I/O系统,RAPID程序状态基本保持,速度快,适合只改了Filter或信号名称的场景;冷启动会重启整个控制器,程序回到初始状态,安全信号也要重新确认,要花几十秒甚至更久。

判断标准我记得很简单:只要动了Device Mapping或Type of Signal,一律冷启动。因为底层地址重排只在冷启动时执行,热启动表面上看到新信号,但总线映射未必真正重排,容易留下隐性问题。改动只涉及Filter、Category这类辅助参数时,热启动就够了。

冷启动的另一个注意点是时机。生产线上最好在节拍间隙操作,并提前跟现场人员打招呼。有些老设备冷启动后,安全PLC会因机器人控制器重启而产生报警,需要人工确认一次,这个流程也要算进停机时间里。

4. 在RAPID程序里消费组合信号:读取、判断、握手与位拆解

4.1 读取组合信号的最小程序

写完配置,接下来就是用RAPID程序读它。最直接的读取函数是GetDataVal,它能把信号的值取到一个num变量里:

! 读取组合信号 gi_mode,返回0~255之间的数值 VAR num nMode; nMode := GetDataVal("gi_mode");

这段代码的核心是GetDataVal,参数是信号名,必须和配置里完全一致,大小写敏感。数值类型是num,机器人程序里后续的IF判断、公式计算都可以直接用。

另一种更常用的场景是联机等待。PLC给出一个组合信号置位后,机器人要等待这个值到位再干活:

! 等待组合信号 gi_ready 变为1,最多等5秒 VAR bool bTimeout; WaitGI gi_ready, 1\Time:=5\Flag:=bTimeout; IF bTimeout THEN TPWrite "握手超时,请检查PLC信号"; RETURN; ENDIF

WaitGI的第二个参数是期望值,\Time是超时时间,\Flag是超时标志位。这里有个血泪经验:一定不要用不带超时参数的WaitGI去等外部信号。现场对讲机里常说“信号没来,机器人卡住了”,多半就是这句话没有超时保护。加了\Time和\Flag后,超时只会往TP屏幕上写一行提示,程序不会死等,也不会把整个工作站拖停。

4.2 输出组合信号:SetGO 与位拼接

往PLC回传状态时,用SetGO输出组合信号。它和SetDO的关系就像组合信号和数字信号的关系:一次写一个数值,多个DO同时变位。

! 输出8位组合信号 do_mode,值=6(二进制00000110) SetGO do_mode, 6;

如果需要在程序运行中动态拼接信号,RAPID提供了BitSet函数逐位置位:

! 拼接状态字:把bit0、bit2、bit4置1,其余位保持0 VAR num nOut := 0; nOut := BitSet(nOut, 1); ! 索引1对应bit0 nOut := BitSet(nOut, 3); ! 索引3对应bit2 nOut := BitSet(nOut, 5); ! 索引5对应bit4 SetGO do_status, nOut;

这里有一个隐蔽的坑:BitSet返回的是新值,原变量不会自己变,必须用“nOut := BitSet(...)”的形式接收返回值。漏掉赋值那半句,程序运行不报错,但输出永远是0,属于典型的“沉默式翻车”。

另外,设计信号表时要注意给组合信号单独划一段地址,不能和独立DO混用同一区间。假设do_mode占用了0-7位,又把其中0-3位单独配置成do_ok去控制报警灯,那么SetGO每次写do_mode,都会把do_ok覆盖掉,两边互相打架。

4.3 与PLC握手时的推荐时序

PLC和机器人之间用组合信号做握手,比多路数字信号稳得多。推荐一个固定时序:

  1. PLC把gi_ctrl置为1,表示“本周期允许机器人启动”。
  2. 机器人用WaitGI等到gi_ctrl的值到达1,然后读取配方号gi_recipe。
  3. 机器人执行完动作后,用SetGO把do_finish置为1,表示“已完成”。
  4. PLC看到do_finish后复位gi_ctrl为0,机器人再把do_finish复位。
! 机器人侧握手时序示例 VAR num nRecipe; VAR bool bTimeout; WaitGI gi_ctrl, 1\Time:=5\Flag:=bTimeout; IF bTimeout THEN TPWrite "PLC未下发启动允许"; RETURN; ENDIF nRecipe := GetDataVal("gi_recipe"); ! 这里插入实际工艺动作 ... SetGO do_finish, 1; WaitGI gi_ctrl, 0\Time:=5\Flag:=bTimeout; SetGO do_finish, 0;

注意最后一个WaitGI,机器人要等PLC把gi_ctrl复位为0后才释放do_finish。这在流水线节拍控制里很关键,否则PLC还没接收完状态,这边就把信号撤掉,容易漏记一次完成信号。这个“置位-等待-复位”的闭环是组合信号握手的标准姿势。

4.4 实用技巧:把组合信号按位拆成独立条件

一个组合信号里,往往既包含开关位,又包含数值位。比如状态字gi_status的低位表示“设备启用”,高几位表示“故障代码”。程序里按位拆开,比定义一堆数字信号清爽得多:

! 从状态字里拆位 VAR num nStatus; VAR num nWorkNo; ! 工位号 VAR num nFaultCode;! 故障代码 nStatus := GetDataVal("gi_status"); IF BitCheck(nStatus, 1) THEN TPWrite "允许运行"; ENDIF ! 假设bit1~bit3是工位号,bit4~bit7是故障代码 nWorkNo := nStatus DIV 2 MOD 8; nFaultCode := nStatus DIV 16 MOD 16;

BitCheck用于取出某个位的布尔值,适合做开关判断。后面的DIV和MOD是纯算术拆位:右移1位相当于DIV 2,再MOD 8就是取3位二进制;右移4位相当于DIV 16,再MOD 16取4位。这种方法比连续写十几个BitCheck更紧凑,也更容易对应位分配表阅读。

拆位逻辑写完后,我建议把位分配表直接写在程序注释里。RobotStudio支持中文注释,现场调试时打开程序就能看到,不用再去翻配置表。

5. 组合信号调试避坑:5个真实翻车现场

5.1 现象:PLC写5,机器人读到的却是80

这是组合信号联调第一天最常见的问题。PLC侧强制输出5,机器人侧I/O监控里却显示80,两边看到数值完全对不上。原因基本只有一个:位序不一致。5的二进制是00000101,80的二进制是01010000,对比一下就知道是bit0和bit6、bit2和bit4的位置互换了。

解决方法是先做“对表”操作:PLC每次只强制输出一个位,从bit0开始,机器人侧看读回的是不是1、2、4、8这样递增的数。找到第一个对不上的位,就知道是程序组字的问题,还是Device Mapping配反了方向。有些总线网关默认高位在前,这时反而要把bit0映射到最高位,不能只盯着端子的物理顺序看。

5.2 现象:组合信号最大值永远只有15,上不到255

把PLC输出改成255,机器人读回来只有15。这个问题多半出在配置上:Device Mapping只写了0-3,组合信号只有4位,取值范围0~15。PLC发255,低4位是15,高4位被硬件丢弃,读出来的自然到不了255。

解决时先回配置里看Mapping范围是不是0-7,再看板卡本身支持的通道数。如果用的是分布式I/O从站,还要确认从站的输入字节长度配置成1字节还是2字节。只配4位却能读到“半截值”,这种情况在老旧板卡上最容易出现。

5.3 现象:信号值像幽灵一样跳变

现场最玄学的故障:同一台设备,今天读值正常,明天变成在设定值和0之间闪动,用万用表量端子电压又量不出明显问题。原因是多方面的,优先查三处:PLC和机器人之间有没有共地;屏蔽层是不是两端都接地了;公共端子有没有松动。

解决时先拉一条0V等电位线,把两个控制柜的地电位拉平,看数值是否稳定。屏蔽层坚持单端接地,避免形成接地回路。最后如果偶发毛刺还在,可以在组合信号配置里把Filter设成10ms左右,滤掉窄脉冲。但要注意,滤波时间会让信号响应变慢,握手超时时间要跟着放宽,否则会引入新的超时故障。

5.4 现象:冷启动后配置消失

配置好的组合信号,冷启动后列表里直接不在了。大部分情况是改完配置后没有导出备份,重启时控制器加载了另一个位置的旧配置文件,把新配置覆盖掉了。也可能是维护过程中,有人用旧工程重新下载了系统参数。

解决方法是改完配置立刻导出配置备份,并保持“配置变更记录”的习惯。我见过一个项目,组合信号三天两头消失,后来查出来是一位维护同事每次都用U盘里的旧配置文件做系统恢复,等于每次都在回滚到一个月前的状态。后来规定所有配置变更必须有时间戳记录,问题就绝迹了。

5.5 现象:WaitGI卡死,机器人停线

程序停在WaitGI那一行,机器人不报错、不动作,现场所有设备都在等它。原因是外部信号始终没满足,而代码里没写超时参数。很多程序模板在原型阶段图省事,写成WaitGI gi_start, 1;,没有\Time和\Flag,信号不来就永远等下去。

解决方式是所有对外部信号的等待统一加上超时参数,并配上超时后的安全退出逻辑。我自己的模板里是这样处理的:超时后先TPWrite打印提示,然后调用一个专门的“安全回退”子程序,把机器人回到安全位,再向PLC报一个握手中断码。这样设备不会长时间堵死,排查时也有文字记录可看。

6. 把组合信号当“状态字”设计:位分配表与维护习惯

6.1 用一张状态字定义表管住所有组合信号

组合信号用得越深,越需要提前定义“每一位代表什么”。这不能靠联调时临时商量,必须在设计阶段把位分配表定下来,发给PLC方和机器人方各一份。下面是一张实际用过多次的8位状态字定义表,可以直接参考:

位含义说明
bit0允许运行1=启用,0=禁止
bit1~bit3工位号0~7,对应八个工位
bit4~bit7配方号0~15,最多16种配方

有了这张表,PLC组字时按位填数据,机器人读完后按位拆分,两边不用猜。凡是踩过组合信号数值对不上的坑,回去补的第一份文档就是这种位定义表,它能堵住一大半低级错误。

6.2 在RAPID里拆解和拼装状态字

拆解逻辑和上一章讲的类似,但用数值变量来表达更加直观:

VAR num nStatus; VAR num nWorkNo; VAR num nRecipe; nStatus := GetDataVal("gi_status"); nWorkNo := nStatus DIV 2 MOD 8; nRecipe := nStatus DIV 16 MOD 16;

拼装方向也相同:机器人完成一个动作后,把“允许运行”位清掉,把“完成代码”写进高4位,然后一次性SetGO回传。这样PLC侧读一次状态字,就能同时拿到“机器人是否空闲”和“上一个动作的结果”两个信息,通信周期也省了一半。

说到维护习惯,我做联调时会在控制柜门内侧贴一张A4纸,把状态字的位分配表、信号名称、PLC地址对应关系全部写上。因为半年之后维护的人大概率不是当初调试的人,没有这张纸,组合信号对谁来说都是黑匣子。程序注释和柜内图纸都容易丢,唯独贴在柜门上这张表,通常能活得最久。

这个习惯给我省过不少事。前年给一条老线加装检测设备,原程序的组合信号定义文档早就找不到了,全靠柜门内侧那张泛白的A4纸确认了信号协议,半小时就把新设备的握手联调做完。所以配置组合信号时,花十分钟写明白位定义,比后面用一天排查数值错位值多了。希望这篇能帮正在和组合信号较劲的你少走一段弯路。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询