广东湘恒智能科技有限公司
主营产品: 西门子PLC,西门子模块,西门子触摸屏,西门子变频器,西门子伺服电机驱动,电缆,西门子全系列
PLC通讯读取数据,获得数据高低字错位
发布时间:2024-11-08

使用的PLC是汇川easy521,从站是激光测距仪器,一开始用的0-10V模拟量获取位置,但发现激光测距距离一旦远了,plc获取的为位置信息与仪器显示的位置最大偏差有5cm,严重影响RGV定位,所以改采用485通讯(由于一开始485通讯不上,今天改换另一台激光测距仪器,发现之前的仪器485通讯是坏的),485通讯读取的数据,高低字是独立的两个字(后面发现低字读取的数据有负数,负数在计算机计算器中进行转换,二进制数据编程了64位,后面想了想,怀疑是有数据没读到,所以用DINT类型) 。

这是激光测距仪器的通讯地址(十进制地址是21,22):

通讯地址设置如图:

通讯获取的相关地址数据后,先把高位字进行处理,把高位字向左移动16位,从而获得,一开始我用的是SHL指令,但发现easy没有AM系列PLC简便,于是采用高低位字调换指令,即xchp指令,指令具体使用如下说明:


根据指令提示,进行如下操作:通讯获得激光测距仪器的高位字数据D30(dint类型),低位字数据D32(dint类型),此时D30数值为2,D32数字为656,先把数据进行计算,在电脑自带的计算器进行就算,仪表显示的值转换成二进制为:0010 0000 0010 1001 0000,656数值转换成二进制为0010 1001 0000,2转换成二进制为0010,发现只要把0010放在0010 1001 0000就变成了目标值。

首先先把高位数据2向左移动16位,采用高低位转化指令,先把D30的数据D30,D31分别赋值给D36 ,D37。

然后使用xchp指令,调换高低字位置:

再把获得的数据D36(dint类型)赋值给D34,相当于获得转换后的数据,131072,131072转换成二进制位:0010 0000 0000 0000 0000,观察数据,可以发现1往左移动了16位:

然后再把D34与D32相加(此处我有点不理解,但使用加法,得到的数值与仪器显示的数据相等,明天再去验证一下,是否适应各个数据):

验证:把131728转换成二进制,得到的数据:


与实际测量值相等。

本来我想用or指令进行计算,(D30 or D32),32位数据进行运行,但发现使用autoshop不是很熟练,所以放弃此方法;



展开全文
拨打电话 微信咨询 发送询价