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

Нет описания правки
 
(не показано 66 промежуточных версий 10 участников)
Строка 1: Строка 1:
[[Файл:WB-MR14.jpg| thumb | 300px|WB-MR14 модуль реле 14-ти канальный]]
'''Модель снята с производства, но вы можете [[Центр документации#Релейные модули | подобрать другие модели реле]]'''
==== Назначение ====
{{DISPLAYTITLE:WB-MR14 модуль реле 14-канальный}}
14-ти канальный модуль реле предназначен для систем промышленной и домашней автоматизации.
[[Файл:MR14-2.jpg| thumb | 300px|WB-MR14 модуль реле 14-канальный]]
Использование групп реле позволяет упростить проводку при использовании модуля для автоматизации освещения и при управлении внешними контакторами.


Исполнение: корпус на DIN-рейку (ширина 6 юнита).  Напряжение питания 9 – 24В
==Общая информация==


Управление модулем производится с контроллера или ПК по шине RS-485 командами по протоколу MODBUS, а также с помощью внешних кнопок.
=== Назначение ===
14-канальный модуль реле предназначен для систем промышленной и домашней автоматизации.
Реле объединены в группы, что упрощает проводку при использовании модуля для автоматизации освещения или управления внешними контакторами.


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


* Напряжение питания: от 9 до 24 В.
В случае активной (резистивной) нагрузки реле могут коммутировать до 10 А/230 В переменного тока и до 10 А/30 В постоянного. В случае реактивной (ёмкостной или индуктивной) нагрузки (двигатели, импульсные блоки питания и т.д.) не следует коммутировать ток больше 400 мА. Используйте внешние контакторы, рассчитанные на соответствующую нагрузку.  
* Потребляемая мощность: 1.5Вт.
* Интерфейс: RS485, ModBus RTU.
* Светодиодная индикация питания и обмена данными
* Светодиодная индикация состояния каждого канала.
* 14 входов типа "сухой контакт" общего назначения с функцией прямого управления каналами


* Установка в электрощит на DIN рейку, корпус шириной 6 DIN.
Каждый контакт реле защищен от образования дуги при замыкании/размыкании симметричным TVS-диодом.


Рабочий ток указан для резистивной нагрузки переменного тока.
[[Файл:Relay_switches_mr14.png|450px|thumb|center|Контакты реле]]


==== Условия эксплуатации: ====
В модуле может быть включен таймер безопасного режима, который при прекращении обмена данными по Modbus с модулем отключает все реле по прошествии заданного времени.


* Температура воздуха от -20°С до +50°С;
=== Входы ===
* Относительная влажность воздуха до 92%,без конденсата влаги.
На безвинтовые зажимы модуля выведены 14 входов типа "сухой контакт", не изолированные от источника питания. Для устранения дребезга контактов на каждой входной линии применяются RC-цепочки. Входы подтянуты резисторами к линии питания +5 В. Кнопки или выключатели с фиксацией подключаются между выводами GND и соответствующим входом Inputs. Входы могут использоваться как входы общего назначения, для счета сигналов и для прямого управления каналами реле. Программно можно выбрать три режима работы входов: управление кнопкой без фиксации или по Modbus; управление выключателем (с фиксацией) или по Modbus; управление только по Modbus. По умолчанию включен режим управления кнопкой без фиксации.


==== Допустимая нагрузка ====
=== Технические характеристики ===


Модуль реле предназначен для коммутирования резистивной нагрузки. Для переменного тока (230V AC), допустимый ток для каждого канала указан в описании. Если каналы модуля реле используются для коммутирования ёмкостной или индуктивной нагрузки, то пиковые значения тока или мощности при включении или отключении нагрузки могут превысить максимальные допустимые параметры, даже в том случае, если заявленные паметры потребления прибора в стационарном режиме и укладываются в заявленные параметры.
{| border="1" class="wikitable" style="text-align:left"
|-
!Параметр
!Значение
|-
! colspan="2" |'''Питание'''
|-
|Напряжение питания
|9 — 24 В постоянного тока
|-
|Потребляемая мощность
|
*В режиме холостого хода (со всеми выключенными реле) — 0,5 Вт
*Со всеми включенными реле — 2,5 Вт
*Пиковое значение (при включении всех реле одновременно) — до 11 Вт в течение 20 мс
|-
! colspan="2" |'''Выходы'''
|-
|Количество выходов
|14
|-
|Тип выходов
|Контакты механического реле
|-
|Конфигурация контактов
|Двухпозиционные, нормально открытые.
Состояния: разомкнут <&mdash;> замкнут Kx и COM
|-
|Конфигурация выходов
|Две группы по 7 выходов, общий провод в каждой группе
|-
|Максимальное коммутируемое напряжение, AC
|250 В
|-
|Максимальное коммутируемое напряжение, DC
|30 В
|-
|Максимальный коммутируемый ток на каждый канал
|
* Для резистивной нагрузки — 10 А
* Для ёмкостной и индуктивной нагрузки — 400 мА
|-
|Сопротивление контактов
|< 100 миллиом
|-
|Напряжение изоляции между контроллером и выходом
|1500 В (среднеквадратичное значение)
|-
|Срок жизни: количество переключений для нагрузки
10 А/230 В переменного тока (резистивная нагрузка)
|100 000
|-
! colspan="2" |Входы
|-
|Количество входов (Inputs 1&mdash;14)
|14
|-
|Тип входов
|"Сухой контакт", не изолированные от источника питания
|-
|Функции
|
* Входы общего назначения
* Счет сигналов
* Прямое управление каналами реле
|-
! colspan="2" |Управление
|-
|Интерфейс управления
|RS-485
|-
|Изоляция интерфейса
|Неизолированный
|-
|Протокол обмена данными
|Modbus RTU, адрес задается программно, заводские настройки указаны на наклейке
|-
|Параметры интерфейса RS-485
|
*Скорость: 9600 бит/сек
*Данные: 8 бит
*Проверка чётности: нет
*Стоповых бит: 2
|-
|Готовность к работе после подачи питания
| ~0,1 c
|-
! colspan="2" |Габариты
|-
|Ширина, DIN-юнитов
|6
|-
|Габаритные размеры (Д x Ш х В)  
|106,25 x 90,2 x 57,5 мм
|-
! colspan="2" |Индикация
|-
|Индикация питания и обмена данными
|Жёлтый светодиод Status
|-
|Индикация состояния каналов реле
|Зеленые светодиоды 1 — 14
|-
! colspan="2" |Условия эксплуатации
|-
|Температура воздуха
|От -40 до +50 °С
|-
|Относительная влажность
|До 92%, без конденсации влаги
|-
|}
 
