☰
ABB机器人组合信号GO/GI:配置、位权计算与避坑实战
2026/10/26 6:23:30 网站建设 项目流程

简介:ABB组合信号(GO/GI)应用说明是一份面向ABB机器人调试与电气自动化工程师的文档资料,重点讲解机器人通过组输出/组输入与PLC高效交互的方法,解决传统数字量、模拟量信号在复杂工况下程序冗长、信号非同步易误判等痛点。整份资料为PDF格式,共1个文件,压缩包大小仅1.16MB,轻量易用,适合现场快速查阅或系统学习。目前已有929人学习下载,内容涵盖GO/GI的信号定义、配置流程、地址映射规则(连续地址如“1-3”与非连续地址如“1,4,6”的填写方式),以及基于二进制位权计算组信号数值的具体案例。通过实际的DO组合输出与DI状态解码示例,读者可掌握从添加信号、绑定IO单元到重启生效的完整操作链路,并了解组合信号在减少代码量、提升通信准确性与程序可维护性方面的核心价值。

1. ABB 组合信号不是黑匣子:它就是把多个数字量打包成一个整数

先放一个现场场景:某产线的机器人取料完成后,需要靠三个 DO 的组合告诉 PLC,按传统写法连写三条 SetDO,但 PLC 扫描周期比机器人指令执行速度快,经常捕捉到中间状态,把“取料完成”误判成别的状态。ABB 机器人里的组合信号(GO/GI)就是为这类问题准备的:把两个或以上数字量输入/输出打包成一个整数信号,一次写、一次读,既消除中间态,也让程序短一大截。这份资料把配置路径、地址写法、算值方法串在了一条线上。下面从原理到配置再到排错完整走一遍,适合正在做机器人-PLC 联调的调试工程师,也适合刚接触 ABB 机器人信号配置的入门者。

2. 为什么别用 SetDO 逐个控制:顺序赋值与 PLC 误判的根源

2.1 三种信号类型的边界:DO/DI、AO/AI 与 GO/GI 各自解决什么

ABB 机器人的信号从类型上分三类,把边界搞清楚再选型,比单纯会点配置更重要。

信号类型简称值域典型用途通信特点
数字量输入/输出DI/DO0 或 1气缸到位、夹具夹紧、安全门反馈单点独立,一次一个状态
模拟量输入/输出AI/AO连续量(0~10V / 4~20mA)压力传感器、变频器转速控制连续值,需要标定
组合输入/输出GI/GO整数(按位展开)多状态交互、与 PLC 批量握手一次读写一组状态

数字量适合单点控制,模拟量适合连续量场景,组合信号解决的是“多个数字量必须同时变化”的交互需求。三者不是替代关系,而是分工不同。现场最常见的误用是:明明需要一组状态同时切换,却用一串数字量指令去凑;或者明明只需要一个单点信号,却为了省事把它绑进组信号里,把简单问题复杂化。

我一般把 GO/GI 理解成“数字量的打包通道”。组合信号不是新的物理通道,它依然走原有的 IO 板卡和接线,只是把编程视角从逐位操作提升到了整数操作。代价是:你必须清楚知道这个 GO 背后绑定了哪几个 DO 地址,否则算出来的值就是玄学。对新手来说这是个门槛,对老手来说这正是它高效的地方。

2.2 传统写法的两个硬伤:程序臃肿与信号不同步

先看不使用组合信号时,机器人告诉 PLC“取料完成”的典型程序:

SetDO DO1, 1; SetDO DO2, 0; SetDO DO3, 1;

PLC 通知机器人取 1 号物料,对应程序则是:

WaitDI DI1, 1; WaitDI DI2, 0; WaitDI DI3, 1;

这种写法的第一个问题是程序臃肿。一次状态交互就要三条指令,一个中型项目的机器人-PLC 交互点动辄几十个,程序会膨胀得非常快。更麻烦的是,这类指令大多靠复制粘贴改地址,改错一个地址,排查起来相当费劲——你很难一眼看出 DO1、DO2、DO3 是同一组逻辑,因为它们散落在程序的不同位置。

