- 在使用Modbus RTU协议时常常会遇到要传输32位浮点型数据的情况。本文讨论如何解决传输浮点数的问题。
- 点对点的Modbus协议时RTU通信的常用选择。协议本身控制Modbus网络上每个设备的交互,设备如何建立已知地址,每个设备如何识别其消息以及如何从数据中提取基本信息。从本质上讲,该协议是整个Modbus网络的基础。
- 然而,这种便利并非没有一些复杂性,Modbus RTU消息协议也不例外。协议本身是基于具有16位寄存器长度的器件设计的。因此,在实现32位数据元素时需要特别注意。该实现决定使用两个连续的16位寄存器来表示32位数据或基本4字节的数据。在这4个字节的数据中,单精度浮点数据可以编码为Modbus RTU消息。
字节顺序的重要性
Modbus本身没有定义浮点数据类型,但人们普遍认为它使用IEEE-754标准实现了32位浮点数据。但是,IEEE标准没有明确规定数据有效载荷的字节顺序。因此,处理32位数据时最重要的考虑因素是数据按正确顺序寻址。
例如,IEEE 754单精度32位浮点数标准中定义的数字123456.00如下所示:
各种字节排序的影响很大。例如,在“B A D C”序列中对表示123456.00的4字节数据进行排序,称为“字节交换”。当解释为IEEE 744浮点数据类型时,结果完全不同:
在“C D A B”序列中排序相同的字节称为“字交换”。同样,结果与原始值123456.00大不相同:
此外,“字节交换”和“字交换”基本上都会完全颠倒字节序列以产生另一个结果:
显然ÿ