modbus如何发送浮点数

通信技术

40人已加入

描述

利用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为低字节。这个顺序我个人理解是按照人的书写阅读顺序习惯定义的,从左到右,高字节在前,低字节在后。 数据传输帧如下:

通讯协议

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

通讯协议

通讯协议

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

通讯协议

通讯协议

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

modbus发送浮点数

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分