第二个问题更致命:三条 SetDO 是顺序执行的,DO1 变 1 和 DO3 变 1 之间存在一个执行时间差。这个时间差通常只有几毫秒,但对扫描周期在 10ms 以内的 PLC 来说绰绰有余——它完全可能捕捉到 DO1=1、DO2=0、DO3=0 的中间组合,从而误判状态。信号是顺序给的,而 PLC 默认你是同时给的,这个认知偏差就是误判的根源。同理,WaitDI 一条一条等输入,如果机器人动作逻辑依赖“三个 DI 同时满足”,中间状态同样会干扰判断。

组合信号一次写入是原子性的:你写给 GO 一个整数,系统会在同一个刷新周期内同步更新所有绑定 DO 的输出状态。PLC 要么读到旧值,要么读到新值,读不到中间组合。所以组合信号的核心价值不是省几条指令,而是消除中间态,这也是它在高速联调场景下不可替代的原因。

2.3 组合信号的二进制本质:整数是怎么变成一组 DO 状态的

GO 的值看起来是十进制整数,内部却是按二进制位展开的。绑定在 GO 上的每一个 DO 地址,对应一个二进制位。比如 GO1 绑定 DO1、DO2、DO3,地址按 1-3 排列,那么 DO1 对应第 0 位(权值 1),DO2 对应第 1 位(权值 2),DO3 对应第 2 位(权值 4)。

写给 GO1 一个 5,二进制是 101,从低位到高位读就是 1、0、1,对应输出 DO1=1、DO2=0、DO3=1。这就是“填 5 让 DO1 和 DO3 同时变 1”的原理。理解位权分配是后续一切计算的基础,也是排查配置错误的第一切入点:凡是算值算不明白,先回 Device Mapping 看顺序,再谈计算。

GI 方向相反但原理完全一致:PLC 写给组输入一个整数,机器人按位解析出各个 DI 的状态,然后程序里拿这个整数做分支判断。具体怎么算、怎么解,下一章专门讲。

3. 配置 GO 的完整步骤:Signal 添加、地址映射与重启生效

3.1 新建组输出信号:四个字段的对应关系

以组输出 GO 为例,配置入口在示教器的控制面板里,路径一般是 Control Panel → Configuration → I/O System → Signal,点“添加”新建。我在现场习惯把整个配置拆成四件事:命名、选类型、绑设备、填地址,四件事对应四个字段,任何一个对不上,后面就白做。

Name 字段填信号名,示例里用 GO1。命名规范我建议和项目 IO 表严格一致,不要用默认的 signal1、signal2 这种名字,否则两三个月后回看程序,根本不知道这个组信号管的是哪个工位。Type of Signal 选 Group Output。这一步最容易选错的是错选成 Digital Output——一旦选错,Device Mapping 会退化成单地址模式,填 1-3 或 1,4,6 都会报格式错误。

Assigned to Device 必须和要绑定的那组 DO 所在的 IO 单元一致。比如 DO1、DO2、DO3 都挂在 IO 单元 d652 上,这个字段就选 d652。选错单元时,地址映射会对不上,添加时大概率直接报地址冲突。项目里有多块 IO 板卡时这一步尤其要看仔细,别凭印象选。

3.2 地址映射两种写法:1-3 连续区间与 1,4,6 离散列表

Device Mapping 是整个配置里最需要静下心的一步。填写原则就一句话:填写的地址必须和需要绑定的 DO 地址一一对应。分两种情况,对应两种写法。

绑定对象DO 地址Device Mapping 写法位权分配
DO1、DO2、DO31、2、31-31 对应位0,2 对应位1,3 对应位2
DO1、DO4、DO61、4、61,4,6按列表顺序:1 对应位0,4 对应位1,6 对应位2

