Я почти уверен, что значение 39558853.30 слишком велико для хранения в плавающем элементе с одинарной точностью IEEE. Точность 7,22 цифры, для этого числа требуется 9 цифр. Я провел некоторые эксперименты с присвоением значения float, и двойные значения в C # подтверждают это.
Это заставляет меня верить:
1) Как предложил Беньямин Джафари, вам нужно прочитать четыре регистра. Однако это число (как двойное) в шестнадцатеричном виде равно 0x4182dcf62a666666, что, по-видимому, не соответствует никаким данным, которые вы читаете.
OR
2) Также возможно, что он возвращается как UINT32, который должен быть масштабирован на (1/100), чтобы дать вам то, что показывает счетчик. 0xE54D4765 = 3847047013 => масштабируется на 1 / 100.0 = 38470470.13, что близко к тому, что вы видите на прилавке. По моему опыту, это обычная практика в Modbus.
*
OR * 1011
3) Они используют другой (нестандартный) формат для представления данных.
Можете ли вы дать нам название продукта, модель и т.д.?