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

Материал из Wiren Board
(не показано 49 промежуточных версий 8 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE:Настройка взаимодействия входов и выходов модулей WB-MR с помощью Mapping-матриц}}
<languages/>
== Общие сведения ==
<translate>
[[Image: mapping-example.png |250px|thumb|right| Представление mapping-матрицы в виде таблицы ]]
<!--T:1-->
[[Image: wb press events.png |250px|thumb|right| Временные диаграммы типов нажатий ]]
{{DISPLAYTITLE: I/O Mapping Matrix}}
В релейных модулях WB-MR каждый из входов можно назначить для управления любым выходом с помощью шести управляющих событий. Логика управления записывается в память модуля WB-MR и не задействует ресурсы контроллера.


Настройка делается через mapping-матрицы — это набор регистров в памяти модуля. Для простоты мы представим mapping-матрицу в виде таблицы, где в строках будут входы, в столбцах — выходы, а на пересечении — действие.
<!--T:2-->
[[File:WB-MWAC-FRONT.png|300px|thumb|right| Модуль учета водопотребления и контроля протечек WB-MWAC]]


Возможные события, сгруппированные по типам:
# Фронт сигнала:
#* передний;
#* задний.
# Нажатие на кнопку, подключённую к входу:
#* короткое;
#* длинное;
#* двойное;
#* сначала короткое, затем длинное.


Для каждого типа события существует своя таблица, где прописано взаимодействие выходов и входов.
=== Назначение === <!--T:3-->
Начиная с версии '''1.9.0''' для устройств серии '''WB-MR''' и [[WB-MWAC]] в прошивке реализована поддержка матрицы отображения значений входов на значения выходов. Данная дополнительная функциональность позволяет максимально гибко настраивать реакцию конкретных выходов устройства в зависимости от состояния его входов.


==Настройка в веб-интерфейсе контроллера Wiren Board==
{{note|note|Перед настройкой проверьте, что прошивка модуля не ниже 1.17.0, а ПО контроллера не старее wb-2207.}}
Для настройки mapping-матрицы в веб-интерфейсе перейдите на вкладку '''Настройки — Конфигурационные файлы — Настройка драйвера serial-устройств''' и выберите настраиваемый модуль реле. В настройках модуля перейдите на вкладку с номером входа, который вы настраиваете, например, '''Вход 1'''.


Активируйте флажок '''Режим работы''' и выберите из выпадающего списка один из режимов:
== Устройство и принцип работы mapping-матрицы == <!--T:4-->
* ''Управлять по mapping-матрице'', чтобы настроить матрицы для управления по фронтам. Используется [[Mapping_matrix_legacy |старый вариант маппинг-матрицы]].
Матрица действий над выходами по изменению состояний входов (mapping-матрица) находится в регистрах хранения устройства, начиная с адреса 384, и содержит 64 регистра из расчета 8 входов / 8 выходов.
* ''Управлять по mapping-матрице для кнопок'', для распознавания нажатий кнопок.  
В каждом регистре записано одно из числовых значений, которыми кодируется взаимодействие одного из входов с одним из выходов.


<gallery mode="packed" heights="200px" caption="Управлять по mapping-матрице">
<!--T:5-->
Image: Mapping-front-1.png |
Строки описывают действия при изменении соответствующего входа, столбцы — соответствующие выходы.
Image: Mapping-front-2.png |
Таким образом в ячейке на пересечении сроки входа и столбца выхода содержится значение, задающее работу выхода при изменении соответствующего входа.
</gallery>
Действие описывается значением младших четырех бит шестнадцатибитного слова '''0b0000 0000 0000 yyxx''', хранящегося в регистре.  
Биты '''yy''' описывают действия при переходе значения входа из 0 в 1 (передний фронт), а биты '''xx''' — из 1 в 0 (задний фронт).


<gallery mode="packed" heights="200px" caption="Управлять по mapping-матрице для кнопок">
<!--T:6-->
Image: Mapping-button-1.png |
Каждая комбинация из двух бит описывает четыре возможных действия:
Image: Mapping-button-2.png |
</gallery>


