Relay Module Modbus Management: различия между версиями

Отметить эту версию для перевода
м
(Отметить эту версию для перевода)
Строка 1: Строка 1:
<languages/>
<languages/>
<translate>
<translate>
<!--T:1-->
{{DISPLAYTITLE:Управление модулями реле Wirenboard по протоколу Modbus}}
{{DISPLAYTITLE:Управление модулями реле Wirenboard по протоколу Modbus}}


== Параметры Modbus ==
== Параметры Modbus == <!--T:2-->


=== Modbus-адрес ===
=== Modbus-адрес === <!--T:3-->
[[Файл:modbus_address_mr14.png|150px|thumb|left|Modbus-адрес, установленный на производстве]]
[[Файл:modbus_address_mr14.png|150px|thumb|left|Modbus-адрес, установленный на производстве]]
Modbus-адрес устройств Wiren Board легко определить — он нанесен на наклейке (адрес указан в десятичном формате). Новый адрес устройства записывается командой WRITE_SINGLE_REGISTER в регистр хранения (holding register) с адресом 128 (0x80). Подробно о том, как определить или изменить Modbus-адрес модуля, написано на странице [[Определение и изменение Modbus-адреса устройств Wirenboard]].
Modbus-адрес устройств Wiren Board легко определить — он нанесен на наклейке (адрес указан в десятичном формате). Новый адрес устройства записывается командой WRITE_SINGLE_REGISTER в регистр хранения (holding register) с адресом 128 (0x80). Подробно о том, как определить или изменить Modbus-адрес модуля, написано на странице [[Определение и изменение Modbus-адреса устройств Wirenboard]].


=== Команды Modbus, поддерживаемые устройством ===
=== Команды Modbus, поддерживаемые устройством === <!--T:4-->


