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

Материал из Wiren Board
Строка 28: Строка 28:


| 0 || input || R || 0x7FFF ||°C × 10 (signed)||Температура с встроенного датчика
| 0 || input || R || 0x7FFF ||°C × 10 (signed)||Температура с встроенного датчика
|T
|WB-MS T
|-
|-
|1|| input || R || 0xFFFF ||<blockquote>%RH × 10 (signed)</blockquote>||Относительная влажность с встроенного датчика
|1|| input || R || 0xFFFF ||<blockquote>%RH × 10 (signed)</blockquote>||Относительная влажность с встроенного датчика
|H
|WB-MS H
|-
|-
|2
|2
Строка 39: Строка 39:
|lux
|lux
|Освещённость с встроенного датчика
|Освещённость с встроенного датчика
|L
|WB-MS L
|-
|-
|3
|3
Строка 47: Строка 47:
|dB
|dB
|Уровень шума
|Уровень шума
|S
|WB-MS S
|-
|-
|4
|4
Строка 71: Строка 71:
|°C × 16 (signed)
|°C × 16 (signed)
|Температура с внешнего датчика
|Температура с внешнего датчика
|D
|WB-MS D, WB-MIR
|-
|-
|7
|7
Строка 79: Строка 79:
|°C × 16 (signed)
|°C × 16 (signed)
|Температура с внешнего датчика
|Температура с внешнего датчика
|D
|WB-MS D, WB-MIR
|-
|-
|8
|8
Строка 104: Строка 104:
|91||holding||RW||20 (200 ms)||× 10 ms
|91||holding||RW||20 (200 ms)||× 10 ms
||Время усреднения шума
||Время усреднения шума
|S
|WB-MS S
|-
|-
|100
|100
||input
||input
||R||||raw_val * 16||Сырое усреднённое значение с АЦП микрофона
||R||||raw_val * 16||Сырое усреднённое значение с АЦП микрофона
|S
|WB-MS S
|-
|-
| 110 || holding || RW || 96 ||  baud rate / 100 || скорость порта RS-485, '''делённая на 100'''. Допустимые скорости: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 || все
| 110 || holding || RW || 96 ||  baud rate / 100 || скорость порта RS-485, '''делённая на 100'''. Допустимые скорости: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 || все
Строка 138: Строка 138:
|-
|-
| 2000-2509 || holding || RW || || || Буфер периодов IR-приемопередатчика
| 2000-2509 || holding || RW || || || Буфер периодов IR-приемопередатчика
|I
|WB-MS I, WB-MIR
|-
|-
|}
|}

Версия 18:36, 19 апреля 2017


Параметры Modbus

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) Температура с встроенного датчика WB-MS T
1 input R 0xFFFF

%RH × 10 (signed)

Относительная влажность с встроенного датчика WB-MS H
2 input R - lux Освещённость с встроенного датчика WB-MS L
3 input R - dB Уровень шума WB-MS S
4 input R - - -
5 input R - - -
6 input R 0x7FFF °C × 16 (signed) Температура с внешнего датчика WB-MS D, WB-MIR
7 input R 0x7FFF °C × 16 (signed) Температура с внешнего датчика WB-MS D, WB-MIR
8 input R PPM Концентрация CO2
90 holding RW 20 (200 ms) × 10 ms Время усреднения освещённости

L

91 holding RW 20 (200 ms) × 10 ms Время усреднения шума WB-MS S
100 input R raw_val * 16 Сырое усреднённое значение с АЦП микрофона WB-MS 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-приемопередатчика WB-MS I, WB-MIR

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

Модуль Сигнатура
WB-MIR WBMIR
WB-MS ------
WB-MSW ------
WB-MSW2 ------

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