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

Материал из Wiren Board
Метка: ручная отмена
Метка: новое перенаправление
Строка 1: Строка 1:
{{DISPLAYTITLE:Примеры настройки взаимодействия входов и выходов модулей реле}}
#перенаправление[[Mapping_matrix_legacy#Примеры_программирования]]
== Вводная информация ==
В новых версиях прошивок настройка взаимодействия входов и выходов модулей реле выполняется через веб-интерфейс. Это самый простой и быстрый способ. Однако, сохранена поддержка настройки через запись Modbus-регистров.
 
<!--T:18-->
Рассмотрим несколько примеров программирования взаимодействия входов и выходов на примере релейного модуля [[WB-MR6C]] с прошивкой 1.9.4. Модуль имеет 7 входов типа «сухой контакт» и 6 релейных выходов. Вход 0 по умолчанию используется для отключения всех реле модулей, а кнопки 1 — 6 для управления модулями реле.
 
<!--T:19-->
В примерах ориентируемся на заводские настройки параметров коммуникации модуля, Modbus-адрес — 1. Модуль подключен к первому порту контроллера Wiren Board.
 
Назначение регистров и возможных значений смотрите в [[Relay_Module_Modbus_Management| '''Карте регистров модулей реле''']].
<!--T:20-->
{{Wbincludes:Modbus client preparing for work}}
 
== Чтение настроек ==
Зачастую перед настройкой имеет смысл считать содержимое регистров mapping-матрицы, сделать это можно одной командой.
 
Например, считаем с устройства с адресом <code>1</code> и работающего на скорости 9600 бит/с, 64 идущих подряд регистра, начиная с 384-го — это регистры классической mapping-матрицы реле:
<syntaxhighlight lang="console">
# modbus_client -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r384 -c64
SUCCESS: read 64 of elements:
        Data: 0x0003 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0003 0x0003 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0003 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0003 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0003 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0003 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0001 0x0001 0x0001 0x0001 0x0001 0x0001 0x0000 0x0000
</syntaxhighlight>
 
Адреса нужных регистров смотрите в [[Relay_Module_Modbus_Management | Карте регистров модулей реле]].
 
Далее надо разбить вывод комманды на 8 столбцов и мы получим в строках входы, а в столбцах — выходы:
<pre>
Разбили вывод команды на 8 столбцов и добавили нумерацию
 
  1      2      3      4      5      6      7      8
1  0x0003 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
2  0x0003 0x0003 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
3  0x0003 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
4  0x0000 0x0000 0x0003 0x0000 0x0000 0x0000 0x0000 0x0000
5  0x0000 0x0000 0x0000 0x0003 0x0000 0x0000 0x0000 0x0000
6  0x0000 0x0000 0x0000 0x0000 0x0003 0x0000 0x0000 0x0000
7  0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
0  0x0001 0x0001 0x0001 0x0001 0x0001 0x0001 0x0000 0x0000
 
 
Заменили коды функций на действия, соответствия смотрите в описании маппинг-матриц
  1      2      3      4      5      6      7      8
1  перекл ...... ...... ...... ...... ...... ...... ......
2  перекл перекл ...... ...... ...... ...... ...... ......
3  перекл ...... ...... ...... ...... ...... ...... ......
4  ...... ...... перекл ...... ...... ...... ...... ......
5  ...... ...... ...... перекл ...... ...... ...... ......
6  ...... ...... ...... ...... перекл ...... ...... ......
7  ...... ...... ...... ...... ...... ...... ...... ......
0  выкл  выкл  выкл  выкл  выкл  выкл  ...... ......
</pre>
 
== Прямая настройка входов ==
=== Выключатели с фиксацией === <!--T:21-->
Чтобы перевести входы в режим «Выключатель с фиксацией», запишите в регистры настройки входов значение 1.
 
В примере мы изменим режим входов с 1 по 6 и аварийного входа 0 в устройстве с адресом <code>1</code>:
<!--T:22-->
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 1 1 1 1 1 1 1</syntaxhighlight>
 
