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

 
(не показано 56 промежуточных версий 11 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE: I/O Mapping Matrix}}
{{DISPLAYTITLE:Настройка взаимодействия входов и выходов модулей WB-MR с помощью Mapping-матриц}}
'''СТАТЬЯ В ПРОЦЕССЕ РЕДАКТИРОВАНИЯ'''
== Общие сведения ==
[[File:WB-MWAC-FRONT.png|300px|thumb|right| Модуль учета водопотребления и контроля протечек WB-MWAC]]
[[Image: mapping-example.png |250px|thumb|right| Представление mapping-матрицы в виде таблицы ]]
[[Image: wb press events.png |250px|thumb|right| Временные диаграммы типов нажатий ]]
В релейных модулях WB-MR каждый из входов можно назначить для управления любым выходом с помощью шести управляющих событий. Логика управления записывается в память модуля WB-MR и не задействует ресурсы контроллера.


Настройка делается через mapping-матрицы — это набор регистров в памяти модуля. Для простоты мы представим mapping-матрицу в виде таблицы, где в строках будут входы, в столбцах — выходы, а на пересечении — действие.


=== Назначение ===
Возможные события, сгруппированные по типам:
Начиная с версии '''1.9.0''' для устройств серии '''WB-MR''' и [[WB-MWAC]] в прошивке реализована поддержка матрицы отображения значений входов на значения выходов. Данная дополнительная функциональность позволяет максимально гибко настраивать реакцию конкретных выходов устройства в зависимости от состояния его входов.
# Фронт сигнала:
#* передний;
#* задний.
# Нажатие на кнопку, подключённую к входу:
#* короткое;
#* длинное;
#* двойное;
#* сначала короткое, затем длинное.  


Для каждого типа события существует своя таблица, где прописано взаимодействие выходов и входов.


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


Строки описывают действия при изменении соответствующего входа, столбцы — соответствующие выходы.
Активируйте флажок '''Режим работы''' и выберите из выпадающего списка один из режимов:
Таким образом в ячейке на пересечении сроки входа и столбца выхода содержится значение, задающее работу выхода при изменении соответствующего входа.
* ''Управлять по mapping-матрице'', чтобы настроить матрицы для управления по фронтам. Используется [[Mapping_matrix_legacy |старый вариант маппинг-матрицы]].
Действие описывается значением младших четырех бит шестнадцатибитного слова '''0b0000 0000 0000 yyxx''', хранящегося в регистре.
* ''Управлять по mapping-матрице для кнопок'', для распознавания нажатий кнопок.  
Биты '''yy''' описывают действия при переходе значения входа из 0 в 1 (передний фронт), а биты '''xx''' — из 1 в 0 (задний фронт).


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


*00 — ничего не делать
<gallery mode="packed" heights="200px" caption="Управлять по mapping-матрице для кнопок">
*01 — выключить
Image: Mapping-button-1.png |
*10 — включить
Image: Mapping-button-2.png |
*11 — инвертировать значение
</gallery>


