|
|
(не показано 119 промежуточных версий 12 участников) |
Строка 1: |
Строка 1: |
| {{DISPLAYTITLE:Управление модулями реле Wirenboard по протоколу Modbus}} | | {{DISPLAYTITLE:Карта регистров модулей реле}} |
| | | == Описание == |
| == Параметры Modbus == | | {{Wbincludes:Relay Modbus Registers}} |
| | | {{Wbincludes:Relay Curtains Modbus Registers}} |
| === Modbus-адрес ===
| |
| [[Файл:modbus_address_mr14.png|150px|thumb|left|Modbus-адрес, установленный на производстве]]
| |
| Modbus-адрес устройств Wiren Board легко определить — он нанесен на наклейке (адрес указан в десятичном формате). Новый адрес устройства записывается командой WRITE_SINGLE_REGISTER в регистр хранения (holding register) с адресом 128 (0x80). Подробно о том, как определить или изменить Modbus-адрес модуля, написано на странице [[Определение и изменение Modbus-адреса устройств Wirenboard]].
| |
| | |
| === Команды Modbus, поддерживаемые устройством ===
| |
| | |
| Релейные модули Wirenboard поддерживают все основные команды Modbus. Подробнее смотрите здесь: [[Протокол Modbus#Коды функций чтения и записи регистров|Коды функций чтения и записи регистров]].
| |
| | |
| === Безопасный режим ===
| |
| В этом режиме при прекращении обмена данными по Modbus устройство отключает реле по прошествии заданного времени.
| |
| | |
| Для включения безопасного режима (Safety timer) нужно записать значение, отличное от 0, в регистр хранения командой WRITE_SINGLE_REGISTER по адресу 2. Это значение — таймаут в секундах. Значение "0" отключает безопасный режим.
| |
| | |
| === Режим работы реле в случае отключении питания ===
| |
| | |
| В последних версиях прошивки (начина с 1.5.3) для устройств WB-MR появилась возможность запоминать состояние выхода при отключении питания. Режим контролируется Modbus-регистром 6. Если в регистре записано значение '0', то состояние выходов не сохраниться и при подаче питания все реле буду выключены. Если в регистре записана единица, то после возобновления питания все включенные до аварии реле включатся снова.
| |
| | |
| === Цифровые входы ===
| |
| | |
| Поддерживается три режима работы цифровых входов:
| |
| * Режим 0: прямое управление каналами, выключатели без фиксации (кнопки). Нажатие на кнопку изменяет состояние реле.
| |
| * Режим 1: прямое управление каналами, выключатели с фиксацией. Переключение выключателя с фиксацией устанавливает состояние реле в соответствии с положением выключателя.
| |
| * Режим 3: управление каналами отключено.
| |
| | |
| Поведением по умолчанию является прямое управление каналами реле (режим 0). Установить режим для всех каналов можно, записав соответствующее число в регистр хранения с адресом 5.
| |
| Режим можно устанавливать отдельно для каждого канала с помощью регистров хранения, начиная с адреса 9 для первого канала и т.д. Настройки для каждого канала учитываются только в том случае, если регистр 5 (общие настройки режимов входов) находится в состоянии "0", т.е. имеет значение по умолчанию.
| |
| | |
| В любом режиме работы текущее состояние кнопок можно получить чтением регистров Discrete Inputs 0—'''x''' (где x = '''(количество управляемых каналов - 1)''').
| |
| | |
| === Карта регистров модулей реле ===
| |
| В таблице:
| |
| * '''x''' — количество управляемых реле;
| |
| * '''y''' — количество управляемых входов.
| |
| (для модулей WB-MRM2 карту регистров смотрите на странице описания соотв. модуля )
| |
| | |
| {| border="1" class="wikitable" style="text-align:center; width:1000px;" | |
| !Регистр / адрес
| |
| !Тип
| |
| !Чтение/запись
| |
| !Значение по умолчанию
| |
| !Формат
| |
| !Назначение
| |
| |-
| |
| | 0 — x || coil || RW || - || 1 или 0|| состояние реле 1 — '''x'''
| |
| |-
| |
| | 0 — y || 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)''' || holding || RW || 0 |
| |
| |style="text-align:left;" |
| |
| * '''0''': кнопки без фиксации
| |
| * '''1''': выключатель с фиксацией
| |
| * '''3''': отключить управление
| |
| || режим работы входа N;
| |
| в регистре 5 должен быть записан "0"
| |
| |-
| |
| | 32 — '''(32+y)'''|| 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__|| дата сборки прошивки
| |
| |-
| |
| |} | | |} |
| | | {{Wbincludes:Header Registers Universal|note=true|no_description=true|header=Параметры подключения, версия прошивки и другие служебные регистры}} |
| По адресу 200 лежит сигнатура релейного модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus:
| | {{Wbincludes: Registers Connection Settings}} |
| | | {{Wbincludes: Registers FW Version For Supported Device With Bootloader}} |
| {| class="wikitable"
| | {{Wbincludes: Registers Service Main}} |
| ! style="font-weight: bold;" | Модуль
| | {{Wbincludes: Register bootloader start}} |
| ! style="font-weight: bold;" | Сигнатура
| | {{Wbincludes: Registers Timeout For Device With Bootloader}} |
| |-
| | {{Wbincludes: Registers Сontinuous Reading Mode For Device With Bootloader}} |
| | WB-MR6C
| | {{Wbincludes: Registers Vin}} |
| | WBMR6
| | {{Wbincludes: Registers Temperature MCU}} |
| |-
| |
| | 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:Настройка_через_веб-интерфейс]].
| |