==Настройка через запись в Modbus-регистры==
<!--T:7-->
{{note|note|Перед настройкой проверьте, что прошивка модуля на ниже 1.19.0. Если у вас старая версия прошивки, обновите её на свежую или используйте [[Mapping_matrix_legacy |старый вариант mapping-матрицы]].}}
*00 — ничего не делать
=== Как настраивать ===
*01 — выключить
Если у вас нет контроллера [[Wiren Board]], вы можете настроить mapping-матрицы через запись значений в регистры, подробнее в статье [[Working_with_WB_devices_without_a_controller | Работа с Modbus-устройствами Wiren Board без контроллера]].
*10 — включить
*11 — инвертировать значение


Общий алгоритм настройки:
<!--T:8-->
# Подключите модуль к компьютеру через преобразователь USB—RS485.
Таким образом, можно запрограммировать реакцию каждого выхода на замыкание и размыкание любых входов.
# Задайте режим работы входа в регистрах 9-15:  
<!--
#* 4 — управлять по mapping-матрице по фронтам.
#* 6 — управлять по mapping-матрице для кнопок.
{| class="wikitable"
# Запишите в регистры mapping-матрицы для выбранного типа события одно из действий:
! !!  !! ! colspan="4" |Задний фронт
#*0 — ничего не делать;
#*1 — выключить;
#*2 — включить;
#*3 — инвертировать значение.
 
Если в устройстве количество входов и/или выходов меньше 8, то адреса регистров '''не''' меняются — просто строки/столбцы для отсутствующих регистров не учитываются. Исключение — устройства с 2 входами и выходами.
 
Ниже вы найдёте таблицы регистров для каждого типа событий, а подробное описание всех регистров модулей реле по ссылке [[Relay_Module_Modbus_Management | Modbus-регистры WB-MR]].
 
===Mapping-матрица коротких нажатий===
 
{| class="wikitable"  
! Регистры !!  !! colspan="8"| Выходы '''MR3-6'''
|-
|-
!  
!  
|  || '''1''' || '''2''' || '''3''' || '''4''' || '''5''' || '''6''' || '''7''' || '''8'''
|  || 00 || 01 || 10 || 11
|-
!rowspan="8" |Входы
| '''1''' || 544 || 545 || 546 || 547 || 548 || 549 || 550 || 551
|-
| '''2''' || 552 || 553 || 554 || 555 || 556 || 557 || 558 || 559
|-
| '''3''' || 560 || 561 || 562 || 563 || 564 || 565 || 566 || 567
|-
|-
| '''4''' || 568 || 569 || 570 || 571 || 572 || 573 || 574 || 575
! rowspan="4"|Передний<br>фронт
| 00
| 0000 (0) — Вход отключен, не управляет выходами
| 0001 (1)— Выключить при размыкании
| 0010 (2) — Включить при размыкании
| 0011 (3) — Изменить состояние выхода при размыкании
|-
|-
| '''5''' || 576 || 577 || 578 || 579 || 580 || 581 || 582 || 583
| 01
| 0100 (4) — Выключить при замыкании
| 0101 (5)— Всегда выключать
| 0110 (6) — Работать как инвертированный выключатель с фиксацией
| 0111 (7) — Выключить при размыкании, потом изменять состояние при переключении
|-
|-
| '''6''' || 584 || 585 || 586 || 587 || 588 || 589 || 590 || 591
| 10 || 1000 (8) — Включить при замыкании || 1001 (9) — Работать как выключатель с фиксацией (повторять вход) || 1010 (10, 0x0A)— Всегда включать || 1011 (11, 0x0B) — Включить, потом изменять состояние при размыкании
|-
|-
| '''7''' || 592 || 593 || 594 || 595 || 596 || 597 || 598 || 599
| 11 || 1100 (12, 0x0C) — Изменить состояние выхода при замыкании (выключатель без фиксации) || 1101 (13, 0x0D) — Изменить состояние, потом выключить при размыкании || 1110 (14, 0x0E) — Изменить состояние, потом включить при размыкании || 1111 (15, 0x0F)— Изменить состояние при замыкании и вернуться к исходному состоянию при размыкании
|-
| '''0''' || 600 || 601 || 602 || 603 || 604 || 605 || 606 || 607
|}
|}