=== Габаритные размеры модуля ===
[[File:DIN 6U.png |450px|thumb|center|Габаритные размеры]]
 
=== Обмен данными ===
 
На физическом уровне модуль подключается через интерфейс [[RS-485]]. Для управления WB-MR14 используется протокол Modbus RTU. В устройствах Wirenboard данные Modbus передаются по линиям связи RS-485. Подробнее смотрите страницу [[Протокол Modbus]]. Modbus-адрес модуля задается на заводе и расположен на боковой стороне устройства. Адрес может быть изменен программно. Подробно смотрите в разделе [[#Параметры_Modbus]]
 
== Монтаж ==
Релейный модуль монтируется на стандартную DIN-рейку шириной 35 мм и занимает ширину 6 DIN-модулей.
 
Блоки безвинтовых зажимов на плате реле служат для подключения линий питания, управления (RS-485) и входных контактов. Все выводы GND на безвинтовых зажимах (в том числе и "минус" питания) объединены на плате. При использовании при монтаже наконечников типа НШВИ необходимо, чтобы диаметр изолированных манжет не превышал 3,6 мм, сечение провода — 0,75 мм<sup>2</sup>, а длина проводящей втулки — 5—6 мм. Винтовые зажимы принимают провод сечением 2,5—4 мм<sup>2</sup>. Сечение провода должно соответствовать коммутируемой нагрузке.
 
При подключении коммутируемых устройств важно помнить, что хотя каждый из 7 винтовых зажимов выдерживает соответствующий ток 10 А, два зажима общего провода не рассчитаны на протекание общего тока 70 А. Такой ток приведет к повреждению платы релейного модуля. Сдвоенные общие контакты COM выдерживают ток около 40 А.
 
Кнопки или выключатели с фиксацией подключаются между выводами GND и соответствующим входом Inputs. Ток, протекающий при замыкании кнопки или выключателя, невелик, так что тип кнопки или выключателя может быть любым. Несмотря на встроенную защиту от дребезга, выбирайте качественные кнопки и выключатели, чтобы исключить ложные срабатывания из-за плохих контактов.
 
Если устройство — последнее на линии RS-485, то между его входами A и B необходимо установить резистор-терминатор сопротивлением 120 Ом. Практика показывает, что в случае стендовых испытаний при небольшой длине линии RS-485 и небольшом количестве устройств терминатор на последнем устройстве в линии можно не устанавливать.
 
Модуль необходимо устанавливать таким образом, чтобы удовлетворять требованиям электробезопасности и не допускать случайного касания контактов, находящихся под высоким напряжением. Модуль должен эксплуатироваться при рекомендованных условиях окружающей среды.
 
[[File:Installation_WB14.png|550px|thumb|center|Образец монтажа и подключения модуля (у последнего модуля на линии устанавливается терминирующий резистор). Выбор качественного блока питания очень важен для работы модуля]]


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


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


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


К синим клеммам подключаются RS-485 и питание:
Устройство WB-MR14 стандартное, поэтому его описание задано в шаблоне, который хранится на контроллере Wiren Board в файле /usr/share/wb-mqtt-serial/templates/config-wb-mr14.json.


* А и В - сигнальные линии RS485
== Управление модулем через веб-интерфейс Wiren Board ==
* V+ и GND - питание


Внешние кнопки и датчики подключаются между соответствующим входом блока Inputs и GND.  
Пример управления релейным модулем 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|Время отключения таймера безопасности]]
|}


