WB-MR14 Modbus 14 Channel Relay Module: различия между версиями

Нет описания правки
Строка 2: Строка 2:


'''Магазин: [http://contactless.ru/modbus-actuators-and-sensors/ Исполнительные устройства и датчики для шины RS-485 Modbus RTU]'''
'''Магазин: [http://contactless.ru/modbus-actuators-and-sensors/ Исполнительные устройства и датчики для шины RS-485 Modbus RTU]'''
==Общая информация==


==== Назначение ====
=== Назначение ===
14-ти канальный модуль реле предназначен для систем промышленной и домашней автоматизации.
14-канальный модуль реле предназначен для систем промышленной и домашней автоматизации.
Использование групп реле позволяет упростить проводку при использовании модуля для автоматизации освещения и при управлении внешними контакторами.
Реле объединены в группы, что упрощает проводку при использовании модуля для автоматизации освещения или управления внешними контакторами.


Исполнение: корпус на DIN-рейку (ширина 6 юнита). Напряжение питания 9 – 24В
=== Выходы ===
В модуле установлены 14 реле HF32F-G ([http://www.hongfa.com/pro/pdf/HF32F-G_en.pdf Datasheet]), коммутирующие соответствующие 14 выходов, выведенных на винтовые зажимы, рассчитанные на максимальный ток 20 А.
Контакты реле объединены в две группы, каждая со своим общим проводом, COM1 и COM2. На общий провод отводится две винтовых клеммы, соединенных на плате. Для двойных винтовых зажимов COM-контактов общий максимально допустимый ток — 40 А.  


Управление модулем производится с контроллера или ПК по шине RS-485 командами по протоколу MODBUS, а также с помощью внешних кнопок.
В случае активной (резистивной) нагрузки реле могут коммутировать до 10 А/230 В переменного тока и до 10 А/30 В постоянного. В случае реактивной (ёмкостной или индуктивной) нагрузки (двигатели, импульсные блоки питания и т.д.) не следует коммутировать ток больше 400 мА. Используйте внешние контакторы, рассчитанные на соответствующую нагрузку.  


==== Технические характеристики ====
Каждый контакт реле защищен от образования дуги при замыкании/размыкании симметричным TVS-диодом.
Основное:
* 14 каналов реле на 10А (230V AC)


* Напряжение питания: от 9 до 24 В.
[[Файл:Relay_switches_mr14.png|450px|thumb|center|Контакты реле]]
* Интерфейс: RS485, ModBus RTU.
 
* Светодиодная индикация состояния каждого канала.
В модуле может быть включен таймер безопасного режима, который при прекращении обмена данными по Modbus с модулем отключает все реле по прошествии заданного времени.
* 14 входов типа "сухой контакт" общего назначения с функцией прямого управления каналами
 
=== Входы ===
На безвинтовые зажимы модуля выведены 14 входов типа "сухой контакт", не изолированные от источника питания. Для устранения дребезга контактов на каждой входной линии применяются RC-цепочки. Входы подтянуты резисторами к линии питания +5V. Кнопки или выключатели с фиксацией подключаются между выводами GND и соответствующим входом Inputs. Входы могут использоваться как входы общего назначения, для счета сигналов и для прямого управления каналами реле. Программно можно выбрать три режима работы входов: управление кнопкой без фиксации или по Modbus; управление выключателем (с фиксацией) или по Modbus; управление только по Modbus. По умолчанию включен режим управления кнопкой без фиксации.
 
=== Технические характеристики ===


* Установка в электрощит на DIN рейку, корпус шириной 6 DIN.
{| class="wikitable"
{| class="wikitable"
!Параметр
!Параметр
!Значение
!Значение
|-
! colspan="2" |Питание
|-
|Напряжение питания
|9 — 24 В постоянного тока
|-
Потребляемая мощность
|
*В режиме холостого хода (со всеми выключенными реле) — 0,5 Вт
*Пиковое значение — до 12 Вт
|-
|-
! colspan="2" |'''Выходы'''
! colspan="2" |'''Выходы'''
Строка 31: Строка 45:
|-
|-
|Тип выходов
|Тип выходов
|механическое реле
|Контакты механического реле
|-
|-
|Конфигурация контактов
|Конфигурация контактов
|SPST, нормально открытые
|Двухпозиционные, нормально открытые.
состояния:
Состояния: разомкнут <&mdash;> замкнут Kx и COM
 
выкл,
 
замкнут K и COM
|-
|-
|Конфигурация выходов
|Конфигурация выходов
|Две группы по 7 выходов,  
|Две группы по 7 выходов, общий провод в каждой группе
общий провод в каждой группе
|-
|-
|Максимальное коммутируемое напряжение, AC
|Максимальное коммутируемое напряжение, AC
|250V
|250 В
|-
|-
|Максимальное коммутируемое напряжение, DC
|Максимальное коммутируемое напряжение, DC
|30V
|30 В
|-
|-
|Максимальный коммутируемый ток, на каждый канал  
|Максимальный коммутируемый ток на каждый канал  
(для резистивной нагрузки)
|
|10A
* для резистивной нагрузки — 10 А
* для ёмкостной и индуктивной нагрузки — 400 мА
|-
|-
|Сопротивление канала в открытом состоянии
|Сопротивление канала в открытом состоянии
|< 100 mOhm
|< 100 мОм
|-
|-
|Напряжение изоляции между контроллером и выходом
|Напряжение изоляции между контроллером и выходом
|1500Vrms
|1500 В (среднеквадратичное значение)
|-
|-
|Срок жизни: количество переключений
|Срок жизни: количество переключений для нагрузки  
для нагрузки 10A 230V AC, cos φ = 1
10 А/230 В переменного тока (резистивная нагрузка)
|100 000
|100 000
|-
|Индикация
|Светодиодная индикация состояния каждого канала
|-
|-
! colspan="2" |Входы
! colspan="2" |Входы
|-
|-
|Количество входов
|Количество входов (Inputs 1&mdash;14)
|14
|14
|-
|-
|Тип входов
|Тип входов
|сухой контакт,
|"Сухой контакт", не изолированные от источника питания
не изолированные от источника питания
|-
|-
|Функции
|Функции
|
|
* Входы общего назначения
* Входы общего назначения
* Счёт сигналов
* Счет сигналов
* Прямое управление каналами реле
* Прямое управление каналами реле
|-
|-
Строка 89: Строка 95:
|-
|-
|Изоляция интерфейса
|Изоляция интерфейса
|неизолированный
|Неизолированный
|-
|-
|Протокол обмена
|Протокол обмена данными
|Modbus RTU
|Modbus RTU, адрес задается программно, заводские настройки указаны на наклейке
|-
|-
|Напряжение питания
|Параметры интерфейса RS-485
|9-24 V DC
|  
*Скорость: 9600 бит/сек
*Данные: 8 бит
*Проверка чётности: нет
*Стоповых бит: 2
|-
|-
! colspan="2" |Прочее
|Готовность к работе после подачи питания
| ~0,1 c
|-
|-
|Максимальная потреблеямая мощность
! colspan="2" |Габариты
|2 Вт
|-
|-
|Ширина, DIN юнитов
|Ширина, DIN-юнитов
|6
|6
|-
|-
|Размер
|Габаритные размеры (Д x Ш х В)
|106.25x90.2x57.5 mm
|106,25 x 90,2 x 57,5 мм
|-
! colspan="2" |Индикация
|-
|Индикация питания и обмена данными
|Жёлтый светодиод Status
|-
|Индикация состояния каналов реле
|Зеленые светодиоды 1 — 14
|-
! colspan="2" |Условия эксплуатации
|-
|Температура воздуха
|От -20 до +50 °С
|-
|Относительная влажность
|До 92%, без конденсации влаги
|-
|-
|Индикация
|индикация питания и обмена данными
|}
|}
*


[[File:DIN 6U.png |300px|thumb|right|Габаритные размеры]]
=== Габаритные размеры модуля ===


==== Условия эксплуатации: ====
[[File:DIN 6U.png |450px|thumb|center|Габаритные размеры]]


* Температура воздуха от -20°С до +50°С;
* Относительная влажность воздуха до 92%,без конденсата влаги.


==== Допустимая нагрузка ====
=== Обмен данными ===


Модуль реле предназначен для коммутирования резистивной нагрузки. Для переменного тока (230V AC), допустимый ток для каждого канала указан в описании. Если каналы модуля реле используются для коммутирования ёмкостной или индуктивной нагрузки, то пиковые значения тока или мощности при включении или отключении нагрузки могут превысить максимальные допустимые параметры, даже в том случае, если заявленные паметры потребления прибора в стационарном режиме и укладываются в заявленные параметры.
На физическом уровне модуль подключается через интерфейс [[RS-485]]. Для управления WB-MR14 используется протокол Modbus RTU. В устройствах Wirenboard данные Modbus передаются по линиям связи RS-485. Подробнее смотрите страницу [[Протокол Modbus]]. Modbus-адрес модуля задается на заводе и нанесен на наклейке на его боковой стороне. Адрес может быть изменен программно. Подробно смотрите в разделе [[#Параметры_Modbus]]


Мы не рекомендуем использовать WB-MR14 для коммутирования индуктивной или ёмкостной нагрузки номинальной мощностью более 400W для канлов реле с допустимым током 10А.
== Монтаж ==
Релейный модуль монтируется на стандартную DIN-рейку шириной 35 мм и занимает ширину 6 DIN-модулей.


==== Порядок подключения ====
Блоки безвинтовых зажимов на плате реле служат для подключения линий питания, управления (RS-485) и входных контактов. Все выводы GND на безвинтовых зажимах (в том числе и "минус" питания) объединены на плате. При использовании при монтаже наконечников типа НШВИ необходимо, чтобы диаметр изолированных манжет не превышал 3,6 мм, сечение провода — 0,75 мм<sup>2</sup>, а длина проводящей втулки — 5—6 мм. Винтовые зажимы принимают провод сечением 2,5—4 мм<sup>2</sup>. Сечение провода должно соответствовать коммутируемой нагрузке.


Модуль выполнен в пластмассовом корпусе и предназначен для установки в монтажную коробку на DIN рейку.
При подключении коммутируемых устройств важно помнить, что хотя каждый из 7 винтовых зажимов выдерживает соответствующий ток 10 А, два зажима общего провода не рассчитаны на протекание общего тока 70 А. Такой ток приведет к повреждению платы релейного модуля. Сдвоенные общие контакты COM выдерживают ток около 40 А.  


К синим клеммам подключаются RS-485 и питание:
Кнопки или выключатели с фиксацией подключаются между выводами GND и соответствующим входом Inputs. Ток, протекающий при замыкании кнопки или выключателя, невелик, так что тип кнопки или выключателя может быть любым. Несмотря на встроенную защиту от дребезга, выбирайте качественные кнопки и выключатели, чтобы исключить ложные срабатывания из-за плохих контактов.


* А и В - сигнальные линии RS485
Если устройство — последнее на линии RS-485, то между его входами A и B необходимо установить резистор-терминатор сопротивлением 120 Ом. Практика показывает, что в случае стендовых испытаний при небольшой длине линии RS-485 и небольшом количестве устройств терминатор на последнем устройстве в линии можно не устанавливать.
* V+ и GND - питание


Внешние кнопки и датчики подключаются между соответствующим входом блока Inputs и GND.  
Модуль необходимо устанавливать таким образом, чтобы удовлетворять требованиям электробезопасности и не допускать случайного касания контактов, находящихся под высоким напряжением. Модуль должен эксплуатироваться при рекомендованных условиях окружающей среды.


Например
[[File:Installation_WB14.png|550px|thumb|center|Образец монтажа и подключения модуля (у последнего модуля на линии устанавливается терминирующий резистор). Выбор качественного блока питания очень важен для работы модуля.]]


* Между Input 1 и GND - кнопка управления 1 реле
== Добавление модуля в web-интерфейс контроллера Wiren Board==
[[Файл:The_new_device.png|300px|thumb|Новый модуль WB-MR14 в web-интерфейсе]]
Новое устройство добавляется в web-интерфейс в раздел соответствующего порта RS-485. В web-интерфейсе на панели справа выбираем пункт Configs -> Serial Device Driver Configuration. В настройках порта /dev/ttyAPP1 добавляем новое устройство, нажав на кнопку '''+ Serial device''' в разделе List of Devices. Затем указываем адрес устройства и выбираем его тип. Подробно о настройке устройств в web-интерфейсе Wiren Board смотрите страницу [[RS-485:Настройка_через_веб-интерфейс]].


== Управление ==
В разделе Devices появилось новое устройство, название составлено из типа устройства и адреса: '''WB-MR14 1'''


==== Параметры шины. ====
Обратите внимание: желтый индикатор Status на WB_MR14 начал периодически мигать, это означает, что Wiren Board обменивается данными с модулем реле. В web-интерфейсе можно следить за параметром Supply voltage (напряжение питания модуля реле) — он меняется почти при каждом опросе модуля.


Скорость 9600 бит/сек, данных - 8 бит,
Устройство WB-MR14 стандартное, поэтому его описание задано в шаблоне, который хранится на контроллере Wiren Board в файле /usr/share/wb-mqtt-serial/templates/config-wb-mr14.json.
чётность – нет, стоповый бит - 2.


== Управление модулем через web-интерфейс Wiren Board ==


=== Команды поддерживаемые устройством ===
Пример управления релейного модуля WB-MR14 контроллером Wiren Board 5 и программирования сценариев управления мы рассмотрим на простом макете, когда релейный модуль является единственным устройством, подключенным к контроллеру. Нормально разомкнутая кнопка без фиксации подключена ко входу 1 и GND. Питание 12 В подается на входы V+(+) и GND (-). Входы/выходы RS-485 A и B первого порта контроллера и модуля WB-MR14 соединены.
[[Файл:Lab_mr14_2.png|800px|thumb|center|Лабораторный макет]]
 
{|  border="0" class="wikitable" style="text-align:center"
|-
|[[Файл:Web_buttons.png|300px|thumb|center|Кнопки управления каналами реле]]
|[[Файл:Web_options.png|300px|thumb|center|Флажки состояния входов]]
|[[Файл:Web_input_counter.png|300px|thumb|center|Счетчик входов]]
|[[Файл:Web_safety_timer.png|300px|thumb|center|Время отключения таймера безопасности]]
|}
 
 
С помощью виртуальных выключателей в web-интерфейсе K1-K14 можно управлять соответствующими выходами модуля и следить за их состоянием. Если реле будет включено или выключено через внешний вход, это отразится и в web-интерфейсе.
Текущее состояние входов показывают флажки Input1 — Input14 (на них нельзя щелкнуть, чтобы изменить состояние). Счетчики нажатий/включений отображаются в полях  Input 1 counter – Input 14 counter. Значения счетчиков хранятся в оперативной памяти микроконтроллера модуля реле и обнуляются при выключении/включении питания и сбросе.
 
Ползунок Safety Timer позволяет задать время отключения (в секундах) всех выходов при отсутствии обмена данными с Wiren Board (0 – таймер безопасности отключен). При возобновлении связи с контроллером выключившиеся реле останутся выключенными. Ползунком удобно управлять с помощью клавиш со стрелками, предварительно сфокусировавшись на нем мышью: перемещение ползунка с помощью мыши не обеспечивает достаточную точность. Таймер безопасности позволяет остановить технологические процессы в случае, если контроль над модулем утрачен (например, перебит кабель RS-485). Если реле останутся включенными, то, например, не закроется клапан подачи жидкости, что приведет к переполнению резервуара и затоплению помещения. Всегда учитывайте возможность потери связи с контроллером при проектировании систем управления.
 
== Параметры Modbus ==
 
=== Modbus-адрес ===
[[Файл:modbus_address_mr14.png|150px|thumb|left|Modbus-адрес, установленный на производстве]]
Modbus-адрес устройств Wiren Board легко определить — он нанесен на наклейке (адрес указан в десятичном формате). Новый адрес устройства записывается командой WRITE_SINGLE_REGISTER в регистр хранения (holding register) с адресом 128 (0x80). Подробно о том, как определить или изменить Modbus-адрес модуля, написано на странице [[Определение_и_изменение_Modbus-адреса_устройств_Wirenboard]].
 
=== Команды Modbus, поддерживаемые устройством ===




{|  border="1" class="wikitable" style="text-align:center"
{|  border="1" class="wikitable" style="text-align:center"
!Command
!Команда
!command (dec)
!десятичный код
|-
|-
|READ_COIL  
|READ_COIL  
Строка 176: Строка 222:
|}
|}


Смена адреса производится широковещательный (slave_id 0) командой записи (WRITE_SINGLE_REGISTER) в holding register с адресом 128 (0x80).
=== Безопасный режим ===
 
В этом режиме при прекращении обмена данными по Modbus устройство отключает реле по прошествии заданного времени.  
По адресу 200 лежит сигнатура длинной 6 байт. Сигнатура уникальна для каждой модели устройства и позволяет идентифицировать модель.
Для получения сигнатуры нужно выполнить READ_HOLDING_REGISTERS адрес 200 длина 6. 
Запись в эту область памяти не поддерживается, при попытки записи в недопустимое место возвращается ошибка 3.


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


Значение каждого реле хранится в COIL. У 1го реле адрес 0, у 2го - 1.
=== Цифровые входы  ===
 
==== Безопасный режим ====
В этом режиме при прекращении обмена данными по modbus устройство отключает реле по прошествии заданного времени.
 
Для включения безопасного режима нужно записать значение отличное от 0 в HOLDING_REGISTER по адресу 2. Это значение - таймаут в секундах.
 
==== Цифровые входы  ====


Поддерживается три режима работы цифровых входов:
Поддерживается три режима работы цифровых входов:
* Режим 0: прямое управление каналами, выключатели без фиксации (кнопки). Нажатие на кнопку переключает состояние реле.  
* Режим 0: прямое управление каналами, выключатели без фиксации (кнопки). Нажатие на кнопку изменяет состояние реле.  
* Режим 1: прямое управление каналами, выключатели с фиксацией. Переключение выключателя с фиксацией устанавливает состояние реле в соответствии с положением выключателя.
* Режим 1: прямое управление каналами, выключатели с фиксацией. Переключение выключателя с фиксацией устанавливает состояние реле в соответствии с положением выключателя.
* Режим 3: управление каналами отключено  
* Режим 3: управление каналами отключено.


Поведением по-умолчанию является прямое управление каналами реле (режим 0). Установить режим для всех каналов можно записав соответствующее число в HOLDING_REGISTER по адресу 5.
Поведением по умолчанию является прямое управление каналами реле (режим 0). Установить режим для всех каналов можно, записав соответствующее число в регистр хранения с адресом 5.
Режим можно устанавливать отдельно для каждого канала с помощью регистров 9-22. Настройки для каждого канала учитываются только в том случае, если общие настройки (регистр 5) находятся в состоянии "0", т.е. имеют значение по-умолчанию.
Режим можно устанавливать отдельно для каждого канала с помощью регистров 9—22. Настройки для каждого канала учитываются только в том случае, если регистр 5 (общие настройки режимов входов) находится в состоянии "0", т.е. имеет значение по умолчанию.


В любом режиме работы, текущее состояние кнопок можно прочесть чтением Discrete Inputs 0-13 (см. таблицу ниже).
В любом режиме работы текущее состояние кнопок можно получить чтением регистров Discrete Inputs 0—13 (см. таблицу ниже).


==== Карта регистров ====
=== Карта регистров ===
{|  border="1" class="wikitable" style="text-align:center"
{|  border="1" class="wikitable" style="text-align:center"
!Регистр / адрес
!Регистр / адрес
!тип
!тип
!чтение/запись
!чтение/запись
!значение по-умолчанию
!значение по умолчанию
!формат
!формат
!назначение
!назначение
|-
|-
 
| 0—13 || coil || RW || - || 1 или 0|| состояние реле 1—14
| 0-13 || coil || RW || - || 1 or 0|| состояние реле 1-14
|-
|-
| 0-13 || discrete || R || - ||  || состояние входа 1-14
| 0—13 || discrete || R || - ||  1 или 0
|| состояние входа 1—14
|-
|-
| 5 || holding || RW || 0 ||  '''0''': кнопки без фиксации
| 5 || holding || RW || 0 ||  '''0''': кнопки без фиксации
'''1''': выключатель с фиксацией
'''1''': выключатель с фиксацией
'''3''': отключить управление  
'''3''': отключить управление  
|| режим работы кнопок
|| режим работы кнопок
|-
|-
| 8 || holding || RW || 0 || seconds || таймаут для безопасного режима
| 8 || holding || RW || 0 || секунды || таймаут для безопасного режима
|-
|-
| 9-22 || holding || RW || 0 || '''0''': кнопки без фиксации
| 9—22 || holding || RW || 0 || '''0''': кнопки без фиксации
'''1''': выключатель с фиксацией
'''1''': выключатель с фиксацией


'''3''': отключить управление  
'''3''': отключить управление  
|| режим работы входа N. В регистре 5 должен быть записан "0".
|| режим работы входа N;
в регистре 5 должен быть записан "0"
|-
|-
 
| 32—45||  input || R || 0 || 16-bit unsigned int || счетчик нажатий входа 1—14
 
| 32-45||  input || R || 0 || 16-bit unsigned int || счетчик нажатий входа 1-11
|-
|-
 
| 120 (0x78) || holding || RW || 0 ||  отличное от 0 || запись в регистр вызывает перезагрузку модуля без сохранения состояния
| 120 (0x78) || holding || RW || 0 ||  отличное от 0 || запись в регистр вызывает перезагрузку МК без сохранения состояния
|-
|-
| 121 (0x79) || holding || R || - ||  mV || текущее напряжение питания модуля
| 121 (0x79) || holding || R || - ||  мВ || текущее напряжение питания модуля
|-
|-
| 128 (0x80) || holding || RW || 1 || || Modbus-адрес устройства  
| 128 (0x80) || holding || RW || 1 || 1—247
|| Modbus-адрес устройства  
|-
|-
| 200-206 || holding || R || {'W','B','M','R','1','4'} ||  || сигнатура
| 200-206 || holding || R || {'W','B','M','R','1','4'} ||  || сигнатура
|-
|-
| 220-241 || holding || R || ||  __date__ __time__||  дата сборки прошивки
|-
|}
По адресу 200 лежит сигнатура релейного модуля длиной 6 байт, соответствующая строке "WBMR14". Сигнатура уникальна для каждой модели устройств Wiren Board и позволяет идентифицировать модель по Modbus.
Для получения сигнатуры нужно выполнить команду READ_HOLDING_REGISTERS по адресу 200 (длина 6 регистров). Запись в эту область памяти не поддерживается, при попытки записи в недопустимое место возвращается ошибка 3.
Начиная с регистра 220 записана дата сборки прошивки, в формате "число'''x00'''время'''x00'''" в виде строки (пример: 'Oct 10 2016 13:31:55'). Длина записи — 21 регистр.


| 220-241 || holding || R || ||  __date__ __time__||  дата сборки прошивки
Значение состояния каждого реле хранится в регистрах флагов (coil). У 1-го реле адрес регистра 0, у 2-го &mdash; 1 и т.д.
 
== Управление модулем из командной строки ==
Программное обеспечение контроллера Wiren Board включает в себя утилиту modbus_client для работы с устройствами, подключенными к выходам RS-485, по протоколу Modbus, подробное описание команды находится на странице [[Modbus-client]]. Доступ к командной строке описан в статье [[SSH]].
 
=== Чтение регистров ===
Проверим, верно ли, что мы подключились именно к WB-MR14. По адресу 200 хранится уникальная для WB-MR14 сигнатура длиной в 6 регистров. Прочтем 6 регистров, начиная с адреса 200, и преобразуем полученный шестнадцатеричный ответ в символьную строку:
 
<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>
 
В результате выполнения команды получаем строку '''WBMR14'''. Всё верно -- это релейный модуль WB-MR14.
 
=== Перезагрузка ===
В ряде случаев может потребоваться перезагрузка модуля. Для этого в регистр 120 (0x78) необходимо записать любое значение, отличное от нуля:
<syntaxhighlight lang="bash">
modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x06 -r0x78 100
</syntaxhighlight>
Такая перезагрузка равносильна сбросу по питанию и изменению адреса устройства на 0x01. Все реле при этом выключаются. Предварительно, конечно, необходимо остановить сервис wb-mqtt-serial и убедиться, что к контроллеру не подключены другие Modbus-устройства.
 
=== Выбор типа управления внешними входами ===
В модуле WB-MR14 предусмотрено два режима управления каналами реле: с помощью внешних входов и по протоколу RS-485.
В WB-MR14 можно выбрать режим 0, когда ко внешнему входу подключена кнопка (без фиксации), или режим 1, когда для управления используется обычный выключатель (с фиксацией). Режим 3 отключает внешнее управление, но при этом все равно сохраняется возможность управления по RS-485 и чтение состояния внешних входов. По умолчанию включен режим 0.
 
В режиме внешнего управления реле срабатывает по падению логического уровня: к внешним входам подключены резисторы подтяжки к линии +5V и реле соответствующего канала срабатывает при соединении входа с GND.
Состояние реле каждого канала хранится в памяти контроллера до перезагрузки, по умолчанию при включении питания все реле выключены. После инициализации модуля опрашиваются внешние входы и реле всех каналов переводятся в соответствующее состояние.
 
Тип внешнего управления можно выбрать для каждого канала отдельно через регистры 9—22. Для этого в holding-регистре 5 должно быть записано значение 0:
<syntaxhighlight lang="bash">
modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x06 -r5 0
</syntaxhighlight>
 
Инициализировать регистр при старте можно и через настройки web-интерфейса, смотрите страницу [[RS-485:Настройка_через_веб-интерфейс]].
<!--
== Конструкция релейного модуля WB-MR14 ==
Физически контроллер состоит из двух плат: платы реле и контактов и платы управления, питания и индикации. Платы расположены под прямым углом и соединены пайкой. Платы установлены в пластиковом корпусе для монтажа на DIN-рейку. На корпусе имеется доступ к индикаторам и контактам.
[[Файл:Armstm32F.png|250px|thumb|right|Центральный процессор модуля]]
В основе устройства лежит 32-битный RISC-процессор STM32F051R8T6 с ядром Cortex-M0, функционирующий на частоте 16 МГц.
На плате управления предусмотрено место для установки разъема для перепрограммирования контроллера. Разъем не распаян.
На плате контактов и реле расположены 12 реле HF32F-G, коммутирующие соответствующие 12 выходов, выведенных на винтовые зажимы.
Контакты реле объединены в две группы, каждая со своим общим проводом, COM1 и COM2. На общий провод отводится две винтовых клеммы, соединенных на плате.
 
В случае активной (резистивной) нагрузки реле могут коммутировать до 10 А/230 В переменного тока и до 10 А/30 В постоянного. В случае реактивной (ёмкостной или индуктивной) нагрузки (двигатели, импульсные блоки питания и т.д.) не следует коммутировать ток больше 400 мА. Используйте внешние контакторы, рассчитанные на соответствующую нагрузку.
Каждый контакт реле защищен от образования дуги при замыкании/размыкании симметричным TVS-диодом.
Микропроцессор управляет реле и индикаторами через модули ULN2003A, состоящие  из дарлингтоновских транзисторных сборок и защитных диодов, гасящих ток самоиндукции катушек реле. Для устранения дребезга контактов на каждой входной линии применяются RC-цепочки. Входы подтянуты резисторами к линии питания +5V.
-->
 
== Примеры программирования ==
=== Пишем простой скрипт ===
Попробуем перенести логику управления контактами реле модуля на контроллер Wiren Board. Для этого мы перейдем в режим, когда внешнее управление релейным модулем отключено, и будем считывать состояние входов модуля и соответствующим образом переключать реле. <!--Оценим затем, насколько этот способ управления окажется дольше, чем при переключении средствами релейного модуля.-->
MQTT-названия устройств и их элементов управления можно найти в разделе Settings web-интерфейса (см. [[MQTT]]).
 
В качестве альтернативного способа мы можем в командной строке строке подписаться на все топики (/#) командой
<syntaxhighlight lang="bash">mosquitto_sub -v -t /#</syntaxhighlight>
и очень скоро понимаем, что имя нашего устройства '''wb-mr14_1'''.
Теперь мы можем подписаться только на сообщения данного устройства и без труда определить названия элементов управления:
<syntaxhighlight lang="bash">mosquitto_sub -v -t /devices/wb-mr14_1/#</syntaxhighlight>
Реле называются /devices/wb-mr14_1/controls/K1 – /devices/wb-mr14_1/controls/K14,
входы:  /devices/wb-mr14_1/controls/Input 1 – /devices/wb-mr14_1/controls/Input 14.
Мы будем работать с первым реле и первым входом. Отключим управление через внешние входы, установив значение 3 в регистр хранения 0x05:
<syntaxhighlight lang="bash">
service wb-mqtt-serial stop
modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x05 -r0x05 3
service wb-mqtt-serial start
</syntaxhighlight>
Проверяем — реле модуля не должны реагировать на нажатие кнопки, соединяющей выводы 1 и GND. Однако при этом в очереди публикуются сообщения о состоянии входа Input 1:
<syntaxhighlight lang="bash">
/devices/wb-mr14_1/controls/Input 1 1
/devices/wb-mr14_1/controls/Input 1 0
</syntaxhighlight>
 
Простые скрипты можно создавать прямо в веб-интерфейсе Wiren Board, для сложных стоит выбрать свою любимую среду разработки.
Переходим в раздел Scripts и нажимаем ссылку '''New...'''
Наше первое правило будет устанавливать состояние реле в зависимости от состояния кнопки: кнопка нажата — реле включено, кнопка отпущена — реле выключено.
 
<syntaxhighlight lang="ecmascript">
defineRule("switch_relay_1", {
  whenChanged: "wb-mr14_1/Input 1",
  then: function (newValue, devName, cellName)  {
dev["wb-mr14_1"]["K1"] = newValue;
      }
});
</syntaxhighlight>
 
Нажимаем кнопку Save, сохраняя скрипт в штатной директории /etc/wb-rules под именем r1k1.js (расширение должно быть .js, иначе получите ошибку при сохранении). Правило начинает работать автоматически после нажатия кнопки Save, если в нем нет ошибок. Проверим? Нажмем на кнопку — включается реле 1, отпускаем кнопку — реле 1 отключается. Однако все процессы происходят с задержкой: время тратится на передачу Modbus-сообщений, отработку правила контроллером. <!--К контроллеру подсоединено только одно устройство и выполняется одно простейшее правило, а задержка между нажатием кнопки и срабатыванием реле составляет уже более 300 мс. Такая задержка отклика может оказаться неприемлемой, если релейный модуль управляет, например, освещением.
 
{border="0" class="wikitable" style="text-align:center"
|-
|-
|[[Файл:Buttonpress.png|600px|thumb|left|Управление реле средствами модуля — задержка менее 0,1 c (бирюзовая линия -- кнопка, желтая -- контакт реле)]]
|[[Файл:R1t1_timings.png|600px|thumb|left|Управление реле командой с контроллера — задержка около 0,3 c (бирюзовая линия -- кнопка, желтая -- контакт реле)]]
|} -->




Мы также можем следить за нажатиями на кнопки при помощи счетчика нажатий:
<syntaxhighlight lang="ecmascript">
defineRule("switch_relay_2", {
  whenChanged: "wb-mr14_1/Input 2 counter",
  then: function (newValue, devName, cellName)  {
dev["wb-mr14_1"]["K2"] = !dev["wb-mr14_1"]["K2"];
      }
});
</syntaxhighlight>
Этот скрипт изменяет состояние реле на противоположное тому, в котором оно находилось до нажатия кнопки.
=== Более сложный скрипт ===
<!-- TODO: это всё конечно адский ад и набор плохих практик. Так делать не стоит, раздел переписать. Правильный способ - смотреть на изменение Input 1 Counter. -->
Давайте усложним задачу и напишем скрипт, который будет включать и выключать основное освещение (реле 3), но если кнопка нажата два раза подряд в течение полутора секунд, то будет включено дополнительное освещение (реле 4). Нажатие на кнопку через продолжительное время отключает основное, а повторное нажатие в течение полутора секунд и дополнительное освещение. Для этого мы используем компонент Input 3 counter и таймер, управляемый функциями setTimeout()/clearTimeout)() (подробнее смотрите на [https://github.com/contactless/wb-rules странице описания wb-rules в Github.])
В модуле реле WB-MR14 режим работы можно задавать не только для всех входов сразу, но и для отдельных входов. При этом общий режим (регистр хранения 5) должен быть 0. А для отдельного входа 3 (и 4) — значение 3 (управление только контроллером).
{|  border="1" class="wikitable" style="text-align:center"
|-
|[[Файл:List_of_channels_setup.png |800px|thumb|center|]]
|-
|[[Файл:Do_not_react_on_inputs.png|800px|thumb|center|Обратите внимание на тип -- integer. Адреса берутся из списка регистров или из шаблона]]
|}
|}
----
<syntaxhighlight lang="ecmascript">
//Повторное нажатие на кнопку в течение button_timer_delay приводит к включению дополнительного реле при включении,
//и отключениии дополнительного реле при отключении первого
//Используем реле 3 и 4
//В списке Setup commands для устройства в регистр 5 заносится значение 0, а в регистры 11 и 12 -- 3.
//Для отслеживания изменения состояния внешних входов используем счетчик нажатий Input 3 counter
//Для просмотра вывода функций log() щелкните на значке с гаечным ключом снизу справа на странице и отметьте галочку "Включить отладку"
 
var button_timer_delay = 1500 //ms; задержка для включения второго реле
var button_timer_id = null  //идентификатор таймера
defineRule("switch_relay_3_4", {
    whenChanged: "wb-mr14_1/Input 3 counter", //Следим за Input 3
    then: function(newValue, devName, cellName) {
        if (newValue && !button_timer_id) {
            log("switch_relay_3_4: Счетчик входа 3 изменил свое значение: ", newValue);
            dev["wb-mr14_1"]["K3"] = !dev["wb-mr14_1"]["K3"];
            button_timer_id = setTimeout(function() {
                log("switch_relay_3_4: Закончился таймаут: ", button_timer_id);
                button_timer_id = null;
            }, button_timer_delay);
            log("Запускаем  таймер", button_timer_id);
        } else if (newValue && button_timer_id) {
            dev["wb-mr14_1"]["K4"] = dev["wb-mr14_1"]["K3"];
            log("switch_relay_3_4: Отключаем таймаут: ", button_timer_id);
            clearTimeout(button_timer_id);
            button_timer_id = null;
        }
    }
});
</syntaxhighlight>
5813

правок