<!--T:9-->
-->
{| class="wikitable"
{| class="wikitable"
! Регистры !!  !! colspan="8"| Выходы '''MR2'''
! !!  !! ! colspan="4" |Задний фронт
|-
|-
!  
!  
|  || '''1''' || '''2'''  
|  || style="text-align:center;"| '''00''' || style="text-align:center;"| '''01''' || style="text-align:center;"| '''10''' || style="text-align:center;"| '''11'''
|-
|- style="vertical-align:center;"
!rowspan="8" |Входы
! rowspan="4"|Передний<br>фронт
| '''1''' || 544 || 545
| '''00'''
|-
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0000.png|frameless|270px]]<br>(0) — Вход отключен, не управляет выходами 
| '''2''' || 546 || 547
| 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) — Включить при размыкании
| style="text-align:center;vertical-align:bottom;" | [[File:Mm_0011.png|frameless|270px]]<br>(3) — Изменить состояние выхода при размыкании
|- style="vertical-align:center;"
| '''01'''  
| 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) — '''Всегда выключать'''
| 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) — Выключить при размыкании, потом <br>изменять состояние при переключении
|- style="vertical-align:center;"
| '''10'''
| 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) — Работать как '''выключатель с фиксацией''' <br>(повторять вход)
| 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) — Включить, потом изменять <br>состояние при размыкании
|- style="vertical-align:center;"
| '''11'''
| 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) — Изменить состояние, потом <br>выключить при размыкании
| 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) — Изменить состояние при замыкании<br>и вернуться к исходному состоянию<br>при размыкании
|}
|}


===Mapping-матрица длинных нажатий===
==Карта регистров mapping-матрицы == <!--T:10-->
 
{| class="wikitable"
{| class="wikitable"  
! Регистры !!  !! colspan="8"| Выходы  
! Регистры !!  !! colspan="8"| Выходы '''MR3-6'''
|-
|-
!  
!  
Строка 105: Строка 101:
|-
|-
!rowspan="8" |Входы
!rowspan="8" |Входы
| '''1''' || 608 || 609 || 610 || 611 || 612 || 613 || 614 || 615
| '''1''' || 384 || 385 || 386 || 387 || 388 || 389 || 390 || 391
|-
|-
| '''2''' || 616 || 617 || 618 || 619 || 620 || 621 || 622 || 623
| '''2''' || 392 || 393 || 394 || 395 || 396 || 397 || 398 || 399
|-
|-
| '''3''' || 624 || 625 || 626 || 627 || 628 || 629 || 630 || 631
| '''3''' || 400 || 401 || 402 || 403 || 404 || 405 || 406 || 407
|-
|-
| '''4''' || 632 || 633 || 634 || 635 || 636 || 637 || 638 || 639
| '''4''' || 408 || 409 || 410 || 411 || 412 || 413 || 414 || 415
|-
|-
| '''5''' || 640 || 641 || 642 || 643 || 644 || 645 || 646 || 647
| '''5''' || 416 || 417 || 418 || 419 || 420 || 421 || 422 || 423
|-
|-
| '''6''' || 648 || 649 || 650 || 651 || 652 || 653 || 654 || 655
| '''6''' || 424 || 425 || 426 || 427 || 428 || 429 || 430 || 431
|-
|-
| '''7''' || 656 || 657 || 658 || 659 || 660 || 661 || 662 || 663
| '''7''' || 432 || 433 || 434 || 435 || 436 || 437 || 438 || 439
|-
|-
| '''0''' || 664 || 665 || 666 || 667 || 668 || 669 || 670 || 671
| '''0''' || 440 || 441 || 442 || 443 || 444 || 445 || 446 || 447
|}
|}


{| class="wikitable"
== Предыдущая версия настройки взаимодействия входов и выходов релейных модулей == <!--T:11-->
! Регистры !!  !! colspan="8"| Выходы '''MR2'''
 
|-
<!--T:12-->
!  
В новых прошивках также сохранился механизм управления связями вход-выход из предыдущих прошивок. Holding-регистр 5 описывает поведение всех входов, а регистры с 9 по 9+x-1 (x — число реле в модуле) и регистр 16 (нулевой вход) — поведение каждого отдельного входа.
|  || '''1''' || '''2'''
|-
!rowspan="8" |Входы
| '''1''' || 608 || 609
|-
| '''2''' || 610 || 611
|-
|}


===Mapping-матрица двойных нажатий===
<!--T:13-->
Регистры могут содержать следующие управляющие значения:


{| class="wikitable"  
<!--T:14-->
! Регистры !! !! colspan="8"| Выходы '''MR3-6'''
{| class="wikitable"
|-
! Значение регистра !! Режим работы входов !! Примечание
!
|  || '''1''' || '''2''' || '''3''' || '''4''' || '''5''' || '''6''' || '''7''' || '''8'''
|-
!rowspan="8" |Входы
| '''1''' || 672 || 673 || 674 || 675 || 676 || 677 || 678 || 679
|-
| '''2''' || 680 || 681 || 682 || 683 || 684 || 685 || 686 || 687
|-
|-
| '''3''' || 688 || 689 || 690 || 691 || 692 || 693 || 694 || 695
| 0 || Кнопки без фиксации (триггерный режим). В этом режиме для изменения состояния реле достаточно однократно замкнуть и разомкнуть вход. Изменение состояния происходят по переднему фронту (то есть при замыкании) ||
|-
|-
| '''4''' || 696 || 697 || 698 || 699 || 700 || 701 || 702 || 703
| 1 || Выключатель с фиксацией. Реле повторяет состояние входа, в момент переключения входа происходит событие которое меняет состояние реле. Если позже реле будет переключено Modbus-командой, то состояние входа не будет влиять на реле до следующего переключения. В момент включения модуля состояние входа не учитывается: если на входе будет замкнутое состояние, то реле не будет включено во избежание не желательного включения (например, когда вечером свет был выключен командой с контроллера, выключатель остался включенным, ночью пропадало питание, модуль перезагрузился, но свет при этом не включится). ||
|-
|-
| '''5''' || 704 || 705 || 706 || 707 || 708 || 709 || 710 || 711
| 2 || Отключать все реле при нажатии (по умолчанию такой режим имеет вход 0) || с прошивки 1.9.0
|-
|-
| '''6''' || 712 || 713 || 714 || 715 || 716 || 717 || 718 || 719
| 3 || Отключить взаимодействие входов и выходов: изменение входа на влияет на состояние реле ||
|-
|-
| '''7''' || 720 || 721 || 722 || 723 || 724 || 725 || 726 || 727
| 4 || Управлять в соответствии с Mapping-матрицей || с прошивки 1.9.0
|-
|-
| '''0''' || 728 || 729 || 730 || 731 || 732 || 733 || 734 || 735
| 5 || Управлять в соответствии с Mapping-матрицей, <br>через 20 минут повторно имитировать состояние ввода || с прошивки 1.9.0
|}
|}


{| class="wikitable"
<!--T:15-->
! Регистры !! !! colspan="8"| Выходы '''MR2'''
Настройка управления режима отдельных входов возможно, только если в holding-регистре 5 записано значение 0. В последних прошивках в заводской поставке все регистры режима входов содержат 0, кроме регистра 16  — в нем записано значение 2, что обеспечивает работу входа 0 как "аварийного" — при нажатии на кнопку без фиксации, подсоединенную к этому входу, все реле выключатся. Повторное нажатие оставит все реле выключенными.
|-
 
!  
<!--T:16-->
|  || '''1''' || '''2'''
Повторная имитация состояния ввода через 20 минут (режим 5) означает, что каждые 20 минут над выходом будет выполняться действие (согласно матрице), как будто вход только что изменил состояние: если вход замкнут, то выполняется действие по переднему фронту. Если разомкнут — то по заднему. Такой режим обеспечивает дополнительную надежность при управлении реле датчиками протечки, подключенными ко входам. Отрабатывается следующий сценарий: при замыкании входа датчиком протечки шаровой кран перекрывает воду. В какой-то момент поступает команда на открытие крана (например, по Modbus). Но, если протечка все еще фиксируется датчиком, через 20 минут кран снова будет перекрыт.
|-
 
!rowspan="8" |Входы
== Примеры программирования взаимодействия входов и выходов == <!--T:17-->
| '''1''' || 672 || 673
 
|-
<!--T:18-->
| '''2''' || 674 || 675
Рассмотрим несколько примеров программирования программирования взаимодействия входов и выходов на примере релейного модуля WB-MR6C с прошивкой 1.9.4. Модуль имеет 7 входов типа "сухой контакт" и 6 релейных выходов. Вход 0 по умолчанию используется для отключения всех реле модулей, а кнопки 1 — 6 для управления модулями реле.
|-
 
|}
<!--T:19-->
В примерах ориентируемся на заводские настройки параметров коммуникации модуля, Modbus-адрес — 1. Модуль подключен к первому порту контроллера Wiren Board 6.
 
 
<!--T:20-->
'''Все примеры выполняются при остановленном драйвере wb-mqtt-serial:'''
<syntaxhighlight lang="bash">service wb-mqtt-serial stop</syntaxhighlight>
 
