Sensors Modbus Management: различия между версиями

Материал из Wiren Board
(не показаны 34 промежуточные версии 6 участников)
Строка 1: Строка 1:
<languages/>
<translate>
<!--T:1-->
{{DISPLAYTITLE:Управление датчиками Wirenboard по протоколу Modbus}}
{{DISPLAYTITLE:Управление датчиками Wirenboard по протоколу Modbus}}


== Параметры Modbus ==
== Параметры Modbus == <!--T:2-->


=== Modbus-адрес ===
=== Modbus-адрес === <!--T:3-->
Modbus-адрес устройств Wiren Board легко определить — он нанесен на наклейке (адрес указан в десятичном формате). Новый адрес устройства записывается командой WRITE_SINGLE_REGISTER в регистр хранения (holding register) с адресом 128 (0x80). Подробно о том, как определить (если адрес был изменен) или изменить Modbus-адрес модуля, написано на странице [[Определение и изменение Modbus-адреса устройств Wirenboard]].
Modbus-адрес устройств Wiren Board легко определить — он нанесен на наклейке (адрес указан в десятичном формате). Новый адрес устройства записывается командой WRITE_SINGLE_REGISTER в регистр хранения (holding register) с адресом 128 (0x80). Подробно о том, как определить (если адрес был изменен) или изменить Modbus-адрес модуля, написано на странице [[Определение и изменение Modbus-адреса устройств Wirenboard]].


=== Команды Modbus, поддерживаемые устройством ===
=== Команды Modbus, поддерживаемые устройством === <!--T:4-->