第一种,DO 地址连续,Device Mapping 填 1-3。这是最舒服的写法,位权和地址序号天然对应,算值最省心。第二种,DO 地址不连续,填 1,4,6。这里藏着最常见的坑:位权不是按地址数值大小分配的,而是按填写顺序分配的。列表第一个地址 1 对应第 0 位,第二个地址 4 对应第 1 位,第三个地址 6 对应第 2 位。配置阶段填的顺序,直接决定了后面算值的位权,这个顺序和地址大小可以毫无关系。

填完点确定,系统一般会提示需要重启控制器。这里的重启不是简单关机再开机,我建议在示教器上确认保存配置后,走标准控制器重启流程,等系统完全加载完毕再继续操作。现场经常遇到配置“不生效”,一半以上不是参数填错,而是没重启,或者重启后没做信号验证就直接跑程序了。

3.3 重启与首次验证:配置不生效先查哪几个参数

重启完成后,先别急着写程序,在手动操作界面的信号视图里找到 GO1 做一次空载测试。连续地址 1-3 的情况下,给 GO1 填 7,DO1、DO2、DO3 三个 DO 应该同时变 1;填 0,三个全部复位。这一步同时验证三件事:绑定关系对不对、地址映射对不对、重启有没有真正生效。

如果填值后 DO 没反应,优先查三处。第一,Assigned to Device 里的 IO 单元和 DO 的 IO 单元是否一致,这是最高频的错误,配置界面不报错,但实际驱动不到。第二,Device Mapping 里的地址在该 IO 单元上是否真实存在,有些板卡的地址不是从 1 开始连续排的,中间有空档,填了不存在的地址系统不报错,但信号永远不会动。第三,信号是否处于可写状态,某些 IO 配置下信号可能被设为只读,或被某个运行任务长期占用。这三处查完,绝大多数不生效的问题都能定位。

4. 组合信号的值计算:为什么 GO1 填 5 等于 DO1=1、DO3=1

4.1 按位权相加:连续地址下的计算过程

计算 GO 的赋值,本质是“把想要的 DO 状态翻译成二进制,再转成十进制”。以 GO1 绑定 1-3(DO1、DO2、DO3)为例,先把三个 DO 的目标状态写成二进制:DO1 是第 0 位、DO2 是第 1 位、DO3 是第 2 位。

要输出 DO1=1、DO2=0、DO3=1,二进制从高位到低位写是 101,转十进制等于 4×1 + 2×0 + 1×1 = 5,所以 GO1 填 5。再看一个例子:只让 DO2 变 1,其余复位,二进制是 010,十进制就是 2。这两个例子里,DO1、DO2、DO3 的权值分别是 1、2、4,恰好和地址数字重叠,所以容易记混——地址是“第几个”,权值是“2 的几次方”,连续地址下两者数值相同只是巧合,不是必然。

位数少时我直接心算:把 1、2、4、8、16 这几个权值背下来,哪个位要置 1 就加哪个权值,要置 0 就不加。位数多,或者状态切换比较频繁时,我会在项目文档里维护一张映射表,把整数和 DO 组合的对应关系列出来,现场调试直接查表,比反复心算可靠得多。查表还有个附带好处:联调时和对方工程师对状态,报一个整数双方都能快速定位到具体 DO。

4.2 非连续地址的位权陷阱:1,4,6 不能套用连续地址的心算

非连续地址是翻车重灾区。假设 GO1 绑的是 DO1(地址 1)、DO4(地址 4)、DO6(地址 6),Device Mapping 填 1,4,6,位权分配是:地址 1 对应第 0 位(权值 1),地址 4 对应第 1 位(权值 2),地址 6 对应第 2 位(权值 4)。

要让 DO1=1、DO6=1、DO4=0,需要第 0 位和第 2 位置 1,值等于 1 + 4 = 5。注意,连续地址下 GO 填 5 是 DO1 和 DO3 为 1,非连续地址下填 5 变成 DO1 和 DO6 为 1——同一个数值,两组不同的 DO 状态,完全取决于 Device Mapping 里填的列表顺序。再往深一层:想让 DO6 单独为 1,权值是 2² = 4,而不是 6;想让 DO4 单独为 1,权值是 2¹ = 2,而不是 4。和直觉完全相反。

