WB-MR14 Modbus 14 Channel Relay Module: различия между версиями
Matveevrj (обсуждение | вклад) |
Kilpio (обсуждение | вклад) |
||
(не показана 21 промежуточная версия 7 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:WB-MR14 модуль реле 14-канальный}} | {{DISPLAYTITLE:WB-MR14 модуль реле 14-канальный}} | ||
[[Файл:MR14-2.jpg| thumb | 300px|WB-MR14 модуль реле 14-канальный]] | [[Файл:MR14-2.jpg| thumb | 300px|WB-MR14 модуль реле 14-канальный]] | ||
'''Магазин: [http://contactless.ru/modbus-actuators-and-sensors/ Исполнительные устройства и датчики для шины RS-485 Modbus RTU]''' | |||
==Общая информация== | ==Общая информация== | ||
Строка 40: | Строка 41: | ||
*В режиме холостого хода (со всеми выключенными реле) — 0,5 Вт | *В режиме холостого хода (со всеми выключенными реле) — 0,5 Вт | ||
*Со всеми включенными реле — 2,5 Вт | *Со всеми включенными реле — 2,5 Вт | ||
*Пиковое значение (при включении всех реле одновременно) — до 11 Вт в течение 20 мс | *Пиковое значение (при включении всех реле одновременно) — до 11 Вт в течение 20 мс. | ||
|- | |- | ||
! colspan="2" |'''Выходы''' | ! colspan="2" |'''Выходы''' | ||
Строка 65: | Строка 66: | ||
|Максимальный коммутируемый ток на каждый канал | |Максимальный коммутируемый ток на каждый канал | ||
| | | | ||
* | * для резистивной нагрузки — 10 А | ||
* | * для ёмкостной и индуктивной нагрузки — 400 мА | ||
|- | |- | ||
|Сопротивление контактов | |Сопротивление контактов | ||
Строка 132: | Строка 133: | ||
|- | |- | ||
|Температура воздуха | |Температура воздуха | ||
|От - | |От -20 до +50 °С | ||
|- | |- | ||
|Относительная влажность | |Относительная влажность | ||
Строка 140: | Строка 141: | ||
=== Габаритные размеры модуля === | === Габаритные размеры модуля === | ||
[[File: | |||
[[File:6U_.png|499px|thumb|center|Габаритные размеры модуля WB-MRM2-mini]] | |||
=== Обмен данными === | === Обмен данными === | ||
На физическом уровне модуль подключается через интерфейс [[RS-485]]. Для управления WB-MR14 используется протокол Modbus RTU. В устройствах Wirenboard данные Modbus передаются по линиям связи RS-485. Подробнее смотрите страницу [[Протокол Modbus]]. Modbus-адрес модуля задается на заводе и | На физическом уровне модуль подключается через интерфейс [[RS-485]]. Для управления WB-MR14 используется протокол Modbus RTU. В устройствах Wirenboard данные Modbus передаются по линиям связи RS-485. Подробнее смотрите страницу [[Протокол Modbus]]. Modbus-адрес модуля задается на заводе и нанесен на наклейке на его боковой стороне. Адрес может быть изменен программно. Подробно смотрите в разделе [[#Параметры_Modbus]] | ||
== Монтаж == | == Монтаж == | ||
Строка 159: | Строка 161: | ||
Модуль необходимо устанавливать таким образом, чтобы удовлетворять требованиям электробезопасности и не допускать случайного касания контактов, находящихся под высоким напряжением. Модуль должен эксплуатироваться при рекомендованных условиях окружающей среды. | Модуль необходимо устанавливать таким образом, чтобы удовлетворять требованиям электробезопасности и не допускать случайного касания контактов, находящихся под высоким напряжением. Модуль должен эксплуатироваться при рекомендованных условиях окружающей среды. | ||
[[File:Installation_WB14.png|550px|thumb|center|Образец монтажа и подключения модуля (у последнего модуля на линии устанавливается терминирующий резистор). Выбор качественного блока питания очень важен для работы модуля]] | [[File:Installation_WB14.png|550px|thumb|center|Образец монтажа и подключения модуля (у последнего модуля на линии устанавливается терминирующий резистор). Выбор качественного блока питания очень важен для работы модуля.]] | ||
== Добавление модуля в | == Добавление модуля в web-интерфейс контроллера Wiren Board== | ||
[[Файл:The_new_device.png|300px|thumb|Новый модуль WB-MR14 в | [[Файл: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''' | В разделе Devices появилось новое устройство, название составлено из типа устройства и адреса: '''WB-MR14 1''' | ||
Обратите внимание: желтый индикатор Status на WB_MR14 начал периодически мигать, это означает, что Wiren Board обменивается данными с модулем реле. В | Обратите внимание: желтый индикатор Status на WB_MR14 начал периодически мигать, это означает, что Wiren Board обменивается данными с модулем реле. В web-интерфейсе можно следить за параметром Supply voltage (напряжение питания модуля реле) — он меняется почти при каждом опросе модуля. | ||
Устройство WB-MR14 стандартное, поэтому его описание задано в шаблоне, который хранится на контроллере Wiren Board в файле /usr/share/wb-mqtt-serial/templates/config-wb-mr14.json. | Устройство WB-MR14 стандартное, поэтому его описание задано в шаблоне, который хранится на контроллере Wiren Board в файле /usr/share/wb-mqtt-serial/templates/config-wb-mr14.json. | ||
== Управление модулем через | == Управление модулем через web-интерфейс Wiren Board == | ||
Пример управления релейным модулем WB-MR14 контроллером Wiren Board 5 и программирования сценариев управления мы рассмотрим на простом макете, когда релейный модуль является единственным устройством, подключенным к контроллеру. Нормально разомкнутая кнопка без фиксации подключена ко входу 1 и GND. Питание 12 В подается на входы V+(+) и GND (-). Входы/выходы RS-485 A и B первого порта контроллера и модуля WB-MR14 соединены. | Пример управления релейным модулем WB-MR14 контроллером Wiren Board 5 и программирования сценариев управления мы рассмотрим на простом макете, когда релейный модуль является единственным устройством, подключенным к контроллеру. Нормально разомкнутая кнопка без фиксации подключена ко входу 1 и GND. Питание 12 В подается на входы V+(+) и GND (-). Входы/выходы RS-485 A и B первого порта контроллера и модуля WB-MR14 соединены. | ||
Строка 185: | Строка 187: | ||
С помощью виртуальных выключателей в | С помощью виртуальных выключателей в web-интерфейсе K1-K14 можно управлять соответствующими выходами модуля и следить за их состоянием. Если реле будет включено или выключено через внешний вход, это отразится и в web-интерфейсе. | ||
Текущее состояние входов показывают флажки Input1 — Input14 (на них нельзя щелкнуть, чтобы изменить состояние). Счетчики нажатий/включений отображаются в полях Input 1 counter – Input 14 counter. Значения счетчиков хранятся в оперативной памяти микроконтроллера модуля реле и обнуляются при выключении/включении питания и сбросе. | Текущее состояние входов показывают флажки Input1 — Input14 (на них нельзя щелкнуть, чтобы изменить состояние). Счетчики нажатий/включений отображаются в полях Input 1 counter – Input 14 counter. Значения счетчиков хранятся в оперативной памяти микроконтроллера модуля реле и обнуляются при выключении/включении питания и сбросе. | ||
Ползунок Safety Timer позволяет задать время отключения (в секундах) всех выходов при отсутствии обмена данными с Wiren Board (0 – таймер безопасности отключен). При возобновлении связи с контроллером выключившиеся реле останутся выключенными. Ползунком удобно управлять с помощью клавиш со стрелками, предварительно сфокусировавшись на нем мышью: перемещение ползунка с помощью мыши не обеспечивает достаточную точность. Таймер безопасности позволяет остановить технологические процессы в случае, если контроль над модулем утрачен (например, перебит кабель RS-485). Если реле останутся включенными, то, например, не закроется клапан подачи жидкости, что приведет к переполнению резервуара и затоплению помещения. Всегда учитывайте возможность потери связи с контроллером при проектировании систем управления. | Ползунок Safety Timer позволяет задать время отключения (в секундах) всех выходов при отсутствии обмена данными с Wiren Board (0 – таймер безопасности отключен). При возобновлении связи с контроллером выключившиеся реле останутся выключенными. Ползунком удобно управлять с помощью клавиш со стрелками, предварительно сфокусировавшись на нем мышью: перемещение ползунка с помощью мыши не обеспечивает достаточную точность. Таймер безопасности позволяет остановить технологические процессы в случае, если контроль над модулем утрачен (например, перебит кабель RS-485). Если реле останутся включенными, то, например, не закроется клапан подачи жидкости, что приведет к переполнению резервуара и затоплению помещения. Всегда учитывайте возможность потери связи с контроллером при проектировании систем управления. | ||
== Управление по Modbus == | |||
== | |||
= | |||
Подробно о работе с модулем по протоколу Modbus написано в разделе [[Relay Module Modbus Management|Управление модулями реле Wirenboard по протоколу Modbus]]. | |||
Там же можно найти карту регистров устройства. | |||
== Примеры программирования == | == Примеры программирования == | ||
=== Пишем простой скрипт === | === Пишем простой скрипт === | ||
Попробуем перенести логику управления контактами реле модуля на контроллер Wiren Board. Для этого мы перейдем в режим, когда внешнее управление релейным модулем отключено, и будем считывать состояние входов модуля и соответствующим образом переключать реле. <!--Оценим затем, насколько этот способ управления окажется дольше, чем при переключении средствами релейного модуля.--> | Попробуем перенести логику управления контактами реле модуля на контроллер Wiren Board. Для этого мы перейдем в режим, когда внешнее управление релейным модулем отключено, и будем считывать состояние входов модуля и соответствующим образом переключать реле. <!--Оценим затем, насколько этот способ управления окажется дольше, чем при переключении средствами релейного модуля.--> | ||
MQTT-названия устройств и их элементов управления можно найти в разделе Settings | MQTT-названия устройств и их элементов управления можно найти в разделе Settings web-интерфейса (см. [[MQTT]]). | ||
В качестве альтернативного способа можно в командной строке подписаться на все топики (/#) командой | В качестве альтернативного способа можно в командной строке подписаться на все топики (/#) командой | ||
Строка 315: | Строка 216: | ||
service wb-mqtt-serial start | service wb-mqtt-serial start | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Проверяем | Проверяем — реле модуля не должны реагировать на нажатие кнопки, соединяющей выводы 1 и GND. Однако при этом в очереди публикуются сообщения о состоянии входа Input 1: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
/devices/wb-mr14_1/controls/Input 1 1 | /devices/wb-mr14_1/controls/Input 1 1 | ||
Строка 358: | Строка 259: | ||
<!-- TODO: это всё конечно адский ад и набор плохих практик. Так делать не стоит, раздел переписать. Правильный способ - смотреть на изменение Input 1 Counter. --> | <!-- TODO: это всё конечно адский ад и набор плохих практик. Так делать не стоит, раздел переписать. Правильный способ - смотреть на изменение Input 1 Counter. --> | ||
Давайте усложним задачу и напишем скрипт, который будет включать и выключать основное освещение (реле 3), но если кнопка нажата два раза подряд в течение полутора секунд, то будет включено дополнительное освещение (реле 4). Нажатие на кнопку через продолжительное время отключает основное | Давайте усложним задачу и напишем скрипт, который будет включать и выключать основное освещение (реле 3), но если кнопка нажата два раза подряд в течение полутора секунд, то будет включено дополнительное освещение (реле 4). Нажатие на кнопку через продолжительное время отключает основное, а повторное нажатие в течение полутора секунд и дополнительное освещение. Для этого мы используем компонент Input 3 counter и таймер, управляемый функциями setTimeout()/clearTimeout)() (подробнее смотрите на [https://github.com/contactless/wb-rules странице описания wb-rules в Github.]) | ||
В модуле реле WB-MR14 режим работы можно задавать не только для всех входов сразу, но и для отдельных входов. При этом общий режим (регистр хранения 5) должен быть 0. А для отдельного входа 3 (и 4) — значение 3 (управление только контроллером). | В модуле реле WB-MR14 режим работы можно задавать не только для всех входов сразу, но и для отдельных входов. При этом общий режим (регистр хранения 5) должен быть 0. А для отдельного входа 3 (и 4) — значение 3 (управление только контроллером). | ||
Строка 405: | Строка 306: | ||
}); | }); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Версия 13:08, 28 марта 2017
Магазин: Исполнительные устройства и датчики для шины RS-485 Modbus RTU
Общая информация
Назначение
14-канальный модуль реле предназначен для систем промышленной и домашней автоматизации. Реле объединены в группы, что упрощает проводку при использовании модуля для автоматизации освещения или управления внешними контакторами.
Выходы
В модуле установлены 14 реле HF32F-G (Datasheet), коммутирующие соответствующие 14 выходов. Выходы выведены на винтовые зажимы, рассчитанные на максимальный ток 20 А. Контакты реле объединены в две группы, каждая со своим общим проводом, COM1 и COM2. На общий провод отводится две винтовых клеммы, соединенных на плате. Для двойных винтовых зажимов COM-контактов общий максимально допустимый ток — 40 А.
В случае активной (резистивной) нагрузки реле могут коммутировать до 10 А/230 В переменного тока и до 10 А/30 В постоянного. В случае реактивной (ёмкостной или индуктивной) нагрузки (двигатели, импульсные блоки питания и т.д.) не следует коммутировать ток больше 400 мА. Используйте внешние контакторы, рассчитанные на соответствующую нагрузку.
Каждый контакт реле защищен от образования дуги при замыкании/размыкании симметричным TVS-диодом.
В модуле может быть включен таймер безопасного режима, который при прекращении обмена данными по Modbus с модулем отключает все реле по прошествии заданного времени.
Входы
На безвинтовые зажимы модуля выведены 14 входов типа "сухой контакт", не изолированные от источника питания. Для устранения дребезга контактов на каждой входной линии применяются RC-цепочки. Входы подтянуты резисторами к линии питания +5 В. Кнопки или выключатели с фиксацией подключаются между выводами GND и соответствующим входом Inputs. Входы могут использоваться как входы общего назначения, для счета сигналов и для прямого управления каналами реле. Программно можно выбрать три режима работы входов: управление кнопкой без фиксации или по Modbus; управление выключателем (с фиксацией) или по Modbus; управление только по Modbus. По умолчанию включен режим управления кнопкой без фиксации.
Технические характеристики
Параметр | Значение |
---|---|
Питание | |
Напряжение питания | 9 — 24 В постоянного тока |
Потребляемая мощность |
|
Выходы | |
Количество выходов | 14 |
Тип выходов | Контакты механического реле |
Конфигурация контактов | Двухпозиционные, нормально открытые.
Состояния: разомкнут <—> замкнут Kx и COM |
Конфигурация выходов | Две группы по 7 выходов, общий провод в каждой группе |
Максимальное коммутируемое напряжение, AC | 250 В |
Максимальное коммутируемое напряжение, DC | 30 В |
Максимальный коммутируемый ток на каждый канал |
|
Сопротивление контактов | < 100 миллиом |
Напряжение изоляции между контроллером и выходом | 1500 В (среднеквадратичное значение) |
Срок жизни: количество переключений для нагрузки
10 А/230 В переменного тока (резистивная нагрузка) |
100 000 |
Входы | |
Количество входов (Inputs 1—14) | 14 |
Тип входов | "Сухой контакт", не изолированные от источника питания |
Функции |
|
Управление | |
Интерфейс управления | RS-485 |
Изоляция интерфейса | Неизолированный |
Протокол обмена данными | Modbus RTU, адрес задается программно, заводские настройки указаны на наклейке |
Параметры интерфейса RS-485 |
|
Готовность к работе после подачи питания | ~0,1 c |
Габариты | |
Ширина, DIN-юнитов | 6 |
Габаритные размеры (Д x Ш х В) | 106,25 x 90,2 x 57,5 мм |
Индикация | |
Индикация питания и обмена данными | Жёлтый светодиод Status |
Индикация состояния каналов реле | Зеленые светодиоды 1 — 14 |
Условия эксплуатации | |
Температура воздуха | От -20 до +50 °С |
Относительная влажность | До 92%, без конденсации влаги |
Габаритные размеры модуля
Обмен данными
На физическом уровне модуль подключается через интерфейс RS-485. Для управления WB-MR14 используется протокол Modbus RTU. В устройствах Wirenboard данные Modbus передаются по линиям связи RS-485. Подробнее смотрите страницу Протокол Modbus. Modbus-адрес модуля задается на заводе и нанесен на наклейке на его боковой стороне. Адрес может быть изменен программно. Подробно смотрите в разделе #Параметры_Modbus
Монтаж
Релейный модуль монтируется на стандартную DIN-рейку шириной 35 мм и занимает ширину 6 DIN-модулей.
Блоки безвинтовых зажимов на плате реле служат для подключения линий питания, управления (RS-485) и входных контактов. Все выводы GND на безвинтовых зажимах (в том числе и "минус" питания) объединены на плате. При использовании при монтаже наконечников типа НШВИ необходимо, чтобы диаметр изолированных манжет не превышал 3,6 мм, сечение провода — 0,75 мм2, а длина проводящей втулки — 5—6 мм. Винтовые зажимы принимают провод сечением 2,5—4 мм2. Сечение провода должно соответствовать коммутируемой нагрузке.
При подключении коммутируемых устройств важно помнить, что хотя каждый из 7 винтовых зажимов выдерживает соответствующий ток 10 А, два зажима общего провода не рассчитаны на протекание общего тока 70 А. Такой ток приведет к повреждению платы релейного модуля. Сдвоенные общие контакты COM выдерживают ток около 40 А.
Кнопки или выключатели с фиксацией подключаются между выводами GND и соответствующим входом Inputs. Ток, протекающий при замыкании кнопки или выключателя, невелик, так что тип кнопки или выключателя может быть любым. Несмотря на встроенную защиту от дребезга, выбирайте качественные кнопки и выключатели, чтобы исключить ложные срабатывания из-за плохих контактов.
Если устройство — последнее на линии RS-485, то между его входами A и B необходимо установить резистор-терминатор сопротивлением 120 Ом. Практика показывает, что в случае стендовых испытаний при небольшой длине линии RS-485 и небольшом количестве устройств терминатор на последнем устройстве в линии можно не устанавливать.
Модуль необходимо устанавливать таким образом, чтобы удовлетворять требованиям электробезопасности и не допускать случайного касания контактов, находящихся под высоким напряжением. Модуль должен эксплуатироваться при рекомендованных условиях окружающей среды.
Добавление модуля в web-интерфейс контроллера Wiren Board
Новое устройство добавляется в 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 (напряжение питания модуля реле) — он меняется почти при каждом опросе модуля.
Устройство WB-MR14 стандартное, поэтому его описание задано в шаблоне, который хранится на контроллере Wiren Board в файле /usr/share/wb-mqtt-serial/templates/config-wb-mr14.json.
Управление модулем через web-интерфейс Wiren Board
Пример управления релейным модулем WB-MR14 контроллером Wiren Board 5 и программирования сценариев управления мы рассмотрим на простом макете, когда релейный модуль является единственным устройством, подключенным к контроллеру. Нормально разомкнутая кнопка без фиксации подключена ко входу 1 и GND. Питание 12 В подается на входы V+(+) и GND (-). Входы/выходы RS-485 A и B первого порта контроллера и модуля WB-MR14 соединены.
С помощью виртуальных выключателей в web-интерфейсе K1-K14 можно управлять соответствующими выходами модуля и следить за их состоянием. Если реле будет включено или выключено через внешний вход, это отразится и в web-интерфейсе.
Текущее состояние входов показывают флажки Input1 — Input14 (на них нельзя щелкнуть, чтобы изменить состояние). Счетчики нажатий/включений отображаются в полях Input 1 counter – Input 14 counter. Значения счетчиков хранятся в оперативной памяти микроконтроллера модуля реле и обнуляются при выключении/включении питания и сбросе.
Ползунок Safety Timer позволяет задать время отключения (в секундах) всех выходов при отсутствии обмена данными с Wiren Board (0 – таймер безопасности отключен). При возобновлении связи с контроллером выключившиеся реле останутся выключенными. Ползунком удобно управлять с помощью клавиш со стрелками, предварительно сфокусировавшись на нем мышью: перемещение ползунка с помощью мыши не обеспечивает достаточную точность. Таймер безопасности позволяет остановить технологические процессы в случае, если контроль над модулем утрачен (например, перебит кабель RS-485). Если реле останутся включенными, то, например, не закроется клапан подачи жидкости, что приведет к переполнению резервуара и затоплению помещения. Всегда учитывайте возможность потери связи с контроллером при проектировании систем управления.
Управление по Modbus
Подробно о работе с модулем по протоколу Modbus написано в разделе Управление модулями реле Wirenboard по протоколу Modbus. Там же можно найти карту регистров устройства.
Примеры программирования
Пишем простой скрипт
Попробуем перенести логику управления контактами реле модуля на контроллер Wiren Board. Для этого мы перейдем в режим, когда внешнее управление релейным модулем отключено, и будем считывать состояние входов модуля и соответствующим образом переключать реле. MQTT-названия устройств и их элементов управления можно найти в разделе Settings web-интерфейса (см. MQTT).
В качестве альтернативного способа можно в командной строке подписаться на все топики (/#) командой
mosquitto_sub -v -t /#
Очень скоро станет ясно, что имя нашего устройства wb-mr14_1. Теперь мы можем подписаться только на сообщения данного устройства и без труда определить названия элементов управления:
mosquitto_sub -v -t /devices/wb-mr14_1/#
Реле называются /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:
service wb-mqtt-serial stop
modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x05 -r0x05 3
service wb-mqtt-serial start
Проверяем — реле модуля не должны реагировать на нажатие кнопки, соединяющей выводы 1 и GND. Однако при этом в очереди публикуются сообщения о состоянии входа Input 1:
/devices/wb-mr14_1/controls/Input 1 1
/devices/wb-mr14_1/controls/Input 1 0
Простые скрипты можно создавать прямо в веб-интерфейсе Wiren Board, для сложных стоит выбрать свою любимую среду разработки. Переходим в раздел Scripts и нажимаем ссылку New... Наше первое правило будет устанавливать состояние реле в зависимости от состояния кнопки: кнопка нажата — реле включено, кнопка отпущена — реле выключено.
defineRule("switch_relay_1", {
whenChanged: "wb-mr14_1/Input 1",
then: function (newValue, devName, cellName) {
dev["wb-mr14_1"]["K1"] = newValue;
}
});
Нажимаем кнопку Save, сохраняя скрипт в штатной директории /etc/wb-rules под именем r1k1.js (расширение должно быть .js, иначе получите ошибку при сохранении). Правило начинает работать автоматически после нажатия кнопки Save, если в нем нет ошибок. Проверим? Нажмем на кнопку — включается реле 1, отпускаем кнопку — реле 1 отключается. Однако все процессы происходят с задержкой: время тратится на передачу Modbus-сообщений, отработку правила контроллером.
Мы также можем следить за нажатиями на кнопки при помощи счетчика нажатий:
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"];
}
});
Этот скрипт изменяет состояние реле на противоположное тому, в котором оно находилось до нажатия кнопки.
Более сложный скрипт
Давайте усложним задачу и напишем скрипт, который будет включать и выключать основное освещение (реле 3), но если кнопка нажата два раза подряд в течение полутора секунд, то будет включено дополнительное освещение (реле 4). Нажатие на кнопку через продолжительное время отключает основное, а повторное нажатие в течение полутора секунд и дополнительное освещение. Для этого мы используем компонент Input 3 counter и таймер, управляемый функциями setTimeout()/clearTimeout)() (подробнее смотрите на странице описания wb-rules в Github.) В модуле реле WB-MR14 режим работы можно задавать не только для всех входов сразу, но и для отдельных входов. При этом общий режим (регистр хранения 5) должен быть 0. А для отдельного входа 3 (и 4) — значение 3 (управление только контроллером).
//Повторное нажатие на кнопку в течение 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;
}
}
});