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

Материал из Wiren Board
м
(Исправил режим 5 - ТОЛЬКО для MWAC)
(не показано 47 промежуточных версий 5 участников)
Строка 1: Строка 1:
<languages/>
<languages/>
<translate>
<translate>
{{DISPLAYTITLE:Управление модулями реле Wirenboard по протоколу Modbus}}
{{DISPLAYTITLE:Карта регистров модулей реле}}


== Параметры Modbus ==
{{Wbincludes:Header Register}}
| 0 || канал 1 || rowspan="6" | coil || rowspan="6" | RW || rowspan="6" | - || rowspan="6" | 1 или 0|| rowspan="6" | состояние канала реле || rowspan="6" |
|-
| 1 || канал 2
|-
| 2 || канал 3
|-
| 3 || канал 4
|-
| 4 || канал 5
|-
| 5 || канал 6
|-


=== Modbus-адрес ===
[[Файл:modbus_address_mr14.png|150px|thumb|left|Modbus-адрес, установленный на производстве]]
Modbus-адрес устройств Wiren Board легко определить — он нанесен на наклейке (адрес указан в десятичном формате). Новый адрес устройства записывается командой WRITE_SINGLE_REGISTER в регистр хранения (holding register) с адресом 128 (0x80). Подробно о том, как определить или изменить Modbus-адрес модуля, написано на странице [[Определение и изменение Modbus-адреса устройств Wirenboard]].


=== Команды Modbus, поддерживаемые устройством ===
| 0 || вход 1 || rowspan="7" | discrete input || rowspan="7" | R || rowspan="7" | - || rowspan="7" | 1 или 0|| rowspan="7" | состояние входа || rowspan="7" |
 
|-
Релейные модули Wirenboard поддерживают все основные команды Modbus. Подробнее смотрите здесь: [[Протокол Modbus#Коды функций чтения и записи регистров|Коды функций чтения и записи регистров]].
| 1 || вход 2
 
|-
=== Безопасный режим ===
| 2 || вход 3
В этом режиме при прекращении обмена данными по Modbus устройство отключает реле по прошествии заданного времени.
|-
 
| 3 || вход 4
Для включения безопасного режима (Safety timer) нужно записать значение, отличное от 0, в регистр хранения командой WRITE_SINGLE_REGISTER по адресу 8. Это значение &mdash; таймаут в секундах. Значение "0" отключает безопасный режим.
|-
 
| 4 || вход 5
=== Режим работы реле в случае отключении питания ===
 
В последних версиях прошивки (начина с 1.5.3) для устройств WB-MR появилась возможность запоминать состояние выхода при отключении питания. Режим контролируется Modbus-регистром 6. Если в регистре записано значение '0', то состояние выходов не сохраниться и при подаче питания все реле буду выключены. Если в регистре записана единица, то после возобновления питания все включенные до аварии реле включатся снова.
 
=== Цифровые входы  ===
Состояние входа можно получить чтением регистров 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 карту регистров смотрите на странице описания [[WB-MRM2|этого модуля]])
 
{| border="1" class="wikitable" style="text-align:center; width:1000px;"
!Регистр / адрес
!Тип
!Чтение/запись
!Значение по умолчанию
!Формат
!Назначение
!Примечание
|-
|-
| 0 .. ('''x'''-1) || coil || RW || - || 1 или 0|| состояние реле с номером 1 .. '''x''' ||
| 5 || вход 6
|-
|-
| 0 .. ('''y'''-1) || discrete || R || - ||  1 или 0  
| 7 || вход 0
|| состояние входа с номером 1 .. '''y''' ||
|-
|-
| 5  
| 5  
|
| holding  
| holding  
| RW  
| RW  
| 0  
| 0  
| style="text-align:left;" |
| style="text-align:left" |
* '''0''': кнопки без фиксации
 
* '''1''': выключатель с фиксацией
|
* '''3''': отключить взаимодействие
служебный регистр, значение должно быть 0
|| режим взаимодействия цифровых входов с релейными выходами. Регистры состояний входов и счётчик нажатий продолжают работать во всех режимах. || Регистр использовался в старом механизме настройки. Рекомендуется оставлять в нём значение 0, а входы настраивать через отдельные регистры 9 .. (9+'''x'''-1)
|  
|-
|-
| 6
| 6
|
|| holding || RW || 0 |
|| holding || RW || 0 |
| style="text-align:left;" |
| style="text-align:left;" |
* '''0''': не восстанавливать состояние реле после восстановления питания
* '''0''': не восстанавливать состояние реле  
* '''1''': восстанавливать состояние реле после восстановления питания
* '''1''': восстанавливать состояние реле
|| режим работы реле в случае отключении питания || (только в прошивках 1.5.3 и позднее)
|| режим работы реле при отключении питания || 1.5.3
|-
|-
| 8 || holding || RW || 0 || секунды || таймаут для безопасного режима ||
| 8 |||| holding || RW || 0 || секунды || таймаут для безопасного режима ||
|-
|-


| rowspan="3"  | 9 .. (9+'''x'''-1)
| 9 || вход 1 || rowspan="7" | holding || rowspan="7" | RW || rowspan="4" | 0
| rowspan="3" | holding  
| style="text-align:left" rowspan="3" |  
| rowspan="3" | RW  
| rowspan="2" | 0  
| style="text-align:left;" |  
* '''0''': кнопки без фиксации
* '''0''': кнопки без фиксации
* '''1''': выключатель с фиксацией
* '''1''': выключатель с фиксацией
* '''3''': отключить взаимодействие  
* '''3''': отключить взаимодействие  
| rowspan="3" | режим взаимодействия отдельного цифрового входа с соответствующим релейным выходом;
| rowspan="6" | режим взаимодействия отдельного цифрового входа с соответствующим релейным выходом. <br>'''В регистре 5 должно стоять значение по умолчанию (0).'''
в регистре 5 должен быть записан "0"
| rowspan="3" |
|
|-
|-


 
| 10 || вход 2
| rowspan="2" style="text-align:left;" |  
|-
| 11 || вход 3
|-
| 12 || вход 4
| rowspan="4" style="text-align:left" |  
* '''2''': отключать все реле при нажатии
* '''2''': отключать все реле при нажатии
* '''4''': управлять в соответствии с [[I/O_Mapping_Matrix|mapping-матрицей]]
* '''4''': управлять по [[I/O_Mapping_Matrix|mapping-матрице]]
* '''5''': управлять в соответствии с [[I/O_Mapping_Matrix|mapping-матрицей]], через 20 минут повторно имитировать состояние ввода  
* '''5''': управлять по [[I/O_Mapping_Matrix|mapping-матрице]], через 20 минут повторно имитировать состояние ввода '''Только для [[WB-MWAC]]'''
|Начиная с прошивки 1.9.0
| 1.9.0
|-
| 13 || вход 5 || rowspan="2" | 1 || rowspan="2" | 1.12.0
|-
|-
|1
| 14 || вход 6
|Начиная с прошивки 1.12.0
|-
| 16 || вход 0 || 2 || режим работы цифрового входа 0 для отключения всех реле || 1.9.0
|-
|-


| rowspan="2" | 16
| 20 || вход 1 || rowspan="7" | holdreg || rowspan="7" | RW || rowspan="7" | 50 || rowspan="7" | 0 - 100 || rowspan="7" | время защиты входа от дребезга в миллисекундах || rowspan="7" | 1.13.0
| rowspan="2" | holding
|-
| rowspan="2" | RW
| 21 || вход 2
|
|style="text-align:left;"|  
* '''0''': кнопки без фиксации
* '''1''': выключатель с фиксацией
* '''3''': отключить взаимодействие
 
| режим работы цифрового входа 0 для отключения всех реле
|
|-
|-
| 2
| 22 || вход 3
 
|style="text-align:left;" |  
* '''2''': отключать все реле при нажатии
* '''4''': управлять в соответствии с [[I/O_Mapping_Matrix|mapping-матрицей]]
* '''5''': управлять в соответствии с [[I/O_Mapping_Matrix|mapping-матрицей]], через 20 минут повторно имитировать состояние ввода
| режим работы цифрового входа 0; в регистре 5 должен быть записан "0"
|Начиная с прошивки 1.9.0
|-
|-
 
| 23 || вход 4
 
 
 
 
 
 
 
 
 
| 32 .. (32+'''y'''-1) ||  input || R || 0 || 16-bit unsigned int || счетчик срабатываний входа 1 .. '''y''' ||  
|-
|-
 
| 24 || вход 5
| 104-105 || input || R || || 32-bit unsigned int || Время работы устройства (uptime counter) в секундах ||
|-
|-
 
| 25 || вход 6
| 120 (0x78) || holding || RW || 0 ||  отличное от 0 || запись в регистр вызывает перезагрузку модуля без сохранения состояния ||  
|-
|-
| 121 (0x79) || holding || R || - ||  мВ || текущее напряжение питания модуля ||  
| 27 || вход 0
|-
|-
| 128 (0x80) || holding || RW || 1 || 1 — 247
 
|| Modbus-адрес устройства ||  
 
| 32 || вход 1 || rowspan="7" | input || rowspan="7" | R || rowspan="7" | 0 || rowspan="7" | 16-bit unsigned int || rowspan="7" | счетчик срабатываний входа || rowspan="7" |  
|-
|-
| 129 (0x81) || holding || RW || 0 || 0 или 1 || Переход в [[WB-MCU-Flasher|режим загрузчика]]
| 33 || вход 2
|1.10.0
|-
|-
| 200-205 || holding || R || {'X','X','X','X','X','X'} ||  || сигнатура устройства (см. таблицу ниже) ||  
| 34 || вход 3
|-
|-
| 220-241 || holding || R || ||  __date__ __time__||  дата сборки прошивки ||  
| 35 || вход 4
|-
|-
|250-266
| 36 || вход 5
|input
|R
|
|строка, null-terminated
|версия прошивки ||  
|-
|-
|270-271
| 37 || вход 6
|input
|R
|
|32-bit unsigned int
|уникальный идентификатор (S/N)
|-
|-
| 384-447 || holding || RW || 0 ||  ||  регистры [[I/O_Mapping_Matrix|mapping-матрицы]] || Начиная с версии прошивки 1.9.0  
| 39 || вход 0
|-
|-
|}


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


{| border="1" class="wikitable" style="text-align:center; width:1000px;"
| 40 || вход 1 || rowspan="7" | input || rowspan="7" | R || rowspan="7" | 0 || rowspan="7" | 16-bit unsigned int || rowspan="7" | целая часть значения частоты сигнала || rowspan="14" | 1.15.0
!Регистр / адрес
|-
!Тип
| 42 || вход 2
!Чтение/запись
|-
!Значение по умолчанию
| 44 || вход 3
!Формат
|-
!Назначение
| 46 || вход 4
|-
|-
| 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]])
| 48 || вход 5
|-
|-
| 111 || holding || RW || 0 || || настройка бита чётности порта RS-485. Допустимые значения: 0 - нет бита чётности (none), 1 - нечётный (odd), 2 - чётный (even)
| 50 || вход 6
|-
|-
| 112 || holding || RW || 2 || || количество стоп-битов порта RS-485. Допустимые значения: 1, 2
| 54 || вход 0
|-
|-
|}
| 41 || вход 1 || rowspan="7" | input || rowspan="7" | R || rowspan="7" | 0 || rowspan="7" | 16-bit unsigned int || rowspan="7" | дробная часть значения частоты сигнала <br> 1 Гц = 65536 (2 ^ 16)
 
 
 
По адресу 200 лежит сигнатура релейного модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus:
 
{| class="wikitable"
! style="font-weight: bold;" | Модуль
! style="font-weight: bold;" | Сигнатура
|-
|-
 
| 43 || вход 2
|WB-MRPS6
|MRPS6
|-
|-
| WB-MR6C
| 45 || вход 3
| WBMR6
|-
|-
| WB-MR3xV
| 47 || вход 4
| WBMR3
|-
|-
| WB-MR6xV
| 49 || вход 5
| WBMR6
|-
|-
| WB-MR14
| 51 || вход 6
| WBMR14
|-
|-
| WB-MR11
| 55 || вход 0
| WBMR11
|-
|-
| WB-MRM2
 
| WBMR2
| 384-447 |||| holding || RW || 0 ||  ||  регистры [[I/O_Mapping_Matrix|mapping-матрицы]] || 1.9.0
WBMR2m
|}
|}


Для получения сигнатуры нужно выполнить команду READ_HOLDING_REGISTERS по адресу 200 (длина 6 регистров). Запись в эту область памяти не поддерживается, при попытке записи в недопустимое место возвращается ошибка 3. Пустые места в тексте сигнатуры забиваются значением 0x00.
{{:Common_Modbus_Registers}}
Начиная с регистра 220 записана дата сборки прошивки, в формате "число'''x00'''время'''x00'''" в виде строки (пример: 'Jan 27 2017 17:01:13'). Длина записи — 21 регистр.
 
Значение состояния каждого реле хранится в регистрах флагов (coil). У 1-го реле адрес регистра 0, у 2-го &mdash; 1 и т.д.
 
== Управление модулем из командной строки ==
Программное обеспечение контроллера Wiren Board включает в себя утилиту modbus_client для работы с устройствами, подключенными к выходам RS-485, по протоколу Modbus, подробное описание команды находится на странице [[Modbus-client]]. Доступ к командной строке описан в статье [[SSH]].
 
=== Пример чтения регистров ===
Проверим, верно ли, что мы подключились именно к модулю нужного типа. (Сервис wb-mqtt-serial должен быть предварительно остановлен). По адресу 200 хранится уникальная сигнатура длиной в 6 регистров. Прочтем 6 регистров, начиная с адреса 200, и преобразуем полученный шестнадцатеричный ответ в символьную строку:
 