=== Выключатели с фиксацией === <!--T:21-->
 
<!--T:22-->
Запишем в регистр 5 значение 1:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 1</syntaxhighlight>
 
<!--T:23-->
Теперь все входы модуля функционируют как входы для выключателей с фиксацией.
Недостаток: Вход 0 перестает функционировать.
 
 
<!--T:24-->
Чтобы сохранить "аварийный" режим входа 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 -t0x10 -r9 1 1 1 1 1 1</syntaxhighlight>
 
<!--T:25-->
Теперь все входы функционируют в режиме выключателей с фиксацией, а кратковременное нажатие на кнопку, подключенную ко входу 0, выключит все реле.
 
=== Отключить взаимодействие входов и реле === <!--T:26-->
 
<!--T:27-->
Для отключения взаимодействия входов и реле (например, если мы хотим управлять реле только через движок правил контроллера) запишем в регистр 5 значение 0, а в регистры 9, 10, 11, 12, 13, 14 запишем значение 3:
 
<!--T:28-->
<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>
 
<!--T:29-->
Теперь нажатия на кнопки или переключение выключателей не будет изменять состояние реле: ими можно управлять только программно, по Modbus.
При этом функция аварийного входа 0 сохраняется: кратковременное нажатие на кнопку, подключенную ко входу 0, выключит все реле.


===Mapping-матрица сначала коротких, потом длинных нажатий===
<!--T:30-->
Если мы хотим отключить и вход 0, то запишем значение 3 в регистр 16:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 3</syntaxhighlight>


{| class="wikitable"
! Регистры !!  !! colspan="8"| Выходы '''MR3-6'''
|-
!
|  || '''1''' || '''2''' || '''3''' || '''4''' || '''5''' || '''6''' || '''7''' || '''8'''
|-
!rowspan="8" |Входы
| '''1''' || 736 || 737 || 738 || 739 || 740 || 741 || 742 || 743
|-
| '''2''' || 744 || 745 || 746 || 747 || 748 || 749 || 750 || 751
|-
| '''3''' || 752 || 753 || 754 || 755 || 756 || 757 || 758 || 759
|-
| '''4''' || 760 || 761 || 762 || 763 || 764 || 765 || 766 || 767
|-
| '''5''' || 768 || 769 || 770 || 771 || 772 || 773 || 774 || 775
|-
| '''6''' || 776 || 777 || 778 || 779 || 780 || 781 || 782 || 783
|-
| '''7''' || 784 || 785 || 786 || 787 || 788 || 789 || 790 || 791
|-
| '''0''' || 792 || 793 || 794 || 795 || 796 || 797 || 798 || 799
|}


{| class="wikitable"
=== Использование Mapping-матрицы === <!--T:31-->
! Регистры !!  !! colspan="8"| Выходы '''MR2'''
Более сложные сценарии взаимодействия входов с реле можно реализовать с помощью Mapping-матрицы.
|-
Для использования Mapping-матрицы запишем в holding-регистр 5 значение 0:
!
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 0 </syntaxhighlight>
|  || '''1''' || '''2'''
А в регистры настройки взаимодействия входов/выходов — значение 4:
|-
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 4 4 4 4 4 4 </syntaxhighlight>
!rowspan="8" |Входы
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r16 4</syntaxhighlight>
| '''1''' || 736 || 737
|-
| '''2''' || 738 || 739
|-
|}


===Mapping-матрица для заднего фронта сигнала===
<!--T:32-->
В заводской поставке 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>


