Схема управления двумя реле: 'Открыть/Закрыть'
Введение в схемы с двумя реле
В основе многих исполнительных механизмов, требующих изменения направления движения, лежит простой и надежный принцип управления двигателем постоянного тока (DC). Управление направлением вращения вала такого двигателя достигается путем изменения полярности подаваемого на него напряжения. Если на одну клемму двигателя подать «+», а на другую «-», он будет вращаться в одну сторону. Если поменять полярность, направление вращения изменится на противоположное.
Именно этот принцип используется в широком спектре устройств автоматизации, где необходимо линейное или вращательное перемещение между двумя крайними положениями.
📋 Ключевые понятия:
- Релейная схема 'Открыть/Закрыть': Конфигурация из двух реле, позволяющая коммутировать полярность питания на двигателе постоянного тока для управления направлением его движения.
- Управление двигателем постоянного тока (DC): Процесс изменения скорости или направления вращения двигателя путем манипулирования подаваемым напряжением. В нашем случае — изменение полярности для реверсирования.
- Электрическая блокировка (Interlock): Механизм, предотвращающий одновременное включение двух конфликтующих состояний (например, подачу команд "Открыть" и "Закрыть" одновременно), что может привести к аварийной ситуации.
Области применения
Данная схема управления является чрезвычайно распространенной благодаря своей простоте, низкой стоимости и надежности. Вы столкнетесь с ней при автоматизации следующих объектов:
- Рулонные шторы и жалюзи: Двигатель приводит в движение вал, на который наматывается полотно шторы. Одно направление — открытие, другое — закрытие.
- Распашные или откатные ворота: Электропривод перемещает створку ворот.
- Линейные актуаторы: Устройства, преобразующие вращательное движение двигателя в поступательное движение штока. Применяются для открытия/закрытия фрамуг, вентиляционных заслонок, люков.
- Электромагнитные клапаны с реверсом: Некоторые типы клапанов для систем водоснабжения или отопления требуют смены полярности для переключения состояния.
Проблема одновременного включения
Главная опасность при работе с такой схемой — возможность одновременного включения обоих реле. Как мы увидим в следующей секции, такая ситуация приводит к прямому короткому замыканию (КЗ) на выходе источника питания. Последствия могут быть катастрофическими: от выхода из строя блока питания до повреждения релейного модуля и самого контроллера.
Поэтому создание надежного механизма блокировки (interlock), который на аппаратном или программном уровне исключает возможность одновременной подачи питания на обе обмотки двигателя в разной полярности, является не просто рекомендацией, а критическим требованием безопасности и надежности всей системы.
---
Схема подключения и выбор реле
Правильное физическое подключение — залог безопасной и долговечной работы системы. Для реализации схемы "Открыть/Закрыть" нам понадобятся два реле с перекидными контактами. У каждого такого реле есть три клеммы для коммутируемой нагрузки:
- COM (Common): Общий контакт.
- NO (Normally Open): Нормально открытый контакт. Замкнут с COM, когда на реле подано управляющее напряжение.
- NC (Normally Closed): Нормально закрытый контакт. Замкнут с COM, когда реле обесточено.
Схема подключения двигателя
Идея состоит в том, чтобы создать своего рода H-мост на реле. Контакты NO и NC каждого реле подключаются к клеммам двигателя, а питание от блока питания подается на общие (COM) контакты реле.
Рассмотрим схему подключения на примере контроллера HI, используя два его релейных выхода (например, `RL-01` и `RL-02`) и внешний блок питания на 24В DC.
- Легенда:
* `PSU:24VDC` — Блок питания 24В DC
* `
* `RL-01`, `RL-02` — Релейные выходы контроллера
- ASCII-схема `WIRING-MOTOR-001`:
//========= WIRING-MOTOR-001: DC Motor Reversing Control =========
[PSU:24VDC] [CTRL:HI-Core]
+24V ----(+)----> COM (RL-01) (M1) o----< NC (RL-01)
NO (RL-01) >---------------------------------|
|----< NO (RL-02)
GND ----(-)----> COM (RL-02) (M2) o----< NC (RL-02)
NO (RL-02) >---------------------------------|
|----< NO (RL-01)
// Пояснение логики:
// 1. Оба реле выключены (состояние покоя):
// - M1 соединен с M2 через NC контакты и оба подключены к GND (-) через COM(RL-02). Напряжения нет.
//
// 2. Включено RL-01 ("Открыть"):
// - COM(RL-01) -> NO(RL-01) -> M2. Подается +24V.
// - M1 -> NC(RL-02) -> COM(RL-02). Подключается к GND.
// - Результат: M2 = "+", M1 = "-". Двигатель вращается в одну сторону.
//
// 3. Включено RL-02 ("Закрыть"):
// - COM(RL-02) -> NO(RL-02) -> M1. Подается GND (-). (Внимание: здесь опечатка в распространенных схемах, GND подается не напрямую, а меняется полярность)
// - Правильная логика для схемы выше:
// - Когда включено RL-01: M2 получает +24V, M1 получает GND.
// - Когда включено RL-02: M1 получает +24V (через NO(RL-01) -> NC(RL-02) -> COM(RL-01)), M2 получает GND.
// - Упрощенная, более надежная схема - H-мост:
//============ WIRING-MOTOR-002: Robust DC Motor H-Bridge on Relays =============
[PSU:24VDC] [CTRL:HI-Core]
+24V ----(+)----> COM (RL-01)
|
+---> COM (RL-02)
GND ----(-)----> NC (RL-01) (M1) o----< NO (RL-01)
| |----< NO (RL-02)
+---> NC (RL-02)
(M2) o----< (соединен с M1) - ОШИБКА, СХЕМА НЕВЕРНА.
//============= WIRING-MOTOR-003: ПРАВИЛЬНАЯ И НАДЕЖНАЯ СХЕМА H-моста ===================
[PSU:24VDC] [CTRL:HI-Core]
+24V ----(+)----> COM (RL-01)
|
+---> COM (RL-02)
(M1) o----< NO (RL-01)
GND ----(-)----> NC (RL-01) |----< NC (RL-02)
|
+---> NC (RL-02) (M2) o----< NO (RL-02)
|----< NC (RL-01)
// Логика схемы WIRING-MOTOR-003:
// 1. Реле выключены: M1 и M2 подключены к GND через NC контакты. Движения нет.
// 2. Включен RL-01: M1 -> NO(RL-01) -> COM(RL-01) -> +24V. M2 -> NC(RL-02) -> GND. Вращение вперед.
// 3. Включен RL-02: M2 -> NO(RL-02) -> COM(RL-02) -> +24V. M1 -> NC(RL-01) -> GND. Вращение назад.
⚠️ Внимание: Критически важно! Одновременное включение обоих реле (`RL-01` и `RL-02`) в схеме `WIRING-MOTOR-003` приведет к тому, что `+24V` через `NO(RL-01)` и `NO(RL-02)` будет замкнуто на `GND` через `NC(RL-02)` и `NC(RL-01)`. Это мгновенное короткое замыкание. Всегда реализуйте механизм блокировки, который мы рассмотрим далее.
Выбор реле
При выборе реле или релейного модуля необходимо учитывать пусковой ток двигателя. Двигатели являются индуктивной нагрузкой, и в момент старта потребляют ток, в несколько раз превышающий номинальный.
- Номинал тока: Убедитесь, что номинальный ток контактов реле как минимум в 1.5-2 раза превышает номинальный рабочий ток двигателя. Для большинства бытовых приводов (шторы, небольшие ворота) реле контроллера HI с номиналом 5А или 16А будет достаточно.
- Тип нагрузки: В паспорте реле часто указывается разный допустимый ток для резистивной (AC-1) и индуктивной (AC-15) нагрузки. Всегда ориентируйтесь на параметры для индуктивной нагрузки.
---
Базовая логика управления в Node-RED
Прежде чем реализовывать сложную и безопасную логику, создадим базовый поток для прямого управления реле. Это поможет проверить правильность подключений и понять, почему необходима блокировка. Мы будем использовать MQTT как стандартный протокол для отправки команд в системе HI.
Структура MQTT-топиков
На платформе HI принят стандартный формат топиков для управления периферией. Для релейных выходов он выглядит следующим образом:
- `hi/channel/r1/set` — топик для отправки команды на реле №1.
- `hi/channel/r2/set` — топик для реле №2.
- `hi/channel/r1/state` — топик, в котором контроллер сообщает о текущем состоянии реле №1.
Создание потока
* Узел 1: `Topic` = `hi/control/curtain1/set`, `Output` = `a parsed JSON object`.
* Этот узел будет принимать команды для управления шторой.
* `Property`: `msg.payload.command`
* Правило 1: `==` (string) `OPEN`
* Правило 2: `==` (string) `CLOSE`
* Правило 3: `==` (string) `STOP`
* Для `OPEN`: Узел `change` устанавливает `msg.payload` в `ON`. Затем `mqtt out` с топиком `hi/channel/r1/set`.
* Для `CLOSE`: Узел `change` устанавливает `msg.payload` в `ON`. Затем `mqtt out` с топиком `hi/channel/r2/set`.
* Для `STOP`: Потребуется два узла `change`, отправляющих `OFF` в оба топика (`hi/channel/r1/set` и `hi/channel/r2/set`).
Пример `msg.payload` для команды:{
"command": "OPEN",
"source": "dashboard-living-room"
}
Пример потока (упрощенный, небезопасный):
[mqtt in: hi/control/curtain1/set] --> [switch: msg.payload.command] --+-- (OPEN) --> [change: set ON] --> [mqtt out: hi/channel/r1/set]
|
+-- (CLOSE) --> [change: set ON] --> [mqtt out: hi/channel/r2/set]
|
+-- (STOP) --> [change: set OFF] --> [mqtt out: hi/channel/r1/set]
|
+-> [change: set OFF] --> [mqtt out: hi/channel/r2/set]
Если вы соберете этот поток и быстро отправите команды `OPEN`, а затем `CLOSE`, вы можете успеть создать ситуацию, когда оба реле получат команду `ON` почти одновременно, что приведет к КЗ. Это наглядно демонстрирует необходимость программной блокировки.
---
Реализация программной блокировки (Interlock)
Теперь создадим надежный поток, который полностью исключает риск короткого замыкания. Мы будем использовать один узел `function` как центральный процессор команд, реализующий логику "сначала выключи, потом включи".
Алгоритм блокировки
💡 Подсказка: Для более надежных систем используйте контекст потока (`flow context`) для хранения текущего состояния привода ('opening', 'closing', 'stopped'). Это позволяет избежать гонки состояний и делает логику более предсказуемой. Как было рассмотрено ранее в уроках, посвященных персистентному контексту, `flow` контекст можно сделать энергонезависимым, что позволит системе восстановить правильное состояние после сбоя питания.
Реализация в Node-RED
Мы заменим сложную конструкцию из узлов `switch` и `change` одним узлом `function`, который будет генерировать последовательность сообщений для управления реле.
Flow Diagram (ASCII): +----------------------------------+
[mqtt in: hi/control/curtain1/set] ---> | Function: Interlock | --+--> [mqtt out: hi/channel/r1/set]
+----------------------------------+ |
+--> [mqtt out: hi/channel/r2/set]
Код для узла `Function: Interlock`:
Этот узел будет иметь два выхода: первый для реле `RL-01` ("Открыть"), второй для реле `RL-02` ("Закрыть").
// Получаем команду из входящего сообщения
// Ожидаемый контракт: msg.payload = { "command": "OPEN" | "CLOSE" | "STOP" }
const command = msg.payload.command;
// Определяем реле, которые нужно остановить
const relay1_stop = { topic: "hi/channel/r1/set", payload: "OFF" };
const relay2_stop = { topic: "hi/channel/r2/set", payload: "OFF" };
// Определяем реле, которые нужно запустить
const relay1_start = { topic: "hi/channel/r1/set", payload: "ON" };
const relay2_start = { topic: "hi/channel/r2/set", payload: "ON" };
// Создаем массив сообщений для отправки.
// Мы используем возможность Node-RED отправлять массив сообщений для создания последовательности.
let messageSequence = [];
// 1. Всегда отправляем команду STOP на оба реле, чтобы гарантировать размыкание
messageSequence.push(relay1_stop);
messageSequence.push(relay2_stop);
// 2. Добавляем сообщение с задержкой. Узел `delay` обработает это.
// `delay` в миллисекундах. 100 мс - хороший запас для механических реле.
messageSequence.push({ delay: 100 });
// 3. В зависимости от команды, добавляем сообщение на включение.
switch (command) {
case 'OPEN':
// Добавляем сообщение для включения реле "Открыть"
messageSequence.push(relay1_start);
node.status({fill:"green", shape:"dot", text:"Opening..."});
break;
case 'CLOSE':
// Добавляем сообщение для включения реле "Закрыть"
messageSequence.push(relay2_start);
node.status({fill:"blue", shape:"dot", text:"Closing..."});
break;
case 'STOP':
// Ничего больше не делаем, только останавливаем
node.status({fill:"red", shape:"ring", text:"Stopped"});
break;
default:
node.warn("Неизвестная команда: " + command);
return null; // Если команда не распознана, ничего не делаем.
}
// Отправляем всю последовательность сообщений.
// Она будет обработана последовательно.
return [messageSequence];
После узла `Function` необходимо поставить узел `delay`, который будет обрабатывать сообщение `msg.delay`, и уже после него — два узла `mqtt out`.
Правильная схема потока:[mqtt in] -> [Function: Interlock] -> [delay] -> [switch: msg.topic] --+--> [mqtt out: r1]
|
+--> [mqtt out: r2]
Узел `delay` настраивается на `Delay message by` `msg.delay`. Узел `switch` после него маршрутизирует сообщения в правильный `mqtt out` узел на основе `msg.topic`.
Эта реализация гарантирует, что между командой выключения и командой включения всегда будет пауза, полностью исключая риск КЗ и делая систему надежной.
---
Итоги и следующие шаги
В этом уроке мы рассмотрели один из фундаментальных паттернов в автоматизации — управление направлением движения с помощью схемы из двух реле.
Ключевые аспекты, которые необходимо запомнить:Преимущества данного подхода очевидны: это простое в реализации, недорогое и универсальное решение, применимое для огромного количества задач, от умного дома до промышленных объектов. Освоение этого паттерна является обязательным навыком для любого инженера-установщика.
🔗 Связанный материал: В следующем уроке, COURSE-05-M06-L03, мы усовершенствуем нашу схему. Мы добавим таймауты для автоматической остановки привода через заданное время и интегрируем концевые выключатели — физические датчики, которые сообщают системе о достижении крайних положений (полностью открыто/закрыто). Это позволит нам реализовать точное позиционирование и дополнительно повысить надежность системы.