Управление датчиками Wirenboard по протоколу Modbus
Параметры Modbus
Modbus-адрес
Modbus-адрес устройств Wiren Board легко определить — он нанесен на наклейке (адрес указан в десятичном формате). Новый адрес устройства записывается командой WRITE_SINGLE_REGISTER в регистр хранения (holding register) с адресом 128 (0x80). Подробно о том, как определить (если адрес был изменен) или изменить Modbus-адрес модуля, написано на странице Определение и изменение Modbus-адреса устройств Wirenboard.
Команды Modbus, поддерживаемые устройством
Датчики Wirenboard поддерживают все основные команды Modbus. Подробнее смотрите здесь: Коды функций чтения и записи регистров.
Карта регистров хранения (Holding Registers)
Регистр/ адрес | Тип | Чтение/ запись | Значение по умолчанию | Формат | Назначение | Поддерживается в | С версии
прошивки | |||
---|---|---|---|---|---|---|---|---|---|---|
WB-MS (код модели) | WB-MSW | WB-MSW2 | WB-MSW3 | |||||||
0 | input | R | 0x7FFF | °C × 10 (signed) | Температура с встроенного датчика | T | - | + | + | |
1 | input | R | 0xFFFF |
|
Относительная влажность с встроенного датчика | H | + | + | + | |
2 | input | R | - | лк | Освещённость с встроенного датчика (см. регистры 9 и 10 WB-MSW2) | L | - | - | - | |
3 | input | R | - | дБ × 100 | Уровень шума, умноженный на 100 | S | + | S | S | |
4 | input | R | - | - | - | |||||
5 | input | R | - | - | - | |||||
6 | input | R | 0x7FFF | °C × 16 (signed) | Температура с внешнего датчика | D | - | - | - | |
7 | input | R | 0x7FFF | °C × 16 (signed) | Температура с внешнего датчика | D | - | - | - | |
8 | input | R | PPM | Концентрация CO2 | - | - | С | C | ||
9-10 | input | R | лк | Освещенность, умноженная на 100 (9 старший разряд, 10 — младший разряд значения освещенности) | - | - | + | L | ||
11 | input | R | PPM | Качество воздуха | - | - | - | + | ||
88 | holding | RW | 0 | ppm (400-1500) | Ручная калибровка датчика CO2. Для калибровки запишите сюда текущее значение концентрации CO2, измеренное другим прибором | - | - | C | - | 3.12 |
89 | holding | RW | 0xFF | дней | Длительность цикла для алгоритма самокалибровки датчика CO (ABC) | - | - | C | - | 3.12 |
90 | holding | RW | 20 (200 ms) | × 10 ms | Время усреднения освещённости |
|
- | - | - | |
91 | holding | RW | 20 (200 ms) | × 10 ms | Время усреднения шума | S | + | S | S | |
95 | holding | RW | 1 | 1 or 0 | Режим автокалибровки датчика CO2 (ABC) на атмосферный уровень CO2 | - | - | С | C | |
96 | holding | R | 2000 | ppm | (доступно с версии прошивки 3.5.0) Диапазон измерения концентрации CO2. Допустимые значения: 2000, 5000, 10000. | - | - | C | C | 3.5.0 |
97 | holding | RW | 0 — 10 | c | Период между вспышками сигнальных светодиодов | - | - | - | + | 3.13.0 |
98 | holding | RW | 0 — 50 | мс | Длительность вспышки светодиодов | - | - | - | + | 3.13.0 |
99 | holding | RW | 16 | 1 = 0.0625C | (доступно с версии прошивки 3.10.0) Фильтр подозрительных значений для датчиков 1-Wire (85.000C, 127.937C). Значения отбрасываются, если предыдущее отличается от подозрительного больше, чем на значение регистра*0.0625C. Запишите 0, чтобы отключить фильтр. | D | - | - | + | 3.10.0 |
100 | input | R | raw_val * 16 | Сырое усреднённое значение с АЦП микрофона | S | + | S | S | ||
104-105 | input | R | 32-bit unsigned int | Время работы устройства (uptime counter) в секундах | все | |||||
110 | holding | RW | 96 | baud rate / 100 | скорость порта RS-485, делённая на 100. Допустимые скорости: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 (Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board) |
все | >3.1.0 | |||
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 | см. Сигнатура устройства | сигнатура | все | |||||
220-241 | input | R | __date__ __time__ | дата сборки прошивки | все | |||||
250-269 | input | R | строка, null-terminated | версия прошивки | все | |||||
270-271 | input | R | 32-bit unsigned int | уникальный идентификатор (S/N) | все | |||||
280 | input | R | Максимальное значение датчика движения с АЦП | - | - | - | + | 3.13.0 | ||
281 | input | R | Значение датчика движения с АЦП | - | - | - | + | 3.13.0 | ||
282 | input | R | Время усреднения значений датчика движения с АЦП | - | - | - | + | 3.13.0 | ||
283 | input | R | Текущее усредненное значение движения в условных единицах | - | - | - | + | 3.13.0 |
Карта регистров флагов (Coils)
Регистры, связанные с ИК-управлением, описаны в статье WB-MSx_Consumer_IR_Manual.
Начальный адрес | Количество | Назначение | В модификациях |
---|---|---|---|
0 | 1 | Включение пищалки (buzzer) | WB-MSW2 |
1 | 1 | Принудительная калибровка встроенного датчика CO2. Включать после 20 минут работы при уровне CO2, равном 400 ppm | WB-MSW2 |
2 | 1 | Включение подогрева (heater) в микросхеме сенсора температуры и влажности HDC1080 (только с версии прошивки 3.2.0!) | WB-MS C (в серии 2017 г.), WB-MSW2 |
10 | 1 | Включение зеленого светодиода | WB-MSW3 |
11 | 1 | Включение красного светодиода | WB-MSW3 |
Сигнатура устройства
По адресу 200 хранится сигнатура модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus:
Модуль | Сигнатура |
---|---|
WB-MS | WBMS,'0x00','0x00' |
WB-MSW | WBMSW,'0x00' |
WB-MSW2 | WBMSW2 |
WB-MSW3 | WBMSW3 |
Для получения сигнатуры устройства нужно выполнить команду 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, и преобразуем полученный шестнадцатеричный ответ в символьную строку:
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'`
В результате выполнения команды получаем строку, например WBMS. Модуль WB-MS в примере имеет Modbus-адрес 1.