* Между Input 1 и GND - кнопка управления 1 реле


== Управление ==
С помощью виртуальных выключателей в веб-интерфейсе K1-K14 можно управлять соответствующими выходами модуля и следить за их состоянием. Если реле будет включено или выключено через внешний вход, это отразится и в веб-интерфейсе.
Текущее состояние входов показывают флажки Input1 — Input14 (на них нельзя щелкнуть, чтобы изменить состояние). Счетчики нажатий/включений отображаются в полях  Input 1 counter – Input 14 counter. Значения счетчиков хранятся в оперативной памяти микроконтроллера модуля реле и обнуляются при выключении/включении питания и сбросе.


==== Параметры шины. ====
Ползунок Safety Timer позволяет задать время отключения (в секундах) всех выходов при отсутствии обмена данными с Wiren Board (0 – таймер безопасности отключен). При возобновлении связи с контроллером выключившиеся реле останутся выключенными. Ползунком удобно управлять с помощью клавиш со стрелками, предварительно сфокусировавшись на нем мышью: перемещение ползунка с помощью мыши не обеспечивает достаточную точность. Таймер безопасности позволяет остановить технологические процессы в случае, если контроль над модулем утрачен (например, перебит кабель RS-485). Если реле останутся включенными, то, например, не закроется клапан подачи жидкости, что приведет к переполнению резервуара и затоплению помещения. Всегда учитывайте возможность потери связи с контроллером при проектировании систем управления.


Скорость 9600 бит/сек, данных - 8 бит,
<!-- НЕ ТРОГАТЬ -->
чётность – нет, стоповый бит - 2.
<!-- НЕ ТРОГАТЬ -->
== Параметры 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" cellpadding="3" cellspacing="0"
{| border="1" class="wikitable" style="text-align:center"
!Command
!Команда
!command (dec)
!десятичный код
|-
|-
|READ_COIL  
|READ_COIL  
| 1
| 1
|-
|READ DISCRETE INPUTS
| 2
|-
|-
|WRITE_SINGLE_COIL || 5
|WRITE_SINGLE_COIL || 5
|-
|-
|WRITE_MULTI_COILS || 15
|WRITE_MULTI_COILS || 15
|-
|-
|READ_HOLDING_REGISTERS || 3
|READ_HOLDING_REGISTERS || 3
|-
|-
|WRITE_SINGLE_REGISTER || 6
|WRITE_SINGLE_REGISTER || 6
|-
|-
|WRITE_MULTI_REGISTERS || 16
|WRITE_MULTI_REGISTERS || 16
|-
|-
|}
|}


Смена адреса производится широковещательный (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: прямое управление каналами, выключатели с фиксацией. Переключение выключателя с фиксацией устанавливает состояние реле в соответствии с положением выключателя.
* Режим 255: управление каналами отключено  
* Режим 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" cellpadding="5" cellspacing="0"
 
{| 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: - выключатель, 3: отключить управление || режим работы кнопок
'''1''': выключатель с фиксацией
'''3''': отключить управление  
|| режим работы кнопок
|-
|-
| 8 || holding || RW || 0 || seconds || таймаут для безопасного режима
| 6
(только в прошивках 1.5.3 и позднее)
|| holding || RW || 0 || '''0''': не сохранять состояние реле при отключении питания
'''1''': сохранять состояние реле при отключении питания
|| режим работы реле при отключении питания
|-
|-
| 9-22 || holding || RW || 0 || 0: - кнопка без фиксации ,1: - кнопка с фиксацией, 3: отключить управление || режим работы входа N. В регистре 5 должен быть записан "0".
| 8 || holding || RW || 0 || секунды || таймаут для безопасного режима
|-
|-
| 9—22 || holding || RW || 0 || '''0''': кнопки без фиксации
'''1''': выключатель с фиксацией


 
'''3''': отключить управление
| 32-45||  input || R || 0 || unsigned int || счетчик нажатий входа 1-11
|| режим работы входа N;
в регистре 5 должен быть записан "0"
|-
| 32—45||  input || R || 0 || 16-bit unsigned int || счетчик нажатий входа 1—14
|-
|-
 
| 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__||  дата сборки прошивки
|-
|}


| 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 регистр.
 
Значение состояния каждого реле хранится в регистрах флагов (coil). У 1-го реле адрес регистра 0, у 2-го &mdash; 1 и т.д.
 
== Примеры программирования ==
=== Пишем простой скрипт ===
Попробуем перенести логику управления контактами реле модуля на контроллер Wiren Board. Для этого мы перейдем в режим, когда внешнее управление релейным модулем отключено, и будем считывать состояние входов модуля и соответствующим образом переключать реле. <!--Оценим затем, насколько этот способ управления окажется дольше, чем при переключении средствами релейного модуля.-->
MQTT-названия устройств и их элементов управления можно найти в разделе Settings веб-интерфейса (см. [[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>
[[Периферийные устройства с интерфейсом RS-485 серии WB-xxxx |Назад к списку периферийных устройств]]
translator, wb_editors
4256

правок