|
|
(не показано 46 промежуточных версий 4 участников) |
Строка 1: |
Строка 1: |
| <languages/> | | <languages/> |
| <translate> | | <translate> |
| <!--T:1-->
| | {{DISPLAYTITLE:Карта регистров модулей реле}} |
| {{DISPLAYTITLE:Управление модулями реле Wirenboard по протоколу Modbus}} | |
|
| |
|
| == Параметры Modbus == <!--T:2--> | | {{Wbincludes:Header Register}} |
| | | 0 || канал 1 || rowspan="6" | coil || rowspan="6" | RW || rowspan="6" | - || rowspan="6" | 1 или 0|| rowspan="6" | состояние канала реле || rowspan="6" | |
| | |- |
| | | 1 || канал 2 |
| | |- |
| | | 2 || канал 3 |
| | |- |
| | | 3 || канал 4 |
| | |- |
| | | 4 || канал 5 |
| | |- |
| | | 5 || канал 6 |
| | |- |
|
| |
|
| === Modbus-адрес === <!--T:3-->
| |
| [[Файл:modbus_address_mr14.png|150px|thumb|left|Modbus-адрес, установленный на производстве]]
| |
| Modbus-адрес устройств Wiren Board легко определить — он нанесен на наклейке (адрес указан в десятичном формате). Новый адрес устройства записывается командой WRITE_SINGLE_REGISTER в регистр хранения (holding register) с адресом 128 (0x80). Подробно о том, как определить или изменить Modbus-адрес модуля, написано на странице [[Определение и изменение Modbus-адреса устройств Wirenboard]].
| |
|
| |
|
| === Команды Modbus, поддерживаемые устройством === <!--T:4--> | | | 0 || вход 1 || rowspan="7" | discrete input || rowspan="7" | R || rowspan="7" | - || rowspan="7" | 1 или 0|| rowspan="7" | состояние входа || rowspan="7" | |
| | | |- |
| <!--T:5-->
| | | 1 || вход 2 |
| Релейные модули Wirenboard поддерживают все основные команды Modbus. Подробнее смотрите здесь: [[Протокол Modbus#Коды функций чтения и записи регистров|Коды функций чтения и записи регистров]].
| | |- |
| | | | 2 || вход 3 |
| === Безопасный режим === <!--T:6--> | | |- |
| В этом режиме при прекращении обмена данными по Modbus устройство отключает реле по прошествии заданного времени.
| | | 3 || вход 4 |
| | | |- |
| <!--T:7-->
| | | 4 || вход 5 |
| Для включения безопасного режима (Safety timer) нужно записать значение, отличное от 0, в регистр хранения командой WRITE_SINGLE_REGISTER по адресу 8. Это значение — таймаут в секундах. Значение "0" отключает безопасный режим.
| |
| | |
| === Режим работы реле в случае отключении питания === <!--T:8-->
| |
| | |
| <!--T:9-->
| |
| В последних версиях прошивки (начина с 1.5.3) для устройств WB-MR появилась возможность запоминать состояние выхода при отключении питания. Режим контролируется Modbus-регистром 6. Если в регистре записано значение '0', то состояние выходов не сохраниться и при подаче питания все реле буду выключены. Если в регистре записана единица, то после возобновления питания все включенные до аварии реле включатся снова.
| |
| | |
| === Цифровые входы === <!--T:10-->
| |
| Состояние входа можно получить чтением регистров Discrete Inputs 0—'''x''' (где x = '''(количество управляемых каналов - 1)'''). Если вход соединён с GND, значение регистра равно 1, если не соединён - 0.
| |
| | |
| === Режимы взаимодействия цифровых входов с релейными выходами === <!--T:11-->
| |
| | |
| <!--T:12-->
| |
| В релейном модуле можно включить прямое управление релейными выходами с цифровых входов. Есть несколько вариантов такого управления:
| |
| * Простые:
| |
| ** '''Режим 0''': управление выключателем без фиксации (кнопкой "с самостоятельным отжатием обратно"). Вы нажимаете на кнопку (замыкаете цифровой вход с GND), она сама "отжимается обратно", состояние реле переключается на противоположное.
| |
| ** '''Режим 1''': управление выключателем с фиксацией. Реле всегда устанавливается в соответствии с положением выключателя. Если выключатель "включён" (замыкает цифровой вход с GND), реле тоже замкнуто. Если выключатель "выключен", реле разомкнуто.
| |
| ** '''Режим 3''': управление релейным выходом с цифрового входа отключено.
| |
| * Сложные:
| |
| ** Mapping-матрица (смотрите подробное описание ниже)
| |
| | |
| <!--T:13-->
| |
| Режим можно установить отдельно для каждого канала. Для этого в регистре 5 должно находиться значение "0", а режим для каждого канала записывается в регистры хранения, начиная с адреса 9 для первого канала и т.д.
| |
| | |
| <!--T:14-->
| |
| Есть устаревший способ - установка режима для всех каналов одновременно. Для этого запишите соответствующее число в регистр хранения с адресом 5.
| |
| | |
| ==== Mapping-матрица ==== <!--T:15-->
| |
| | |
| <!--T:16-->
| |
| Начиная с прошивки 1.9.0 для отдельных каналов предусмотрен также '''режим 2''' -- отключить все выходы, и '''режимы работы (4 и 5)''' в соответствии с mappig-матрицей (смотри далее). В этой и более поздних версиях прошивок в модулях реализована возможность более гибкой настройки взаимодействия входов и выходов релейных модулей при помощи специальной mapping-матрицы: таблицы, в которой для каждого входа при изменении его состояния кодируется изменение состояние любого релейного выхода. Подробное описание можно найти в статье [[I/O_Mapping_Matrix]].
| |
| | |
| === Карта регистров модулей реле === <!--T:17-->
| |
| В таблице:
| |
| * '''x''' — количество релейных выходов;
| |
| * '''y''' — количество цифровых входов.
| |
| (для модулей WB-MRM2 карту регистров смотрите на странице описания [[WB-MRM2|этого модуля]])
| |
| | |
| <!--T:18-->
| |
| {| border="1" class="wikitable" style="text-align:center; width:1000px;"
| |
| !Регистр / адрес
| |
| !Тип
| |
| !Чтение/запись
| |
| !Значение по умолчанию
| |
| !Формат
| |
| !Назначение
| |
| !Примечание
| |
| |- | | |- |
| | 0 .. ('''x'''-1) || coil || RW || - || 1 или 0|| состояние реле с номером 1 .. '''x''' || | | | 5 || вход 6 |
| |- | | |- |
| | 0 .. ('''y'''-1) || discrete || R || - || 1 или 0 | | | 7 || вход 0 |
| || состояние входа с номером 1 .. '''y''' ||
| |
| |- | | |- |
| | 5 | | | 5 |
| | | |
| | holding | | | holding |
| | RW | | | RW |
| | 0 | | | 0 |
| | style="text-align:left;" | | | | style="text-align:left" | |
| * '''0''': кнопки без фиксации
| | |
| * '''1''': выключатель с фиксацией
| | | |
| * '''3''': отключить взаимодействие
| | служебный регистр, значение должно быть 0 |
| || режим взаимодействия цифровых входов с релейными выходами. Регистры состояний входов и счётчик нажатий продолжают работать во всех режимах. || Регистр использовался в старом механизме настройки. Рекомендуется оставлять в нём значение 0, а входы настраивать через отдельные регистры 9 .. (9+'''x'''-1) | | | |
| |- | | |- |
| | |
| | 6 | | | 6 |
| | | |
| || holding || RW || 0 | | | || holding || RW || 0 | |
| | style="text-align:left;" | | | | style="text-align:left;" | |
| * '''0''': не восстанавливать состояние реле после восстановления питания | | * '''0''': не восстанавливать состояние реле |
| * '''1''': восстанавливать состояние реле после восстановления питания | | * '''1''': восстанавливать состояние реле |
| || режим работы реле в случае отключении питания || (только в прошивках 1.5.3 и позднее) | | || режим работы реле при отключении питания || 1.5.3 |
| |- | | |- |
| | 8 || holding || RW || 0 || секунды || таймаут для безопасного режима || | | | 8 |||| holding || RW || 0 || секунды || таймаут для безопасного режима || |
| |- | | |- |
|
| |
|
| <!--T:19-->
| | | 9 || вход 1 || rowspan="7" | holding || rowspan="7" | RW || rowspan="4" | 0 |
| | rowspan="3" | 9 .. (9+'''x'''-1) | | | style="text-align:left" rowspan="3" | |
| | rowspan="3" | holding | |
| | rowspan="3" | RW | |
| | rowspan="2" | 0 | |
| | style="text-align:left;" | | |
| * '''0''': кнопки без фиксации | | * '''0''': кнопки без фиксации |
| * '''1''': выключатель с фиксацией | | * '''1''': выключатель с фиксацией |
| * '''3''': отключить взаимодействие | | * '''3''': отключить взаимодействие |
| | rowspan="3" | режим взаимодействия отдельного цифрового входа с соответствующим релейным выходом; | | | rowspan="6" | режим взаимодействия отдельного цифрового входа с соответствующим релейным выходом. <br>'''В регистре 5 должно стоять значение по умолчанию (0).''' |
| в регистре 5 должен быть записан "0"
| | | rowspan="3" | |
| | | |
| |- | | |- |
|
| |
|
| | | | 10 || вход 2 |
| <!--T:20-->
| | |- |
| | rowspan="2" style="text-align:left;" | | | | 11 || вход 3 |
| | |- |
| | | 12 || вход 4 |
| | | rowspan="4" style="text-align:left" | |
| * '''2''': отключать все реле при нажатии | | * '''2''': отключать все реле при нажатии |
| * '''4''': управлять в соответствии с [[I/O_Mapping_Matrix|mapping-матрицей]] | | * '''4''': управлять по [[I/O_Mapping_Matrix|mapping-матрице]] |
| * '''5''': управлять в соответствии с [[I/O_Mapping_Matrix|mapping-матрицей]], через 20 минут повторно имитировать состояние ввода | | * '''5''': управлять по [[I/O_Mapping_Matrix|mapping-матрице]], через 20 минут повторно имитировать состояние ввода '''Только для [[WB-MWAC]]''' |
| |Начиная с прошивки 1.9.0 | | | 1.9.0 |
| | |- |
| | | 13 || вход 5 || rowspan="2" | 1 || rowspan="2" | 1.12.0 |
| |- | | |- |
| |1 | | | 14 || вход 6 |
| |Начиная с прошивки 1.12.0 | | |- |
| | | 16 || вход 0 || 2 || режим работы цифрового входа 0 для отключения всех реле || 1.9.0 |
| |- | | |- |
|
| |
|
| <!--T:21-->
| | | 20 || вход 1 || rowspan="7" | holdreg || rowspan="7" | RW || rowspan="7" | 50 || rowspan="7" | 0 - 100 || rowspan="7" | время защиты входа от дребезга в миллисекундах || rowspan="7" | 1.13.0 |
| | rowspan="2" | 16 | | |- |
| | rowspan="2" | holding | | | 21 || вход 2 |
| | rowspan="2" | RW | |
| | | |
| |style="text-align:left;"| | |
| * '''0''': кнопки без фиксации
| |
| * '''1''': выключатель с фиксацией
| |
| * '''3''': отключить взаимодействие
| |
| | |
| <!--T:22-->
| |
| | режим работы цифрового входа 0 для отключения всех реле | |
| | | |
| |- | | |- |
| | 2 | | | 22 || вход 3 |
| | |
| <!--T:23-->
| |
| |style="text-align:left;" | | |
| * '''2''': отключать все реле при нажатии
| |
| * '''4''': управлять в соответствии с [[I/O_Mapping_Matrix|mapping-матрицей]]
| |
| * '''5''': управлять в соответствии с [[I/O_Mapping_Matrix|mapping-матрицей]], через 20 минут повторно имитировать состояние ввода
| |
| | режим работы цифрового входа 0; в регистре 5 должен быть записан "0"
| |
| |Начиная с прошивки 1.9.0
| |
| |- | | |- |
| | | | 23 || вход 4 |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| <!--T:24-->
| |
| | 32 .. (32+'''y'''-1) || input || R || 0 || 16-bit unsigned int || счетчик срабатываний входа 1 .. '''y''' || | |
| |- | | |- |
| | | | 24 || вход 5 |
| <!--T:25-->
| |
| | 104-105 || input || R || || 32-bit unsigned int || Время работы устройства (uptime counter) в секундах || | |
| |- | | |- |
| | | | 25 || вход 6 |
| <!--T:26-->
| |
| | 120 (0x78) || holding || RW || 0 || отличное от 0 || запись в регистр вызывает перезагрузку модуля без сохранения состояния || | |
| |- | | |- |
| | 121 (0x79) || holding || R || - || мВ || текущее напряжение питания модуля || | | | 27 || вход 0 |
| |- | | |- |
| | 128 (0x80) || holding || RW || 1 || 1 — 247 | | |
| || Modbus-адрес устройства || | | |
| | | 32 || вход 1 || rowspan="7" | input || rowspan="7" | R || rowspan="7" | 0 || rowspan="7" | 16-bit unsigned int || rowspan="7" | счетчик срабатываний входа || rowspan="7" | |
| |- | | |- |
| | 129 (0x81) || holding || RW || 0 || 0 или 1 || Переход в [[WB-MCU-Flasher|режим загрузчика]] | | | 33 || вход 2 |
| |1.10.0
| |
| |- | | |- |
| | 200-205 || holding || R || {'X','X','X','X','X','X'} || || сигнатура устройства (см. таблицу ниже) || | | | 34 || вход 3 |
| |- | | |- |
| | 220-241 || holding || R || || __date__ __time__|| дата сборки прошивки || | | | 35 || вход 4 |
| |- | | |- |
| |250-266 | | | 36 || вход 5 |
| |input
| |
| |R
| |
| |
| |
| |строка, null-terminated
| |
| |версия прошивки ||
| |
| |- | | |- |
| |270-271 | | | 37 || вход 6 |
| |input | |
| |R | |
| |
| |
| |32-bit unsigned int
| |
| |уникальный идентификатор (S/N)
| |
| |- | | |- |
| | 384-447 || holding || RW || 0 || || регистры [[I/O_Mapping_Matrix|mapping-матрицы]] || Начиная с версии прошивки 1.9.0 | | | 39 || вход 0 |
| |- | | |- |
| |}
| |
|
| |
|
| <!--T:27-->
| |
| В прошивках версии 1.6.0 и позднее поддерживаются дополнительные регистры настройки параметров обмена данными по RS-485:
| |
|
| |
|
| <!--T:28-->
| | | 40 || вход 1 || rowspan="7" | input || rowspan="7" | R || rowspan="7" | 0 || rowspan="7" | 16-bit unsigned int || rowspan="7" | целая часть значения частоты сигнала || rowspan="14" | 1.15.0 |
| {| border="1" class="wikitable" style="text-align:center; width:1000px;"
| | |- |
| !Регистр / адрес
| | | 42 || вход 2 |
| !Тип
| | |- |
| !Чтение/запись
| | | 44 || вход 3 |
| !Значение по умолчанию
| | |- |
| !Формат
| | | 46 || вход 4 |
| !Назначение
| |
| |- | | |- |
| | 110 || holding || RW || 96 || baud rate / 100 || скорость порта RS-485, '''делённая на 100'''. Допустимые скорости: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 <br>([[UART_Communication_Settings|Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board]]) | | | 48 || вход 5 |
| |- | | |- |
| | 111 || holding || RW || 0 || || настройка бита чётности порта RS-485. Допустимые значения: 0 - нет бита чётности (none), 1 - нечётный (odd), 2 - чётный (even) | | | 50 || вход 6 |
| |- | | |- |
| | 112 || holding || RW || 2 || || количество стоп-битов порта RS-485. Допустимые значения: 1, 2 | | | 54 || вход 0 |
| |- | | |- |
| |} | | | 41 || вход 1 || rowspan="7" | input || rowspan="7" | R || rowspan="7" | 0 || rowspan="7" | 16-bit unsigned int || rowspan="7" | дробная часть значения частоты сигнала <br> 1 Гц = 65536 (2 ^ 16) |
| | |
| | |
| | |
| <!--T:29-->
| |
| По адресу 200 лежит сигнатура релейного модуля длиной 6 байт. Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus:
| |
| | |
| <!--T:30-->
| |
| {| class="wikitable"
| |
| ! style="font-weight: bold;" | Модуль
| |
| ! style="font-weight: bold;" | Сигнатура
| |
| |- | | |- |
| | | | 43 || вход 2 |
| <!--T:31-->
| |
| |WB-MRPS6 | |
| |MRPS6 | |
| |- | | |- |
| | WB-MR6C | | | 45 || вход 3 |
| | WBMR6 | |
| |- | | |- |
| | WB-MR3xV | | | 47 || вход 4 |
| | WBMR3 | |
| |- | | |- |
| | WB-MR6xV | | | 49 || вход 5 |
| | WBMR6 | |
| |- | | |- |
| | WB-MR14 | | | 51 || вход 6 |
| | WBMR14 | |
| |- | | |- |
| | WB-MR11 | | | 55 || вход 0 |
| | WBMR11 | |
| |- | | |- |
| | WB-MRM2 | | |
| | WBMR2 | | | 384-447 |||| holding || RW || 0 || || регистры [[I/O_Mapping_Matrix|mapping-матрицы]] || 1.9.0 |
| WBMR2m
| |
| |} | | |} |
|
| |
|
| <!--T:32-->
| | {{:Common_Modbus_Registers}} |
| Для получения сигнатуры нужно выполнить команду READ_HOLDING_REGISTERS по адресу 200 (длина 6 регистров). Запись в эту область памяти не поддерживается, при попытке записи в недопустимое место возвращается ошибка 3. Пустые места в тексте сигнатуры забиваются значением 0x00.
| |
| Начиная с регистра 220 записана дата сборки прошивки, в формате "число'''x00'''время'''x00'''" в виде строки (пример: 'Jan 27 2017 17:01:13'). Длина записи — 21 регистр.
| |
| | |
| <!--T:33-->
| |
| Значение состояния каждого реле хранится в регистрах флагов (coil). У 1-го реле адрес регистра 0, у 2-го — 1 и т.д.
| |
| | |
| == Управление модулем из командной строки == <!--T:34-->
| |
| Программное обеспечение контроллера Wiren Board включает в себя утилиту modbus_client для работы с устройствами, подключенными к выходам RS-485, по протоколу Modbus, подробное описание команды находится на странице [[Modbus-client]]. Доступ к командной строке описан в статье [[SSH]].
| |
| | |
| === Пример чтения регистров === <!--T:35-->
| |
| Проверим, верно ли, что мы подключились именно к модулю нужного типа. (Сервис wb-mqtt-serial должен быть предварительно остановлен). По адресу 200 хранится уникальная сигнатура длиной в 6 регистров. Прочтем 6 регистров, начиная с адреса 200, и преобразуем полученный шестнадцатеричный ответ в символьную строку:
| |
| | |
| <!--T:36-->
| |
| <syntaxhighlight lang="bash">echo -e `modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 \
| |
| -a1 -t0x03 -r200 -c 6 | \
| |
| grep Data | sed -e 's/0x00/\\\x/g' -e 's/Data://' -e 's/\s//g'` </syntaxhighlight>
| |
| | |
| <!--T:37-->
| |
| В результате выполнения команды получаем строку, например '''WBMR6'''. Релейный модуль WB-MR6 имеет Modbus-адрес 1.
| |
| | |
| === Выбор типа управления внешними входами === <!--T:38-->
| |
| В релейных модулях предусмотрено два режима управления каналами реле: с помощью внешних входов и по протоколу RS-485.
| |
| В релейных модулях можно выбрать режим 0, когда ко внешнему входу подключена кнопка (без фиксации), или режим 1, когда для управления используется обычный выключатель (с фиксацией). Режим 3 отключает внешнее управление, но при этом все равно сохраняется возможность управления по RS-485 и чтение состояния внешних входов. По умолчанию включен режим 0.
| |
| | |
| <!--T:39-->
| |
| В режиме внешнего управления реле срабатывает по падению логического уровня: к внешним входам подключены резисторы подтяжки к линии +5V и реле соответствующего канала срабатывает при соединении входа с GND.
| |
| Состояние реле каждого канала хранится в памяти контроллера до перезагрузки, по умолчанию при включении питания все реле выключены. После инициализации модуля опрашиваются внешние входы и реле всех каналов переводятся в соответствующее состояние.
| |
|
| |
|
| <!--T:40-->
| | Регистры настройки параметров обмена данными по RS-485 поддерживаются начиная с прошивки версии 1.6.0 |
| Тип внешнего управления можно выбрать для каждого канала отдельно через регистры 9 — (9+x). Для этого в holding-регистре 5 должно быть записано значение 0:
| |
| <syntaxhighlight lang="bash">
| |
| modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x06 -r5 0
| |
| </syntaxhighlight>
| |
|
| |
|
| <!--T:41-->
| |
| Инициализировать регистр при старте можно и через настройки web-интерфейса, смотрите страницу [[RS-485:Настройка_через_веб-интерфейс]].
| |
| </translate> | | </translate> |