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

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


<!--T:2-->
Настройка делается через mapping-матрицы — это набор регистров в памяти модуля. Для простоты мы представим mapping-матрицу в виде таблицы, где в строках будут входы, в столбцах — выходы, а на пересечении — действие.
[[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-матрица) находится в регистрах хранения устройства, начиная с адреса 384, и содержит 64 регистра из расчета 8 входов / 8 выходов.
* ''Управлять по mapping-матрице'', чтобы настроить матрицы для управления по фронтам. Используется [[Mapping_matrix_legacy |старый вариант маппинг-матрицы]].
В каждом регистре записано одно из числовых значений, которыми кодируется взаимодействие одного из входов с одним из выходов.
* ''Управлять по mapping-матрице для кнопок'', для распознавания нажатий кнопок.  


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


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


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


<!--T:8-->
Общий алгоритм настройки:
Таким образом, можно запрограммировать реакцию каждого выхода на замыкание и размыкание любых входов.
# Подключите модуль к компьютеру через преобразователь USB—RS485.
<!--
# Задайте режим работы входа в регистрах 9-15:
#* 4 — управлять по mapping-матрице по фронтам.
{| class="wikitable"
#* 6 — управлять по mapping-матрице для кнопок.
! !!  !! ! colspan="4" |Задний фронт
# Запишите в регистры 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
|-
|-
! rowspan="4"|Передний<br>фронт
| '''4''' || 568 || 569 || 570 || 571 || 572 || 573 || 574 || 575
| 00
| 0000 (0) — Вход отключен, не управляет выходами
| 0001 (1)— Выключить при размыкании
| 0010 (2) — Включить при размыкании
| 0011 (3) — Изменить состояние выхода при размыкании
|-
|-
| 01
| '''5''' || 576 || 577 || 578 || 579 || 580 || 581 || 582 || 583
| 0100 (4) — Выключить при замыкании
| 0101 (5)— Всегда выключать
| 0110 (6) — Работать как инвертированный выключатель с фиксацией
| 0111 (7) — Выключить при размыкании, потом изменять состояние при переключении
|-
|-
| 10 || 1000 (8) — Включить при замыкании || 1001 (9) — Работать как выключатель с фиксацией (повторять вход) || 1010 (10, 0x0A)— Всегда включать || 1011 (11, 0x0B) — Включить, потом изменять состояние при размыкании
| '''6''' || 584 || 585 || 586 || 587 || 588 || 589 || 590 || 591
|-
|-
| 11 || 1100 (12, 0x0C) — Изменить состояние выхода при замыкании (выключатель без фиксации) || 1101 (13, 0x0D) — Изменить состояние, потом выключить при размыкании || 1110 (14, 0x0E) — Изменить состояние, потом включить при размыкании || 1111 (15, 0x0F)— Изменить состояние при замыкании и вернуться к исходному состоянию при размыкании
| '''7''' || 592 || 593 || 594 || 595 || 596 || 597 || 598 || 599
|-
| '''0''' || 600 || 601 || 602 || 603 || 604 || 605 || 606 || 607
|}
|}


