I/O Mapping Matrix/en: различия между версиями

Материал из Wiren Board
(Новая страница: «Leaving input 1 closed, turn off and turn on the relay power: after 20 minutes, relays 1, 2 and 3 will turn on again.»)
(Новая страница: «The rows describe the actions when the corresponding input is changed, the columns describe the corresponding outputs. Therefore, the cell at the intersection of…»)
(не показана 41 промежуточная версия этого же участника)
Строка 19: Строка 19:
The '''yy''' bits describe the changing of input value from 0 to 1 (front), and the '''xx''' bits describe the changing from 1 to 0 (back).
The '''yy''' bits describe the changing of input value from 0 to 1 (front), and the '''xx''' bits describe the changing from 1 to 0 (back).


Each combination of two bits describes four possible actions:
Каждая комбинация из двух бит описывает четыре возможных действия:


*00 — idle
*00 — ничего не делать
*01 — turn off
*01 — выключить
*10 — turn on
*10 — включить
*11 — invert value
*11 — инвертировать значение


Thus, it is possible to program the response of each output to the closure and disconnection of any inputs.
Таким образом, можно запрограммировать реакцию каждого выхода на замыкание и размыкание любых входов.
<!--
<!--
   
   
{| class="wikitable"
{| class="wikitable"
!  !!  !! ! colspan="4" |Rear
!  !!  !! ! colspan="4" |Задний фронт
|-
|-
!  
!  
| || 00 || 01 || 10 || 11
| || 00 || 01 || 10 || 11
|-
|-
! rowspan="4"|Front<br>front
! rowspan="4"|Передний<br>фронт
| 00  
| 00  
| 0000 (0) — Input disabled, does not control outputs
| 0000 (0) — Вход отключен, не управляет выходами
| 0001 (1)— turn Off when opening
| 0001 (1)— Выключить при размыкании
| 0010 (2) — Enable when opening
| 0010 (2) — Включить при размыкании
| 0011 (3) — Change output state when opening
| 0011 (3) — Изменить состояние выхода при размыкании
|-
|-
| 01  
| 01  
| 0100 (4) — turn Off when closed
| 0100 (4) — Выключить при замыкании
| 0101 (5)— Always switch off
| 0101 (5)— Всегда выключать
| 0110 (6) — Operate as inverted switch with locking
| 0110 (6) — Работать как инвертированный выключатель с фиксацией
| 0111 (7) — turn Off when opening, then change the state when switching
| 0111 (7) — Выключить при размыкании, потом изменять состояние при переключении
|-
|-
| 10 || 1000 (8) to Include the closure || 1001 (9) — Work as a switch with locking (repeat sign) || 1010 (10, 0x0A)— Always include || 1011 (11, 0x0B) Enable, then change the state by opening
| 10 || 1000 (8) — Включить при замыкании || 1001 (9) — Работать как выключатель с фиксацией (повторять вход) || 1010 (10, 0x0A)— Всегда включать || 1011 (11, 0x0B) — Включить, потом изменять состояние при размыкании
|-
|-
| 11 || 1100 (12, 0x0C) — Change the output state when closed (switch without locking) || 1101 (13, 0x0D) — Change the state, then turn off when opening || 1110 (14, 0x0E) — Change the state, then turn on when opening || 1111 (15, 0x0F)— Change the state when closing and return to the original state when opening
| 11 || 1100 (12, 0x0C) — Изменить состояние выхода при замыкании (выключатель без фиксации) || 1101 (13, 0x0D) — Изменить состояние, потом выключить при размыкании || 1110 (14, 0x0E) — Изменить состояние, потом включить при размыкании || 1111 (15, 0x0F)— Изменить состояние при замыкании и вернуться к исходному состоянию при размыкании
|}
|}


