您好!欢迎光临工博士智能制造网!
15601785639
您好,欢迎光临工博士,我们将竭诚为您服务 点击这里给我发消息
您当前的位置:首页 » 新闻中心 » ABB机器人:基于现场通信方式向西门子PLC发送实时位置数据的方法
产品分类
新闻中心
ABB机器人:基于现场通信方式向西门子PLC发送实时位置数据的方法
发布时间:2020-04-30        浏览次数:218        返回列表

使用模拟量输出信号传输实数数据,由于模拟量信号自身抗干扰性能差,并且需要加装价格昂贵的模量信号扩展模块,因此,在传输大量的实数数据的场合中,一般很少使用模拟量信号;二、使用组输出信号传输实数数据,组输出信号不仅可以通过加装价格相对低廉的数字量I/O信号扩展模块实现,也可以通过加装现场通信模块的方式实现。本例,使用第二种方式,通过ProfiBus现场总线通信的形式来传输机器人当前位置数据。

由于机器人当前位置数据都是32位的单精度实数类型,所以,我们定义的每一个组输出信号长度也应该是32位。


中断子程序编写

创建中断子例行程序,并在其中编写读取机器人当前位置x、y、z坐标数据程序。由于ABB机器人系统中使用四元数形式表示TCP绕相应坐标轴的旋转角度,因此,这里需要使用EulerZYX指令将以四元数形式表示的角度数据转换为欧拉角形式表示的旋转角度数据。完整的中断子程序代码如下所示。


机器人当前位置数据发送子程序编写

创建发送机器人当前位置数据子例行程序,并将其在中断子程序中调用。首先,将读取的机器人当前位置数据使用PackRawBytes指令按照Float形式进行打包,然后将其存放到已经声明的rawbyte类型容器变量的连续四个字节中。

然后使用FOR指令进行循环解包操作,即将打包好的数据使用UnpackRawBytes指令解包到声明的byte类型四维数组变量中,每一个字节对应数组变量中的一维byte元素。

由于西门子PLC中数据采用大端存储模式,而ABB机器人中的数据采用的是小端存储模式,为了发送的数据能够被PLC正确解析,因此,我们需要对机器人的位置数据进行移位操作。所谓的大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中,地址由小向大增加,而数据从高位往低位放;小端模式(Little-endian)是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权值有效结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

对于ABB机器人当前位置数据的移位操作:首先使用NumToDnum指令将解包后的byte类型数据转换为dnum类型,然后按照西门子PLC中实数类型数据高低字节顺序进行移位操作,数据移位指令使用BitLShDnum。同时,将四个移位后的byte类型数据使用BitOrDnum指令进行“逻辑或”运算,重新组成32位的单精度数据,并将其存放到声明好的dnum类型变量中。当然,这个移位操作,我们也可以在PLC中实现。

***后,使用setgo指令将转换好的机器人当前位置数据赋值到相应的组输出信号,然后发送给PLC。机器人当前位置数据发送子程序代码如下所示。


机器人主程序编写

在主程序中编写定时器中断程序,中断时间间隔为0.5s,即每个0.5s读取一次机器人当前位置,并将当前位置数据发送给PLC。完整机器人主程序代码如下所示。


完整的机器人程序代码如下所示。


运行测试

在PLC中进行组态编程,然后运行机器人,同时对PLC中相应的数据寄存器进行监视,可以看到机器人的实时位置数据已经发送过来了,并且每隔0.5s刷新一次。西门子老版本的PLC实数数据的高低位字节顺序与ABB机器人的实数数据的高低位顺序是相反的;新版本的PLC,小编还没有测试过,若是使用新版本的PLC,测试时可以注意一下。如果高低位字节顺序是一致的,那么只需要把发送机器人当前位置数据子例行程序中的数据移位程序删除即可。对于三菱PLC、欧姆龙PLC或是其他品牌的PLC,读取机器人当前位置的程序都是类似的,感兴趣的小伙伴可以自己测试一下。


本文摘自:网络 日期:2020-04-29
详情点击:ABB机器人代理商

 

联系热线:156 0178 5639 联系人:黄经理 联系地址:上海市宝山区富联一路98弄6号

技术和报价服务:星期一至星期六 8:00-22:00 ABB机器人系统集成商