Для начала о формате Float. Число в этом формате представлено в виде мантиссы и экспоненты+знак числа. Для представления такого числа используются 32 бита=4байта=2WORD.
Есть такой онлайн ресурс http://www.binaryconvert.com/convert_float.html, где можно проводить преобразование чисел из одного формата в другой.
Так вот, попробую с его помощью объяснить почему возможны 4 варианта
Вот так выглядит представление числа Float
1.png
Хорошо видно где находятся знак, мантисса и экспонента.
В ПЛК число "1" должно быть представлено так
2.png
Как уже было сказано, в стандарте на протокол ModBus не описано как должны передаваться 32-битные числа в формате Float. Просто для предачи 32 бит используют передачу двух 16-битных регистров WORD. Назавем их WORD_0 и WORD_1
В каком порядке будет передавать эти WORD в Ваш ПЛК подключенное к нему Slave устройство выбрал изготовитель Slave устройства, так как ему понравиться. Ведь стандарта нет.
Мало того, что порядок передачи регистров может быть WORD_0,WORD_1 или WORD_1,WORD_0.
Так еще есть два вариант упаковки байт исходного числа в WORD.
Вот и получаются еще три варианта в дополнение к выше приведенному.
3.png
4.png
5.png
Можете попробовать вставить сюда 2 WORD, которые Вы прочитали из Slave, может будет понятно в каком порядке нужно будет переставлять байты (какой из четырех алгоритмов использовать)





Ответить с цитированием