-->
-->
{| class="wikitable"
{| class="wikitable"
!  !!  !! ! colspan="4" |back
!  !!  !! ! colspan="4" |Задний фронт
|-
|-
!  
!  
|  || style="text-align:center;"| '''00''' || style="text-align:center;"| '''01''' || style="text-align:center;"| '''10''' || style="text-align:center;"| '''11'''
|  || style="text-align:center;"| '''00''' || style="text-align:center;"| '''01''' || style="text-align:center;"| '''10''' || style="text-align:center;"| '''11'''
|- style="vertical-align:center;"
|- style="vertical-align:center;"
! rowspan="4"|front<br>
! rowspan="4"|Передний<br>фронт
| '''00'''  
| '''00'''  
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0000.png|frameless|270px]]<br>(0) — Input is disabled, does not control outputs  
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0000.png|frameless|270px]]<br>(0) — Вход отключен, не управляет выходами  
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0001.png|frameless|270px]]<br>(1) — Disable when opening circuit
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0001.png|frameless|270px]]<br>(1) — Выключить при размыкании
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0010.png|frameless|270px]]<br>(2) — Enable when circuit is open
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0010.png|frameless|270px]]<br>(2) — Включить при размыкании
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0011.png|frameless|270px]]<br>(3) — Change the exit status when closing
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0011.png|frameless|270px]]<br>(3) — Изменить состояние выхода при размыкании
|- style="vertical-align:center;"
|- style="vertical-align:center;"
| '''01'''  
| '''01'''  
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0100.png|frameless|270px]]<br>(4) — Turn off when snapping
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0100.png|frameless|270px]]<br>(4) — Выключить при замыкании
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0101.png|frameless|270px]]<br>(5) — '''Always turn off'''
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0101.png|frameless|270px]]<br>(5) — '''Всегда выключать'''
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0110.png|frameless|270px]]<br>(6) —Work as an inverted <br>safety switch with separate actuator
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0110.png|frameless|270px]]<br>(6) — Работать как инвертированный <br>выключатель с фиксацией
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0111.png|frameless|270px]]<br>(7) — Turn off when opening, then <br>change state when switching
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0111.png|frameless|270px]]<br>(7) — Выключить при размыкании, потом <br>изменять состояние при переключении
|- style="vertical-align:center;"
|- style="vertical-align:center;"
| '''10'''  
| '''10'''  
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1000.png|frameless|270px]]<br>(8) — Turn on when the circuit is closed
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1000.png|frameless|270px]]<br>(8) — Включить при замыкании
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1001.png|frameless|270px]]<br>(9) — To work like '''locking swich''' <br>(repeat sign)
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1001.png|frameless|270px]]<br>(9) — Работать как '''выключатель с фиксацией''' <br>(повторять вход)
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1010.png|frameless|270px]]<br>(10, 0x0A)— Always turn on
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1010.png|frameless|270px]]<br>(10, 0x0A)— Всегда включать
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1011.png|frameless|270px]]<br>(11, 0x0B) — Enable, then change the <br>state when opening
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1011.png|frameless|270px]]<br>(11, 0x0B) — Включить, потом изменять <br>состояние при размыкании
|- style="vertical-align:center;"
|- style="vertical-align:center;"
| '''11'''  
| '''11'''  
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1100.png|frameless|270px]]<br>(12, 0x0C) — To change the output state <br>in short<br>("'non-latching switch"')
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1100.png|frameless|270px]]<br>(12, 0x0C) — Изменить состояние выхода <br>при замыкании<br>('''выключатель без фиксации''')
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1101.png|frameless|270px]]<br>(13, 0x0D) — Change state, then <br>turn off when opening
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1101.png|frameless|270px]]<br>(13, 0x0D) — Изменить состояние, потом <br>выключить при размыкании
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1110.png|frameless|270px]]<br>(14, 0x0E) — Change state, then <br>turn off when circuit is open
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1110.png|frameless|270px]]<br>(14, 0x0E) — Изменить состояние, потом <br>включить при размыкании
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1111.png|frameless|270px]]<br>(15, 0x0F) — Change the state when closing<br>and return to the original state<br>when opening
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_1111.png|frameless|270px]]<br>(15, 0x0F) — Изменить состояние при замыкании<br>и вернуться к исходному состоянию<br>при размыкании
|}
|}


==Register mapping matrix ==
==Карта регистров mapping-матрицы ==
{| class="wikitable"
{| class="wikitable"
! The registers !!  !! colspan="8"| Outputs
! Регистры !!  !! colspan="8"| Выходы
|-
|-
!  
!  
Строка 111: Строка 111:
|}
|}


== The previous version of the configuration interaction of the inputs and outputs of relay modules ==
== Предыдущая версия настройки взаимодействия входов и выходов релейных модулей ==


