做MODBUS RTU通讯时,如何读取设备寄存器40001中的浮点数

比如设备寄存器40001存的实数是0.11,我用200做modbus通讯的时候,MBUS_MSG中寄存器还是设40001吗?我理解是40001寄存器在PLC里面应该是整形的数据,要怎样可以转换为实数?

最佳答案

首先澄清一点:
做modbus通讯时,modbus传回的数据只有Byte数据,实数还是整数是由您的地址来决定的。
如果您调用的是浮点数的地址,浮点数占用4个字节,即2个连续的整数地址。
所以转换为实数时和您使用的地址有关。
接阿鸣的描述,补充如下:
西门子所有数据以字节为单位,顺序都是按照低字节、高字节的依次顺序排列的。
而modbus协议是按照字或位为单位(因此,字地址和位地址不会发生冲突,可以任意调用)。顺序(以浮点数的2个字举例)是按照低字的高字节、低字的低字节、高字的高字节、高字的高字节的顺序排列的,因此,所有顺序与西门子的顺序完全是反的。
注意是字中的高低字节的位置发生变化,而非阿鸣说的高低字发生变化。
如果需要转换,用移位等指令很容易可以实现。

提问者对于答案的评价:
明白了,多谢!

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc309872.html

(3)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月1日
下一篇 2020年11月1日

相关推荐