Таким образом, можно запрограммировать реакцию каждого выхода на замыкание и размыкание любых входов.
==Настройка через запись в Modbus-регистры==
<!--
{{note|note|Перед настройкой проверьте, что прошивка модуля на ниже 1.19.0. Если у вас старая версия прошивки, обновите её на свежую или используйте [[Mapping_matrix_legacy |старый вариант mapping-матрицы]].}}
=== Как настраивать ===
{| class="wikitable"
Если у вас нет контроллера [[Wiren Board]], вы можете настроить mapping-матрицы через запись значений в регистры, подробнее в статье [[Working_with_WB_devices_without_a_controller | Работа с Modbus-устройствами Wiren Board без контроллера]].
! !!  !! ! colspan="4" |Задний фронт
 
Общий алгоритм настройки:
# Подключите модуль к компьютеру через преобразователь USB—RS485.
# Задайте режим работы входа в регистрах 9-15:
#* 4 — управлять по mapping-матрице по фронтам.
#* 6 — управлять по mapping-матрице для кнопок.
# Запишите в регистры mapping-матрицы для выбранного типа события одно из действий:
#*0 — ничего не делать;
#*1 — выключить;
#*2 — включить;
#*3 — инвертировать значение.
 
Если в устройстве количество входов и/или выходов меньше 8, то адреса регистров '''не''' меняются — просто строки/столбцы для отсутствующих регистров не учитываются. Исключение — устройства с 2 входами и выходами.
 
Ниже вы найдёте таблицы регистров для каждого типа событий, а подробное описание всех регистров модулей реле по ссылке [[Relay_Module_Modbus_Management | Modbus-регистры WB-MR]].
 
===Mapping-матрица коротких нажатий===
 
{| class="wikitable"  
! Регистры !!  !! colspan="8"| Выходы '''MR3-6'''
|-
|-
!  
!  
|  || 00 || 01 || 10 || 11
|  || '''1''' || '''2''' || '''3''' || '''4''' || '''5''' || '''6''' || '''7''' || '''8'''
|-
!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>фронт
| '''5''' || 576 || 577 || 578 || 579 || 580 || 581 || 582 || 583
| 00
| 0000 (0) — Вход отключен, не управляет выходами
| 0001 (1)— Выключить при размыкании
| 0010 (2) — Включить при размыкании
| 0011 (3) — Изменить состояние выхода при размыкании
|-
|-
| 01
| '''6''' || 584 || 585 || 586 || 587 || 588 || 589 || 590 || 591
| 0100 (4) — Выключить при замыкании
| 0101 (5)— Всегда выключать
| 0110 (6) — Работать как инвертированный выключатель с фиксацией
| 0111 (7) — Выключить при размыкании, потом изменять состояние при переключении
|-
|-
| 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
|}
|}


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


== Предыдущая версия настройки взаимодействия входов и выходов релейных модулей ==
{| class="wikitable"
! Регистры !!  !! colspan="8"| Выходы '''MR2'''
|-
!
|  || '''1''' || '''2'''
|-
!rowspan="8" |Входы
| '''1''' || 608 || 609
|-
| '''2''' || 610 || 611
|-
|}


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


Регистры могут содержать следующие управляющие значения:
{| class="wikitable"  
 
! Регистры !! !! 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
|-
|-
| 0 || Кнопки без фиксации ||
| '''3''' || 688 || 689 || 690 || 691 || 692 || 693 || 694 || 695
|-
|-
| 1 || Выключатель с фиксацией ||
| '''4''' || 696 || 697 || 698 || 699 || 700 || 701 || 702 || 703
|-
|-
| 2 || Отключать все реле при нажатии || с прошивки 1.9.0
| '''5''' || 704 || 705 || 706 || 707 || 708 || 709 || 710 || 711
|-
|-
| 3 || Отключить взаимодействие входов и выходов ||
| '''6''' || 712 || 713 || 714 || 715 || 716 || 717 || 718 || 719
|-
|-
| 4 || Управлять в соответствии с Mapping-матрицей || с прошивки 1.9.0
| '''7''' || 720 || 721 || 722 || 723 || 724 || 725 || 726 || 727
|-
|-
| 5 || Управлять в соответствии с Mapping-матрицей, <br>через 20 минут повторно имитировать состояние ввода || с прошивки 1.9.0
| '''0''' || 728 || 729 || 730 || 731 || 732 || 733 || 734 || 735
|}
|}


Настройка управления режима отдельных входов возможно, только если в holding-регистре 5 записано значение 0. В последних прошивках в заводской поставке все регистры режима входов содержат 0, кроме регистра 16 — в нем записано значение 2, что обеспечивает работу входа 0 как "аварийного" — при нажатии на кнопку без фиксации, подсоединенную к этому входу, все реле выключатся. Повторное нажатие оставит все реле выключенными.
{| class="wikitable"
! Регистры !!  !! colspan="8"| Выходы '''MR2'''
|-
!
| || '''1''' || '''2'''
|-
!rowspan="8" |Входы
| '''1''' || 672 || 673
|-
| '''2''' || 674 || 675
|-
|}


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