The new firmware also retained the mechanism for managing input-output links from previous firmware versions. Holding-register 5 describes the behavior of all inputs, and registers 9 to 9+x-1 (x — the number of relays in the module) and register 16 (zero input) — the behavior of each individual input.
В новых прошивках также сохранился механизм управления связями вход-выход из предыдущих прошивок. Holding-регистр 5 описывает поведение всех входов, а регистры с 9 по 9+x-1 (x — число реле в модуле) и регистр 16 (нулевой вход) — поведение каждого отдельного входа.


Registers can contain the following control values:
Регистры могут содержать следующие управляющие значения:


{| class="wikitable"
{| class="wikitable"
! The value of the register !! Operation mode inputs !! Note
! Значение регистра !! Режим работы входов !! Примечание
|-
|-
| 0 || Buttons without locking ||
| 0 || Кнопки без фиксации ||
|-
|-
| 1 || latching Switch ||
| 1 || Выключатель с фиксацией ||
|-
|-
| 2 || Disable all relays when pressing || with firmware 1.9.0  
| 2 || Отключать все реле при нажатии || с прошивки 1.9.0  
|-
|-
| 3 | on| Disable interaction of inputs and outputs ||
| 3 || Отключить взаимодействие входов и выходов ||
|-
|-
| 4 || Manage according to the Mapping matrix || with firmware v.1.9.0
| 4 || Управлять в соответствии с Mapping-матрицей || с прошивки 1.9.0
|-
|-
| 5 || Control according to the Mapping matrix, <br>after 20 minutes re-simulate the input state || with firmware v.1.9.0
| 5 || Управлять в соответствии с Mapping-матрицей, <br>через 20 минут повторно имитировать состояние ввода || с прошивки 1.9.0
|}
|}


Setting the control mode of individual inputs is possible only if the value 0 is written in the holding register 5. In the latest firmware in the factory supply, all input mode registers contain 0, except for register 16 — it contains the value 2, which ensures the operation of the input 0 as "emergency" — when you press the button without fixing, connected to this input, all relays will turn off. Pressing it again will leave the relay is off.
Настройка управления режима отдельных входов возможно, только если в holding-регистре 5 записано значение 0. В последних прошивках в заводской поставке все регистры режима входов содержат 0, кроме регистра 16 в нем записано значение 2, что обеспечивает работу входа 0 как "аварийного" — при нажатии на кнопку без фиксации, подсоединенную к этому входу, все реле выключатся. Повторное нажатие оставит все реле выключенными.


Re-simulation of the input state after 20 minutes (mode 5) means that every 20 minutes an action will be performed on the output (according to the matrix), as if the input has just changed the state: if the input is closed, then the action is performed on the rising edge. If open the on the back. This mode provides additional reliability when controlling the relay leakage sensors connected to the inputs. The following scenario is worked out: when the inlet is closed by the leakage sensor, the ball valve closes the water. At some point, the command to open the crane (for example, Modbus) comes. But, if the leak is still fixed by the sensor, after 20 minutes the tap will be closed again.
Повторная имитация состояния ввода через 20 минут (режим 5) означает, что каждые 20 минут над выходом будет выполняться действие (согласно матрице), как будто вход только что изменил состояние: если вход замкнут, то выполняется действие по переднему фронту. Если разомкнут то по заднему. Такой режим обеспечивает дополнительную надежность при управлении реле датчиками протечки, подключенными ко входам. Отрабатывается следующий сценарий: при замыкании входа датчиком протечки шаровой кран перекрывает воду. В какой-то момент поступает команда на открытие крана (например, по Modbus). Но, если протечка все еще фиксируется датчиком, через 20 минут кран снова будет перекрыт.


== The programming examples of the interaction of inputs and outputs =
== Примеры программирования взаимодействия входов и выходов ==


Let's consider some examples of programming the interaction of inputs and outputs on the example of relay module WB-MR6C with firmware 1.9.4. The module has 7 dry contact inputs and 6 relay outputs. The default input 0 is used to disable all relay modules and the buttons 1 to 6 are used to control relay modules.  
Рассмотрим несколько примеров программирования программирования взаимодействия входов и выходов на примере релейного модуля WB-MR6C с прошивкой 1.9.4. Модуль имеет 7 входов типа "сухой контакт" и 6 релейных выходов. Вход 0 по умолчанию используется для отключения всех реле модулей, а кнопки 1 6 для управления модулями реле.  