<!--T:25-->
Теперь входы функционируют в режиме «Выключатель с фиксацией», а активация выключателя, подключенного ко входу 0, выключит все реле.
 
=== Выключатели без фиксации === <!--T:21-->
Чтобы перевести все входы в режим «Выключатель без фиксации», запишите в регистры настройки входов значение 0.
 
В примере мы изменим режим входов с 1 по 6 и аварийного входа 0 в устройстве с адресом <code>1</code>:
<!--T:22-->
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 0 0 0 0 0 0 0</syntaxhighlight>
 
<!--T:25-->
Теперь входы функционируют в режиме «Выключатель без фиксации», а кратковременное нажатие на кнопку, подключенную ко входу 0, выключит все реле.
 
=== Отключить взаимодействие входов и реле === <!--T:26-->
 
<!--T:27-->
Для отключения взаимодействия входов и реле (например, если мы хотим управлять реле только через движок правил контроллера) запишем в регистры 9, 10, 11, 12, 13, 14 значение 3:
 
<!--T:28-->
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 3 3 3 3 3 3</syntaxhighlight>
 
<!--T:29-->
Теперь нажатия на кнопки или переключение выключателей не будет изменять состояние реле: ими можно управлять только программно, по Modbus.
При этом функция аварийного входа 0 сохраняется: кратковременное нажатие на кнопку, подключенную ко входу 0, выключит все реле.
 
<!--T:30-->
Если мы хотим отключить и вход 0, то запишем значение 3 в регистр 16 устройства с адресом <code>1</code>:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 3</syntaxhighlight>
 
== Использование Mapping-матрицы == <!--T:31-->
Более сложные сценарии взаимодействия входов с реле можно реализовать с помощью '''[[I/O_Mapping_Matrix|Mapping-матрицы]]'''.
Для этого запишем в регистры настройки взаимодействия входов/выходов — значение 4:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 4 4 4 4 4 4 </syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 4</syntaxhighlight>
 
Для настройки Mapping-матрицы нужно знать номер регистра, который отвечает за взаимодействие входа и выхода, и код, который нужно записать в этот регистр. Эту информацию можно найти на странице описания [[I/O_Mapping_Matrix|Mapping-матриц]].
 
<!--T:32-->
В заводской поставке Mapping-матрица заполнена нулями. Если вы не уверены в этом и хотите стереть всю матрицу, запишите 0 в каждый из 64 holding-регистров, начиная с 384:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight>
 
=== Вход 0 включает и выключает все реле === <!--T:33-->
 
<!--T:34-->
Запрограммируем матрицу таким образом, чтобы вход 0, работая в режиме выключателя без фиксации включал и отключал все реле модуля при замыкании.
 
<!--T:35-->
Для этого обратимся к карте регистров mapping-матрицы и увидим, что входу 0 соответствуют регистры 440 — 447. Причем за взаимодействие со входами 1 — 6 отвечают регистры 440 — 445.
 
<!--T:36-->
Мы хотим, чтобы вход работал, как выключатель без фиксации и срабатывал при нажатии, а при размыкании ничего бы не происходило. При каждом нажатии состояние всех реле должно инвертироваться. Это соответствует комбинации 11 00: (12, 0x0C) — Изменить состояние выхода при замыкании:
[[File:Mm_1100.png|frameless|270px]]<br>
Запишем в регистры 440 — 445 значение 12:
 
<!--T:37-->
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r440 12 12 12 12 12 12</syntaxhighlight>
 
<!--T:38-->
Проверим работу: при первом замыкании входа 0 все реле включаются, при втором — все реле выключаются.
 
