PLC通讯读取数据,获得数据高低字错位
使用的PLC是汇川easy521,从站是激光测距仪器,一开始用的0-10V模拟量获取位置,但发现激光测距距离一旦远了,plc获取的为位置信息与仪器显示的位置Zui大偏差有5cm,严重影响RGV定位,改采用485通讯(由于一开始485通讯不上,今天改换另一台激光测距仪器,发现之前的仪器485通讯是坏的),485通讯读取的数据,高低字是独立的两个字(后面发现低字读取的数据有负数,负数在计算机计算器中进行转换,二进制数据编程了64位,后面想了想,怀疑是有数据没读到,用DINT类型) 。
这是激光测距仪器的通讯地址(十进制地址是21,22):
通讯地址设置如图:
通讯获取的相关地址数据后,先把高位字进行处理,把高位字向左移动16位,从而获得,一开始我用的是SHL指令,但发现easy没有AM系列PLC简便,于是采用高低位字调换指令,即xchp指令,指令具体使用如下说明:
根据指令提示,进行如下操作:通讯获得激光测距仪器的高位字数据D30(dint类型),低位字数据D32(dint类型),此时D30数值为2,D32数字为656,先把数据进行计算,在电脑自带的计算器进行就算,仪表显示的值转换成二进制为:00100000 0010 1001 0000,656数值转换成二进制为0010 10010000,2转换成二进制为0010,发现只要把0010放在00101001 0000就变成了目标值。
先把高位数据2向左移动16位,采用高低位转化指令,先把D30的数据D30,D31分别赋值给D36,D37。
使用xchp指令,调换高低字位置:
再把获得的数据D36(dint类型)赋值给D34,相当于获得转换后的数据,131072,131072转换成二进制位:0010 00000000 0000 0000,观察数据,可以发现1往左移动了16位:
再把D34与D32相加(此处我有点不理解,但使用加法,得到的数值与仪器显示的数据相等,明天再去验证一下,是否适应各个数据):
验证:把131728转换成二进制,得到的数据:
与实际测量值相等。
本来我想用or指令进行计算,(D30 orD32),32位数据进行运行,但发现使用autoshop不是很熟练,放弃此方法;
如果大家有更好的办法,欢迎讨论,谢谢!!!!