这个陷阱的实际危害在于:项目后期调整过 IO 地址,但 GO 的 Device Mapping 没有同步更新,你按旧映射心算出来的值写进去,DO 状态全乱。更隐蔽的是,可能出现某个你根本不想让它输出的 DO 被意外置 1,设备动作错乱,这时候排查方向往往是程序逻辑,很少有人第一时间想到是映射顺序变了。所以每次改 IO 表,必须同步检查所有 GO/GI 的 Device Mapping。

4.3 GI 组输入:从整数还原 DI 状态的逆向解码

GI 的配置流程和 GO 完全对称:新建信号时 Type of Signal 选 Group Input,Assigned to Device 选 DI 所在的 IO 单元,Device Mapping 填 DI 地址,规则和 GO 一模一样。区别只在读写方向,GO 是机器人往外写,GI 是机器人往里读。

程序里读 GI 拿到的也是一个整数,要按同样的位权规则还原 DI 状态。GI1 绑定 1-3,读到 5,二进制 101,就是 DI1=1、DI2=0、DI3=1。我在程序里判断某个 DI 是否置 1,习惯用位与运算,而不是连写三条 WaitDI:

IF BitAnd(GI1, 4) <> 0 THEN ! DI3 为 1,进入取 1 号物料分支 ENDIF

BitAnd 把 GI1 的值和位权做与,结果非零就说明对应位是 1。这样判断单个状态既快又干净,还不会用一串 WaitDI 把任务阻塞在原地。需要同时等好几个 DI 组合时,直接比较整个整数更省事:GI1 = 5 就等价于 DI1 和 DI3 同时为 1、DI2 为 0,一句话就能写清楚一个完整的联调条件。GI 的值计算规则和 GO 相同,配置方向相反,其余完全照搬。

5. 避坑:组合信号最常见的五个翻车现场

组合信号配置本身不难,但现场踩坑大多集中在地址理解偏差和重启遗漏上。下面五条是我在联调里反复见过的翻车现场,每一条都能单独定位、单独解决。

5.1 添加信号时报“地址已被占用”

现象:在 Signal 界面添加 GO,Device Mapping 填完点确定,系统报地址冲突或占用,添加失败,有时候报错信息里还不直接指出是哪个地址冲突。

原因:填的地址和同一 IO 单元上已有的 DO、GO 或其他信号地址重叠。组合信号和数字量信号共用同一份地址表,并不是独立编号的。很多人默认“组合信号有自己的地址段”,其实没有,只要你之前用过一个 DO 的地址 1,GO 的映射里就再也不能出现地址 1。

解决:先打开该 IO 单元的地址配置列表,确认目标地址是否空闲,再重新填映射。如果这几个 DO 地址已经被其他信号占用,换一组空闲地址,或者调整 GO 的绑定组合。这里有个细节:报错时优先检查连续的区间写法 1-3,它比离散写法更容易在不知不觉中占用到中间某个已被占用的地址。

5.2 重启后 GO 能写值,绑定 DO 毫无反应

现象:GO1 配置完成、重启成功,手动给 GO1 填 7,示教器上 GO1 的值确实变了,但对应 DO 的指示灯和信号视图毫无反应。

原因:Assigned to Device 里选的 IO 单元和 DO 实际所在的 IO 单元不一致。配置没报错,是因为两个单元上存在相同编号的地址,系统照样接受了,但驱动层面根本没连到目标 DO。这种错误在现场特别隐蔽,因为名字看起来都对,地址看起来也对,唯一错的是“挂在哪块板上”。

解决:核对 GO 和 DO 的 IO 单元归属,改成一致后重新配置并联重启。验证时别只看 GO 的值,要看每个绑定 DO 的实际状态变化,最好在端子上直接看对应输出点的指示灯。

