Таблица общих регистров

Материал из Wiren Board
Другие языки:


Параметры Modbus

Modbus-адрес

Modbus-адрес, установленный на производстве

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

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

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

Безопасный режим

В этом режиме при прекращении обмена данными по Modbus устройство отключает реле по прошествии заданного времени.

Для включения безопасного режима (Safety timer) нужно записать значение, отличное от 0, в регистр хранения командой WRITE_SINGLE_REGISTER по адресу 8. Это значение — таймаут в секундах. Значение "0" отключает безопасный режим.

Режим работы реле в случае отключении питания

Для устройств WB-MR существует возможность запоминать состояние выхода при отключении питания. Режим контролируется Modbus-регистром 6. Если в регистре записано значение '0', то состояние выходов не сохраниться и при подаче питания все реле буду выключены. Если в регистре записана единица, то после возобновления питания все включенные до аварии реле включатся снова. Этот функционал появился в модулях с прошивкой, начиная с версии 1.5.3.

Цифровые входы

Состояние входа можно получить чтением регистров Discrete Inputs 0—x (где x = (количество управляемых каналов - 1)). Если вход соединён с GND, значение регистра равно 1, если не соединён - 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
20 .. (20+x-1) holdreg RW 50 0 - 100 время защиты от дребезга в миллисекундах Начиная с прошивки 1.13.0
32 .. (32+y-1) input R 0 16-bit unsigned int счетчик срабатываний входа 1 .. y
384-447 holding RW 0 регистры mapping-матрицы Начиная с версии прошивки 1.9.0


Внимание: Отображаемое название «Таблица общих регистров» переопределяет ранее заданное отображаемое название «Управление модулями реле Wirenboard по протоколу Modbus».

Параметры подключения, версия прошивки и другие служебные регистры
Адрес Параметры регистра Описание Значения Примечание
Dec Hex Тип Доступ Формат
Параметры подключения
110 0x006E Holding RW u16 Скорость порта RS-485.
Настройка параметров подключения по RS-485
x100, Боды
12 — 1200 бит/с,
24 — 2400 бит/с,
48 — 4800 бит/с,
96 — 9600 бит/с,
192 — 19 200 бит/с,
384 — 38 400 бит/с,
576 — 57 600 бит/с,
1152 — 115 200 бит/с
111 0x006F Holding RW u16 Настройка бита чётности порта RS-485 0 — нет бита чётности (none),
1 — нечётный,
2 — чётный
112 0x0070 Holding RW u16 Количество стоп-битов порта RS-485 1, 2
128 0x0080 Holding RW u16 Modbus-адрес устройства (подробнее)
Модель устройства и версия прошивки
200-205 0x00C8 - 0x00CD Input RO string Модель устройства
206-219 0x00CE - 0x00DB Input RO string Расширение модели устройства. Для чтения модели устройства нужно читать диапазон из 20 регистров (200 - 219) Только с «быстрым Modbus»
220-248 0x00DC - 0x00F8 Input RO string Хэш коммита и название ветки откуда собрана прошивка (2 символа в регистре)
250-265 0x00FA - 0x0109 Input RO string Версия прошивки
266-269 0x010A - 0x010D Input RO u64 Расширение серийного номера
270-271 0x010E - 0x010F Input RO u32 Серийный номер
290-301 0x0122 - 0x012D Holding RO string Сигнатура прошивки
320 0x0140 Input RO u16 Версия прошивки в числовом формате (подробнее) MAJOR Только с «быстрым Modbus»
321 0x0141 MINOR
322 0x0142 PATCH
323 0x0143 s16 SUFFIX
324-325 0x0144 - 0x0145 Input RO u32 Версия прошивки в числовом формате Только с «быстрым Modbus»
326-327 0x0146 - 0x0147 Input RO u32 Версия прошивки в Big Endian формате Только с «быстрым Modbus»
Прочее
104­-105 0x0068 - 0x0069 Input RO u32 Время работы с момента загрузки секунды
120 0x0078 Holding RW u16 Перезагрузка устройства без сохранения состояния любое, отличное от 0 перезагружает устройство
123 0x007B Input RO u16 Напряжение на микроконтроллере мВ
129 0x0081 Holding RW u16 Перевод в режим обновления прошивки на 2 минуты любое, отличное от 0 переводит устройство в режим обновления прошивки
330-336 0x014A - 0x0150 Holding RO string Версия загрузчика
131 0x0081 Holding RW u16 Перевод в режим обновления прошивки на текущих настройках соединения запись 1 переводит устройство в режим обновления прошивки С версии прошивки 1.20.4
113 0x0071 Holding RW u16 Время перед отправкой ответа на modbus запрос 0 - 254 мс Только с «быстрым Modbus»
114 0x0072 Holding RW u16 Режим непрерывного чтения регистров с зазором 0 - отключен
1 - включен
2 - включение сохраняется после перезагрузки
Только с «быстрым Modbus»
121 0x0079 Input RO u16 Текущее напряжение питания мВ
125 0x007D Input RO u16 Текущее напряжение питания (без фильтра) мВ
124 0x007C Input RO u16 Внутренняя температура микроконтроллера x0.1, °C



По адресу 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:Настройка_через_веб-интерфейс.