<!--T:5-->
Релейные модули Wirenboard поддерживают все основные команды Modbus. Подробнее смотрите здесь: [[Протокол Modbus#Коды функций чтения и записи регистров|Коды функций чтения и записи регистров]].
Релейные модули Wirenboard поддерживают все основные команды Modbus. Подробнее смотрите здесь: [[Протокол Modbus#Коды функций чтения и записи регистров|Коды функций чтения и записи регистров]].


=== Безопасный режим ===
=== Безопасный режим === <!--T:6-->
В этом режиме при прекращении обмена данными по Modbus устройство отключает реле по прошествии заданного времени.  
В этом режиме при прекращении обмена данными по Modbus устройство отключает реле по прошествии заданного времени.  


<!--T:7-->
Для включения безопасного режима (Safety timer) нужно записать значение, отличное от 0, в регистр хранения командой WRITE_SINGLE_REGISTER по адресу 8. Это значение &mdash; таймаут в секундах. Значение "0" отключает безопасный режим.
Для включения безопасного режима (Safety timer) нужно записать значение, отличное от 0, в регистр хранения командой WRITE_SINGLE_REGISTER по адресу 8. Это значение &mdash; таймаут в секундах. Значение "0" отключает безопасный режим.


=== Режим работы реле в случае отключении питания ===
=== Режим работы реле в случае отключении питания === <!--T:8-->


<!--T:9-->
В последних версиях прошивки (начина с 1.5.3) для устройств WB-MR появилась возможность запоминать состояние выхода при отключении питания. Режим контролируется Modbus-регистром 6. Если в регистре записано значение '0', то состояние выходов не сохраниться и при подаче питания все реле буду выключены. Если в регистре записана единица, то после возобновления питания все включенные до аварии реле включатся снова.
В последних версиях прошивки (начина с 1.5.3) для устройств WB-MR появилась возможность запоминать состояние выхода при отключении питания. Режим контролируется Modbus-регистром 6. Если в регистре записано значение '0', то состояние выходов не сохраниться и при подаче питания все реле буду выключены. Если в регистре записана единица, то после возобновления питания все включенные до аварии реле включатся снова.


=== Цифровые входы  ===
=== Цифровые входы  === <!--T:10-->
Состояние входа можно получить чтением регистров Discrete Inputs 0—'''x''' (где x = '''(количество управляемых каналов - 1)'''). Если вход соединён с GND, значение регистра равно 1, если не соединён - 0.
Состояние входа можно получить чтением регистров Discrete Inputs 0—'''x''' (где x = '''(количество управляемых каналов - 1)'''). Если вход соединён с GND, значение регистра равно 1, если не соединён - 0.


=== Режимы взаимодействия цифровых входов с релейными выходами  ===
=== Режимы взаимодействия цифровых входов с релейными выходами  === <!--T:11-->


<!--T:12-->
В релейном модуле можно включить прямое управление релейными выходами с цифровых входов. Есть несколько вариантов такого управления:
В релейном модуле можно включить прямое управление релейными выходами с цифровых входов. Есть несколько вариантов такого управления:
* Простые:
* Простые:
Строка 35: Строка 40:
** Mapping-матрица (смотрите подробное описание ниже)
** Mapping-матрица (смотрите подробное описание ниже)


<!--T:13-->
Режим можно установить отдельно для каждого канала. Для этого в регистре 5 должно находиться значение "0", а режим для каждого канала записывается в регистры хранения, начиная с адреса 9 для первого канала и т.д.
Режим можно установить отдельно для каждого канала. Для этого в регистре 5 должно находиться значение "0", а режим для каждого канала записывается в регистры хранения, начиная с адреса 9 для первого канала и т.д.


<!--T:14-->
Есть устаревший способ - установка режима для всех каналов одновременно. Для этого запишите соответствующее число в регистр хранения с адресом 5.
Есть устаревший способ - установка режима для всех каналов одновременно. Для этого запишите соответствующее число в регистр хранения с адресом 5.


==== Mapping-матрица ====
==== Mapping-матрица ==== <!--T:15-->


<!--T:16-->
Начиная с прошивки 1.9.0 для отдельных каналов предусмотрен также '''режим 2''' -- отключить все выходы, и '''режимы работы (4 и 5)''' в соответствии с mappig-матрицей (смотри далее). В этой и более поздних версиях прошивок в модулях реализована возможность более гибкой настройки взаимодействия входов и выходов релейных модулей при помощи специальной mapping-матрицы: таблицы, в которой для каждого входа при изменении его состояния кодируется изменение состояние любого релейного выхода. Подробное описание можно найти в статье [[I/O_Mapping_Matrix]].
Начиная с прошивки 1.9.0 для отдельных каналов предусмотрен также '''режим 2''' -- отключить все выходы, и '''режимы работы (4 и 5)''' в соответствии с mappig-матрицей (смотри далее). В этой и более поздних версиях прошивок в модулях реализована возможность более гибкой настройки взаимодействия входов и выходов релейных модулей при помощи специальной mapping-матрицы: таблицы, в которой для каждого входа при изменении его состояния кодируется изменение состояние любого релейного выхода. Подробное описание можно найти в статье [[I/O_Mapping_Matrix]].


=== Карта регистров модулей реле ===
=== Карта регистров модулей реле === <!--T:17-->
В таблице:
В таблице:
* '''x''' — количество релейных выходов;  
* '''x''' — количество релейных выходов;  
Строка 49: Строка 57:
(для модулей WB-MRM2 карту регистров смотрите на странице описания [[WB-MRM2|этого модуля]])
(для модулей WB-MRM2 карту регистров смотрите на странице описания [[WB-MRM2|этого модуля]])


<!--T:18-->
{|  border="1" class="wikitable" style="text-align:center; width:1000px;"
{|  border="1" class="wikitable" style="text-align:center; width:1000px;"
!Регистр / адрес
!Регистр / адрес
Строка 83: Строка 92:
|-
|-


<!--T:19-->
| rowspan="3"  | 9 .. (9+'''x'''-1)  
| rowspan="3"  | 9 .. (9+'''x'''-1)  
| rowspan="3"  | holding  
| rowspan="3"  | holding  
Строка 97: Строка 107:




<!--T:20-->
| rowspan="2" style="text-align:left;" |  
| rowspan="2" style="text-align:left;" |  
* '''2''': отключать все реле при нажатии
* '''2''': отключать все реле при нажатии
Строка 107: Строка 118:
|-
|-


<!--T:21-->
| rowspan="2"  | 16  
| rowspan="2"  | 16  
| rowspan="2"  | holding  
| rowspan="2"  | holding  
Строка 116: Строка 128:
* '''3''': отключить взаимодействие  
* '''3''': отключить взаимодействие  


<!--T:22-->
| режим работы цифрового входа 0 для отключения всех реле
| режим работы цифрового входа 0 для отключения всех реле
|
|
Строка 121: Строка 134:
| 2
| 2


<!--T:23-->
|style="text-align:left;" |  
|style="text-align:left;" |  
* '''2''': отключать все реле при нажатии
* '''2''': отключать все реле при нажатии
Строка 138: Строка 152:




<!--T:24-->
| 32 .. (32+'''y'''-1) ||  input || R || 0 || 16-bit unsigned int || счетчик срабатываний входа 1 .. '''y''' ||  
| 32 .. (32+'''y'''-1) ||  input || R || 0 || 16-bit unsigned int || счетчик срабатываний входа 1 .. '''y''' ||  
|-
|-


<!--T:25-->
| 104-105 || input || R || || 32-bit unsigned int || Время работы устройства (uptime counter) в секундах ||
| 104-105 || input || R || || 32-bit unsigned int || Время работы устройства (uptime counter) в секундах ||
|-
|-


<!--T:26-->
| 120 (0x78) || holding || RW || 0 ||  отличное от 0 || запись в регистр вызывает перезагрузку модуля без сохранения состояния ||  
| 120 (0x78) || holding || RW || 0 ||  отличное от 0 || запись в регистр вызывает перезагрузку модуля без сохранения состояния ||  
|-
|-
Строка 176: Строка 193:
|}
|}


<!--T:27-->
В прошивках версии 1.6.0 и позднее поддерживаются дополнительные регистры настройки параметров обмена данными по RS-485:
В прошивках версии 1.6.0 и позднее поддерживаются дополнительные регистры настройки параметров обмена данными по RS-485:


<!--T:28-->
{|  border="1" class="wikitable" style="text-align:center; width:1000px;"
{|  border="1" class="wikitable" style="text-align:center; width:1000px;"
!Регистр / адрес
!Регистр / адрес
Строка 196: Строка 215:




<!--T:29-->
По адресу 200 лежит сигнатура релейного модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus:
По адресу 200 лежит сигнатура релейного модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus:


<!--T:30-->
{| class="wikitable"
{| class="wikitable"
! style="font-weight: bold;" | Модуль
! style="font-weight: bold;" | Модуль
Строка 203: Строка 224:
|-
|-


<!--T:31-->
|WB-MRPS6
|WB-MRPS6
|MRPS6
|MRPS6
Строка 226: Строка 248:
|}
|}


<!--T:32-->
Для получения сигнатуры нужно выполнить команду READ_HOLDING_REGISTERS по адресу 200 (длина 6 регистров). Запись в эту область памяти не поддерживается, при попытке записи в недопустимое место возвращается ошибка 3. Пустые места в тексте сигнатуры забиваются значением 0x00.  
Для получения сигнатуры нужно выполнить команду READ_HOLDING_REGISTERS по адресу 200 (длина 6 регистров). Запись в эту область памяти не поддерживается, при попытке записи в недопустимое место возвращается ошибка 3. Пустые места в тексте сигнатуры забиваются значением 0x00.  
Начиная с регистра 220 записана дата сборки прошивки, в формате "число'''x00'''время'''x00'''" в виде строки (пример: 'Jan 27 2017 17:01:13'). Длина записи — 21 регистр.
Начиная с регистра 220 записана дата сборки прошивки, в формате "число'''x00'''время'''x00'''" в виде строки (пример: 'Jan 27 2017 17:01:13'). Длина записи — 21 регистр.


<!--T:33-->
Значение состояния каждого реле хранится в регистрах флагов (coil). У 1-го реле адрес регистра 0, у 2-го &mdash; 1 и т.д.
Значение состояния каждого реле хранится в регистрах флагов (coil). У 1-го реле адрес регистра 0, у 2-го &mdash; 1 и т.д.


== Управление модулем из командной строки ==
== Управление модулем из командной строки == <!--T:34-->
Программное обеспечение контроллера Wiren Board включает в себя утилиту modbus_client для работы с устройствами, подключенными к выходам RS-485, по протоколу Modbus, подробное описание команды находится на странице [[Modbus-client]]. Доступ к командной строке описан в статье [[SSH]].
Программное обеспечение контроллера Wiren Board включает в себя утилиту modbus_client для работы с устройствами, подключенными к выходам RS-485, по протоколу Modbus, подробное описание команды находится на странице [[Modbus-client]]. Доступ к командной строке описан в статье [[SSH]].


=== Пример чтения регистров ===
=== Пример чтения регистров === <!--T:35-->
Проверим, верно ли, что мы подключились именно к модулю нужного типа. (Сервис wb-mqtt-serial должен быть предварительно остановлен). По адресу 200 хранится уникальная сигнатура длиной в 6 регистров. Прочтем 6 регистров, начиная с адреса 200, и преобразуем полученный шестнадцатеричный ответ в символьную строку:
Проверим, верно ли, что мы подключились именно к модулю нужного типа. (Сервис wb-mqtt-serial должен быть предварительно остановлен). По адресу 200 хранится уникальная сигнатура длиной в 6 регистров. Прочтем 6 регистров, начиная с адреса 200, и преобразуем полученный шестнадцатеричный ответ в символьную строку:


<!--T:36-->
<syntaxhighlight lang="bash">echo  -e `modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 \
<syntaxhighlight lang="bash">echo  -e `modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 \
-a1 -t0x03 -r200 -c 6 | \
-a1 -t0x03 -r200 -c 6 | \
grep Data | sed -e 's/0x00/\\\x/g' -e 's/Data://' -e 's/\s//g'` </syntaxhighlight>
grep Data | sed -e 's/0x00/\\\x/g' -e 's/Data://' -e 's/\s//g'` </syntaxhighlight>


<!--T:37-->
В результате выполнения команды получаем строку, например '''WBMR6'''. Релейный модуль WB-MR6 имеет Modbus-адрес 1.
В результате выполнения команды получаем строку, например '''WBMR6'''. Релейный модуль WB-MR6 имеет Modbus-адрес 1.


=== Выбор типа управления внешними входами ===
=== Выбор типа управления внешними входами === <!--T:38-->
В релейных модулях предусмотрено два режима управления каналами реле: с помощью внешних входов и по протоколу RS-485.
В релейных модулях предусмотрено два режима управления каналами реле: с помощью внешних входов и по протоколу RS-485.
В релейных модулях можно выбрать режим 0, когда ко внешнему входу подключена кнопка (без фиксации), или режим 1, когда для управления используется обычный выключатель (с фиксацией). Режим 3 отключает внешнее управление, но при этом все равно сохраняется возможность управления по RS-485 и чтение состояния внешних входов. По умолчанию включен режим 0.
В релейных модулях можно выбрать режим 0, когда ко внешнему входу подключена кнопка (без фиксации), или режим 1, когда для управления используется обычный выключатель (с фиксацией). Режим 3 отключает внешнее управление, но при этом все равно сохраняется возможность управления по RS-485 и чтение состояния внешних входов. По умолчанию включен режим 0.


<!--T:39-->
В режиме внешнего управления реле срабатывает по падению логического уровня: к внешним входам подключены резисторы подтяжки к линии +5V и реле соответствующего канала срабатывает при соединении входа с GND.
В режиме внешнего управления реле срабатывает по падению логического уровня: к внешним входам подключены резисторы подтяжки к линии +5V и реле соответствующего канала срабатывает при соединении входа с GND.
Состояние реле каждого канала хранится в памяти контроллера до перезагрузки, по умолчанию при включении питания все реле выключены. После инициализации модуля опрашиваются внешние входы и реле всех каналов переводятся в соответствующее состояние.  
Состояние реле каждого канала хранится в памяти контроллера до перезагрузки, по умолчанию при включении питания все реле выключены. После инициализации модуля опрашиваются внешние входы и реле всех каналов переводятся в соответствующее состояние.  


<!--T:40-->
Тип внешнего управления можно выбрать для каждого канала отдельно через регистры 9 — (9+x). Для этого в holding-регистре 5 должно быть записано значение 0:
Тип внешнего управления можно выбрать для каждого канала отдельно через регистры 9 — (9+x). Для этого в holding-регистре 5 должно быть записано значение 0:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Строка 255: Строка 283:
</syntaxhighlight>
</syntaxhighlight>


<!--T:41-->
Инициализировать регистр при старте можно и через настройки web-интерфейса, смотрите страницу [[RS-485:Настройка_через_веб-интерфейс]].
Инициализировать регистр при старте можно и через настройки web-интерфейса, смотрите страницу [[RS-485:Настройка_через_веб-интерфейс]].
</translate>
</translate>
12 063

правки