Форум » » Помогите разобраться с кодировкой значений датчика температуры » Ответить

Помогите разобраться с кодировкой значений датчика температуры

Вячеслав: Добрый день. Есть контроллер Pixel подключенный к Crestron по Modbus(RTU), пытаемся считать с него значения датчиков температуры считывая определенные регистры (2 байтовые). Об алгоритме кодирования приходится только догадываться (с техподдержкой общего языка не находим). Может это базовые принципы протокола Modbus или даже просто кодирования температуры и кому то из Вас они знакомы ближе. Пример значений температуры 41 8E 3F 3B C0 5B Пока нарыли следующее (сравнивая показания дисплея и приходящих данных): Младший байт рассматриваем по битно 8E->10001110 Младшие 3 бита содержат дробную часть 110->0,8 оставшиеся старшие разряды младшего байта 10001 это целое значение температуры -> 17 Итого 41 8E это 17,80 Это все хорошо совпадает с показаниями самого контроллера Pixel если речь про положительные температуры Непонятки начинаются если целая часть =0. Если целая (на дисплее) часть 0 (например температура 0,80) то получаем значения вида 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). Но вся концепция окончательно рушится если разумно предположить что диапазон температур может быть шире чем +/- 310 которые помещаются в старшие 5 бит младшего байта ((( Т.е. старший байт должен нести информацию больше чем просто о знаке, либо концепция описанная выше полностью не верна и это лишь невероятное количество точных случайных совпадений. К сожалению сейчас не могу привести показания для температур выше 31 градуса, чтоб получить пищу для дальнейших размышлений. Выложу завтра, когда температура обратки поднимется чуть больше.

Ответов - 3

Игорь K.: Можно предположить, что представительство не в состоянии ответить на ваш вопрос, они банально не знают что отвечать. Гоняйте температуру феном, анализируйте данные в Excel.

DmitriiP: это IEEE 754 binary floating-point IEEE 754 Converter 1 IEEE 754 Converter 2 Floating point to/from hex/binary conversion How Real (Floating Point) and 32-bit Data is Encoded in Modbus RTU Messages Logic Symbols -> Analog operations -> Analog to Float Point Float Point to Analog

Вячеслав: DmitriiP Спасибо за подсказку. Теперь понятно что значили еще 2 байта. Единственное что в протоколе Pixel идут сначала младшие 2 байта, а потом старшие 2 байта. Придумают же такие замороченные представления. Надеюсь к тому были объективные причины, иначе не пойму что они там курят в IEEE




полная версия страницы