在ABB机器人系统集成项目中,由于控制要求,我们需要监控机器人的实时位置,这就要求机器人将当前的位置数据实时发送给主控系统。
对于不同的主控系统,机器人发送当前位置数据的方式多种多样。如果用PC作为上位机读取机器人的实时位置信息,那么我们可以利用IRC5 OPC服务器读取机器人的位置数据,然后发送给PC上位机。
当然,机器人控制器也可以通过PC SDK进行二次开发,然后通过PC Interface选项直接读取控制器中机器人的位置信息。如果用PLC作为上位机读取机器人的实时位置信息,那么我们可以使用工业现场通讯,比如ProfiBus、ProfiNet、DeviceNet等。然后利用ABB机器人内置的数据处理指令编写实时位置数据发送程序,实现机器人的位置数据发送。
变量声明
机器人的当前位置是刀具末端的当前位置,即TCP的当前坐标,由X,Y,Z的坐标值和绕X,Y,Z轴旋转的角度值分别组成。这些数据的类型都是实数。ABB机器人中,num和dnum用于表示实数,其中num类型与西门子PLC中的实数类型一致,均为32位单精度实数;而dnum类型数据是64位双精度实数。因此,在机器人中,我们可以声明num变量来存储机器人的当前位置数据。同时,其他类型的数据变量被声明为数据处理的中间转换变量。
ABB机器人可以通过两种方式传输真实数据:利用模拟输出信号传输真实数据。由于模拟信号抗干扰性能差,需要安装昂贵的模数信号扩展模块,在传输大量真实数据时很少使用模拟信号;第二,组输出信号用于传输真实数据。
组输出信号不仅可以通过安装相对便宜的数字I/O信号扩展模块来实现,还可以通过安装现场通信模块来实现。在本例中,第二种方法用于以ProfiBus现场总线通信的形式传输机器人的当前位置数据。由于机器人的当前位置数据都是32位单精度实数,所以我们定义的每组输出信号长度也应该是32位。
中断子程序写入
创建中断子程序,编写程序读取机器人当前位置的X,Y,Z坐标数据。由于ABB机器人系统使用四元数表示TCP绕相应坐标轴的旋转角度,因此需要使用EulerZYX指令将四元数表示的角度数据转换成欧拉角表示的旋转角度数据。
发送机器人当前位置数据子程序的编写
创建一个子程序发送机器人当前位置数据,在中断子程序中调用。首先,使用PackRawBytes指令将读取的机器人当前位置数据打包为浮点形式,然后存储在rawbyte类型容器变量的声明的四个连续字节中。然后使用FOR指令进行循环解包操作,即将打包的数据解包到声明的字节型四维数组变量中,每个字节对应数组变量中的一维字节元素。
由于西门子PLC中的数据采用大端存储方式,而ABB机器人中的数据采用小端存储方式,为了让PLC能够正确分析发送的数据,我们需要对机器人的位置数据进行移位。所谓大端模式,是指数据的高字节存储在内存的低地址,而数据的低字节存储在内存的高地址,地址从小到大递增,数据从高到低放置;小端模式意味着数据的高字节存储在内存的高地址,而数据的低字节存储在内存的低地址。这种存储模式有效地将高位和低位地址与数据位的权重相结合。高地址部分的权重高,低地址部分的权重低,这与我们的逻辑方法一致。
ABB机器人当前位置数据的移位操作,首先通过NumToDnum指令将解包后的字节型数据转换为dnum型,然后按照西门子PLC中实型数据的高低字节顺序进行移位操作,数据移位指令使用BitLShDnum。
同时,四个移位的字节类型数据由BitOrDnum指令进行逻辑或运算,以重建32位单精度数据,该数据存储在声明的Dnum类型变量中。当然,这种移位操作也可以在PLC中实现。然后,利用setgo指令将转换后的机器人当前位置数据分配给相应的组输出信号,然后发送给PLC。
机器人主程序设计
主程序中写入定时器中断程序,中断时间间隔为0.5s,即机器人当前位置每0.5s读取一次,当前位置数据发送给PLC。
运行测试
在可编程控制器中进行组态编程后,机器人运行并监控可编程控制器中相应的数据寄存器。可以看出,机器人的实时位置数据已经每0.5s发送和刷新一次。
更多了解ABB机器人
- 下一篇:外部tcp的定义方法
- 上一篇:回零程序Reference