|
|
(не показаны 64 промежуточные версии 9 участников) |
Строка 1: |
Строка 1: |
| '''Модель снята с производства, но вы можете [[Центр документации#Релейные модули | подобрать другие модели реле]]'''
| | [[Файл:MR14-2.jpg| thumb | 300px|WB-MR14 модуль реле 14-ти канальный]] |
| {{DISPLAYTITLE:WB-MR14 модуль реле 14-канальный}}
| | ==== Назначение ==== |
| [[Файл:MR14-2.jpg| thumb | 300px|WB-MR14 модуль реле 14-канальный]] | | 14-ти канальный модуль реле предназначен для систем промышленной и домашней автоматизации. |
| | Использование групп реле позволяет упростить проводку при использовании модуля для автоматизации освещения и при управлении внешними контакторами. |
|
| |
|
| ==Общая информация==
| | Исполнение: корпус на DIN-рейку (ширина 6 юнита). Напряжение питания 9 – 24В |
|
| |
|
| === Назначение ===
| | Управление модулем производится с контроллера или ПК по шине RS-485 командами по протоколу MODBUS, а также с помощью внешних кнопок. |
| 14-канальный модуль реле предназначен для систем промышленной и домашней автоматизации.
| |
| Реле объединены в группы, что упрощает проводку при использовании модуля для автоматизации освещения или управления внешними контакторами.
| |
|
| |
|
| === Выходы === | | ==== Технические характеристики ==== |
| В модуле установлены 14 реле HF32F-G ([http://www.hongfa.com/pro/pdf/HF32F-G_en.pdf Datasheet]), коммутирующие соответствующие 14 выходов. Выходы выведены на винтовые зажимы, рассчитанные на максимальный ток 20 А.
| | * 14 каналов реле на 10А (230V AC) |
| Контакты реле объединены в две группы, каждая со своим общим проводом, COM1 и COM2. На общий провод отводится две винтовых клеммы, соединенных на плате. Для двойных винтовых зажимов COM-контактов общий максимально допустимый ток — 40 А.
| |
|
| |
|
| В случае активной (резистивной) нагрузки реле могут коммутировать до 10 А/230 В переменного тока и до 10 А/30 В постоянного. В случае реактивной (ёмкостной или индуктивной) нагрузки (двигатели, импульсные блоки питания и т.д.) не следует коммутировать ток больше 400 мА. Используйте внешние контакторы, рассчитанные на соответствующую нагрузку.
| | * Напряжение питания: от 9 до 24 В. |
| | * Потребляемая мощность: 2Вт. |
| | * Интерфейс: RS485, ModBus RTU. |
| | * Светодиодная индикация питания и обмена данными |
| | * Светодиодная индикация состояния каждого канала. |
| | * 14 входов типа "сухой контакт" общего назначения с функцией прямого управления каналами |
|
| |
|
| Каждый контакт реле защищен от образования дуги при замыкании/размыкании симметричным TVS-диодом.
| | * Установка в электрощит на DIN рейку, корпус шириной 6 DIN. |
|
| |
|
| [[Файл:Relay_switches_mr14.png|450px|thumb|center|Контакты реле]]
| | Рабочий ток указан для резистивной нагрузки переменного тока. |
|
| |
|
| В модуле может быть включен таймер безопасного режима, который при прекращении обмена данными по Modbus с модулем отключает все реле по прошествии заданного времени.
| | ==== Условия эксплуатации: ==== |
|
| |
|
| === Входы ===
| | * Температура воздуха от -20°С до +50°С; |
| На безвинтовые зажимы модуля выведены 14 входов типа "сухой контакт", не изолированные от источника питания. Для устранения дребезга контактов на каждой входной линии применяются RC-цепочки. Входы подтянуты резисторами к линии питания +5 В. Кнопки или выключатели с фиксацией подключаются между выводами GND и соответствующим входом Inputs. Входы могут использоваться как входы общего назначения, для счета сигналов и для прямого управления каналами реле. Программно можно выбрать три режима работы входов: управление кнопкой без фиксации или по Modbus; управление выключателем (с фиксацией) или по Modbus; управление только по Modbus. По умолчанию включен режим управления кнопкой без фиксации.
| | * Относительная влажность воздуха до 92%,без конденсата влаги. |
|
| |
|
| === Технические характеристики === | | ==== Допустимая нагрузка ==== |
|
| |
|
| {| border="1" class="wikitable" style="text-align:left"
| | Модуль реле предназначен для коммутирования резистивной нагрузки. Для переменного тока (230V AC), допустимый ток для каждого канала указан в описании. Если каналы модуля реле используются для коммутирования ёмкостной или индуктивной нагрузки, то пиковые значения тока или мощности при включении или отключении нагрузки могут превысить максимальные допустимые параметры, даже в том случае, если заявленные паметры потребления прибора в стационарном режиме и укладываются в заявленные параметры. |
| |-
| |
| !Параметр
| |
| !Значение
| |
| |-
| |
| ! colspan="2" |'''Питание'''
| |
| |-
| |
| |Напряжение питания
| |
| |9 — 24 В постоянного тока
| |
| |-
| |
| |Потребляемая мощность
| |
| |
| |
| *В режиме холостого хода (со всеми выключенными реле) — 0,5 Вт
| |
| *Со всеми включенными реле — 2,5 Вт
| |
| *Пиковое значение (при включении всех реле одновременно) — до 11 Вт в течение 20 мс
| |
| |-
| |
| ! colspan="2" |'''Выходы'''
| |
| |-
| |
| |Количество выходов
| |
| |14
| |
| |-
| |
| |Тип выходов
| |
| |Контакты механического реле
| |
| |-
| |
| |Конфигурация контактов
| |
| |Двухпозиционные, нормально открытые.
| |
| Состояния: разомкнут <—> замкнут Kx и COM
| |
| |-
| |
| |Конфигурация выходов
| |
| |Две группы по 7 выходов, общий провод в каждой группе
| |
| |-
| |
| |Максимальное коммутируемое напряжение, AC
| |
| |250 В
| |
| |-
| |
| |Максимальное коммутируемое напряжение, DC
| |
| |30 В
| |
| |-
| |
| |Максимальный коммутируемый ток на каждый канал
| |
| |
| |
| * Для резистивной нагрузки — 10 А
| |
| * Для ёмкостной и индуктивной нагрузки — 400 мА
| |
| |-
| |
| |Сопротивление контактов
| |
| |< 100 миллиом
| |
| |-
| |
| |Напряжение изоляции между контроллером и выходом
| |
| |1500 В (среднеквадратичное значение)
| |
| |-
| |
| |Срок жизни: количество переключений для нагрузки
| |
| 10 А/230 В переменного тока (резистивная нагрузка)
| |
| |100 000
| |
| |-
| |
| ! colspan="2" |Входы
| |
| |-
| |
| |Количество входов (Inputs 1—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|Образец монтажа и подключения модуля (у последнего модуля на линии устанавливается терминирующий резистор). Выбор качественного блока питания очень важен для работы модуля]]
| |
|
| |
|
| == Добавление модуля в веб-интерфейс контроллера Wiren Board==
| | Мы не рекомендуем использовать WB-MR14 для коммутирования индуктивной или ёмкостной нагрузки номинальной мощностью более 400W для канлов реле с допустимым током 10А. |
| [[Файл: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'''
| | ==== Порядок подключения ==== |
|
| |
|
| Обратите внимание: желтый индикатор Status на WB_MR14 начал периодически мигать, это означает, что Wiren Board обменивается данными с модулем реле. В веб-интерфейсе можно следить за параметром Supply voltage (напряжение питания модуля реле) — он меняется почти при каждом опросе модуля.
| | Модуль выполнен в пластмассовом корпусе и предназначен для установки в монтажную коробку на DIN рейку. |
|
| |
|
| Устройство WB-MR14 стандартное, поэтому его описание задано в шаблоне, который хранится на контроллере Wiren Board в файле /usr/share/wb-mqtt-serial/templates/config-wb-mr14.json.
| | К синим клеммам подключаются RS-485 и питание: |
|
| |
|
| == Управление модулем через веб-интерфейс Wiren Board ==
| | * А и В - сигнальные линии RS485 |
| | * V+ и GND - питание |
|
| |
|
| Пример управления релейным модулем WB-MR14 контроллером Wiren Board 5 и программирования сценариев управления мы рассмотрим на простом макете, когда релейный модуль является единственным устройством, подключенным к контроллеру. Нормально разомкнутая кнопка без фиксации подключена ко входу 1 и GND. Питание 12 В подается на входы V+(+) и GND (-). Входы/выходы RS-485 A и B первого порта контроллера и модуля WB-MR14 соединены.
| | Внешние кнопки и датчики подключаются между соответствующим входом блока Inputs и GND. |
| [[Файл: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" class="wikitable" style="text-align:center" | | {| border="1" cellpadding="3" cellspacing="0" |
| !Команда | | !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. Это значение — таймаут в секундах. Значение "0" отключает безопасный режим.
| |
|
| |
|
| === Цифровые входы === | | Значение каждого реле хранится в COIL. У 1го реле адрес 0, у 2го - 1. |
| | |
| | ==== Безопасный режим ==== |
| | В этом режиме при прекращение обмена данными по modbus устройство отключает реле по прошествии заданного времени. |
| | |
| | Для включения безопасного режима нужно записать значение отличное от 0 в HOLDING_REGISTER по адресу 2. Это значение - таймаут в секундах. |
| | ==== Цифровые входы ==== |
|
| |
|
| Поддерживается три режима работы цифровых входов: | | Поддерживается три режима работы цифровых входов: |
| * Режим 0: прямое управление каналами, выключатели без фиксации (кнопки). Нажатие на кнопку изменяет состояние реле. | | * Режим 0: прямое управление каналами, выключатели без фиксации (кнопки). Нажатие на кнопку переключает состояние реле. |
| * Режим 1: прямое управление каналами, выключатели с фиксацией. Переключение выключателя с фиксацией устанавливает состояние реле в соответствии с положением выключателя. | | * Режим 1: прямое управление каналами, выключатели с фиксацией. Переключение выключателя с фиксацией устанавливает состояние реле в соответствии с положением выключателя. |
| * Режим 3: управление каналами отключено. | | * Режим 255: управление каналами отключено |
|
| |
|
| Поведением по умолчанию является прямое управление каналами реле (режим 0). Установить режим для всех каналов можно, записав соответствующее число в регистр хранения с адресом 5. | | Поведением по-умолчанию является прямое управление каналами реле (режим 0). Установить режим для всех каналов можно записав соответствующее число в HOLDING_REGISTER по адресу 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 или 0 | | | 0-13 || discrete || R || - || || состояние входа 1-14 |
| || состояние входа 1—14 | |
| |- | | |- |
| | 5 || holding || RW || 0 || '''0''': кнопки без фиксации | | |
| '''1''': выключатель с фиксацией
| | | 5 || holding || RW || 0 || 0: - кнопки, 1: - выключатель, 3: отключить управление || режим работы кнопок |
| '''3''': отключить управление
| |
| || режим работы кнопок | |
| |- | | |- |
| | 6 | | | 8 || holding || RW || 0 || seconds || таймаут для безопасного режима |
| (только в прошивках 1.5.3 и позднее)
| |
| || holding || RW || 0 || '''0''': не сохранять состояние реле при отключении питания | |
| '''1''': сохранять состояние реле при отключении питания
| |
| || режим работы реле при отключении питания | |
| |- | | |- |
| | 8 || holding || RW || 0 || секунды || таймаут для безопасного режима | | | 9-22 || holding || RW || 0 || 0: - кнопка без фиксации ,1: - кнопка с фиксацией, 3: отключить управление || режим работы входа N. В регистре 5 должен быть записан "0". |
| |- | | |- |
| | 9—22 || holding || RW || 0 || '''0''': кнопки без фиксации
| |
| '''1''': выключатель с фиксацией
| |
|
| |
|
| '''3''': отключить управление
| | |
| || режим работы входа N; | | | 32-45|| input || R || 0 || unsigned int || счетчик нажатий входа 1-11 |
| в регистре 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-го — 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 |Назад к списку периферийных устройств]]
| |