Examples of interaction: различия между версиями

Материал из Wiren Board
Строка 14: Строка 14:
Зачастую перед настройкой имеет смысл считать содержимое регистров mapping-матрицы, сделать это можно одной командой.
Зачастую перед настройкой имеет смысл считать содержимое регистров mapping-матрицы, сделать это можно одной командой.


Например, считаем с устройства с адресом 1 и работающего на скорости 9600 бит/с, 64 идущих подряд регистров, начиная с 384-го — это регистры классической mapping-матрицы реле:
Например, считаем с устройства с адресом 1 и работающего на скорости 9600 бит/с, 64 идущих подряд регистра, начиная с 384-го — это регистры классической mapping-матрицы реле:
<syntaxhighlight lang="console">
<syntaxhighlight lang="console">
# modbus_client -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r384 -c64
# modbus_client -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r384 -c64

Версия 10:22, 18 января 2023

Вводная информация

Рассмотрим несколько примеров программирования взаимодействия входов и выходов на примере релейного модуля WB-MR6C с прошивкой 1.9.4. Модуль имеет 7 входов типа «сухой контакт» и 6 релейных выходов. Вход 0 по умолчанию используется для отключения всех реле модулей, а кнопки 1 — 6 для управления модулями реле.

В примерах ориентируемся на заводские настройки параметров коммуникации модуля, Modbus-адрес — 1. Модуль подключен к первому порту контроллера Wiren Board 6.

Назначение регистров и возможных значений смотрите в Карте регистров модулей реле. Wbincludes:Modbus client preparing for work

Чтение настроек

Зачастую перед настройкой имеет смысл считать содержимое регистров mapping-матрицы, сделать это можно одной командой.

Например, считаем с устройства с адресом 1 и работающего на скорости 9600 бит/с, 64 идущих подряд регистра, начиная с 384-го — это регистры классической mapping-матрицы реле:

# modbus_client -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r384 -c64
SUCCESS: read 64 of elements:
        Data: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

Адреса нужных регистров смотрите в Карте регистров модулей реле.

Прямая настройка входов

Выключатели с фиксацией

Чтобы перевести входы в режим «Выключатель с фиксацией», запишите в регистры настройки входов значение 1.

В примере мы изменим режим входов с 1 по 6 и аварийного входа 0 в устройстве с адресом -a1:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 1 1 1 1 1 1 1

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

Выключатели без фиксации

Чтобы перевести все входы в режим «Выключатель без фиксации», запишите в регистры настройки входов значение 0.

В примере мы изменим режим входов с 1 по 6 и аварийного входа 0 в устройстве с адресом -a1:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 0 0 0 0 0 0 0

Теперь входы функционируют в режиме «Выключатель без фиксации», а кратковременное нажатие на кнопку, подключенную ко входу 0, выключит все реле.

Отключить взаимодействие входов и реле

Для отключения взаимодействия входов и реле (например, если мы хотим управлять реле только через движок правил контроллера) запишем в регистры 9, 10, 11, 12, 13, 14 значение 3:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 3 3 3 3 3 3

Теперь нажатия на кнопки или переключение выключателей не будет изменять состояние реле: ими можно управлять только программно, по Modbus. При этом функция аварийного входа 0 сохраняется: кратковременное нажатие на кнопку, подключенную ко входу 0, выключит все реле.

Если мы хотим отключить и вход 0, то запишем значение 3 в регистр 16 устройства с адресом -a1:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 3

Использование Mapping-матрицы

Более сложные сценарии взаимодействия входов с реле можно реализовать с помощью Mapping-матрицы. Запишем в регистры настройки взаимодействия входов/выходов — значение 4:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 4 4 4 4 4 4
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 4

В заводской поставке Mapping-матрица заполнена нулями. Если вы не уверены в этом и хотите стереть всю матрицу, запишите 0 в каждый из 64 holding-регистров, начиная с 384:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})

Вход 0 включает и выключает все реле

Запрограммируем матрицу таким образом, чтобы вход 0, работая в режиме кнопки (выключателя без фиксации) включал и отключал все реле модуля при замыкании.