=== Инвертированный выключатель с фиксацией === <!--T:39-->
Настроим входы таким образом, чтобы при замкнутых входах реле были бы выключены, а при разомкнутых -- включены.
Для этого при замыкании входа (передний фронт) соответствующий выход должен выключаться (01), а при размыкании входа (задний фронт) — включаться (10). Это соответствует значению 6: [[File:Mm_0110.png|frameless|270px]]<br>
В матрице нужные регистры взаимодействия вход 1 — выход 1, вход 2 — выход 2 и т.д. расположены по диагонали. Это регистры 384, 393, 402, 411, 420, 429. В них надо записать значение 6:
<syntaxhighlight lang="bash">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</syntaxhighlight>
 
<!--T:40-->
Обратите внимание: изменение состояния реле происходят только при изменении состояния ввода.
 
 
=== Обработка типов нажатий ===
Матрицы типов нажатий можно посмотреть на странице [[I/O Mapping Matrix | Mapping-матрица]].
 
Чтобы понять принцип, рассмотрим пример. К '''входу 2''' реле подключена кнопка и нам нужно настроить так, чтобы при двойном нажатии на эту кнопку включалось '''реле 5''', а при коротком переключалось '''реле 3'''.
 
Запишем в регистр настройки взаимодействия входов/выходов входа '''2''' значение '''6''':
<syntaxhighlight lang="bash">
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r10 6 </syntaxhighlight>
 
Теперь запишем в соответствующий входу '''2''' и выходу '''5''' регистр из матрицы двойных нажатий действие «10 — включить» (dec = 2), а в соответствующий входу '''2''' и выходу '''3''' регистр из матрицы коротких нажатий действие «11 — инвертировать значение» (dec = 3):
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r684 2</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r554 3</syntaxhighlight>
Аналогично настраиваются другие типы нажатий.
 
=== Датчик протечки === <!--T:41-->
'''ВНИМАНИЕ:''' используемый в примере '''режим 5''' — восстановление состояния выхода через 20 минут, '''доступен только для''' [[WB-MWAC]].
 
<!--T:42-->
Пусть датчик протечки подключен ко '''входу 1''', а '''реле 1 и 2''' управляют приводами шаровых кранов. '''Реле 3''' управляет сигнальной лампой или зуммером. При смачивании датчика протечки '''реле 1 и реле 2''' замыкаются и приводы закрывают шаровые краны. '''Реле 3''' замыкается и включает зуммер. '''Вход 2''' запрограммируем для сброса тревоги и открытия шаровых кранов.
 
<!--T:43-->
Очистим mapping-матрицу:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight>
 
<!--T:44-->
Применим в нашем случае режим, когда состояние входа повторяется каждые 20 минут, для этого запишем в регистр 9 значение 5 (управлять в соответствии с mapping-матрицей, через 20 минут повторно имитировать состояние ввода), а в остальные — значение 4 (управлять в соответствии с mapping-матрицей).
 
<!--T:45-->
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 5 4 4 4 4 4</syntaxhighlight>
 
<!--T:46-->
Для входа датчика протечки (вход 1) используем режим 1000 (8) — включать при замыкании. [[File:Mm_1000.png|frameless|270px]]<br> Для входа кнопки сброса (вход 2) используем режим 0100 (4) — выключить при замыкании. [[File:Mm_0100.png|frameless|270px]]<br>
 
<!--T:47-->
По карте mapping-регистров определяем, что для входа 1 надо записать значение 8 в регистры 384, 385, 386, а для входа 2 — записать значение 4 в регистры 392, 393, 394:
 
<!--T:48-->
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 8 8 8</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r392 4 4 4</syntaxhighlight>
 
 
<!--T:49-->
Проверка: замкнем вход 1 и iGND и оставим его замкнутым. Должны включиться реле 1, 2 и 3. Затем замкнем и разомкнем вход 2 — все три реле выключились. Ждем 20 минут. Поскольку вход 1 остается замкнутым (протечка не устранена), через 20 минут реле 1, 2 и 3 снова включатся.
 
<!--T:50-->
Оставляя вход 1 замкнутым, выключим и включим питание реле: через 20 минут реле 1, 2 и 3 снова включатся.

Версия 17:16, 28 марта 2023