 ## How are floating point values converted in Schneider Electric energy meters?

FA204140

27/09/2018

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 10
1.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: https://en.wikipedia.org/wiki/IEEE_floating-point_standard