{| class="wikitable"
==== Вход 0 включает и выключает все реле ==== <!--T:33-->
! Регистры !!  !! colspan="8"| Выходы '''MR3-6'''
|-
!
|  || '''1''' || '''2''' || '''3''' || '''4''' || '''5''' || '''6''' || '''7''' || '''8'''
|-
!rowspan="8" |Входы
| '''1''' || 800 || 801 || 802 || 803 || 804 || 805 || 806 || 807
|-
| '''2''' || 808 || 809 || 810 || 811 || 812 || 813 || 814 || 815
|-
| '''3''' || 816 || 817 || 818 || 819 || 820 || 821 || 822 || 823
|-
| '''4''' || 824 || 825 || 826 || 827 || 828 || 829 || 830 || 831
|-
| '''5''' || 832 || 833 || 834 || 835 || 836 || 837 || 838 || 839
|-
| '''6''' || 840 || 841 || 842 || 843 || 844 || 845 || 846 || 847
|-
| '''7''' || 848 || 849 || 850 || 851 || 852 || 853 || 854 || 855
|-
| '''0''' || 856 || 857 || 858 || 859 || 860 || 861 || 862 || 863
|}


{| class="wikitable"
<!--T:34-->
! Регистры !!  !! colspan="8"| Выходы '''MR2'''
Запрограммируем матрицу таким образом, чтобы вход 0, работая в режиме кнопки (выключателя без фиксации) последовательно включал и отключал все реле модуля при замыкании.
|-
!
|  || '''1''' || '''2'''
|-
!rowspan="8" |Входы
| '''1''' || 800 || 801
|-
| '''2''' || 802 || 803
|-
|}


===Mapping-матрица для переднего фронта сигнала===
<!--T:35-->
Для этого обратимся к карте регистров mapping-матрицы и увидим, что входу 0 соответствуют регистры 440 — 447. Причем за взаимодействие со входами 1 — 6 отвечают регистры 440 — 445.


{| class="wikitable"
! Регистры !!  !! colspan="8"| Выходы '''MR3-6'''
|-
!
|  || '''1''' || '''2''' || '''3''' || '''4''' || '''5''' || '''6''' || '''7''' || '''8'''
|-
!rowspan="8" |Входы
| '''1''' || 864 || 865 || 866 || 867 || 868 || 869 || 870 || 871
|-
| '''2''' || 872 || 873 || 874 || 875 || 876 || 877 || 878 || 879
|-
| '''3''' || 880 || 881 || 882 || 883 || 884 || 885 || 886 || 887
|-
| '''4''' || 888 || 889 || 890 || 891 || 892 || 893 || 894 || 895
|-
| '''5''' || 896 || 897 || 898 || 899 || 900 || 901 || 902 || 903
|-
| '''6''' || 904 || 905 || 906 || 907 || 908 || 909 || 910 || 911
|-
| '''7''' || 912 || 913 || 914 || 915 || 916 || 917 || 918 || 919
|-
| '''0''' || 920 || 921 || 922 || 923 || 924 || 925 || 926 || 927
|}


{| class="wikitable"
<!--T:36-->
! Регистры !!  !! colspan="8"| Выходы '''MR2'''
Мы хотим, чтобы вход работал, как выключатель без фиксации и срабатывал при нажатии (по переднему фронту), а при размыкании ничего бы не происходило. При каждом нажатии состояние всех реле должно инвертироваться. Это соответствует комбинации 11 00: (12, 0x0C) — Изменить состояние выхода при замыкании:
|-
[[File:Mm_1100.png|frameless|270px]]<br>
!
Запишем в регистры 440 — 445 значение 12:
|  || '''1''' || '''2'''
|-
!rowspan="8" |Входы
| '''1''' || 864 || 865
|-
| '''2''' || 866 || 867
|-
|}


===Mapping-матрица для переднего фронта сигнала датчика протечки WB-MWAC v.2===
<!--T:37-->
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r440 12 12 12 12 12 12</syntaxhighlight>


{| class="wikitable"
<!--T:38-->
! Регистры !!  !! colspan="8"| Выходы '''MWAC v.2'''
Проверим работу: при первом замыкании входа 0 все реле включаются, при втором — все реле выключаются.
|-
!
|  || '''1''' || '''2''' || '''3''' || '''4''' || '''5''' || '''6''' || '''7''' || '''8'''
|-
!rowspan="8" |Входы
| '''1''' || 8260 || 8261 || 8262 || 8263 || 8264 || 8265 || 8266 || 8267
|-
| '''2''' || 8268 || 8269 || 8270 || 8271 || 8272 || 8273 || 8274 || 8275
|-
| '''3''' || 8276 || 8277 || 8278 || 8279 || 8280 || 8281 || 8282 || 8283
|-
| '''4''' || 8284 || 8285 || 8286 || 8287 || 8288 || 8289 || 8290 || 8291
|-
| '''5''' || 8292 || 8293 || 8294 || 8295 || 8296 || 8297 || 8298 || 8299
|-
| '''6''' || 8300 || 8301 || 8302 || 8303 || 8304 || 8305 || 8306 || 8307
|-
| '''7''' || 8308 || 8309 || 8310 || 8311 || 8312 || 8313 || 8314 || 8315
|-
| '''0''' || 8316 || 8317 || 8318 || 8319 || 8320 || 8321 || 8322 || 8323
|}


