Issue
Some Powerlogic meters represent 32-bit Modbus registers as an IEEE 754 floating point data type
Product Line
PowerLogic and ION Meters that support IEEE 754 floating point data types in Modbus registers
Environment
Modbus Floating Point Data Type
Cause
Internally, most Schneider PowerLogic meters use floating point representations (conforming to IEEE floating point standards) to represent large numbers (i.e. ones that don't fit easily into integer formats). The most common format is a 4 byte floating point (IEEE 754) representation. Some meters allow reading of values directly using Modbus protocol that are in this format (see specific meter’s Modbus Register Map for more details).
Resolution
The architecture of this number format is the following:
S | E | F |
0 | 1_______8 | 9_______________________31 |
S: sign
E: exponent
F: faction (also referred to as the mantissa or significand)
calculation would be = (-1)^S * 2^(E [dec format]-127) * (1.F)[Base 10]
Take frequency reading of PM700 as an example. If the frequency reading in floating point registers are:
1020: 0100001001000111
1021: 0000000000000000
Combine 2 registers in binary format to become:
01000010010001110000000000000000
According to the IEEE Floating Point Standard, split the combined value according to the structure:
S | E | F |
0 | 10000100 | 10001110000000000000000 |
When S=0, it is a positive number (i.e. S=1 means the value is negative).
The value in E is 10000100, which is 132 in decimal.
The remaining portion is placed in F, which is 0.10001110000000000000000 (Base 2).
1.F is 1.10001110000000000000000 in base 2, which equals to 1.55468750000000000000000 in Base 101.554687500000000000000001.55468750000000000000000
Placing this in the formula results in (-1)^(0) * 2^(132-127) * (1.55468750000000000000000) = 49.75
For more information, a general explanation can be found on Wikipedia at: http://en.wikipedia.org/wiki/IEEE_floating-point_standard
Attached to this article is an Excel-based 32-bit floating point calculator