我现在有一个基于MODBUS通讯的传感器,要用200PLC作为主站读取传感器的数据。厂家提供的传感器数据信息如下:为32位单精度浮点数;在传感器内存中存储方式是:占2个8位寄存器,且按照后16位,前16位的顺序存储。设备地址为:1
1.差压:单位KPa; 7052-7053
2. 压力:单位KPa; 7054-7055
3. 温度:单位:℃;7056-7057
4. 瞬时流量:单位:Nm^3/h; 7058-7059
5.总累计流量:单位:×1000Nm^3;7060-7061
现在我的问题是如何将传感器的地址与PLC中的地址对应起来,PLC中的地址好像是40000开始的。addr如何填地址,DataPtr只能是VB型,我要读上来利用VD寄存器,如何反转读上来的数据?
问题补充:
读数据书,应该是按顺序读的吧,那么先读得是后16位的,后上来的是前16位的,这样读上来我的数据是不是不对呀?如果是这样那我如何将他改过来?
图片说明:
最佳答案
楼主需注意几个问题:
1. 楼主提到设备地址为:1,即传感器的Modbus从站地址为1,并非数据地址为1,因此,1楼和2楼的Addr为1有误;
2. 单精度浮点数,理论上应该占用4个8位字节或2个16位寄存器地址,是楼主描述有误还是厂家描述有误楼主需要确认;
3. 传感器按照Modbus协议打包数据格式时是按照低字的高字节、低字的低字节、高字高字节、高字高字节的顺序发送的(正常情况下)。如果确认厂家告诉你的信息与上述相反,才需要对高低字进行反转;
4. 如果楼主读取的数据地址都是连续的,为什么不用一条指令一次吧所有数据读上来呢?Modbus的单个请求一次可以读取125个字,即大概62个浮点数。所以没必要分开每次读一个浮点数,这样反而浪费PLC时钟,增加传感器响应时间。
具体编程方式详见阿鸣的链接。如果楼主想了解Modbus协议的相关内容,可以看看我以前写过的一个Modbus通讯说明的帖子。
http://www.ad.siemens.com.cn/club/bbs/post_elite.aspx?b_id=3&a_id=849645
提问者对于答案的评价:
很详细,给的链接里看到了好多,学习了,谢谢!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc303116.html