12 063
правки
м |
(Отметить эту версию для перевода) |
||
Строка 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. Это значение — таймаут в секундах. Значение "0" отключает безопасный режим. | Для включения безопасного режима (Safety timer) нужно записать значение, отличное от 0, в регистр хранения командой WRITE_SINGLE_REGISTER по адресу 8. Это значение — таймаут в секундах. Значение "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-го — 1 и т.д. | Значение состояния каждого реле хранится в регистрах флагов (coil). У 1-го реле адрес регистра 0, у 2-го — 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> |
правки