== Примеры программирования взаимодействия входов и выходов ==
{| 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
|}


Рассмотрим несколько примеров программирования программирования взаимодействия входов и выходов на примере релейного модуля WB-MR6C с прошивкой 1.9.4. Модуль имеет 7 входов типа "сухой контакт" и 6 релейных выходов. Вход 0 по умолчанию используется для отключения всех реле модулей, а кнопки 1 — 6 для управления модулями реле.
{| class="wikitable"
! Регистры !!  !! colspan="8"| Выходы '''MR2'''
|-
!
|  || '''1''' || '''2'''
|-
!rowspan="8" |Входы
| '''1''' || 736 || 737
|-
| '''2''' || 738 || 739
|-
|}


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


{| class="wikitable"
! Регистры !!  !! 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
|}


'''Все примеры выполняются при остановленном драйвере wb-mqtt-serial:'''
{| class="wikitable"
<syntaxhighlight lang="bash">service wb-mqtt-serial stop</syntaxhighlight>
! Регистры !!  !! colspan="8"| Выходы '''MR2'''
|-
!
|  || '''1''' || '''2'''  
|-
!rowspan="8" |Входы
| '''1''' || 800 || 801
|-
| '''2''' || 802 || 803
|-
|}


=== Выключатели с фиксацией ===
===Mapping-матрица для переднего фронта сигнала===


Запишем в регистр 5 значение 1:
{| class="wikitable"
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 1</syntaxhighlight>
! Регистры !!  !! 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"
Недостаток: Вход 0 перестает функционировать.
! Регистры !!  !! colspan="8"| Выходы '''MR2'''
|-
!
|  || '''1''' || '''2'''
|-
!rowspan="8" |Входы
| '''1''' || 864 || 865
|-
| '''2''' || 866 || 867
|-
|}


===Mapping-матрица для переднего фронта сигнала датчика протечки WB-MWAC v.2===


