ABB机器人组输入/组输出那些事儿
ABB机器人的组输入/组输出信号是机器人单独的输入/输出的信号的联合体,对于组信号我们最常用的就是通过组信号与外部设备传输整数数字,其实组信号除了可以用来与外部设备传输整数,还有许多其它的用途,这一次我们就一起来看一ABB机器人的组信号少有人知的那些事儿。
提高信号利用率
在通常使用中,一个信号只能有0或1两种状态,有时可能由于硬件限制的原因比如IO板的IO点数量不够但又不方便新增IO板的情况下可以利用组信号提高信号利用率,比如仅仅使用4个信号就可以通过8421的方式实现16种状态组合方式见下表所示:
状态序号 |
地址3值 |
地址2值 |
地址1值 |
地址0值 |
组信号值 |
1 |
0 |
0 |
0 |
0 |
0 |
2 |
0 |
0 |
0 |
1 |
1 |
3 |
0 |
0 |
1 |
0 |
2 |
4 |
0 |
0 |
1 |
1 |
3 |
5 |
0 |
1 |
0 |
0 |
4 |
6 |
0 |
1 |
0 |
1 |
5 |
7 |
0 |
1 |
1 |
0 |
6 |
8 |
0 |
1 |
1 |
1 |
7 |
9 |
1 |
0 |
0 |
0 |
8 |
10 |
1 |
0 |
0 |
1 |
9 |
11 |
1 |
0 |
1 |
0 |
10 |
12 |
1 |
0 |
1 |
1 |
11 |
13 |
1 |
1 |
0 |
0 |
12 |
14 |
1 |
1 |
0 |
1 |
13 |
15 |
1 |
1 |
1 |
0 |
14 |
16 |
1 |
1 |
1 |
1 |
15 |
有些小伙伴可能对8421码不太熟悉,那么Windows系统中附带的计算器可以帮我们得到对应十进制数的8421码。
机器人同时等待多个信号时提高信号逻辑安全性,简化代码。
比如现在我们需要等待四个输出(输入)信号同时为1的时候机器人再继续执行下方指令我们应该怎么写呢?
方案1
WaitDI di0,1;
WaitDI di1,1;
WaitDI di2,1;
WaitDI di3,1;
方案一有2个问题,一是当信号太多时代码会很长,二是多个信号的处理会存在时间差异,不太安全。比如当程序指针走到di1时di0突然变成0了,机器人还是会继续往下执行的。
方案2
WaitUntil di0=1 AND di1=1 AND di2=1 AND di3=1;
方案2不会出现时间差异的问题,但当信号条件非常多时程序语句会很繁琐,变得非常长。
方案3
如果上述四个信号配置成一个组输入,则我们只需要下面的一条指令就可以了。
WaitGI GI0,15;
那么有的小伙伴会问了,如果我的信号地址不是连续的怎么办?那么下面我们再接着看一下组信号地址配置时的两个小技巧,一是地址不连续的处理,二是组信号与外围设备通讯时高低字节不匹配的问题的处理。
不连续地址的处理
在ABB机器人的组信号配置中,地址连续的信号可以使用英文半角的“-”号将组信号的首地址与末地址连接起来即可,比如组输入GI0所占用的地址为0,1,2,3,4,5,6,7那么地址配置成“0-7”就可以了,如下图所示:
如果组信号的地址是不连续的地址,那么就需要通过使用英文半角的“,”来将不连续的地址依次配置,如下图所示:
组信号的高低字节问题
ABB机器人在与某些外围设备如西门子的PLC进行通讯时会有高低字节不对应的问题,对于这种问题要想通讯正常,就必须有一方设备对信号做处理,在西门子PLC中可以用swap指令进行地址的高低互换,或者在ABB机器人中配置地址时用英文半角的“,”号将地址的顺序颠倒一下。
文章首发自动化生产之家