<!--T:9-->
-->
{| 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-матрицы == <!--T:10-->
===Mapping-матрица длинных нажатий===
{| class="wikitable"
 
! Регистры !!  !! colspan="8"| Выходы  
{| class="wikitable"  
! Регистры !!  !! colspan="8"| Выходы '''MR3-6'''
|-
|-
!  
!  
Строка 101: Строка 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
|}
|}


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


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


<!--T:13-->
{| class="wikitable"  
Регистры могут содержать следующие управляющие значения:
! Регистры !! !! colspan="8"| Выходы '''MR3-6'''
 
|-
<!--T:14-->
!
{| 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 || Выключатель с фиксацией. Реле повторяет состояние входа, в момент переключения входа происходит событие которое меняет состояние реле. Если позже реле будет переключено Modbus-командой, то состояние входа не будет влиять на реле до следующего переключения. В момент включения модуля состояние входа не учитывается: если на входе будет замкнутое состояние, то реле не будет включено во избежание не желательного включения (например, когда вечером свет был выключен командой с контроллера, выключатель остался включенным, ночью пропадало питание, модуль перезагрузился, но свет при этом не включится). ||
| '''4''' || 696 || 697 || 698 || 699 || 700 || 701 || 702 || 703
|-
|-
| 2 || Отключать все реле при нажатии (по умолчанию такой режим имеет вход 0) || с прошивки 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
|}
|}


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


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


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


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


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


{| 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
|}


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


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


<!--T:22-->
{| class="wikitable"
Запишем в регистр 5 значение 1:
! Регистры !!  !! colspan="8"| Выходы '''MR3-6'''
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 1</syntaxhighlight>
|-
!
|  || '''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
|}


<!--T:23-->
{| class="wikitable"
Теперь все входы модуля функционируют как входы для выключателей с фиксацией.
! Регистры !!  !! colspan="8"| Выходы '''MR2'''
Недостаток: Вход 0 перестает функционировать.
|-
!
|  || '''1''' || '''2'''
|-
!rowspan="8" |Входы
| '''1''' || 864 || 865
|-
| '''2''' || 866 || 867
|-
|}


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


<!--T:24-->
{| class="wikitable"  
Чтобы сохранить "аварийный" режим входа 0 вернем в регистр 5 значение 0, а в регистры 9, 10, 11, 12, 13, 14 запишем 1:
! Регистры !!  !! colspan="8"| Выходы '''MWAC v.2'''
<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>
!
|  || '''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:25-->
== Маппинг-матрица для управления шторами ==
Теперь все входы функционируют в режиме выключателей с фиксацией, а кратковременное нажатие на кнопку, подключенную ко входу 0, выключит все реле.


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


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


<!--T:28-->
*0 — ничего не делать;
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r5 0</syntaxhighlight>
*1 — открыть;
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 3 3 3 3 3 3</syntaxhighlight>
*2 — закрыть;
*3 — открыть/закрыть;
*4 — остановить;
*5 — открывать, пока кнопка удерживается нажатой;
*6 — закрывать, пока кнопка удерживается нажатой;
*7 — открывать/закрывать, пока кнопка удерживается нажатой;


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


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


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


=== Использование Mapping-матрицы === <!--T:31-->
{| 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 0 </syntaxhighlight>
!
А в регистры настройки взаимодействия входов/выходов — значение 4:
|  || '''1''' || '''2''' || '''3''' || '''4'''
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x10 -r9 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
|-
|}


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


==== Вход 0 включает и выключает все реле ==== <!--T:33-->
{| 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
|-
|}


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


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

Текущая версия на 15:54, 19 марта 2024

Общие сведения

Представление mapping-матрицы в виде таблицы
Временные диаграммы типов нажатий

В релейных модулях WB-MR каждый из входов можно назначить для управления любым выходом с помощью шести управляющих событий. Логика управления записывается в память модуля WB-MR и не задействует ресурсы контроллера.

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

Возможные события, сгруппированные по типам:

  1. Фронт сигнала:
    • передний;
    • задний.
  2. Нажатие на кнопку, подключённую к входу:
    • короткое;
    • длинное;
    • двойное;
    • сначала короткое, затем длинное.

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

Настройка в веб-интерфейсе контроллера Wiren Board

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

Активируйте флажок Режим работы и выберите из выпадающего списка один из режимов:

  • Управлять по mapping-матрице, чтобы настроить матрицы для управления по фронтам. Используется старый вариант маппинг-матрицы.
  • Управлять по mapping-матрице для кнопок, для распознавания нажатий кнопок.

Настройка через запись в Modbus-регистры

Перед настройкой проверьте, что прошивка модуля на ниже 1.19.0. Если у вас старая версия прошивки, обновите её на свежую или используйте старый вариант mapping-матрицы.

Как настраивать

Если у вас нет контроллера Wiren Board, вы можете настроить mapping-матрицы через запись значений в регистры, подробнее в статье Работа с Modbus-устройствами Wiren Board без контроллера.

Общий алгоритм настройки:

  1. Подключите модуль к компьютеру через преобразователь USB—RS485.
  2. Задайте режим работы входа в регистрах 9-15:
    • 4 — управлять по mapping-матрице по фронтам.
    • 6 — управлять по mapping-матрице для кнопок.
  3. Запишите в регистры mapping-матрицы для выбранного типа события одно из действий:
    • 0 — ничего не делать;
    • 1 — выключить;
    • 2 — включить;
    • 3 — инвертировать значение.

Если в устройстве количество входов и/или выходов меньше 8, то адреса регистров не меняются — просто строки/столбцы для отсутствующих регистров не учитываются. Исключение — устройства с 2 входами и выходами.

Ниже вы найдёте таблицы регистров для каждого типа событий, а подробное описание всех регистров модулей реле по ссылке Modbus-регистры WB-MR.

Mapping-матрица коротких нажатий

Регистры Выходы MR3-6
1 2 3 4 5 6 7 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
5 576 577 578 579 580 581 582 583
6 584 585 586 587 588 589 590 591
7 592 593 594 595 596 597 598 599
0 600 601 602 603 604 605 606 607
Регистры Выходы MR2
1 2
Входы 1 544 545
2 546 547

Mapping-матрица длинных нажатий

Регистры Выходы MR3-6
1 2 3 4 5 6 7 8
Входы 1 608 609 610 611 612 613 614 615
2 616 617 618 619 620 621 622 623
3 624 625 626 627 628 629 630 631
4 632 633 634 635 636 637 638 639
5 640 641 642 643 644 645 646 647
6 648 649 650 651 652 653 654 655
7 656 657 658 659 660 661 662 663
0 664 665 666 667 668 669 670 671
Регистры Выходы MR2
1 2
Входы 1 608 609
2 610 611

Mapping-матрица двойных нажатий

Регистры Выходы MR3-6
1 2 3 4 5 6 7 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
4 696 697 698 699 700 701 702 703
5 704 705 706 707 708 709 710 711
6 712 713 714 715 716 717 718 719
7 720 721 722 723 724 725 726 727
0 728 729 730 731 732 733 734 735
Регистры Выходы MR2
1 2
Входы 1 672 673
2 674 675

Mapping-матрица сначала коротких, потом длинных нажатий

Регистры Выходы MR3-6
1 2 3 4 5 6 7 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
Регистры Выходы MR2
1 2
Входы 1 736 737
2 738 739

Mapping-матрица для заднего фронта сигнала

Регистры Выходы MR3-6
1 2 3 4 5 6 7 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
Регистры Выходы MR2
1 2
Входы 1 800 801
2 802 803

Mapping-матрица для переднего фронта сигнала

Регистры Выходы MR3-6
1 2 3 4 5 6 7 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
Регистры Выходы MR2
1 2
Входы 1 864 865
2 866 867

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

Регистры Выходы MWAC v.2
1 2 3 4 5 6 7 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 — ничего не делать;
  • 1 — открыть;
  • 2 — закрыть;
  • 3 — открыть/закрыть;
  • 4 — остановить;
  • 5 — открывать, пока кнопка удерживается нажатой;
  • 6 — закрывать, пока кнопка удерживается нажатой;
  • 7 — открывать/закрывать, пока кнопка удерживается нажатой;

Действия 5, 6, 7 применимы только для продолжительных нажатий: длинного и короткого, а затем длинного.

Размер маппинг-матрицы для штор - 8x4 для всех реле, в том числе для MRM2mini.

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

Регистры Шторы MR2-6
1 2 3 4
Входы 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-матрица штор для длинных нажатий

Регистры Шторы MR2-6
1 2 3 4
Входы 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-матрица штор для двойных нажатий

Регистры Шторы MR2-6
1 2 3 4
Входы 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-матрица штор для сначала коротких, потом длинных нажатий

Регистры Шторы MR2-6
1 2 3 4
Входы 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