Чтобы сохранить "аварийный" режим входа 0 вернем в регистр 5 значение 0, а в регистры 9, 10, 11, 12, 13, 14 запишем 1:
{| class="wikitable"  
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 0</syntaxhighlight>
! Регистры !!  !! colspan="8"| Выходы '''MWAC v.2'''
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 1 1 1 1 1 1</syntaxhighlight>
|-
!
|  || '''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
|}


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


=== Отключить взаимодействие входов и реле ===
Настройка действий штор для разных типов нажатий выполняется аналогичным образом, как и настройка действий для выходов.


Для отключения взаимодействия входов и реле (например, если мы хотим управлять реле только через движок правил контроллера) запишем в регистр 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>
*0 — ничего не делать;
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 3 3 3 3 3 3</syntaxhighlight>
*1 — открыть;
*2 — закрыть;
*3 — открыть/закрыть;
*4 — остановить;
*5 — открывать, пока кнопка удерживается нажатой;
*6 — закрывать, пока кнопка удерживается нажатой;
*7 — открывать/закрывать, пока кнопка удерживается нажатой;


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


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


===Mapping-матрица штор для коротких нажатий===


=== Использование Mapping-матрицы ===
{| class="wikitable"
Более сложные сценарии взаимодействия входов с реле можно реализовать с помощью Mapping-матрицы.
! Регистры !!  !! colspan="4"| Шторы '''MR2-6'''
Для использования Mapping-матрицы запишем в holding-регистр 5 значение 0:
|-
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 4 </syntaxhighlight>
!
А в регистры настройки взаимодействия входов/выходов — значение 4:
|  || '''1''' || '''2''' || '''3''' || '''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 -t0x06 -r16 4</syntaxhighlight>
!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-матрица заполнена нулями. Если вы не уверены в этом и хотите стереть всю матрицу, запишите 0 в каждый из 64 holding-регистров, начиная с 384:
===Mapping-матрица штор для длинных нажатий===
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight>


==== Вход 0 включает и выключает все реле ====
{| class="wikitable"
! Регистры !!  !! colspan="4"| Шторы '''MR2-6'''
|-
!
|  || '''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
|-
|}


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


Для этого обратимся к карте регистров mapping-матрицы и увидим, что входу 0 соответствуют регистры 440 — 447. Причем за взаимодействие со входами 1 6 отвечают регистры 440 — 445.
{| 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-матрица штор для сначала коротких, потом длинных нажатий===


Мы хотим, чтобы вход работал, как выключатель без фиксации и срабатывал при нажатии (по переднему фронту), а при размыкании ничего бы не происходило. При каждом нажатии состояние всех реле должно инвертироваться. Это соответствует комбинации 11 00: (12, 0x0C) — Изменить состояние выхода при замыкании:
{| class="wikitable"
[[File:Mm_1100.png|frameless|270px]]<br>
! Регистры !!  !! colspan="4"| Шторы '''MR2-6'''
Запишем в регистры 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>
|  || '''1''' || '''2''' || '''3''' || '''4'''
 
|-
Проверим работу: при первом замыкании входа 0 все реле включаются, при втором — все реле выключаются.
!rowspan="8" |Входы
 
| '''1''' || 1496 || 1497 || 1498 || 1499
 
|-
==== Инвертированный выключатель с фиксацией ====
| '''2''' || 1500 || 1501 || 1502 || 1503
Настроим входы таким образом, чтобы при замкнутых входах реле были бы выключены, а при разомкнутых -- включены.
|-
Для этого при замыкании входа (передний фронт) соответствующий выход должен выключаться (01), а при размыкании входа (задний фронт) — включаться (10). Это соответствует значению 6: [[File:Mm_0110.png|frameless|270px]]<br>
| '''3''' || 1504 || 1505 || 1506 || 1507
В матрице нужные регистры взаимодействия вход 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>
| '''4''' || 1508 || 1509 || 1510 || 1511
 
|-
Обратите внимание: изменение состояния реле происходят только при изменении состояния ввода.
| '''5''' || 1512 || 1513 || 1514 || 1515
 
|-
==== Датчик протечки ====
| '''6''' || 1516 || 1517 || 1518 || 1519
 
|-
Пусть датчик протечки подключен ко '''входу 1''', а '''реле 1 и 2''' управляют приводами шаровых кранов. '''Реле 3''' управляет сигнальной лампой или зуммером. При смачивании датчика протечки '''реле 1 и реле 2''' замыкаются и приводы закрывают шаровые краны. '''Реле 3''' замыкается и включает зуммер. '''Вход 2''' запрограммируем для сброса тревоги и открытия шаровых кранов.
| '''7''' || 1520 || 1521 || 1522 || 1523
 
|-
Очистим mapping-матрицу:
| '''0''' || 1524 || 1525 || 1526 || 1527
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r384 $(printf ' 0%.0s' {1..64})</syntaxhighlight>
|-
 
|}
Применим в нашем случае режим, когда состояние входа повторяется каждые 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>
 
Для входа датчика протечки (вход 1) используем режим 1000 (8) — включать при замыкании. [[File:Mm_1000.png|frameless|270px]]<br> Для входа кнопки сброса (вход 2) используем режим 0100 (4) — выключить при замыкании. [[File:Mm_0100.png|frameless|270px]]<br>
 
По карте 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 -r392 4 4 4</syntaxhighlight>
 
 
Проверка: замкнем вход 1 и iGND и оставим его замкнутым. Должны включиться реле 1, 2 и 3. Затем замкнем и разомкнем вход 2 — все три реле реле выключились. Ждем 20 минут. Поскольку вход 1 остается замкнутым (протечка не устранена), через 20 минут реле 1, 2 и 3 снова включатся.
 
Оставляя вход 1 замкнутым, выключим и включим питание реле: через 20 минут реле 1, 2 и 3 снова включатся.
wb_editors
265

правок