PLC转换32位IEEE 754格式modbus 值到浮点

有设备发送回来的modbus值,其格式遵循IEEE 754格式。
譬如施耐德的 Powerlogic 测量仪表,杭州联测的SIN-R9600无纸记录仪。经常使用4字节浮点表示。
譬如:

S E F
0 1_______8 9_______________________31

第0个位,S是符号位,1代表负值,0代表正值。
第1-8位,E是指数位,其值减掉127,数字为幂。
第9-31共23个位,F是尾数,包含浮点的整数部与小数部。

S: sign 符号
E: exponent 指数
F: faction (also referred to as the mantissa or significand) 分数,也使用尾数或有效数

结果 = = (-1)^S * 2^(E [dec format]-127) * (1.F)[Base 10]

因为尾数部分保含整数部与小数部,它的值是1与[0,1]的和。
举例:

1020: 0100001001000111
1021: 0000000000000000

1020寄存器地址,存储高位,2进制数值为:
01000010010001110000000000000000

符号为0,
指数位为10000100,指数132-127=5
F为1.10001110000000000000000,小数点后的值表示[0-1],即23位,0x7fffff的值,映射为1.
转换为10进制的值:
0x470000/0x7fffff = 0.5546875661239107
依照上述公式代入计算:
(-1)^(0) * 2^(132-127) * (1.55468750000000000000000) = 49.750002115965145
用jupyter notebook环境,写python函数如下:

# calcu

你可能感兴趣的:(PLC自动化,浮点,IEEE,754,显控)