Sensors Modbus Management: различия между версиями
Kilpio (обсуждение | вклад) |
Kilpio (обсуждение | вклад) |
||
Строка 13: | Строка 13: | ||
=== Карта регистров датчиков === | === Карта регистров датчиков === | ||
{| border="1" class="wikitable" style="text-align:center | === Карта регистров хранения (Holding Registers)=== | ||
!Регистр / адрес | |||
! | В процессе наполнения. | ||
! | |||
! | {| border="1" class="wikitable" style="text-align:center" | ||
! | !Регистр/ адрес | ||
! | !тип | ||
!чтение/ запись | |||
!значение по умолчанию | |||
!формат | |||
!назначение | |||
!к каким модификациям датчика применимо | |||
|- | |||
| 0 || input || R || 0x7FFF ||°C × 10 (signed)||Температура с встроенного датчика | |||
|T | |||
|- | |- | ||
| | |1|| input || R || 0xFFFF ||<blockquote>%RH × 10 (signed)</blockquote>||Относительная влажность с встроенного датчика | ||
|H | |||
|- | |- | ||
| | |2 | ||
| | |input | ||
|R | |||
|<nowiki>-</nowiki> | |||
|lux | |||
|Освещённость с встроенного датчика | |||
|L | |||
|- | |- | ||
| | |3 | ||
| | |input | ||
| | |R | ||
| | |<nowiki>-</nowiki> | ||
| | |dB | ||
|Уровень шума | |||
|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) | |||
|Температура с внешнего датчика | |||
|D | |||
|- | |- | ||
| | |7 | ||
|input | |||
|R | |||
|0x7FFF | |||
|°C × 16 (signed) | |||
|Температура с внешнего датчика | |||
|D | |||
|- | |- | ||
| | |8 | ||
|input | |||
|R | |||
| | |||
|PPM | |||
|Концентрация CO2 | |||
| | |||
|- | |- | ||
| | |||
||||||||||| | |||
| | |||
|- | |- | ||
| | ||||||||||| | ||
| | | | ||
|- | |- | ||
| | ||||||||||| | ||
| | |||
|- | |- | ||
| 220-241 || | |90||holding||RW||20 (200 ms)||× 10 ms||Время усреднения освещённости | ||
|<blockquote>L</blockquote> | |||
|- | |||
|91||holding||RW||20 (200 ms)||× 10 ms | |||
||Время усреднения шума | |||
|S | |||
|- | |||
|100 | |||
||input | |||
||R||||raw_val * 16||Сырое усреднённое значение с АЦП микрофона | |||
|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-приемопередатчика | |||
|I | |||
|- | |- | ||
|} | |} | ||
По адресу 200 лежит сигнатура релейного модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus: | По адресу 200 лежит сигнатура релейного модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus: | ||
Строка 75: | Строка 147: | ||
! style="font-weight: bold;" | Сигнатура | ! style="font-weight: bold;" | Сигнатура | ||
|- | |- | ||
| WB- | | WB-MIR | ||
| | | WBMIR | ||
|- | |- | ||
| WB-MR3xV | | WB-MR3xV | ||
Строка 97: | Строка 169: | ||
Для получения сигнатуры нужно выполнить команду 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 регистр. | ||
== Управление модулем из командной строки == | == Управление модулем из командной строки == |
Версия 18:32, 19 апреля 2017
Параметры Modbus
Modbus-адрес
Modbus-адрес устройств Wiren Board легко определить — он нанесен на наклейке (адрес указан в десятичном формате). Новый адрес устройства записывается командой WRITE_SINGLE_REGISTER в регистр хранения (holding register) с адресом 128 (0x80). Подробно о том, как определить или изменить Modbus-адрес модуля, написано на странице Определение и изменение Modbus-адреса устройств Wirenboard.
Команды Modbus, поддерживаемые устройством
Датчики Wirenboard поддерживают все основные команды Modbus. Подробнее смотрите здесь: Коды функций чтения и записи регистров.
Карта регистров датчиков
Карта регистров хранения (Holding Registers)
В процессе наполнения.
Регистр/ адрес | тип | чтение/ запись | значение по умолчанию | формат | назначение | к каким модификациям датчика применимо |
---|---|---|---|---|---|---|
0 | input | R | 0x7FFF | °C × 10 (signed) | Температура с встроенного датчика | T |
1 | input | R | 0xFFFF |
|
Относительная влажность с встроенного датчика | H |
2 | input | R | - | lux | Освещённость с встроенного датчика | L |
3 | input | R | - | dB | Уровень шума | 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 | ||
90 | holding | RW | 20 (200 ms) | × 10 ms | Время усреднения освещённости |
|
91 | holding | RW | 20 (200 ms) | × 10 ms | Время усреднения шума | S |
100 | input | R | raw_val * 16 | Сырое усреднённое значение с АЦП микрофона | 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-приемопередатчика | I |
По адресу 200 лежит сигнатура релейного модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus:
Модуль | Сигнатура |
---|---|
WB-MIR | WBMIR |
WB-MR3xV | WBMR3 |
WB-MR6xV | WBMR6 |
WB-MR14 | WBMR14 |
WB-MR11 | WBMR11 |
WB-MRM2 | WBMR2
WBMR2m |
Для получения сигнатуры нужно выполнить команду 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'`
В результате выполнения команды получаем строку, например WBMR6. Релейный модуль WB-MR6 имеет Modbus-адрес 1.
Перезагрузка
В ряде случаев может потребоваться перезагрузка модуля. Для этого в регистр 120 (0x78) необходимо записать любое значение, отличное от нуля:
modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x06 -r0x78 100
Такая перезагрузка равносильна сбросу по питанию и изменению адреса устройства на 0x01. Все реле при этом выключаются. Предварительно, конечно, необходимо остановить сервис wb-mqtt-serial и убедиться, что к контроллеру не подключены другие Modbus-устройства.
Выбор типа управления внешними входами
В релейных модулях предусмотрено два режима управления каналами реле: с помощью внешних входов и по протоколу RS-485. В релейных модулях можно выбрать режим 0, когда ко внешнему входу подключена кнопка (без фиксации), или режим 1, когда для управления используется обычный выключатель (с фиксацией). Режим 3 отключает внешнее управление, но при этом все равно сохраняется возможность управления по RS-485 и чтение состояния внешних входов. По умолчанию включен режим 0.
В режиме внешнего управления реле срабатывает по падению логического уровня: к внешним входам подключены резисторы подтяжки к линии +5V и реле соответствующего канала срабатывает при соединении входа с GND. Состояние реле каждого канала хранится в памяти контроллера до перезагрузки, по умолчанию при включении питания все реле выключены. После инициализации модуля опрашиваются внешние входы и реле всех каналов переводятся в соответствующее состояние.
Тип внешнего управления можно выбрать для каждого канала отдельно через регистры 9 — (9+x). Для этого в holding-регистре 5 должно быть записано значение 0:
modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x06 -r5 0
Инициализировать регистр при старте можно и через настройки web-интерфейса, смотрите страницу RS-485:Настройка_через_веб-интерфейс.