5813
правок
Kilpio (обсуждение | вклад) |
Kilpio (обсуждение | вклад) |
||
Строка 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-канальный модуль реле предназначен для систем промышленной и домашней автоматизации. | ||
Реле объединены в группы, что упрощает проводку при использовании модуля для автоматизации освещения или управления внешними контакторами. | |||
=== Выходы === | |||
В модуле установлены 14 реле HF32F-G ([http://www.hongfa.com/pro/pdf/HF32F-G_en.pdf Datasheet]), коммутирующие соответствующие 14 выходов, выведенных на винтовые зажимы, рассчитанные на максимальный ток 20 А. | |||
Контакты реле объединены в две группы, каждая со своим общим проводом, COM1 и COM2. На общий провод отводится две винтовых клеммы, соединенных на плате. Для двойных винтовых зажимов COM-контактов общий максимально допустимый ток — 40 А. | |||
В случае активной (резистивной) нагрузки реле могут коммутировать до 10 А/230 В переменного тока и до 10 А/30 В постоянного. В случае реактивной (ёмкостной или индуктивной) нагрузки (двигатели, импульсные блоки питания и т.д.) не следует коммутировать ток больше 400 мА. Используйте внешние контакторы, рассчитанные на соответствующую нагрузку. | |||
Каждый контакт реле защищен от образования дуги при замыкании/размыкании симметричным TVS-диодом. | |||
[[Файл:Relay_switches_mr14.png|450px|thumb|center|Контакты реле]] | |||
В модуле может быть включен таймер безопасного режима, который при прекращении обмена данными по Modbus с модулем отключает все реле по прошествии заданного времени. | |||
=== Входы === | |||
На безвинтовые зажимы модуля выведены 14 входов типа "сухой контакт", не изолированные от источника питания. Для устранения дребезга контактов на каждой входной линии применяются RC-цепочки. Входы подтянуты резисторами к линии питания +5V. Кнопки или выключатели с фиксацией подключаются между выводами GND и соответствующим входом Inputs. Входы могут использоваться как входы общего назначения, для счета сигналов и для прямого управления каналами реле. Программно можно выбрать три режима работы входов: управление кнопкой без фиксации или по Modbus; управление выключателем (с фиксацией) или по Modbus; управление только по Modbus. По умолчанию включен режим управления кнопкой без фиксации. | |||
=== Технические характеристики === | |||
{| class="wikitable" | {| class="wikitable" | ||
!Параметр | !Параметр | ||
!Значение | !Значение | ||
|- | |||
! colspan="2" |Питание | |||
|- | |||
|Напряжение питания | |||
|9 — 24 В постоянного тока | |||
|- | |||
Потребляемая мощность | |||
| | |||
*В режиме холостого хода (со всеми выключенными реле) — 0,5 Вт | |||
*Пиковое значение — до 12 Вт | |||
|- | |- | ||
! colspan="2" |'''Выходы''' | ! colspan="2" |'''Выходы''' | ||
Строка 31: | Строка 45: | ||
|- | |- | ||
|Тип выходов | |Тип выходов | ||
| | |Контакты механического реле | ||
|- | |- | ||
|Конфигурация контактов | |Конфигурация контактов | ||
| | |Двухпозиционные, нормально открытые. | ||
Состояния: разомкнут <—> замкнут Kx и COM | |||
замкнут | |||
|- | |- | ||
|Конфигурация выходов | |Конфигурация выходов | ||
|Две группы по 7 выходов, | |Две группы по 7 выходов, общий провод в каждой группе | ||
общий провод в каждой группе | |||
|- | |- | ||
|Максимальное коммутируемое напряжение, AC | |Максимальное коммутируемое напряжение, AC | ||
| | |250 В | ||
|- | |- | ||
|Максимальное коммутируемое напряжение, DC | |Максимальное коммутируемое напряжение, DC | ||
| | |30 В | ||
|- | |- | ||
|Максимальный коммутируемый ток | |Максимальный коммутируемый ток на каждый канал | ||
| | |||
* для резистивной нагрузки — 10 А | |||
* для ёмкостной и индуктивной нагрузки — 400 мА | |||
|- | |- | ||
|Сопротивление канала в открытом состоянии | |Сопротивление канала в открытом состоянии | ||
|< 100 | |< 100 мОм | ||
|- | |- | ||
|Напряжение изоляции между контроллером и выходом | |Напряжение изоляции между контроллером и выходом | ||
| | |1500 В (среднеквадратичное значение) | ||
|- | |- | ||
|Срок жизни: количество переключений | |Срок жизни: количество переключений для нагрузки | ||
для нагрузки | 10 А/230 В переменного тока (резистивная нагрузка) | ||
|100 000 | |100 000 | ||
|- | |- | ||
! colspan="2" |Входы | ! colspan="2" |Входы | ||
|- | |- | ||
|Количество входов | |Количество входов (Inputs 1—14) | ||
|14 | |14 | ||
|- | |- | ||
|Тип входов | |Тип входов | ||
| | |"Сухой контакт", не изолированные от источника питания | ||
не изолированные от источника питания | |||
|- | |- | ||
|Функции | |Функции | ||
| | | | ||
* Входы общего назначения | * Входы общего назначения | ||
* | * Счет сигналов | ||
* Прямое управление каналами реле | * Прямое управление каналами реле | ||
|- | |- | ||
Строка 89: | Строка 95: | ||
|- | |- | ||
|Изоляция интерфейса | |Изоляция интерфейса | ||
| | |Неизолированный | ||
|- | |- | ||
|Протокол обмена | |Протокол обмена данными | ||
|Modbus RTU | |Modbus RTU, адрес задается программно, заводские настройки указаны на наклейке | ||
|- | |- | ||
| | |Параметры интерфейса RS-485 | ||
| | | | ||
*Скорость: 9600 бит/сек | |||
*Данные: 8 бит | |||
*Проверка чётности: нет | |||
*Стоповых бит: 2 | |||
|- | |- | ||
|Готовность к работе после подачи питания | |||
| ~0,1 c | |||
|- | |- | ||
| | ! colspan="2" |Габариты | ||
|- | |- | ||
|Ширина, DIN юнитов | |Ширина, DIN-юнитов | ||
|6 | |6 | ||
|- | |- | ||
| | |Габаритные размеры (Д x Ш х В) | ||
|106 | |106,25 x 90,2 x 57,5 мм | ||
|- | |||
! colspan="2" |Индикация | |||
|- | |||
|Индикация питания и обмена данными | |||
|Жёлтый светодиод Status | |||
|- | |||
|Индикация состояния каналов реле | |||
|Зеленые светодиоды 1 — 14 | |||
|- | |||
! colspan="2" |Условия эксплуатации | |||
|- | |||
|Температура воздуха | |||
|От -20 до +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|Образец монтажа и подключения модуля (у последнего модуля на линии устанавливается терминирующий резистор). Выбор качественного блока питания очень важен для работы модуля.]] | |||
== Добавление модуля в 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 (напряжение питания модуля реле) — он меняется почти при каждом опросе модуля. | |||
Устройство 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 соединены. | ||
[[Файл: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" | ||
! | !Команда | ||
! | !десятичный код | ||
|- | |- | ||
|READ_COIL | |READ_COIL | ||
Строка 176: | Строка 222: | ||
|} | |} | ||
=== Безопасный режим === | |||
В этом режиме при прекращении обмена данными по Modbus устройство отключает реле по прошествии заданного времени. | |||
Для включения безопасного режима (Safety timer) нужно записать значение, отличное от 0, в регистр хранения командой WRITE_SINGLE_REGISTER по адресу 2. Это значение — таймаут в секундах. Значение "0" отключает безопасный режим. | |||
=== Цифровые входы === | |||
Поддерживается три режима работы цифровых входов: | Поддерживается три режима работы цифровых входов: | ||
* Режим 0: прямое управление каналами, выключатели без фиксации (кнопки). Нажатие на кнопку | * Режим 0: прямое управление каналами, выключатели без фиксации (кнопки). Нажатие на кнопку изменяет состояние реле. | ||
* Режим 1: прямое управление каналами, выключатели с фиксацией. Переключение выключателя с фиксацией устанавливает состояние реле в соответствии с положением выключателя. | * Режим 1: прямое управление каналами, выключатели с фиксацией. Переключение выключателя с фиксацией устанавливает состояние реле в соответствии с положением выключателя. | ||
* Режим 3: управление каналами отключено | * Режим 3: управление каналами отключено. | ||
Поведением по | Поведением по умолчанию является прямое управление каналами реле (режим 0). Установить режим для всех каналов можно, записав соответствующее число в регистр хранения с адресом 5. | ||
Режим можно устанавливать отдельно для каждого канала с помощью регистров | Режим можно устанавливать отдельно для каждого канала с помощью регистров 9—22. Настройки для каждого канала учитываются только в том случае, если регистр 5 (общие настройки режимов входов) находится в состоянии "0", т.е. имеет значение по умолчанию. | ||
В любом режиме работы | В любом режиме работы текущее состояние кнопок можно получить чтением регистров 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 || discrete || R || - || 1 или 0 | ||
|| состояние входа 1—14 | |||
|- | |- | ||
| 5 || holding || RW || 0 || '''0''': кнопки без фиксации | | 5 || holding || RW || 0 || '''0''': кнопки без фиксации | ||
'''1''': выключатель с фиксацией | '''1''': выключатель с фиксацией | ||
'''3''': отключить управление | '''3''': отключить управление | ||
|| режим работы кнопок | || режим работы кнопок | ||
|- | |- | ||
| 8 || holding || RW || 0 || | | 8 || holding || RW || 0 || секунды || таймаут для безопасного режима | ||
|- | |- | ||
| | | 9—22 || holding || RW || 0 || '''0''': кнопки без фиксации | ||
'''1''': выключатель с фиксацией | '''1''': выключатель с фиксацией | ||
'''3''': отключить управление | '''3''': отключить управление | ||
|| режим работы входа N | || режим работы входа 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 || - || | | 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 регистр. | |||
Значение состояния каждого реле хранится в регистрах флагов (coil). У 1-го реле адрес регистра 0, у 2-го — 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> |
правок