5.3 按心算填值,DO 状态老是不对

现象:非连续地址 1,4,6 的情况下,按连续地址的直觉填值,结果 DO 输出和预期差一位,甚至多个 DO 同时动作。比如想让 DO1 单独为 1,填了 1,结果 DO1 和 DO6 同时变 1。

原因:位权按 Device Mapping 列表顺序分配,不是按地址数值分配。地址 1、4、6 对应的权值恰好是 1、2、4,和地址数值碰巧相等,很容易让人误以为位权永远跟着地址数值走。实际上在 1,4,6 的映射下,想让 DO6 单独为 1,权值是 4 而不是 6;想让 DO4 单独为 1,权值是 2 而不是 4。

解决:每次算值前,先回看 Device Mapping 的列表顺序,列出“地址 → 位 → 权值”三列对照,再逐位展开验证。不要依赖心算,尤其是项目改过地址之后,旧的位权表立即作废。

5.4 手动测试正常,程序运行后信号时序混乱

现象:手动模式给 GO 赋各种值都正常,一进自动运行,PLC 偶尔收到错误的组合,或者机器人读 GI 状态时对时错,不是稳定地错,而是偶发。

原因:程序里多处 SetGO 同一个信号,运行任务和 IO 更新周期相互覆盖;或者把写组信号放在了运动任务里,刷新的时机和逻辑任务的预期不同步,上一次还没刷完就被下一次覆盖,最终输出取决于最后一次写入的时机。

解决:整个项目统一由一个逻辑任务负责写 GO,避免多处赋值。如果对时序敏感,写入后加一个很短的时间窗再做下一步动作,给 IO 更新留出余量。GI 的读操作同样固定在逻辑任务里,别放在运动中断里读,中断里的读取时机不可控。

5.5 程序报“参数类型不匹配”,编译过不去

现象:写完程序编译报错,提示信号参数类型不匹配,错误指向 SetGO 那一行,或者指向调用某个功能块时传入的 GO 参数。

原因:把组信号当成单点信号,用了 SetDO 去写 GO;或者把 GO 传给了要求 Digital Signal 类型的函数。GO 和 DO 在系统里是两种不同的信号类型,类型检查严格,混用直接编译不过。

解决:组信号统一用 SetGO 写入,函数参数声明用 GO 信号类型;单点信号用 SetDO。如果某个功能块只接受数字量,在模块内部先把组信号的某一位提取出来(用位与取位),再传入,不要把整个组信号硬塞进去。

6. 进阶验证:用一段快速测试程序确认 GO 的每一位都落在预期 DO 上

配置完总觉得心里没底?我习惯写一段一次性测试程序,把 GO 从 0 加到满值,每赋一个值停一拍,同时观察 DO 状态。以绑定三个 DO 的 GO1 为例:

FOR i := 0 TO 7 DO SetGO GO1, i; WaitTime 1.0; ENDFOR

这段程序按 0、1、2……7 的顺序逐一遍历 GO1 的每一个值,每个值停留 1 秒。你在 DO 指示灯或者示教器信号视图上,能完整看到 000、001、010、011、100、101、110、111 八种组合依次出现。如果某一步跳变、缺失或者出现预料外的组合,说明 Device Mapping 的顺序和位权对应关系有问题,当场就能定位到具体是哪一位错位。

绑定五个 DO 就把循环上限改成 31,绑定八个 DO 改成 255,规则不变。测 GO 的同时,我还会用短接线在接线端子上模拟 DI 信号,测 GI 的读值是否按同样规则还原,方向对调但逻辑一致。两件事做完,组合信号的配置才算真正验干净。

从那以后,我每次配完 GO/GI 都强制自己走一遍这个循环测试,不跳过。三位信号花不到十秒,能省掉后面联调时一小时的定位时间。希望帮到你。

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

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

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

立即咨询