== Маппинг-матрица для управления шторами ==


Настройка действий штор для разных типов нажатий выполняется аналогичным образом, как и настройка действий для выходов.
==== Инвертированный выключатель с фиксацией ==== <!--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 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r$i 6; done</syntaxhighlight>


Значение регистра маппинг-матрицы для штор может быть следующим:
<!--T:40-->
Обратите внимание: изменение состояния реле происходят только при изменении состояния ввода.


*0 — ничего не делать;
==== Датчик протечки ==== <!--T:41-->
*1 — открыть;
*2 — закрыть;
*3 — открыть/закрыть;
*4 — остановить;
*5 — открывать, пока кнопка удерживается нажатой;
*6 — закрывать, пока кнопка удерживается нажатой;
*7 — открывать/закрывать, пока кнопка удерживается нажатой;


Действия 5, 6, 7 применимы только для продолжительных нажатий: длинного и короткого, а затем длинного.
<!--T:42-->
Пусть датчик протечки подключен ко '''входу 1''', а '''реле 1 и 2''' управляют приводами шаровых кранов. '''Реле 3''' управляет сигнальной лампой или зуммером. При смачивании датчика протечки '''реле 1 и реле 2''' замыкаются и приводы закрывают шаровые краны. '''Реле 3''' замыкается и включает зуммер. '''Вход 2''' запрограммируем для сброса тревоги и открытия шаровых кранов.


Размер маппинг-матрицы для штор - 8x4 для всех реле, в том числе для MRM2mini.
<!--T:43-->
Очистим mapping-матрицу:
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight>


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


{| class="wikitable"
<!--T:45-->
! Регистры !!  !! colspan="4"| Шторы '''MR2-6'''
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 5 4 4 4 4 4</syntaxhighlight>
|-
!
|  || '''1''' || '''2''' || '''3''' || '''4'''
|-
!rowspan="8" |Входы
| '''1''' || 1400 || 1401 || 1402 || 1403
|-
| '''2''' || 1404 || 1405 || 1406 || 1407
|-
| '''3''' || 1408 || 1409 || 1410 || 1411
|-
| '''4''' || 1412 || 1413 || 1414 || 1415
|-
| '''5''' || 1416 || 1417 || 1418 || 1419
|-
| '''6''' || 1420 || 1421 || 1422 || 1423
|-
| '''7''' || 1424 || 1425 || 1426 || 1427
|-
| '''0''' || 1428 || 1429 || 1430 || 1431
|-
|}


===Mapping-матрица штор для длинных нажатий===
<!--T:46-->
Для входа датчика протечки (вход 1) используем режим 1000 (8) — включать при замыкании. [[File:Mm_1000.png|frameless|270px]]<br> Для входа кнопки сброса (вход 2) используем режим 0100 (4) — выключить при замыкании. [[File:Mm_0100.png|frameless|270px]]<br>


{| class="wikitable"
<!--T:47-->
! Регистры !!  !! colspan="4"| Шторы '''MR2-6'''
По карте mapping-регистров определяем, что для входа 1 надо записать значение 8 в регистры 384, 385, 386, а для входа 2 — записать значение 4 в регистры 392, 393, 394:
|-
!
|  || '''1''' || '''2''' || '''3''' || '''4'''
|-
!rowspan="8" |Входы
| '''1''' || 1432 || 1433 || 1434 || 1435
|-
| '''2''' || 1436 || 1437 || 1438 || 1439
|-
| '''3''' || 1440 || 1441 || 1442 || 1443
|-
| '''4''' || 1444 || 1445 || 1446 || 1447
|-
| '''5''' || 1448 || 1449 || 1450 || 1451
|-
| '''6''' || 1452 || 1453 || 1454 || 1455
|-
| '''7''' || 1456 || 1457 || 1458 || 1459
|-
| '''0''' || 1460 || 1461 || 1462 || 1463
|-
|}