In the examples, we focus on the factory settings of the communication parameters of the module, Modbus-address — 1. The module is connected to the first port of the Wiren Board 6 controller.
В примерах ориентируемся на заводские настройки параметров коммуникации модуля, Modbus-адрес — 1. Модуль подключен к первому порту контроллера Wiren Board 6.




'''All examples are executed when the wb-mqtt-serial driver is stopped:'''
'''Все примеры выполняются при остановленном драйвере wb-mqtt-serial:'''
<syntaxhighlight lang="bash">service wb-mqtt-serial stop</syntaxhighlight>
<syntaxhighlight lang="bash">service wb-mqtt-serial stop</syntaxhighlight>


=== Switches with locking ===
=== Выключатели с фиксацией ===


Write in register 5 value 1:
Запишем в регистр 5 значение 1:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 1</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 1</syntaxhighlight>


Now all inputs of the module function as inputs for switches with fixation.
Теперь все входы модуля функционируют как входы для выключателей с фиксацией.
Disadvantage: Input 0 stops functioning.
Недостаток: Вход 0 перестает функционировать.




To save the "emergency" input mode 0 return to register 5 value 0, and in the registers 9, 10, 11, 12, 13, 14 write 1:
Чтобы сохранить "аварийный" режим входа 0 вернем в регистр 5 значение 0, а в регистры 9, 10, 11, 12, 13, 14 запишем 1:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 0</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 0</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 1 1 1 1 1 1</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 1 1 1 1 1 1</syntaxhighlight>


Now all inputs operate in switch mode with locking, and a short press on the button connected to input 0 will turn off all relays.
Теперь все входы функционируют в режиме выключателей с фиксацией, а кратковременное нажатие на кнопку, подключенную ко входу 0, выключит все реле.


=== Disable input / relay communication ===  
=== Отключить взаимодействие входов и реле ===  


To disable the interaction of inputs and relays (for example, if we want to control the relay only through the controller rules engine), write the value 0 in register 5, and in registers 9, 10, 11, 12, 13, 14 write the value 3:
Для отключения взаимодействия входов и реле (например, если мы хотим управлять реле только через движок правил контроллера) запишем в регистр 5 значение 0, а в регистры 9, 10, 11, 12, 13, 14 запишем значение 3:


<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 0</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 0</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 3 3 3 3 3 3</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 3 3 3 3 3 3</syntaxhighlight>


Now clicking on the button or toggle switch will change the relay status you can manage only programmatically via Modbus.
Теперь нажатия на кнопки или переключение выключателей не будет изменять состояние реле: ими можно управлять только программно, по Modbus.
In this case, the function of the emergency input 0 is saved: a short press on the button connected to the input 0 will turn off all the relays.
При этом функция аварийного входа 0 сохраняется: кратковременное нажатие на кнопку, подключенную ко входу 0, выключит все реле.


If we want to disable and input 0, then write the value 3 in register 16:
Если мы хотим отключить и вход 0, то запишем значение 3 в регистр 16:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 3</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 3</syntaxhighlight>




=== Using the Mapping matrix ===
=== Использование Mapping-матрицы ===
More complex scenarios of interaction between inputs and relays can be implemented using a Mapping matrix.
Более сложные сценарии взаимодействия входов с реле можно реализовать с помощью Mapping-матрицы.
To use the Mapping matrix, write the value 0 in the holding register 5:
Для использования Mapping-матрицы запишем в holding-регистр 5 значение 0:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 4 </syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 4 </syntaxhighlight>
And registers the settings of the interaction of inputs/outputs value 4:
А в регистры настройки взаимодействия входов/выходов значение 4:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r 9 4 4 4 4 4 4 </syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r 9 4 4 4 4 4 4 </syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 4</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 4</syntaxhighlight>


Mapping mapping-the matrix is filled with zeros. If you are unsure and want to erase the entire matrix, write 0 in each of the 64 holding registers starting with 384:
В заводской поставке Mapping-матрица заполнена нулями. Если вы не уверены в этом и хотите стереть всю матрицу, запишите 0 в каждый из 64 holding-регистров, начиная с 384:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight>


====Input 0 turns all relays on and off ====
==== Вход 0 включает и выключает все реле ====