<!--T:5-->
Датчики Wirenboard поддерживают все основные команды Modbus. Подробнее смотрите здесь: [[Протокол Modbus#Коды функций чтения и записи регистров|Коды функций чтения и записи регистров]].
Датчики Wirenboard поддерживают все основные команды Modbus. Подробнее смотрите здесь: [[Протокол Modbus#Коды функций чтения и записи регистров|Коды функций чтения и записи регистров]].


=== Карта регистров хранения (Holding Registers)===
=== Карта регистров хранения (Holding Registers)=== <!--T:6-->


<!--T:7-->
{|  border="1" class="wikitable" style="text-align:center"
{|  border="1" class="wikitable" style="text-align:center"
!rowspan="2"|Регистр/ адрес
!rowspan="2"|Регистр/ адрес
!rowspan="2"|Тип
!rowspan="2"|Тип
!rowspan="2"|Чтение/ запись
!rowspan="2"|Чтение/ запись
!rowspan="2"|Значение по умолчанию
!rowspan="2"|Значение по умолчанию или при ошибке
!rowspan="2"|Формат
!rowspan="2"|Формат
!rowspan="2"|Назначение
!rowspan="2"|Назначение
!colspan="4"|Поддерживается в  
!colspan="5"|Поддерживается в  
!С версии
!С версии
прошивки
прошивки
|-
|-
!WB-MS (код модели)
!WB-MS (код модели)
!WB-MS v2 (код модели)
!WB-MSW
!WB-MSW
!WB-MSW2
!WB-MSW2
!WB-MSW3
!WB-MSW v.3
!
!
|-
|-
| 0 || input || R || 0x7FFF ||°C × 10 (signed)||Температура с встроенного датчика
| 0 || input || R || 0x7FFF ||°C × 10 (signed)||Температура с встроенного датчика
| T
| T
| -
| -
| -
| +
| +
Строка 38: Строка 46:
|1|| input || R || 0xFFFF ||<blockquote>%RH × 10 (signed)</blockquote>||Относительная влажность с встроенного датчика
|1|| input || R || 0xFFFF ||<blockquote>%RH × 10 (signed)</blockquote>||Относительная влажность с встроенного датчика
|H
|H
|<nowiki>-</nowiki>
| +
| +
| +
| +
Строка 48: Строка 57:
|<nowiki>-</nowiki>
|<nowiki>-</nowiki>
|лк
|лк
|Освещённость с встроенного датчика (см. регистры 9 и 10 WB-MSW2)
|''(регистр не используется в датчиках WB-MSW, вместо него регистры 9 и 10)''<br>Освещённость с встроенного датчика
|L
|L
|Lux
| -
| -
| -
| -
Строка 62: Строка 72:
|Уровень шума, умноженный на 100
|Уровень шума, умноженный на 100
|S
|S
|<nowiki>-</nowiki>
| +
| +
|S
|S
Строка 70: Строка 81:
|input
|input
|R
|R
|<nowiki>-</nowiki>
|0x7FFF
|<nowiki>-</nowiki>
|°C × 100 (signed)
|<nowiki>-</nowiki>
|Температура с встроенного датчика
|
| +
|
| +
|
| -
|
| -
|
| +
|4.2
|-
|-
|5
|5
Строка 83: Строка 95:
|R
|R
|<nowiki>-</nowiki>
|<nowiki>-</nowiki>
|<nowiki>-</nowiki>
|%RH × 100 (signed)
|<nowiki>-</nowiki>
|Относительная влажность с встроенного датчика
|
| +
|
| +
|
| -
|
| -
|
| +
|4.2
|-
|-
|6
|6
Строка 98: Строка 111:
|Температура с внешнего датчика
|Температура с внешнего датчика
| D
| D
| +
| -
| -
| -
| -
Строка 110: Строка 124:
|Температура с внешнего датчика
|Температура с внешнего датчика
| D
| D
| +
| -
| -
| -
| -
Строка 118: Строка 133:
|input
|input
| R
| R
|
|0xFFFF
|PPM
|PPM
|Концентрация CO2
|Концентрация CO2
Строка 132: Строка 147:
|
|
|лк
|лк
|'''Освещенность, умноженная на 100''' (9 старший разряд, 10 — младший разряд значения освещенности)
|'''Освещенность, умноженная на 100''' (9 - старший разряд, 10 — младший разряд значения освещенности)
| -
| -
| -
| -
Строка 142: Строка 157:
|input
|input
| R
| R
|
|0xFFFF
|PPM
|PPM
|Качество воздуха
|Качество воздуха
| -
| -
| VOC
| -
| -
| -
| -
Строка 157: Строка 173:
|ppm (400-1500)
|ppm (400-1500)
|Ручная калибровка датчика CO2. Для калибровки запишите сюда текущее значение концентрации CO2, измеренное другим прибором
|Ручная калибровка датчика CO2. Для калибровки запишите сюда текущее значение концентрации CO2, измеренное другим прибором
| -
| -
| -
| -
| -
Строка 169: Строка 186:
|дней
|дней
|Длительность цикла для алгоритма самокалибровки датчика CO (ABC)
|Длительность цикла для алгоритма самокалибровки датчика CO (ABC)
| -
| -
| -
| -
| -
Строка 177: Строка 195:
|90||holding||RW||20 (200 ms)||× 10 ms||Время усреднения освещённости
|90||holding||RW||20 (200 ms)||× 10 ms||Время усреднения освещённости
|<blockquote>L, B</blockquote>
|<blockquote>L, B</blockquote>
| -
| -
| -
| -
| -
Строка 182: Строка 201:
|
|
|-
|-
|91||holding||RW||20 (200 ms)||× 10 ms
|91||holding||RW||20 (200 ms)||× 10 ms
||Время усреднения шума
||Время усреднения шума
|S
|S
| -
| +
| +
|S
|S
|S
|S
|
|-
 
|92
||holding
||RW||0||x0.0625||Служебный регистр HOLD_REG_SPL_RAW_OFFSET - сдвиг значения АЦП
|<nowiki>-</nowiki>
|<nowiki>-</nowiki>
|S
|S
|S
|4.9.0
|-
 
|93
||holding
||RW||0||x0.1dB||Служебный регистр HOLD_REG_SPL_OFFSET - поправка к значению уровня шума
|<nowiki>-</nowiki>
|<nowiki>-</nowiki>
|S
|S
|S
|4.9.0
|-
 
 
 
 
|-
|-
|95
|95
Строка 196: Строка 243:
|1 or 0
|1 or 0
|Режим автокалибровки датчика CO2 (ABC) на атмосферный уровень CO2
|Режим автокалибровки датчика CO2 (ABC) на атмосферный уровень CO2
| -
| -
| -
| -
| -
Строка 204: Строка 252:
|96||holding||R||2000 / 5000||ppm
|96||holding||R||2000 / 5000||ppm
||(доступно с версии прошивки 3.5.0) Диапазон измерения концентрации CO2. Допустимые значения: 2000, 5000, 10000.  
||(доступно с версии прошивки 3.5.0) Диапазон измерения концентрации CO2. Допустимые значения: 2000, 5000, 10000.  
| -
| -
| -
| -
| -
Строка 211: Строка 260:
|-
|-


<!--T:8-->
|97||holding||RW||0 — 10||c
|97||holding||RW||0 — 10||c
||Период между вспышками сигнальных светодиодов  
||Период между вспышками сигнальных светодиодов  
| -
| -
| -
| -
| -
Строка 221: Строка 272:




<!--T:9-->
|98||holding||RW||0 — 50||мс
|98||holding||RW||0 — 50||мс
||Длительность вспышки светодиодов  
||Длительность вспышки светодиодов  
| -
| -
| -
| -
| -
Строка 234: Строка 287:




<!--T:10-->
|99||holding||RW||16|| 1 = 0.0625C
|99||holding||RW||16|| 1 = 0.0625C
||(доступно с версии прошивки 3.10.0) Фильтр подозрительных значений для датчиков 1-Wire (85.000C, 127.937C). Значения отбрасываются, если предыдущее отличается от подозрительного больше, чем на значение регистра*0.0625C. Запишите 0, чтобы отключить фильтр.
||(доступно с версии прошивки 3.10.0) Фильтр подозрительных значений для датчиков 1-Wire (85.000C, 127.937C). Значения отбрасываются, если предыдущее отличается от подозрительного больше, чем на значение регистра*0.0625C. Запишите 0, чтобы отключить фильтр.
| D
| D
| +
| -
| -
| -
| -
Строка 245: Строка 300:




|100
||input
||R||||||Служебный регистр HOLD_REG_SPL_RAW_INT
|<nowiki>-</nowiki>
|<nowiki>-</nowiki>
|S
|S
|S
|
|-


<!--T:11-->
|101
|101
||input
||input
||R||||||Служебный регистр HOLD_REG_TH_READS
||R||||||Служебный регистр HOLD_REG_TH_READS
|colspan="4"|все
|colspan="5"|все
|
|
|-
|-


<!--T:12-->
|102
|102
||input
||input
||R||||||Служебный регистр HOLD_REG_TH_ERRORS
||R||||||Служебный регистр HOLD_REG_TH_ERRORS
|colspan="4"|все
|colspan="5"|все
|
|
|-
|-




|103
||holding
||RW||||||Служебный регистр HOLD_REG_ILLUMINANCE_MODE
|<nowiki>+</nowiki>
|<nowiki>+</nowiki>
|<nowiki>+</nowiki>
|<nowiki>-</nowiki>
|<nowiki>-</nowiki>
|
|-
<!--T:13-->
|104-105
|104-105
||input
||input
||R||||32-bit unsigned int||Время работы устройства (uptime counter) в секундах
||R||||32-bit unsigned int||Время работы устройства (uptime counter) в секундах
|colspan="4"|все
|colspan="5"|все
|
|
|-
|-


<!--T:14-->
|106||input||R|| ||  
|106||input||R|| ||  
|| Служебный регистр INPUT_REG_SGPC3_BASELINE
|| Служебный регистр INPUT_REG_SGPC3_BASELINE
| -
| -
| -
| -
| -
Строка 277: Строка 360:
|-
|-


|106||input||R|| ||  
<!--T:15-->
|107||input||R|| ||  
|| Служебный регистр INPUT_REG_SGPC3_RAW_SIGNAL
|| Служебный регистр INPUT_REG_SGPC3_RAW_SIGNAL
| -
| -
| -
| -
| -
Строка 284: Строка 369:
| +
| +
|
|
|-
|108
|input
|R
|0xFFFF
|
|Служебный регистр SGPC3 VERSION
| -
| -
| -
| -
| +
|4.2
|-
|-




<!--T:16-->
| 110 || holding || RW || 96 ||  baud rate / 100 || скорость порта RS-485, '''делённая на 100'''. Допустимые скорости: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 <br>([[UART_Communication_Settings|Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board]])
| 110 || holding || RW || 96 ||  baud rate / 100 || скорость порта RS-485, '''делённая на 100'''. Допустимые скорости: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 <br>([[UART_Communication_Settings|Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board]])
|colspan="4"|все
|colspan="5"|все
| rowspan="3" |>3.1.0
| rowspan="3" |>3.1.0
|-
|-
| 111 || holding || RW || 0 || || настройка бита чётности порта RS-485. Допустимые значения: 0 - нет бита чётности (none), 1 - нечётный (odd), 2 - чётный (even)  
| 111 || holding || RW || 0 || || настройка бита чётности порта RS-485. Допустимые значения: 0 - нет бита чётности (none), 1 - нечётный (odd), 2 - чётный (even)  
|colspan="4"|все
|colspan="5"|все
|-
|-
| 112 || holding || RW || 2 || || количество стоп-битов порта RS-485. Допустимые значения: 1, 2  
| 112 || holding || RW || 2 || || количество стоп-битов порта RS-485. Допустимые значения: 1, 2  
|colspan="4"|все
|colspan="5"|все
|-
|-
| 120 (0x78) || holding || RW || 0 ||  отличное от 0 || запись в регистр вызывает перезагрузку модуля без сохранения состояния
| 120 (0x78) || holding || RW || 0 ||  отличное от 0 || запись в регистр вызывает перезагрузку модуля без сохранения состояния
|colspan="4"|все
|colspan="5"|все
|
|
|-
|-
| 121 (0x79) || input || R || - ||  mV || текущее напряжение питания модуля
| 121 (0x79) || input || R || - ||  mV || текущее напряжение питания модуля
|colspan="4"|все
|colspan="5"|все
|
|
|-
|-
| 128 (0x80) || holding || RW || 1 || || Modbus-адрес устройства  
| 128 (0x80) || holding || RW || 1 || || Modbus-адрес устройства  
|colspan="4"|все
|colspan="5"|все
|
|
|-
| 129 (0x81) || holding || RW || 0 || 0 или 1 || Переход в [[WB-MCU-Flasher|режим загрузчика]]
|colspan="5"|все || 4.5.0
|-
|-
| 200-206 || input || R || см. [[#Сигнатура устройства|Сигнатура устройства]]  ||  || сигнатура
| 200-206 || input || R || см. [[#Сигнатура устройства|Сигнатура устройства]]  ||  || сигнатура
|colspan="4"|все
|colspan="5"|все
|
|
|-
|-
| 220-241 || input || R || ||  __date__ __time__||  дата сборки прошивки
| 220-241 || input || R || ||  __date__ __time__||  дата сборки прошивки
|colspan="4"|все
|colspan="5"|все
|
|
|-
|245
|holding
|RW
|0
|°C × 100 (signed)
|Температурная компенсация самонагрева для датчика температуры и влажности (значение вычитается из измереной температуры)
| +
| -
| -
| -
| +
|4.2
|-
|-
| 250-269 || input || R || ||  строка, null-terminated ||  версия прошивки
| 250-269 || input || R || ||  строка, null-terminated ||  версия прошивки
|colspan="4"|все
|colspan="5"|все
|
|
|-
|-
| 270-271 || input || R || ||  32-bit unsigned int ||  уникальный идентификатор (S/N)
| 270-271 || input || R || ||  32-bit unsigned int ||  уникальный идентификатор (S/N)
|colspan="4"|все
|colspan="5"|все
|
|
|-
|-
|280||input||R|| ||
|280||input||R|| ||
||Максимальное значение датчика движения с АЦП
||Максимальное значение датчика движения с АЦП
| -
| -
| -
| -
| -
Строка 335: Строка 451:
|281||input||R|| ||
|281||input||R|| ||
||Значение датчика движения с АЦП
||Значение датчика движения с АЦП
| -
| -
| -
| -
| -
Строка 341: Строка 458:
|
|
|-
|-
|282||holding||RW|| ||
|282||holding||RW||10||с
||Время усреднения значений датчика движения с АЦП
||Ширина временного окна для вычисления максимального усредненного значения датчика движения (от 1 до 60 секунд)
| -
| -
| -
| -
| -
Строка 351: Строка 469:
|283||input||R|| ||
|283||input||R|| ||
||Текущее усредненное значение движения в условных единицах
||Текущее усредненное значение движения в условных единицах
| -
| -
| -
| -
| -
Строка 358: Строка 477:
|-
|-


<!--T:17-->
|}
|}


===Карта регистров флагов (Coils)===
===Карта регистров флагов (Coils)=== <!--T:18-->
Регистры, связанные с ИК-управлением, описаны в статье [[WB-MSx_Consumer_IR_Manual]].
Регистры, связанные с ИК-управлением, описаны в статье [[WB-MSx_Consumer_IR_Manual]].


<!--T:19-->
{|  border="1" class="wikitable" style="text-align:center"
{|  border="1" class="wikitable" style="text-align:center"
!Начальный адрес || Количество || Назначение || В модификациях
!Начальный адрес || Количество || Назначение || В модификациях
!С версии прошивки
|-
|-
| 0 || 1 || style="text-align:left" |Включение пищалки (buzzer) || WB-MSW2
| 0 || 1 || style="text-align:left" |Включение пищалки (buzzer) || WB-MSW2, WB-MSW v.3
|
|-
|-
| 1 || 1 || style="text-align:left" | Принудительная калибровка встроенного датчика CO2. Включать после 20 минут работы при уровне CO2, равном 400 ppm || WB-MSW2
| 1 || 1 || style="text-align:left" | Принудительная калибровка встроенного датчика CO2. Включать после 20 минут работы при уровне CO2, равном 400 ppm || WB-MSW2
|
|-
|-
| 2 || 1 || style="text-align:left" | Включение подогрева (heater) в микросхеме сенсора температуры и влажности HDC1080 (только с версии прошивки 3.2.0!) || WB-MS C (в серии 2017 г.), WB-MSW2
| 2 || 1 || style="text-align:left" | Включение подогрева (heater) в микросхеме сенсора температуры и влажности HDC1080 || WB-MS (в серии 2017 г.), WB-MSW2, WB-MSW v.3
|3.2.0
|-
|-
| 10 || 1 || style="text-align:left" | Включение зеленого светодиода || WB-MSW3
|3
|1
| style="text-align:left"|Включение датчика CO2 (1-вкл, 0-выкл)
|WB-MSW v.3
|4.1.0
|-
|-
| 11 || 1 || style="text-align:left" | Включение красного светодиода || WB-MSW3
| 10 || 1 || style="text-align:left" | Включение зеленого светодиода || WB-MSW v.3
|
|-
| 11 || 1 || style="text-align:left" | Включение красного светодиода || WB-MSW v.3
|
|-
|-
|}
|}


===Сигнатура устройства ===
===Сигнатура устройства === <!--T:20-->


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


<!--T:22-->
{| class="wikitable"
{| class="wikitable"
! style="font-weight: bold;" | Модуль
! style="font-weight: bold;" | Модуль
Строка 395: Строка 530:
| WBMSW2
| WBMSW2
|-
|-
| WB-MSW3
| WB-MSW v.3
| WBMSW3
| WBMSW3
|}
|}


<!--T:23-->
Для получения сигнатуры устройства нужно выполнить команду READ_HOLDING_REGISTERS по адресу 200 (длина 6 регистров). Запись в эту область памяти не поддерживается, при попытке записи в недопустимое место возвращается ошибка 3. Пустые места в тексте сигнатуры забиваются значением 0x00.  
Для получения сигнатуры устройства нужно выполнить команду READ_HOLDING_REGISTERS по адресу 200 (длина 6 регистров). Запись в эту область памяти не поддерживается, при попытке записи в недопустимое место возвращается ошибка 3. Пустые места в тексте сигнатуры забиваются значением 0x00.  
Начиная с регистра 220 записана дата сборки прошивки, в формате "число'''x00'''время'''x00'''" в виде строки (пример: 'Jan 27 2017 17:01:13'). Длина записи — 21 регистр.
Начиная с регистра 220 записана дата сборки прошивки, в формате "число'''x00'''время'''x00'''" в виде строки (пример: 'Jan 27 2017 17:01:13'). Длина записи — 21 регистр.


== Управление модулем из командной строки ==
== Управление модулем из командной строки == <!--T:24-->
Программное обеспечение контроллера Wiren Board включает в себя утилиту modbus_client для работы с устройствами, подключенными к выходам RS-485, по протоколу Modbus, подробное описание команды находится на странице [[Modbus-client]]. Доступ к командной строке описан в статье [[SSH]].
Программное обеспечение контроллера Wiren Board включает в себя утилиту modbus_client для работы с устройствами, подключенными к выходам RS-485, по протоколу Modbus, подробное описание команды находится на странице [[Modbus-client]]. Доступ к командной строке описан в статье [[SSH]].


=== Пример чтения регистров ===
=== Пример чтения регистров === <!--T:25-->
Проверим, верно ли, что мы подключились именно к модулю нужного типа. (Модуль wb-mqtt-serial должен быть предварительно остановлен). По адресу 200 хранится уникальная сигнатура длиной в 6 регистров. Прочтем 6 регистров, начиная с адреса 200, и преобразуем полученный шестнадцатеричный ответ в символьную строку:
Проверим, верно ли, что мы подключились именно к модулю нужного типа. (Модуль wb-mqtt-serial должен быть предварительно остановлен). По адресу 200 хранится уникальная сигнатура длиной в 6 регистров. Прочтем 6 регистров, начиная с адреса 200, и преобразуем полученный шестнадцатеричный ответ в символьную строку:


<!--T:26-->
<syntaxhighlight lang="bash">echo  -e `modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 \
<syntaxhighlight lang="bash">echo  -e `modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 \
-a1 -t0x03 -r200 -c 6 | \
-a1 -t0x03 -r200 -c 6 | \
grep Data | sed -e 's/0x00/\\\x/g' -e 's/Data://' -e 's/\s//g'` </syntaxhighlight>
grep Data | sed -e 's/0x00/\\\x/g' -e 's/Data://' -e 's/\s//g'` </syntaxhighlight>


<!--T:27-->
В результате выполнения команды получаем строку, например '''WBMS'''. Модуль WB-MS в примере имеет Modbus-адрес 1.
В результате выполнения команды получаем строку, например '''WBMS'''. Модуль WB-MS в примере имеет Modbus-адрес 1.
</translate>

Версия 15:21, 20 ноября 2019

Другие языки:


Параметры Modbus

Modbus-адрес

Modbus-адрес устройств Wiren Board легко определить — он нанесен на наклейке (адрес указан в десятичном формате). Новый адрес устройства записывается командой WRITE_SINGLE_REGISTER в регистр хранения (holding register) с адресом 128 (0x80). Подробно о том, как определить (если адрес был изменен) или изменить Modbus-адрес модуля, написано на странице Определение и изменение Modbus-адреса устройств Wirenboard.

Команды Modbus, поддерживаемые устройством

Датчики Wirenboard поддерживают все основные команды Modbus. Подробнее смотрите здесь: Коды функций чтения и записи регистров.

Карта регистров хранения (Holding Registers)

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

прошивки

WB-MS (код модели) WB-MS v2 (код модели) WB-MSW WB-MSW2 WB-MSW v.3
0 input R 0x7FFF °C × 10 (signed) Температура с встроенного датчика T - - + +
1 input R 0xFFFF

%RH × 10 (signed)

Относительная влажность с встроенного датчика H - + + +
2 input R - лк (регистр не используется в датчиках WB-MSW, вместо него регистры 9 и 10)
Освещённость с встроенного датчика
L Lux - - -
3 input R - дБ × 100 Уровень шума, умноженный на 100 S - + S S
4 input R 0x7FFF °C × 100 (signed) Температура с встроенного датчика + + - - + 4.2
5 input R - %RH × 100 (signed) Относительная влажность с встроенного датчика + + - - + 4.2
6 input R 0x7FFF °C × 16 (signed) Температура с внешнего датчика D + - - -
7 input R 0x7FFF °C × 16 (signed) Температура с внешнего датчика D + - - -
8 input R 0xFFFF PPM Концентрация CO2 - - С C
9-10 input R лк Освещенность, умноженная на 100 (9 - старший разряд, 10 — младший разряд значения освещенности) - - + L
11 input R 0xFFFF PPM Качество воздуха - VOC - - +
88 holding RW 0 ppm (400-1500) Ручная калибровка датчика CO2. Для калибровки запишите сюда текущее значение концентрации CO2, измеренное другим прибором - - - C C 3.12
89 holding RW 0xFF дней Длительность цикла для алгоритма самокалибровки датчика CO (ABC) - - - C C 3.12
90 holding RW 20 (200 ms) × 10 ms Время усреднения освещённости

L, B

- - - -
91 holding RW 20 (200 ms) × 10 ms Время усреднения шума S - + S S
92 holding RW 0 x0.0625 Служебный регистр HOLD_REG_SPL_RAW_OFFSET - сдвиг значения АЦП - - S S S 4.9.0
93 holding RW 0 x0.1dB Служебный регистр HOLD_REG_SPL_OFFSET - поправка к значению уровня шума - - S S S 4.9.0
95 holding RW 1 1 or 0 Режим автокалибровки датчика CO2 (ABC) на атмосферный уровень CO2 - - - С C
96 holding R 2000 / 5000 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 Служебный регистр HOLD_REG_SPL_RAW_INT - - S S S
101 input R Служебный регистр HOLD_REG_TH_READS все
102 input R Служебный регистр HOLD_REG_TH_ERRORS все
103 holding RW Служебный регистр HOLD_REG_ILLUMINANCE_MODE + + + - -
104-105 input R 32-bit unsigned int Время работы устройства (uptime counter) в секундах все
106 input R Служебный регистр INPUT_REG_SGPC3_BASELINE - - - - +
107 input R Служебный регистр INPUT_REG_SGPC3_RAW_SIGNAL - - - - +
108 input R 0xFFFF Служебный регистр SGPC3 VERSION - - - - + 4.2
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-адрес устройства все
129 (0x81) holding RW 0 0 или 1 Переход в режим загрузчика все 4.5.0
200-206 input R см. Сигнатура устройства сигнатура все
220-241 input R __date__ __time__ дата сборки прошивки все
245 holding RW 0 °C × 100 (signed) Температурная компенсация самонагрева для датчика температуры и влажности (значение вычитается из измереной температуры) + - - - + 4.2
250-269 input R строка, null-terminated версия прошивки все
270-271 input R 32-bit unsigned int уникальный идентификатор (S/N) все
280 input R Максимальное значение датчика движения с АЦП - - - - +
281 input R Значение датчика движения с АЦП - - - - +
282 holding RW 10 с Ширина временного окна для вычисления максимального усредненного значения датчика движения (от 1 до 60 секунд) - - - - +
283 input R Текущее усредненное значение движения в условных единицах - - - - +

Карта регистров флагов (Coils)

Регистры, связанные с ИК-управлением, описаны в статье WB-MSx_Consumer_IR_Manual.

Начальный адрес Количество Назначение В модификациях С версии прошивки
0 1 Включение пищалки (buzzer) WB-MSW2, WB-MSW v.3
1 1 Принудительная калибровка встроенного датчика CO2. Включать после 20 минут работы при уровне CO2, равном 400 ppm WB-MSW2
2 1 Включение подогрева (heater) в микросхеме сенсора температуры и влажности HDC1080 WB-MS (в серии 2017 г.), WB-MSW2, WB-MSW v.3 3.2.0
3 1 Включение датчика CO2 (1-вкл, 0-выкл) WB-MSW v.3 4.1.0
10 1 Включение зеленого светодиода WB-MSW v.3
11 1 Включение красного светодиода WB-MSW v.3

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

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

Модуль Сигнатура
WB-MS WBMS,'0x00','0x00'
WB-MSW WBMSW,'0x00'
WB-MSW2 WBMSW2
WB-MSW v.3 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.