Для этого обратимся к карте регистров mapping-матрицы и увидим, что входу 0 соответствуют регистры 440 — 447. Причем за взаимодействие со входами 1 — 6 отвечают регистры 440 — 445.


Мы хотим, чтобы вход работал, как выключатель без фиксации и срабатывал при нажатии (по переднему фронту), а при размыкании ничего бы не происходило. При каждом нажатии состояние всех реле должно инвертироваться. Это соответствует комбинации 11 00: (12, 0x0C) — Изменить состояние выхода при замыкании: Mm 1100.png
Запишем в регистры 440 — 445 значение 12:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r440 12 12 12 12 12 12

Проверим работу: при первом замыкании входа 0 все реле включаются, при втором — все реле выключаются.


Инвертированный выключатель с фиксацией

Настроим входы таким образом, чтобы при замкнутых входах реле были бы выключены, а при разомкнутых -- включены. Для этого при замыкании входа (передний фронт) соответствующий выход должен выключаться (01), а при размыкании входа (задний фронт) — включаться (10). Это соответствует значению 6: Mm 0110.png
В матрице нужные регистры взаимодействия вход 1 — выход 1, вход 2 — выход 2 и т.д. расположены по диагонали. Это регистры 384, 393, 402, 411, 420, 429. В них надо записать значение 6:

for i in 384 393 402 411 420 429; do modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r$i 6; done

Обратите внимание: изменение состояния реле происходят только при изменении состояния ввода.


Обработка типов нажатий

Матрицы типов нажатий можно посмотреть на странице Mapping-матрица.

Чтобы понять принцип, рассмотрим пример. К входу 2 реле подключена кнопка и нам нужно настроить так, чтобы при двойном нажатии на эту кнопку включалось реле 5, а при коротком переключалось реле 3.

Запишем в регистр настройки взаимодействия входов/выходов входа 2 значение 6:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r10 6

Теперь запишем в соответствующий входу 2 и выходу 5 регистр из матрицы двойных нажатий действие «10 — включить» (dec = 2), а в соответствующий входу 2 и выходу 3 регистр из матрицы коротких нажатий действие «11 — инвертировать значение» (dec = 3):

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r684 2
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r554 3

Аналогично настраиваются другие типы нажатий.

Датчик протечки

ВНИМАНИЕ: используемый в примере режим 5 — восстановление состояния выхода через 20 минут, доступен только для WB-MWAC.

Пусть датчик протечки подключен ко входу 1, а реле 1 и 2 управляют приводами шаровых кранов. Реле 3 управляет сигнальной лампой или зуммером. При смачивании датчика протечки реле 1 и реле 2 замыкаются и приводы закрывают шаровые краны. Реле 3 замыкается и включает зуммер. Вход 2 запрограммируем для сброса тревоги и открытия шаровых кранов.

Очистим mapping-матрицу:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})

Применим в нашем случае режим, когда состояние входа повторяется каждые 20 минут, для этого запишем в регистр 9 значение 5 (управлять в соответствии с mapping-матрицей, через 20 минут повторно имитировать состояние ввода), а в остальные — значение 4 (управлять в соответствии с mapping-матрицей).

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 5 4 4 4 4 4

Для входа датчика протечки (вход 1) используем режим 1000 (8) — включать при замыкании. Mm 1000.png
Для входа кнопки сброса (вход 2) используем режим 0100 (4) — выключить при замыкании. Mm 0100.png

По карте mapping-регистров определяем, что для входа 1 надо записать значение 8 в регистры 384, 385, 386, а для входа 2 — записать значение 4 в регистры 392, 393, 394:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 8 8 8
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r392 4 4 4


Проверка: замкнем вход 1 и iGND и оставим его замкнутым. Должны включиться реле 1, 2 и 3. Затем замкнем и разомкнем вход 2 — все три реле выключились. Ждем 20 минут. Поскольку вход 1 остается замкнутым (протечка не устранена), через 20 минут реле 1, 2 и 3 снова включатся.

Оставляя вход 1 замкнутым, выключим и включим питание реле: через 20 минут реле 1, 2 и 3 снова включатся.