Program the matrix in such a way that the input 0, working in the mode of the button (switch without fixation), sequentially turns on and off all the relays of the module when closed.
Запрограммируем матрицу таким образом, чтобы вход 0, работая в режиме кнопки (выключателя без фиксации) последовательно включал и отключал все реле модуля при замыкании.


To do this, we turn to the register map of the mapping matrix and see that the input 0 corresponds to the registers 440 — 447. And for interaction with inputs 1 — 6 registers 440 — 445 are responsible.
Для этого обратимся к карте регистров mapping-матрицы и увидим, что входу 0 соответствуют регистры 440 — 447. Причем за взаимодействие со входами 1 — 6 отвечают регистры 440 — 445.




We want the input to work as a switch without locking and triggered when pressed (on the rising edge), and when opened, nothing would happen. The state of all relays must be inverted each time they are pressed. This corresponds to a combination of 11 00: (12, 0x0C) — Change the output state when shorted:
Мы хотим, чтобы вход работал, как выключатель без фиксации и срабатывал при нажатии (по переднему фронту), а при размыкании ничего бы не происходило. При каждом нажатии состояние всех реле должно инвертироваться. Это соответствует комбинации 11 00: (12, 0x0C) — Изменить состояние выхода при замыкании:
[[File:Mm_1100.png|frameless|270px]]<br>
[[File:Mm_1100.png|frameless|270px]]<br>
Write in the registers 440 — 445 the value of 12:
Запишем в регистры 440 — 445 значение 12:


<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r440 12 12 12 12 12 12</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r440 12 12 12 12 12 12</syntaxhighlight>


Let's check the operation: at the first circuit of input 0 all relays are switched on, at the second all relays are switched off.
Проверим работу: при первом замыкании входа 0 все реле включаются, при втором все реле выключаются.




= = = = = Inverted switch with locking ===
==== Инвертированный выключатель с фиксацией ====
Set up the inputs so that when closed inputs relay would be disabled, and open -- is included.
Настроим входы таким образом, чтобы при замкнутых входах реле были бы выключены, а при разомкнутых -- включены.
For this closing input (rising edge) the corresponding output shall be switched off (01), and upon opening the entrance (back front) — included (10). This corresponds to the value 6: [[File:Mm_0110.png|frameless|270px]]<br>
Для этого при замыкании входа (передний фронт) соответствующий выход должен выключаться (01), а при размыкании входа (задний фронт) — включаться (10). Это соответствует значению 6: [[File:Mm_0110.png|frameless|270px]]<br>
In the matrix, the desired interaction registers input 1 — output 1, input 2 — output 2, etc. are located diagonally. These are registers 384, 393, 402, 411, 420, 429. They need to write the value 6:
В матрице нужные регистры взаимодействия вход 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 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r$i 6; done</syntaxhighlight>
<syntaxhighlight lang="bash">for i in 384 393 402 411 420 429; do modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r$i 6; done</syntaxhighlight>


Note: the relay state changes only when the input state changes.
Обратите внимание: изменение состояния реле происходят только при изменении состояния ввода.


==== Leak sensor ====
==== Датчик протечки ====


Let the leak sensor be connected to the '''input 1''', and the '''relays 1 and 2''' control the ball valve actuators. '''Relay 3''' controls the warning lamp or buzzer. When wetting the leakage sensor '''relay 1 and relay 2''' are closed and the actuators close the ball valves. '''Relay 3''' closes and switches on the buzzer. '''Input 2''' will be programmed to reset the alarm and open the ball valves.
Пусть датчик протечки подключен ко '''входу 1''', а '''реле 1 и 2''' управляют приводами шаровых кранов. '''Реле 3''' управляет сигнальной лампой или зуммером. При смачивании датчика протечки '''реле 1 и реле 2''' замыкаются и приводы закрывают шаровые краны. '''Реле 3''' замыкается и включает зуммер. '''Вход 2''' запрограммируем для сброса тревоги и открытия шаровых кранов.


Clear the mapping matrix:
Очистим mapping-матрицу:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight>


