使用的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不是很熟练,所以放弃此方法;
- PLC中通讯常用到的心跳功能 2024-11-08
- S7-1200 PLC 选择:工业应用指南了解如何通过实际工业应用选择正确的 S7-1200 PLC 2024-11-08
- 伺服原点回归说明及相关参数设置 2024-11-08
- PLC程序,两条输送线防止连包程序 2024-11-08
- PLC中线圈失电的同时有置位触发,在置位触发条件失电,置位信号复位 2024-11-08
- 485通讯和模拟量数据更新频率对比 2024-11-08
- 零基础学西门子PLC(14):这两个指令搞不明白,编程就无从谈起 2024-11-08
- 零基础学西门子PLC(12):水泵自动补水,编程分解 2024-11-08
- 零基础学西门子PLC(11):常开常闭经常搞混,这样讲你就明白了 2024-11-08
- 零基础学西门子PLC(10):之时间去哪了(PLC定时器)。 2024-11-08