Relay Modules Modbus Management

Материал из Wiren Board
Версия от 14:08, 16 июля 2019; RomanKulibaba (обсуждение | вклад) (Новая страница: «=== Digital inputs === The input state can be obtained by reading the Discrete Inputs 0—'''x''' registers (where x = '''(number of managed channels - 1)'''). If…»)

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

Modbus parameters

Modbus address

Modbus-address set on manufacture

Modbus-address of the Wiren Board devices is easy to determine — it is printed on the sticker (the address is in decimal format). The new address of the device is written by the command WRITE_SINGLE_REGISTER to the storage register (holding register) with the address 128 (0x80). For details on how to determine (if the address has been changed) or change the Modbus address of the module, see Define and change the Modbus address of Wiren Board devices.

Modbus commands supported by the device

The Wirenboard relay modules support all major Modbus commands. Read more here: Register reading and writing function codes.

Safe mode

In this mode, when the Modbus communication is terminated, the device disconnects the relay after a specified time.

To enable Safety timer, you must write a value other than 0 to the storage register with the WRITE_SINGLE_REGISTER command at 8. This value is a timeout in seconds. A value of "0" disables safe mode.

Relay operation in case of power failure

In the latest firmware versions (starting with 1.5.3) for WB-MR devices, it is now possible to remember the output status when power is off. The mode is controlled by the Modbus register 6. If the register is set to '0', the state of the outputs will not be saved and all relays will be switched off when power is supplied. If the entry in the register unit, when the power is resumed everything is included before the crash relay is switched on again.

Digital inputs

The input state can be obtained by reading the Discrete Inputs 0—x registers (where x = (number of managed channels - 1)). If the input is connected to GND, the register value is 1, if not connected - it's 0.

Режимы взаимодействия цифровых входов с релейными выходами

В релейном модуле можно включить прямое управление релейными выходами с цифровых входов. Есть несколько вариантов такого управления:

  • Простые:
    • Режим 0: управление выключателем без фиксации (кнопкой "с самостоятельным отжатием обратно"). Вы нажимаете на кнопку (замыкаете цифровой вход с GND), она сама "отжимается обратно", состояние реле переключается на противоположное.
    • Режим 1: управление выключателем с фиксацией. Реле всегда устанавливается в соответствии с положением выключателя. Если выключатель "включён" (замыкает цифровой вход с GND), реле тоже замкнуто. Если выключатель "выключен", реле разомкнуто.
    • Режим 3: управление релейным выходом с цифрового входа отключено.
  • Сложные:
    • Mapping-матрица (смотрите подробное описание ниже)

Режим можно установить отдельно для каждого канала. Для этого в регистре 5 должно находиться значение "0", а режим для каждого канала записывается в регистры хранения, начиная с адреса 9 для первого канала и т.д.

Есть устаревший способ - установка режима для всех каналов одновременно. Для этого запишите соответствующее число в регистр хранения с адресом 5.

Mapping-матрица

Начиная с прошивки 1.9.0 для отдельных каналов предусмотрен также режим 2 -- отключить все выходы, и режимы работы (4 и 5) в соответствии с mappig-матрицей (смотри далее). В этой и более поздних версиях прошивок в модулях реализована возможность более гибкой настройки взаимодействия входов и выходов релейных модулей при помощи специальной mapping-матрицы: таблицы, в которой для каждого входа при изменении его состояния кодируется изменение состояние любого релейного выхода. Подробное описание можно найти в статье I/O_Mapping_Matrix.

Карта регистров модулей реле

В таблице:

  • x — количество релейных выходов;
  • y — количество цифровых входов.

(для модулей WB-MRM2 карту регистров смотрите на странице описания этого модуля)

Регистр / адрес Тип Чтение/запись Значение по умолчанию Формат Назначение Примечание
0 .. (x-1) coil RW - 1 или 0 состояние реле с номером 1 .. x
0 .. (y-1) discrete R - 1 или 0 состояние входа с номером 1 .. y
5 holding RW 0
  • 0: кнопки без фиксации
  • 1: выключатель с фиксацией
  • 3: отключить взаимодействие
режим взаимодействия цифровых входов с релейными выходами. Регистры состояний входов и счётчик нажатий продолжают работать во всех режимах. Регистр использовался в старом механизме настройки. Рекомендуется оставлять в нём значение 0, а входы настраивать через отдельные регистры 9 .. (9+x-1)
6 holding RW
  • 0: не восстанавливать состояние реле после восстановления питания
  • 1: восстанавливать состояние реле после восстановления питания
режим работы реле в случае отключении питания (только в прошивках 1.5.3 и позднее)
8 holding RW 0 секунды таймаут для безопасного режима
9 .. (9+x-1) holding RW 0
  • 0: кнопки без фиксации
  • 1: выключатель с фиксацией
  • 3: отключить взаимодействие
режим взаимодействия отдельного цифрового входа с соответствующим релейным выходом;

в регистре 5 должен быть записан "0"

  • 2: отключать все реле при нажатии
  • 4: управлять в соответствии с mapping-матрицей
  • 5: управлять в соответствии с mapping-матрицей, через 20 минут повторно имитировать состояние ввода
Начиная с прошивки 1.9.0
1 Начиная с прошивки 1.12.0
16 holding RW
  • 0: кнопки без фиксации
  • 1: выключатель с фиксацией
  • 3: отключить взаимодействие
режим работы цифрового входа 0 для отключения всех реле
2
  • 2: отключать все реле при нажатии
  • 4: управлять в соответствии с mapping-матрицей
  • 5: управлять в соответствии с mapping-матрицей, через 20 минут повторно имитировать состояние ввода
режим работы цифрового входа 0; в регистре 5 должен быть записан "0" Начиная с прошивки 1.9.0
32 .. (32+y-1) input R 0 16-bit unsigned int счетчик срабатываний входа 1 .. y
104-105 input R 32-bit unsigned int Время работы устройства (uptime counter) в секундах
120 (0x78) holding RW 0 отличное от 0 запись в регистр вызывает перезагрузку модуля без сохранения состояния
121 (0x79) holding R - мВ текущее напряжение питания модуля
128 (0x80) holding RW 1 1 — 247 Modbus-адрес устройства
129 (0x81) holding RW 0 0 или 1 Переход в режим загрузчика 1.10.0
200-205 holding R {'X','X','X','X','X','X'} сигнатура устройства (см. таблицу ниже)
220-241 holding R __date__ __time__ дата сборки прошивки
250-266 input R строка, null-terminated версия прошивки
270-271 input R 32-bit unsigned int уникальный идентификатор (S/N)
384-447 holding RW 0 регистры mapping-матрицы Начиная с версии прошивки 1.9.0

В прошивках версии 1.6.0 и позднее поддерживаются дополнительные регистры настройки параметров обмена данными по RS-485:

Регистр / адрес Тип Чтение/запись Значение по умолчанию Формат Назначение
110 holding RW 96 baud rate / 100 скорость порта RS-485, делённая на 100. Допустимые скорости: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200
(Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board)
111 holding RW 0 настройка бита чётности порта RS-485. Допустимые значения: 0 - нет бита чётности (none), 1 - нечётный (odd), 2 - чётный (even)
112 holding RW 2 количество стоп-битов порта RS-485. Допустимые значения: 1, 2


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

Модуль Сигнатура
WB-MRPS6 MRPS6
WB-MR6C WBMR6
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 регистр.

Значение состояния каждого реле хранится в регистрах флагов (coil). У 1-го реле адрес регистра 0, у 2-го — 1 и т.д.

Управление модулем из командной строки

Программное обеспечение контроллера 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.

Выбор типа управления внешними входами

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