Apply in our case, the mode when the input state is repeated every 20 minutes, for this write in the register 9 value 5 (control in accordance with the mapping matrix, after 20 minutes to re-simulate the input state), and the rest the value 4 (control in accordance with the mapping matrix).
Применим в нашем случае режим, когда состояние входа повторяется каждые 20 минут, для этого запишем в регистр 9 значение 5 (управлять в соответствии с mapping-матрицей, через 20 минут повторно имитировать состояние ввода), а в остальные значение 4 (управлять в соответствии с mapping-матрицей).


<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 5 4 4 4 4 4</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 5 4 4 4 4 4</syntaxhighlight>


To enter the leakage sensor (input 1) use the mode 1000 (8) — turn on when the circuit. [[File:Mm_1000.png|frameless|270px]]<br> To enter the reset button (input 2) use mode 0100 (4) — turn off when closing. [[File:Mm_0100.png|frameless|270px]]<br>
Для входа датчика протечки (вход 1) используем режим 1000 (8) — включать при замыкании. [[File:Mm_1000.png|frameless|270px]]<br> Для входа кнопки сброса (вход 2) используем режим 0100 (4) — выключить при замыкании. [[File:Mm_0100.png|frameless|270px]]<br>


On the map mapping-registers we determine that to enter 1, you need to write the value 8 in the registers 384, 385, 386, and to enter 2 — write the value 4 in the registers 392, 393, 394:
По карте mapping-регистров определяем, что для входа 1 надо записать значение 8 в регистры 384, 385, 386, а для входа 2 — записать значение 4 в регистры 392, 393, 394:


<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 8 8 8</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 8 8 8</syntaxhighlight>
Строка 230: Строка 230:




Checking: close input 1 and iGND and leave it closed. Relays 1, 2 and 3 must be switched on. Then we close and open the input 2 — all three relay relays are off. Wait 20 minutes. Since input 1 remains closed (leakage is not eliminated), relays 1, 2 and 3 will switch back on after 20 minutes.
Проверка: замкнем вход 1 и iGND и оставим его замкнутым. Должны включиться реле 1, 2 и 3. Затем замкнем и разомкнем вход 2 — все три реле реле выключились. Ждем 20 минут. Поскольку вход 1 остается замкнутым (протечка не устранена), через 20 минут реле 1, 2 и 3 снова включатся.


Leaving input 1 closed, turn off and turn on the relay power: after 20 minutes, relays 1, 2 and 3 will turn on again.
Оставляя вход 1 замкнутым, выключим и включим питание реле: через 20 минут реле 1, 2 и 3 снова включатся.

Версия 16:09, 16 июля 2019

Другие языки:
Water metering and leakage control module WB-MWAC


Purpose

Since v.1.9.0 for devices of WB-MR series and WB-MWAC firmware supports matrix of displaying values of inputs on values of outputs. This additional functionality allows you to flexibly adjust the response of specific outputs of the device depending on the state of its inputs.


Device and operating principle of the mapping matrix

The matrix of actions on outputs for changing input states (mapping matrix) is located in the storage registers of the device, starting from the address 384, and contains 64 registers at the rate of 8 inputs / 8 outputs. Each register contains one of the numeric values that encode the interaction of one of the inputs with one of the outputs.

The rows describe the actions when the corresponding input is changed, the columns describe the corresponding outputs. Therefore, the cell at the intersection of the entry date and the exit column contains a value that specifies the operation of the exit when the corresponding entry is changed. The action is described by the value of the lower four bits of the hex word 0b0000 0000 0000 yyxx stored in the register. The yy bits describe the changing of input value from 0 to 1 (front), and the xx bits describe the changing from 1 to 0 (back).

Каждая комбинация из двух бит описывает четыре возможных действия:

  • 00 — ничего не делать
  • 01 — выключить
  • 10 — включить
  • 11 — инвертировать значение

Таким образом, можно запрограммировать реакцию каждого выхода на замыкание и размыкание любых входов.

