On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение





ссылка на сообщение  Отправлено: 02.11.16 13:06. Заголовок: Помогите разобраться с кодировкой значений датчика температуры


Добрый день.
Есть контроллер 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 градуса, чтоб получить пищу для дальнейших размышлений. Выложу завтра, когда температура обратки поднимется чуть больше.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 3 [только новые]


постоянный участник




ссылка на сообщение  Отправлено: 02.11.16 13:30. Заголовок: Можно предположить, ..


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


Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 02.11.16 16:11. Заголовок: это IEEE-754 IEEE 7..

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 02.11.16 21:17. Заголовок: DmitriiP Спасибо за ..


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

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 9
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет