Перейти к содержанию

Навигация

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

Нет описания правки
 
(не показано 107 промежуточных версий 12 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE:Управление модулями реле Wirenboard по протоколу Modbus}}
{{DISPLAYTITLE:Карта регистров модулей реле}}
 
== Описание ==
== Параметры Modbus ==
{{Wbincludes:Relay Modbus Registers}}
 
{{Wbincludes:Header Registers Universal|note=true|no_description=true|header=Параметры подключения, версия прошивки и другие служебные регистры}}
=== Modbus-адрес ===
{{Wbincludes: Registers Connection Settings}}
[[Файл:modbus_address_mr14.png|150px|thumb|left|Modbus-адрес, установленный на производстве]]
{{Wbincludes: Registers FW Version For Supported Device With Bootloader}}
Modbus-адрес устройств Wiren Board легко определить — он нанесен на наклейке (адрес указан в десятичном формате). Новый адрес устройства записывается командой WRITE_SINGLE_REGISTER в регистр хранения (holding register) с адресом 128 (0x80). Подробно о том, как определить или изменить Modbus-адрес модуля, написано на странице [[Определение и изменение Modbus-адреса устройств Wirenboard]].
{{Wbincludes: Registers Service Main}}
 
{{Wbincludes: Register bootloader start}}
=== Команды Modbus, поддерживаемые устройством ===
{{Wbincludes: Registers Timeout For Device With Bootloader}}
 
{{Wbincludes: Registers Сontinuous Reading Mode For Device With Bootloader}}
Релейные модули Wirenboard поддерживают все основные команды Modbus. Подробнее смотрите здесь: [[Протокол Modbus#Коды функций чтения и записи регистров|Коды функций чтения и записи регистров]].
{{Wbincludes: Registers Vin}}
 
{{Wbincludes: Registers Temperature MCU}}
=== Безопасный режим ===
В этом режиме при прекращении обмена данными по Modbus устройство отключает реле по прошествии заданного времени.
 
Для включения безопасного режима (Safety timer) нужно записать значение, отличное от 0, в регистр хранения командой WRITE_SINGLE_REGISTER по адресу 2. Это значение — таймаут в секундах. Значение "0" отключает безопасный режим.
 
=== Режим работы реле в случае отключении питания ===
 
В последних версиях прошивки (начина с 1.5.3) для устройств WB-MR появилась возможность запоминать состояние выхода при отключении питания. Режим контролируется Modbus-регистром 6. Если в регистре записано значение '0', то состояние выходов не сохраниться и при подаче питания все реле буду выключены. Если в регистре записана единица, то после возобновления питания все включенные до аварии реле включатся снова.
 
=== Цифровые входы  ===
Состояние входа можно получить чтением регистров Discrete Inputs 0—'''x''' (где x = '''(количество управляемых каналов - 1)'''). Если вход соединён с GND, значение регистра равно 1, если не соединён - 0.
 
=== Режимы взаимодействия цифровых входов с релейными выходами  ===
 
В релейном модуле можно включить прямое управление релейными выходами с цифровых входов. Есть три варианта такого управления:
* Режим 0: управление выключателем без фиксации (кнопкой "с самостоятельным отжатием обратно"). Вы нажимаете на кнопку (замыкаете цифровой вход с GND), она сама "отжимается обратно", состояние реле переключается на противоположное.
* Режим 1: управление выключателем с фиксацией. Реле всегда устанавливается в соответствии с положением выключателя. Если выключатель "включён" (замыкает цифровой вход с GND), реле тоже замкнуто. Если выключатель "выключен", реле разомкнуто.
* Режим 3: управление релейным выходом в цифрового входа отключено.
 
По умолчанию на устройствах установлен режим 0. Установить режим для всех каналов одновременно можно, записав соответствующее число в регистр хранения с адресом 5.
 
Режим также можно установить отдельно для каждого канала. Для этого в регистре 5 должно находиться значение "0", а режим для каждого канала записывается в регистры хранения, начиная с адреса 9 для первого канала и т.д.
 
=== Карта регистров модулей реле ===
В таблице:
* '''x''' — количество релейных выходов;
* '''y''' — количество цифровых входов.
(для модулей WB-MRM2 карту регистров смотрите на странице описания [[WB-MRM2-mini|этого модуля]])
 
{|  border="1" class="wikitable" style="text-align:center; width:1000px;"
!Регистр / адрес
!Тип
!Чтение/запись
!Значение по умолчанию
!Формат
!Назначение
|-
| 0 .. ('''x'''-1) || coil || RW || - || 1 или 0|| состояние реле с номером 1 .. '''x'''
|-
| 0 .. ('''y'''-1) || discrete || R || - ||  1 или 0
|| состояние входа с номером 1 .. '''y'''
|-
| 5
| holding
| RW
| 0
| style="text-align:left;" |
* '''0''': кнопки без фиксации
* '''1''': выключатель с фиксацией
* '''3''': отключить взаимодействие
|| режим взаимодействия цифровых входов с релейными выходами
|-
| 6
(только в прошивках 1.5.3 и позднее)
|| holding || RW || 0 |
| style="text-align:left;" |
* '''0''': не сохранять состояние реле при отключении питания
* '''1''': сохранять состояние реле при отключении питания
|| режим работы реле в случае отключении питания
|-
| 8 || holding || RW || 0 || секунды || таймаут для безопасного режима
|-
| 9 .. (9+'''x'''-1) || holding || RW || 0 |
|style="text-align:left;" |
* '''0''': кнопки без фиксации
* '''1''': выключатель с фиксацией
* '''3''': отключить взаимодействие
|| режим взаимодействия отдельного цифрового входа с соответствующим релейным выходом;
в регистре 5 должен быть записан "0"
|-
| 32 .. (32+'''y'''-1) ||  input || R || 0 || 16-bit unsigned int || счетчик срабатываний входа 1 .. '''y'''
|-
| 120 (0x78) || holding || RW || 0 ||  отличное от 0 || запись в регистр вызывает перезагрузку модуля без сохранения состояния
|-
| 121 (0x79) || holding || R || - ||  мВ || текущее напряжение питания модуля
|-
| 128 (0x80) || holding || RW || 1 || 1 — 247
|| Modbus-адрес устройства
|-
| 200-206 || holding || R || {'X','X','X','X','X','X'} ||  || сигнатура устройства (см. таблицу ниже)
|-
| 220-241 || holding || R || ||  __date__ __time__||  дата сборки прошивки
|-
|}
 
В новых моделях реле поддерживаются дополнительные регистры настройки параметров обмена данными по RS-485:
{|  border="1" class="wikitable" style="text-align:center; width:1000px;"
!Регистр / адрес
!Тип
!Чтение/запись
!Значение по умолчанию
!Формат
!Назначение
|-
| 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
|-
|}
 
 
 
По адресу 200 лежит сигнатура релейного модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus:
 
{| class="wikitable"
! style="font-weight: bold;" | Модуль
! style="font-weight: bold;" | Сигнатура
|-
| 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.
Регистры настройки параметров обмена данными по RS-485 поддерживаются начиная с прошивки версии 1.6.0
Начиная с регистра 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, и преобразуем полученный шестнадцатеричный ответ в символьную строку:
 
<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.
 
=== Перезагрузка ===
В ряде случаев может потребоваться перезагрузка модуля. Для этого в регистр 120 (0x78) необходимо записать любое значение, отличное от нуля:
<syntaxhighlight lang="bash">
modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x06 -r0x78 100
</syntaxhighlight>
Такая перезагрузка равносильна сбросу по питанию и изменению адреса устройства на 0x01. Все реле при этом выключаются. Предварительно, конечно, необходимо остановить сервис wb-mqtt-serial и убедиться, что к контроллеру не подключены другие Modbus-устройства.
 
=== Выбор типа управления внешними входами ===
В релейных модулях предусмотрено два режима управления каналами реле: с помощью внешних входов и по протоколу RS-485.
В релейных модулях можно выбрать режим 0, когда ко внешнему входу подключена кнопка (без фиксации), или режим 1, когда для управления используется обычный выключатель (с фиксацией). Режим 3 отключает внешнее управление, но при этом все равно сохраняется возможность управления по RS-485 и чтение состояния внешних входов. По умолчанию включен режим 0.
 
В режиме внешнего управления реле срабатывает по падению логического уровня: к внешним входам подключены резисторы подтяжки к линии +5V и реле соответствующего канала срабатывает при соединении входа с GND.
Состояние реле каждого канала хранится в памяти контроллера до перезагрузки, по умолчанию при включении питания все реле выключены. После инициализации модуля опрашиваются внешние входы и реле всех каналов переводятся в соответствующее состояние.
 
Тип внешнего управления можно выбрать для каждого канала отдельно через регистры 9 — (9+x). Для этого в holding-регистре 5 должно быть записано значение 0:
<syntaxhighlight lang="bash">
modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x06 -r5 0
</syntaxhighlight>
 
Инициализировать регистр при старте можно и через настройки web-интерфейса, смотрите страницу [[RS-485:Настройка_через_веб-интерфейс]].
translator, wb_editors
4218

правок