您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>电子百科>通信技术>

modbus如何发送浮点数

2018年02月08日 09:33 电子发烧友整理 作者: 用户评论(0

利用Modbus协议来实现不同设备之间的通讯,操作简便,适用性强,通讯速度快。因此,在各种工控系统中,Modbus是极为常见的一种通讯协议。同时,Modbus也是一种实力较强的现场总线,在工业控制实现真正的网络化过程中,Modbus将发挥更大的作用。

modbus协议字节传送顺序

在Modbus总线中,数据传输时是低位字节先传送,传送过来后如果不进行交换,二进制的数值排列是反向的,即原来的低字节在高位,高字节在低位,所以得到的数据和原数据相差甚远。只要将数据的高低位字节进行交换(swap位置1),就可解决此问题。

32位数据与Modbus RTU

Modbus协议是一种通用工业标准,国家标准位GB/T19582-2008。只要遵循Modbus协议,不同厂商生产的设备可以连成工业网络,进行互相通信

Modbus协议中规定寄存器是16位长度,但是随着芯片处理能力的加强及现场要求的提高,32位数据在各类工业设备上使用日渐增多,因此本文主要梳理Modbus RTU协议与32位数据之间的关系,给产品开发提供理论支持。为行文方便,下面将Modbus RTU协议简称为协议。

协议中规定16位数据排列顺序位先高后低,例如ushort数据

0x0102,字节01为高字节,02为低字节。这个顺序我个人理解是按照人的书写阅读顺序习惯定义的,从左到右,高字节在前,低字节在后。 数据传输帧如下:

modbus如何发送浮点数

下面看32位数据,例如ulong数据0x01020304。由于协议中寄存器大小为16位,该数据需要两个寄存器才能存储,因此将该数据拆分为两个16位数据0x0102与0x0304。这两个16位数据在寄存器中的顺序没有疑问,先高后低排列,但是关键问题是协议未规定这两个寄存器的先后顺序,因此在实际使用中会有2种情况出现,先0x0102后0x0304,或者先0x0304后0x0102,这2种排列顺序都是允许的,根据协议内容,建议首选先0x0102后0x0304,协议标准测试软件Modscan提供交换选项。但是绝对不会出现0x0201或0x0403的排列,违反了协议先高后低的规范,是不标准的。数据传输帧如下:

modbus如何发送浮点数

modbus如何发送浮点数

最后来看32位浮点数,同样我们需要定义浮点数的书写阅读顺序,根据IEEEE754标准,浮点数的书写顺序为:符号、阶码、尾数。例如-4.00,编码顺序为0xC0800000,得出2个寄存器内容分别为0xC080与0x0000,这2个寄存器同样可以交换,但寄存器内部数据顺序不能变动。数据传输帧如下:

modbus如何发送浮点数

modbus如何发送浮点数

总结,根据Modbus RTU标准协议,对于32位数据,只存在寄存器交换与不交换2种选项,当有涉及到寄存器内部字节交换的时候,都是非标准的。

modbus发送浮点数

在Modbus现场总线系统中,浮点数的数据传输一般有两种办法,一种是将浮点数按照量程映射到一个寄存器中(2个字节),例如0到65535对应0到100%,还有一种就是采用两个寄存器四个字节传输浮点数。

非常好我支持^.^

(16) 88.9%

不好我反对

(2) 11.1%

( 发表人:李建兵 )

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!