Modbus协议中浮点数(单精度)使用的是IEEE754标准浮点数(32位)的表示方法:
- 1[31] 符号位(SIGN)
- 8[23-30] 指数位(EXPONENT) 指数偏移量 127
- 23[0-22] 尾数位(MANTISSA)
转换为10进制的公式:
SGL = (-1)^SIGN * 1.MANTISSA * 2^(EXPONENT-127)
转换举例:
将40800000转换为10进制数,方法如下:

Modbus浮点数转换示例
- 先将16进制数转成二进制数01000000100000000000000000000000
- 1位符号位(SIGN)=0
- 8位指数位(EXPONENT)=10000001=129[10进制]
- 23位尾数位(MANTISSA)=00000000000000000000000
- 1.尾数=1 .00000000000000000000000=1.0000000[10进制]
- 套入公式得SGL=(-1)^0*1.0000000*2^(129-127)=4
VB转换方法:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) ‘定义 Dim A(3) As Byte Dim d As Single A(0)=&H00 A(1)=&H00 A(2)=&H80 A(3)=&H40 CopyMemory d, A(0), 4 ' 结果d=4
发表评论