欢迎您访问科普小知识本站旨在为大家提供日常生活中常见的科普小知识,以及科普文章!
您现在的位置是:首页  > 科技

modbus如何发送浮点数

科普小知识2023-10-12 22:08:33
...

利用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%,还有一种就是采用两个寄存器四个字节传输浮点数。