WB-MIR v2 - Modbus IR Remote Control: различия между версиями
Kilpio (обсуждение | вклад) |
Kilpio (обсуждение | вклад) |
||
Строка 98: | Строка 98: | ||
Подробно о работе с модулем по протоколу Modbus написано в разделе [[Sensors_Modbus_Management|Управление датчиками Wirenboard по протоколу Modbus]]. | Подробно о работе с модулем по протоколу Modbus написано в разделе [[Sensors_Modbus_Management|Управление датчиками Wirenboard по протоколу Modbus]]. | ||
Карта регистров устройства выглядит следующим образом: | |||
=== Карта регистров хранения (Holding Registers)=== | |||
{| border="1" class="wikitable" style="text-align:center" | |||
!Регистр/ адрес | |||
!тип | |||
!чтение/ запись | |||
!значение по умолчанию | |||
!формат | |||
!назначение | |||
!к каким модификациям датчика применимо | |||
|- | |||
| 0 || input || R || 0x7FFF ||°C × 10 (signed)||Температура с встроенного датчика | |||
|WB-MS T | |||
|- | |||
|1|| input || R || 0xFFFF ||<blockquote>%RH × 10 (signed)</blockquote>||Относительная влажность с встроенного датчика | |||
|WB-MS H | |||
|- | |||
|2 | |||
|input | |||
|R | |||
|<nowiki>-</nowiki> | |||
|lux | |||
|Освещённость с встроенного датчика | |||
|WB-MS L | |||
|- | |||
|3 | |||
|input | |||
|R | |||
|<nowiki>-</nowiki> | |||
|dB | |||
|Уровень шума | |||
|WB-MS S | |||
|- | |||
|4 | |||
|input | |||
|R | |||
|<nowiki>-</nowiki> | |||
|<nowiki>-</nowiki> | |||
|<nowiki>-</nowiki> | |||
| | |||
|- | |||
|5 | |||
|input | |||
|R | |||
|<nowiki>-</nowiki> | |||
|<nowiki>-</nowiki> | |||
|<nowiki>-</nowiki> | |||
| | |||
|- | |||
|6 | |||
|input | |||
|R | |||
|0x7FFF | |||
|°C × 16 (signed) | |||
|Температура с внешнего датчика | |||
|WB-MS D, WB-MIR | |||
|- | |||
|7 | |||
|input | |||
|R | |||
|0x7FFF | |||
|°C × 16 (signed) | |||
|Температура с внешнего датчика | |||
|WB-MS D, WB-MIR | |||
|- | |||
|8 | |||
|input | |||
|R | |||
| | |||
|PPM | |||
|Концентрация CO2 | |||
| | |||
|- | |||
||||||||||| | |||
| | |||
|- | |||
||||||||||| | |||
| | |||
|- | |||
||||||||||| | |||
| | |||
|- | |||
|90||holding||RW||20 (200 ms)||× 10 ms||Время усреднения освещённости | |||
|<blockquote>L</blockquote> | |||
|- | |||
|91||holding||RW||20 (200 ms)||× 10 ms | |||
||Время усреднения шума | |||
|WB-MS S | |||
|- | |||
|100 | |||
||input | |||
||R||||raw_val * 16||Сырое усреднённое значение с АЦП микрофона | |||
|WB-MS S | |||
|- | |||
| 110 || holding || RW || 96 || baud rate / 100 || скорость порта RS-485, '''делённая на 100'''. Допустимые скорости: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 || все | |||
|- | |||
| 111 || holding || RW || 0 || || настройка бита чётности порта RS-485. Допустимые значения: 0 - нет бита чётности (none), 1 - нечётный (odd), 2 - чётный (even) || все | |||
|- | |||
| 112 || holding || RW || 2 || || количество стоп-битов порта RS-485. Допустимые значения: 1, 2 || все | |||
|- | |||
| 120 (0x78) || holding || RW || 0 || отличное от 0 || запись в регистр вызывает перезагрузку МК без сохранения состояния || все | |||
|- | |||
| 121 (0x79) || input || R || - || mV || текущее напряжение питания модуля | |||
|все | |||
|- | |||
| 128 (0x80) || holding || RW || 1 || || Modbus-адрес устройства | |||
|все | |||
|- | |||
| 200-206 || input || R || {'W','B','M','S',0,0} || || сигнатура | |||
|все | |||
|- | |||
| 220-241 || input || R || || __date__ __time__|| дата сборки прошивки | |||
|все | |||
|- | |||
| 250-269 || input || R || || строка, null-terminated || версия прошивки | |||
|все | |||
|- | |||
| 270-271 || input || R || || 32-bit unsigned int || уникальный идентификатор (S/N) | |||
|все | |||
|- | |||
| 2000-2509 || holding || RW || || || Буфер периодов IR-приемопередатчика | |||
|WB-MS I, WB-MIR | |||
|- | |||
|} | |||
==Карта регистров флагов (Coils)== | |||
===Карта регистров флагов (Coils)=== | |||
{| border="1" class="wikitable" style="text-align:center" | |||
!Начальный адрес || Количество || Назначение || В модификациях | |||
|- | |||
| 0 || 1 || style="text-align:left" |Включение пищалки (buzzer) || все | |||
|- | |||
| 1 || 1 || style="text-align:left" | Принудительная калибровка встроенного датчика CO2. Включать после 20 минут работы при уровне CO2, равном 400 ppm || WB-MS C, WB-MSW2 | |||
|- | |||
| 2 || 1 || style="text-align:left" | Включение подогрева (heater) в микросхеме сенсора температуры и влажности HDC1080 (только с версии прошивки 3.2.0!) || WB-MS C, WB-MSW2 | |||
|- | |||
| 5000 || 1 || style="text-align:left" | Очистка всех банков ИК-команд || WB-MS I, WB-MIR | |||
|- | |||
| 5001 || 1 || style="text-align:left" | Запись ИК-команды с ИК-приёмника в Modbus регистры хранения (2000-2509), без сохранения в банк команд || WB-MS I, WB-MIR | |||
|- | |||
| 5002 || 1 || style="text-align:left" | Воспроизведение ИК-команды из Modbus регистров хранения (2000-2509) || WB-MS I, WB-MIR | |||
|- | |||
| 5100 (в прошивке 3.1.0 и ранее - 0) || number_of_banks || style="text-align:left" | Воспроизведение ИК-команды из соответствующего банка || WB-MS I, WB-MIR | |||
|- | |||
| 5200 (в прошивке 3.1.0 и ранее - 1000) || number_of_banks|| style="text-align:left" | Чтение и запись в банки команд IR || WB-MS I, WB-MIR | |||
|- | |||
| 5300 (в прошивке 3.1.0 и ранее - 2000)|| number_of_banks || style="text-align:left" | Запись в банк команд IR использую IR-приёмник || WB-MS I, WB-MIR | |||
|- | |||
|} | |||
===Сигнатура устройства === | |||
По адресу 200 лежит сигнатура релейного модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus: | |||
{| class="wikitable" | |||
! style="font-weight: bold;" | Модуль | |||
! style="font-weight: bold;" | Сигнатура | |||
|- | |||
| WB-MIR | |||
| WBMIR | |||
|- | |||
| WB-MS | |||
| WBMS | |||
|- | |||
| WB-MSW | |||
| WBMSW | |||
|- | |||
| WB-MSW2 | |||
| WB-MSW2 | |||
|} | |||
Для получения сигнатуры нужно выполнить команду READ_HOLDING_REGISTERS по адресу 200 (длина 6 регистров). Запись в эту область памяти не поддерживается, при попытке записи в недопустимое место возвращается ошибка 3. Пустые места в тексте сигнатуры забиваются значением 0x00. | |||
Начиная с регистра 220 записана дата сборки прошивки, в формате "число'''x00'''время'''x00'''" в виде строки (пример: 'Jan 27 2017 17:01:13'). Длина записи — 21 регистр. | |||
== Управление модулем из командной строки == | |||
Программное обеспечение контроллера Wiren Board включает в себя утилиту modbus_client для работы с устройствами, подключенными к выходам RS-485, по протоколу Modbus, подробное описание команды находится на странице [[Modbus-client]]. Доступ к командной строке описан в статье [[SSH]]. | |||
=== Пример чтения регистров === | |||
Проверим, верно ли, что мы подключились именно к модулю нужного типа. (Модуль wb-mqtt-serial должен быть предварительно остановлен). По адресу 200 хранится уникальная сигнатура длиной в 6 регистров. Прочтем 6 регистров, начиная с адреса 200, и преобразуем полученный шестнадцатеричный ответ в символьную строку: | |||
<syntaxhighlight lang="bash">echo -e `modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 \ | |||
-a1 -t0x03 -r200 -c 6 | \ | |||
grep Data | sed -e 's/0x00/\\\x/g' -e 's/Data://' -e 's/\s//g'` </syntaxhighlight> | |||
В результате выполнения команды получаем строку, например '''WBMR6'''. Релейный модуль WB-MR6 имеет Modbus-адрес 1. | |||
=== Перезагрузка === | |||
В ряде случаев может потребоваться перезагрузка модуля. Для этого в регистр 120 (0x78) необходимо записать любое значение, отличное от нуля: | |||
<syntaxhighlight lang="bash"> | |||
modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x06 -r0x78 100 | |||
</syntaxhighlight> | |||
Такая перезагрузка равносильна сбросу по питанию и изменению адреса устройства на 0x01. Все реле при этом выключаются. Предварительно, конечно, необходимо остановить сервис wb-mqtt-serial и убедиться, что к контроллеру не подключены другие Modbus-устройства. |