Управление датчиками Wirenboard по протоколу Modbus

Материал из Wiren Board
Перейти к: навигация, поиск


Параметры 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-MS, WB-MSW, WB-MIR.

Регистры датчиков WB-MSG и WB-MSGR описаны в статье Датчик газа WB-MSGR


Регистр/ адрес Тип Чтение/ запись Значение по умолчанию Формат Назначение Поддерживается в Версии

прошивки

WB-MS (код модели) WB-MSW WB-MSW2
0 input R 0x7FFF °C × 10 (signed) Температура с встроенного датчика T - +
1 input R 0xFFFF
%RH × 10 (signed)
Относительная влажность с встроенного датчика H + +
2 input R - лк Освещённость с встроенного датчика (см. регистры 9 и 10 WB-MSW2) L - -
3 input R - дБ Уровень шума 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 - - С
9-10 input L лк Освещенность, умноженная на 100 (9 старший разряд, 10 — младший разряд значения освещенности) - - +
90 holding RW 20 (200 ms) × 10 ms Время усреднения освещённости
L, B
- -
91 holding RW 20 (200 ms) × 10 ms Время усреднения шума S + S
95 holding RW 1 1 or 0 Режим автокалибровки датчика CO2 (ABC) на атмосферный уровень CO2 - - С
96 holding R 2000 ppm (доступно с версии прошивки 3.5.0) Диапазон измерения концентрации CO2. Допустимые значения: 2000, 5000, 10000. - - C
100 input R raw_val * 16 Сырое усреднённое значение с АЦП микрофона S + S
110 holding RW 96 baud rate / 100 скорость порта RS-485, делённая на 100. Допустимые скорости: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 все >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) все

Карта регистров флагов (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

Сигнатура устройства

По адресу 200 хранится сигнатура модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus:

Модуль Сигнатура
WB-MS WBMS,'0x00','0x00'
WB-MSW WBMSW,'0x00'
WB-MSW2 WBMSW2

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

Перезагрузка

В ряде случаев может потребоваться перезагрузка модуля. Для этого в регистр 120 (0x78) необходимо записать любое значение, отличное от нуля:

modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x06 -r0x78 100

Такая перезагрузка равносильна сбросу по питанию и изменению адреса устройства на 0x01.