Добрый день.
Есть контроллер Pixel подключенный к Crestron по Modbus(RTU), пытаемся считать с него значения датчиков температуры считывая определенные регистры (2 байтовые).
Об алгоритме кодирования приходится только догадываться (с техподдержкой общего языка не находим). Может это базовые принципы протокола Modbus или даже просто кодирования температуры и кому то из Вас они знакомы ближе.
Пример значений температуры
41 8E
3F 3B
C0 5B
Пока нарыли следующее (сравнивая показания дисплея и приходящих данных):
Младший байт рассматриваем по битно 8E->10001110 Младшие 3 бита содержат дробную часть 110->0,8 оставшиеся старшие разряды младшего байта 10001 это целое значение температуры -> 17 Итого 41 8E это 17,8
0 Это все хорошо совпадает с показаниями самого контроллера Pixel если речь про положительные температуры
Непонятки начинаются если целая часть =0.
Если целая (на дисплее) часть 0 (например температура 0,8
0) то получаем значения вида 3F 3B Что пользуясь предыдущим подходом интерпретируем неверно как 7,75 (или 7,8) Т.е по крайней мере целая часть не корректна. А сам контроллер видимо округляет дробную часть в большую сторону отображая лишь 1 знак после запятой.
Теперь рассмотрим старший байт (до этого мы его игнорировали):
Сопоставляя показания можно предположить что старшие 2 бита старшего байта отвечают за:
11- отрицательная температура (С0) ->
11 000 000
01 - положительная температура (41)->
01 000 001
00 - нулевая целая часть (3F) ->
00 111 111
Таким образом получая 3F 3B можно было бы проигнорировав целую часть числа 7,75 оставить 0,75 (или округлить 0,8). Но с этого мета это уже похоже на притягивание за уши
С отрицательными вроде тоже понятно как поступать (преобразовать к положительному представлению -1 потом NOT).
Но вся концепция окончательно рушится если разумно предположить что диапазон температур может быть шире чем +/- 31
0 которые помещаются в старшие 5 бит младшего байта (((
Т.е. старший байт должен нести информацию больше чем просто о знаке, либо концепция описанная выше полностью не верна и это лишь невероятное количество точных случайных совпадений.
К сожалению сейчас не могу привести показания для температур выше 31 градуса, чтоб получить пищу для дальнейших размышлений. Выложу завтра, когда температура обратки поднимется чуть больше.