Задний фронт
00 01 10 11
Передний
фронт
00 Mm 0000.png
(0) — Вход отключен, не управляет выходами
Mm 0001.png
(1) — Выключить при размыкании
Mm 0010.png
(2) — Включить при размыкании
Mm 0011.png
(3) — Изменить состояние выхода при размыкании
01 Mm 0100.png
(4) — Выключить при замыкании
Mm 0101.png
(5) — Всегда выключать
Mm 0110.png
(6) — Работать как инвертированный
выключатель с фиксацией
Mm 0111.png
(7) — Выключить при размыкании, потом
изменять состояние при переключении
10 Mm 1000.png
(8) — Включить при замыкании
Mm 1001.png
(9) — Работать как выключатель с фиксацией
(повторять вход)
Mm 1010.png
(10, 0x0A)— Всегда включать
Mm 1011.png
(11, 0x0B) — Включить, потом изменять
состояние при размыкании
11 Mm 1100.png
(12, 0x0C) — Изменить состояние выхода
при замыкании
(выключатель без фиксации)
Mm 1101.png
(13, 0x0D) — Изменить состояние, потом
выключить при размыкании
Mm 1110.png
(14, 0x0E) — Изменить состояние, потом
включить при размыкании
Mm 1111.png
(15, 0x0F) — Изменить состояние при замыкании
и вернуться к исходному состоянию
при размыкании

Карта регистров mapping-матрицы

Регистры Выходы
1 2 3 4 5 6 7 8
Входы 1 384 385 386 387 388 389 390 391
2 392 393 394 395 396 397 398 399
3 400 401 402 403 404 405 406 407
4 408 409 410 411 412 413 414 415
5 416 417 418 419 420 421 422 423
6 424 425 426 427 428 429 430 431
7 432 433 434 435 436 437 438 439
0 440 441 442 443 444 445 446 447

Предыдущая версия настройки взаимодействия входов и выходов релейных модулей

В новых прошивках также сохранился механизм управления связями вход-выход из предыдущих прошивок. Holding-регистр 5 описывает поведение всех входов, а регистры с 9 по 9+x-1 (x — число реле в модуле) и регистр 16 (нулевой вход) — поведение каждого отдельного входа.

Регистры могут содержать следующие управляющие значения:

Значение регистра Режим работы входов Примечание
0 Кнопки без фиксации
1 Выключатель с фиксацией
2 Отключать все реле при нажатии с прошивки 1.9.0
3 Отключить взаимодействие входов и выходов
4 Управлять в соответствии с Mapping-матрицей с прошивки 1.9.0
5 Управлять в соответствии с Mapping-матрицей,
через 20 минут повторно имитировать состояние ввода
с прошивки 1.9.0

Настройка управления режима отдельных входов возможно, только если в holding-регистре 5 записано значение 0. В последних прошивках в заводской поставке все регистры режима входов содержат 0, кроме регистра 16 — в нем записано значение 2, что обеспечивает работу входа 0 как "аварийного" — при нажатии на кнопку без фиксации, подсоединенную к этому входу, все реле выключатся. Повторное нажатие оставит все реле выключенными.

Повторная имитация состояния ввода через 20 минут (режим 5) означает, что каждые 20 минут над выходом будет выполняться действие (согласно матрице), как будто вход только что изменил состояние: если вход замкнут, то выполняется действие по переднему фронту. Если разомкнут — то по заднему. Такой режим обеспечивает дополнительную надежность при управлении реле датчиками протечки, подключенными ко входам. Отрабатывается следующий сценарий: при замыкании входа датчиком протечки шаровой кран перекрывает воду. В какой-то момент поступает команда на открытие крана (например, по Modbus). Но, если протечка все еще фиксируется датчиком, через 20 минут кран снова будет перекрыт.

Примеры программирования взаимодействия входов и выходов

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

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


Все примеры выполняются при остановленном драйвере wb-mqtt-serial:

service wb-mqtt-serial stop

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

Запишем в регистр 5 значение 1:

modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 1

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


Чтобы сохранить "аварийный" режим входа 0 вернем в регистр 5 значение 0, а в регистры 9, 10, 11, 12, 13, 14 запишем 1:

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

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

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

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

modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 0
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 3 3 3 3 3 3

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

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

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


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

Более сложные сценарии взаимодействия входов с реле можно реализовать с помощью Mapping-матрицы. Для использования Mapping-матрицы запишем в holding-регистр 5 значение 0:

modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 4

А в регистры настройки взаимодействия входов/выходов — значение 4:

modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r 9 4 4 4 4 4 4
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 4

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

modbus_client --debug -mrtu -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 -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 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r$i 6; done

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

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

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

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

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

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

modbus_client --debug -mrtu -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 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 8 8 8
modbus_client --debug -mrtu -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 снова включатся.