===Mapping-матрица штор для двойных нажатий===
<!--T:48-->
<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 -r392 4 4 4</syntaxhighlight>


{| class="wikitable"
! Регистры !!  !! colspan="4"| Шторы '''MR2-6'''
|-
!
|  || '''1''' || '''2''' || '''3''' || '''4'''
|-
!rowspan="8" |Входы
| '''1''' || 1464 || 1465 || 1466 || 1467
|-
| '''2''' || 1468 || 1469 || 1470 || 1471
|-
| '''3''' || 1472 || 1473 || 1474 || 1475
|-
| '''4''' || 1476 || 1477 || 1478 || 1479
|-
| '''5''' || 1480 || 1481 || 1482 || 1483
|-
| '''6''' || 1484 || 1485 || 1486 || 1487
|-
| '''7''' || 1488 || 1489 || 1490 || 1491
|-
| '''0''' || 1492 || 1493 || 1494 || 1495
|-
|}


===Mapping-матрица штор для сначала коротких, потом длинных нажатий===
<!--T:49-->
Проверка: замкнем вход 1 и iGND и оставим его замкнутым. Должны включиться реле 1, 2 и 3. Затем замкнем и разомкнем вход 2 — все три реле реле выключились. Ждем 20 минут. Поскольку вход 1 остается замкнутым (протечка не устранена), через 20 минут реле 1, 2 и 3 снова включатся.


{| class="wikitable"
<!--T:50-->
! Регистры !!  !! colspan="4"| Шторы '''MR2-6'''
Оставляя вход 1 замкнутым, выключим и включим питание реле: через 20 минут реле 1, 2 и 3 снова включатся.
|-
</translate>
!
|  || '''1''' || '''2''' || '''3''' || '''4'''
|-
!rowspan="8" |Входы
| '''1''' || 1496 || 1497 || 1498 || 1499
|-
| '''2''' || 1500 || 1501 || 1502 || 1503
|-
| '''3''' || 1504 || 1505 || 1506 || 1507
|-
| '''4''' || 1508 || 1509 || 1510 || 1511
|-
| '''5''' || 1512 || 1513 || 1514 || 1515
|-
| '''6''' || 1516 || 1517 || 1518 || 1519
|-
| '''7''' || 1520 || 1521 || 1522 || 1523
|-
| '''0''' || 1524 || 1525 || 1526 || 1527
|-
|}

Версия 17:33, 8 августа 2019

Другие языки:


Модуль учета водопотребления и контроля протечек WB-MWAC


Назначение

Начиная с версии 1.9.0 для устройств серии WB-MR и WB-MWAC в прошивке реализована поддержка матрицы отображения значений входов на значения выходов. Данная дополнительная функциональность позволяет максимально гибко настраивать реакцию конкретных выходов устройства в зависимости от состояния его входов.


Устройство и принцип работы mapping-матрицы

Матрица действий над выходами по изменению состояний входов (mapping-матрица) находится в регистрах хранения устройства, начиная с адреса 384, и содержит 64 регистра из расчета 8 входов / 8 выходов. В каждом регистре записано одно из числовых значений, которыми кодируется взаимодействие одного из входов с одним из выходов.

Строки описывают действия при изменении соответствующего входа, столбцы — соответствующие выходы. Таким образом в ячейке на пересечении сроки входа и столбца выхода содержится значение, задающее работу выхода при изменении соответствующего входа. Действие описывается значением младших четырех бит шестнадцатибитного слова 0b0000 0000 0000 yyxx, хранящегося в регистре. Биты yy описывают действия при переходе значения входа из 0 в 1 (передний фронт), а биты xx — из 1 в 0 (задний фронт).

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

  • 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 Выключатель с фиксацией. Реле повторяет состояние входа, в момент переключения входа происходит событие которое меняет состояние реле. Если позже реле будет переключено Modbus-командой, то состояние входа не будет влиять на реле до следующего переключения. В момент включения модуля состояние входа не учитывается: если на входе будет замкнутое состояние, то реле не будет включено во избежание не желательного включения (например, когда вечером свет был выключен командой с контроллера, выключатель остался включенным, ночью пропадало питание, модуль перезагрузился, но свет при этом не включится).
2 Отключать все реле при нажатии (по умолчанию такой режим имеет вход 0) с прошивки 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 0

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

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