Sensors Modbus Management: различия между версиями
Admin (обсуждение | вклад) |
|||
(не показана 21 промежуточная версия 3 участников) | |||
Строка 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=" | !colspan="5"|Поддерживается в | ||
!С версии | !С версии | ||
прошивки | прошивки | ||
|- | |- | ||
!WB-MS (код модели) | !WB-MS (код модели) | ||
!WB-MS v2 (код модели) | |||
!WB-MSW | !WB-MSW | ||
!WB-MSW2 | !WB-MSW2 | ||
Строка 31: | Строка 38: | ||
| 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> | ||
|лк | |лк | ||
|''(регистр не используется в | |''(регистр не используется в датчиках WB-MSW, вместо него регистры 9 и 10)''<br>Освещённость с встроенного датчика | ||
|L | |L | ||
|Lux | |||
| - | | - | ||
| - | | - | ||
Строка 62: | Строка 72: | ||
|Уровень шума, умноженный на 100 | |Уровень шума, умноженный на 100 | ||
|S | |S | ||
|<nowiki>-</nowiki> | |||
| + | | + | ||
|S | |S | ||
Строка 70: | Строка 81: | ||
|input | |input | ||
|R | |R | ||
| | |0x7FFF | ||
|°C × 100 (signed) | |°C × 100 (signed) | ||
|Температура с встроенного датчика | |Температура с встроенного датчика | ||
| + | |||
| + | | + | ||
| - | | - | ||
| - | | - | ||
| + | | + | ||
|4.2 | |4.2 | ||
|- | |- | ||
|5 | |5 | ||
Строка 85: | Строка 97: | ||
|%RH × 100 (signed) | |%RH × 100 (signed) | ||
|Относительная влажность с встроенного датчика | |Относительная влажность с встроенного датчика | ||
| + | |||
| + | | + | ||
| - | | - | ||
| - | | - | ||
| + | | + | ||
|4.2 | |4.2 | ||
|- | |- | ||
|6 | |6 | ||
Строка 98: | Строка 111: | ||
|Температура с внешнего датчика | |Температура с внешнего датчика | ||
| D | | D | ||
| + | |||
| - | | - | ||
| - | | - | ||
Строка 110: | Строка 124: | ||
|Температура с внешнего датчика | |Температура с внешнего датчика | ||
| D | | D | ||
| + | |||
| - | | - | ||
| - | | - | ||
Строка 118: | Строка 133: | ||
|input | |input | ||
| R | | R | ||
| | |0xFFFF | ||
|PPM | |PPM | ||
|Концентрация CO2 | |Концентрация CO2 | ||
Строка 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 | ||
| + | |||
| - | | - | ||
| - | | - | ||
Строка 244: | Строка 299: | ||
|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=" | |colspan="5"|все | ||
| | | | ||
|- | |- | ||
<!--T:12--> | |||
|102 | |102 | ||
||input | ||input | ||
||R||||||Служебный регистр HOLD_REG_TH_ERRORS | ||R||||||Служебный регистр HOLD_REG_TH_ERRORS | ||
|colspan=" | |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=" | |colspan="5"|все | ||
| | | | ||
|- | |- | ||
<!--T:14--> | |||
|106||input||R|| || | |106||input||R|| || | ||
|| Служебный регистр INPUT_REG_SGPC3_BASELINE | || Служебный регистр INPUT_REG_SGPC3_BASELINE | ||
| - | |||
| - | | - | ||
| - | | - | ||
Строка 277: | Строка 360: | ||
|- | |- | ||
| | <!--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=" | |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=" | |colspan="5"|все | ||
|- | |- | ||
| 112 || holding || RW || 2 || || количество стоп-битов порта RS-485. Допустимые значения: 1, 2 | | 112 || holding || RW || 2 || || количество стоп-битов порта RS-485. Допустимые значения: 1, 2 | ||
|colspan=" | |colspan="5"|все | ||
|- | |- | ||
| 120 (0x78) || holding || RW || 0 || отличное от 0 || запись в регистр вызывает перезагрузку модуля без сохранения состояния | | 120 (0x78) || holding || RW || 0 || отличное от 0 || запись в регистр вызывает перезагрузку модуля без сохранения состояния | ||
|colspan=" | |colspan="5"|все | ||
| | | | ||
|- | |- | ||
| 121 (0x79) || input || R || - || mV || текущее напряжение питания модуля | | 121 (0x79) || input || R || - || mV || текущее напряжение питания модуля | ||
|colspan=" | |colspan="5"|все | ||
| | | | ||
|- | |- | ||
| 128 (0x80) || holding || RW || 1 || || Modbus-адрес устройства | | 128 (0x80) || holding || RW || 1 || || Modbus-адрес устройства | ||
|colspan=" | |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=" | |colspan="5"|все | ||
| | | | ||
|- | |- | ||
| 220-241 || input || R || || __date__ __time__|| дата сборки прошивки | | 220-241 || input || R || || __date__ __time__|| дата сборки прошивки | ||
|colspan=" | |colspan="5"|все | ||
| | | | ||
|- | |- | ||
Строка 320: | Строка 422: | ||
|holding | |holding | ||
|RW | |RW | ||
| | |0 | ||
|°C × 100 (signed) | |°C × 100 (signed) | ||
|Температурная компенсация самонагрева для датчика температуры и влажности (значение вычитается из измереной температуры) | |Температурная компенсация самонагрева для датчика температуры и влажности (значение вычитается из измереной температуры) | ||
| + | | + | ||
| - | |||
| - | | - | ||
| - | | - | ||
| + | | + | ||
|4.2 | |4.2 | ||
|- | |- | ||
| 250-269 || input || R || || строка, null-terminated || версия прошивки | | 250-269 || input || R || || строка, null-terminated || версия прошивки | ||
|colspan=" | |colspan="5"|все | ||
| | | | ||
|- | |- | ||
| 270-271 || input || R || || 32-bit unsigned int || уникальный идентификатор (S/N) | | 270-271 || input || R || || 32-bit unsigned int || уникальный идентификатор (S/N) | ||
|colspan=" | |colspan="5"|все | ||
| | | | ||
|- | |- | ||
|280||input||R|| || | |280||input||R|| || | ||
||Максимальное значение датчика движения с АЦП | ||Максимальное значение датчика движения с АЦП | ||
| - | |||
| - | | - | ||
| - | | - | ||
Строка 347: | Строка 451: | ||
|281||input||R|| || | |281||input||R|| || | ||
||Значение датчика движения с АЦП | ||Значение датчика движения с АЦП | ||
| - | |||
| - | | - | ||
| - | | - | ||
Строка 355: | Строка 460: | ||
|282||holding||RW||10||с | |282||holding||RW||10||с | ||
||Ширина временного окна для вычисления максимального усредненного значения датчика движения (от 1 до 60 секунд) | ||Ширина временного окна для вычисления максимального усредненного значения датчика движения (от 1 до 60 секунд) | ||
| - | |||
| - | | - | ||
| - | | - | ||
Строка 363: | Строка 469: | ||
|283||input||R|| || | |283||input||R|| || | ||
||Текущее усредненное значение движения в условных единицах | ||Текущее усредненное значение движения в условных единицах | ||
| - | |||
| - | | - | ||
| - | | - | ||
Строка 370: | Строка 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, WB-MSW v.3 | | 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 | | 2 || 1 || style="text-align:left" | Включение подогрева (heater) в микросхеме сенсора температуры и влажности HDC1080 || WB-MS (в серии 2017 г.), WB-MSW2, WB-MSW v.3 | ||
|3.2.0 | |||
|- | |||
|3 | |||
|1 | |||
| style="text-align:left"|Включение датчика CO2 (1-вкл, 0-выкл) | |||
|WB-MSW v.3 | |||
|4.1.0 | |||
|- | |- | ||
| 10 || 1 || style="text-align:left" | Включение зеленого светодиода || WB-MSW v.3 | | 10 || 1 || style="text-align:left" | Включение зеленого светодиода || WB-MSW v.3 | ||
| | |||
|- | |- | ||
| 11 || 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;" | Модуль | ||
Строка 411: | Строка 534: | ||
|} | |} | ||
<!--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 |
|
Относительная влажность с встроенного датчика | 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 | Время усреднения освещённости |
|
- | - | - | - | |
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.