<syntaxhighlight lang="bash">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'` </syntaxhighlight>
 
В результате выполнения команды получаем строку, например '''WBMR6'''. Релейный модуль WB-MR6 имеет Modbus-адрес 1.
 
=== Выбор типа управления внешними входами ===
В релейных модулях предусмотрено два режима управления каналами реле: с помощью внешних входов и по протоколу RS-485.
В релейных модулях можно выбрать режим 0, когда ко внешнему входу подключена кнопка (без фиксации), или режим 1, когда для управления используется обычный выключатель (с фиксацией). Режим 3 отключает внешнее управление, но при этом все равно сохраняется возможность управления по RS-485 и чтение состояния внешних входов. По умолчанию включен режим 0.
 
В режиме внешнего управления реле срабатывает по падению логического уровня: к внешним входам подключены резисторы подтяжки к линии +5V и реле соответствующего канала срабатывает при соединении входа с GND.
Состояние реле каждого канала хранится в памяти контроллера до перезагрузки, по умолчанию при включении питания все реле выключены. После инициализации модуля опрашиваются внешние входы и реле всех каналов переводятся в соответствующее состояние.


Тип внешнего управления можно выбрать для каждого канала отдельно через регистры 9 — (9+x). Для этого в holding-регистре 5 должно быть записано значение 0:
Регистры настройки параметров обмена данными по RS-485 поддерживаются начиная с прошивки версии 1.6.0
<syntaxhighlight lang="bash">
modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x06 -r5 0
</syntaxhighlight>


Инициализировать регистр при старте можно и через настройки web-интерфейса, смотрите страницу [[RS-485:Настройка_через_веб-интерфейс]].
</translate>
</translate>

Версия 12:45, 21 января 2021

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


Регистр / адрес Тип Чтение /
запись
Значение по
умолчанию
Формат Назначение С версии
прошивки
0 канал 1 coil RW - 1 или 0 состояние канала реле
1 канал 2
2 канал 3
3 канал 4
4 канал 5
5 канал 6
0 вход 1 discrete input R - 1 или 0 состояние входа
1 вход 2
2 вход 3
3 вход 4
4 вход 5
5 вход 6
7 вход 0
5 holding RW 0

служебный регистр, значение должно быть 0

6 holding RW
  • 0: не восстанавливать состояние реле
  • 1: восстанавливать состояние реле
режим работы реле при отключении питания 1.5.3
8 holding RW 0 секунды таймаут для безопасного режима
9 вход 1 holding RW 0
  • 0: кнопки без фиксации
  • 1: выключатель с фиксацией
  • 3: отключить взаимодействие
режим взаимодействия отдельного цифрового входа с соответствующим релейным выходом.
В регистре 5 должно стоять значение по умолчанию (0).
10 вход 2
11 вход 3
12 вход 4
  • 2: отключать все реле при нажатии
  • 4: управлять по mapping-матрице
  • 5: управлять по mapping-матрице, через 20 минут повторно имитировать состояние ввода Только для WB-MWAC
1.9.0
13 вход 5 1 1.12.0
14 вход 6
16 вход 0 2 режим работы цифрового входа 0 для отключения всех реле 1.9.0
20 вход 1 holdreg RW 50 0 - 100 время защиты входа от дребезга в миллисекундах 1.13.0
21 вход 2
22 вход 3
23 вход 4
24 вход 5
25 вход 6
27 вход 0
32 вход 1 input R 0 16-bit unsigned int счетчик срабатываний входа
33 вход 2
34 вход 3
35 вход 4
36 вход 5
37 вход 6
39 вход 0
40 вход 1 input R 0 16-bit unsigned int целая часть значения частоты сигнала 1.15.0
42 вход 2
44 вход 3
46 вход 4
48 вход 5
50 вход 6
54 вход 0
41 вход 1 input R 0 16-bit unsigned int дробная часть значения частоты сигнала
1 Гц = 65536 (2 ^ 16)
43 вход 2
45 вход 3
47 вход 4
49 вход 5
51 вход 6
55 вход 0
384-447 holding RW 0 регистры mapping-матрицы 1.9.0

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

Параметры подключения, версия прошивки и другие служебные регистры
Адрес Параметры регистра Описание Значения Примечание
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 — нечётный (odd),
2 — чётный (even)
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 0x0083 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 Текущее напряжение питания мВ
122 0x007A Input RO u16 Минимальное зарегистрированное напряжение питания с момента загрузки мВ
123 0x007B Input RO u16 Напряжение питания микроконтроллера мВ
124 0x007C Input RO u16 Внутренняя температура микроконтроллера x0.1, °C

Регистры настройки параметров обмена данными по RS-485 поддерживаются начиная с прошивки версии 1.6.0