Чтение float32 из устройства ОВЕН

Добрый день!

Подскажите, пож-та, как правильно считать (точнее отобразить с возможностью обратного преобразования при записи) данные из регистра, определенные как FLOAT32?

root@wirenboard:~# modbus_client --debug -mtcp -t0x03 -r0x1011 -p502 10.10.87.10 -a78 -c2
Connecting to 10.10.87.10:502
[00][01][00][00][00][06][4E][03][10][11][00][02]
Waiting for a confirmation…
<00><01><00><00><00><07><4E><03><04><00><00><41><80>
SUCCESS: read 2 of elements:
Data: 0x0000 0x4180

В шаблоне устройства все в лоб:
{
“id” : “SP1”,
“group”: “input1”,
“address” : “0x1011”,
“format” : “float”,
“name” : “setting_channel1”,
“reg_type” : “holding”,
“type” : “value”
}

В веб-морде отображается как 2.349697e-41 (правильно 16 в десятичной системе)

Читаю из регистров https://owen.ru/product/2trm1

В вашем приборе есть настройка:


Она должна быть равна “старший байт вперед”. В шаблоне все верно.

Спасибо за ответ. Насчет порядка байт проверю вечером, но если по-умолчанию старший вперед, то так и есть - я не менял этот параметр. То, что 4180hex <> 16deс я и так вижу, но вывод в интерфейс еще более странный. Отпишусь.
Если через интерфейс WB поставить какое-то число (то же 16, например), то прибор показывает 0.
Если через прибор поставить 16, то в интерфейсе 2.349697e-41

41800000hex == 16deс
это же float
00004180hex == 2.349697e-41dec

Т.е. порядок байт правильный (в первом комменте я был неправ), надо в шаблоне сменить порядок слов:

“word_order”: “little_endian”,

1 лайк

Спасибо за помощь, сработало!
Если кому нужно - прикрепляю шаблон (параметров вытянул много, но вариант не универсальный).
config-2trm1u2.json (24.0 KB)

1 лайк