ГлавнаяАкадемияИсполнительные устройства: интерлоки, таймауты → Практика: Управление электромагнитным замком в импульсном режиме.

Практика: Управление электромагнитным замком в импульсном режиме.

Урок 4 · Исполнительные устройства: интерлоки, таймауты · 30 мин · theory

Введение: Электромагнитный замок и импульсный режим

Электромагнитный замок является одним из наиболее распространенных исполнительных устройств в системах контроля и управления доступом (СКУД). Его работа основана на удержании двери в закрытом состоянии с помощью мощного электромагнита. Понимание принципов его работы и правильных методов управления — ключевой навык для инженера-инсталлятора.

📋 Ключевые понятия:

| Тип замка | Состояние без питания | Состояние при подаче питания | Логика безопасности | Типичное применение | Группа контактов реле |

| ---------------------------- | --------------------- | ---------------------------- | ------------------- | ---------------------------- | --------------------- |

| НЗ (Normally Closed) | Открыт | Закрыт | Fail-Safe | Эвакуационные выходы | NC (Normally Closed) |

| НО (Normally Open) | Закрыт | Открыт | Fail-Secure | Входные двери, серверные | NO (Normally Open) |

Использование импульсного режима для управления замками является отраслевым стандартом по двум причинам:

  • Безопасность: Если отправить команду "Включить" и по какой-то причине не отправить команду "Выключить" (например, из-за сбоя в логике или перезагрузки контроллера), дверь останется открытой, создавая брешь в безопасности. Импульсный режим гарантирует, что замок вернется в закрытое состояние автоматически по истечении короткого промежутка времени.
  • Энергоэффективность и долговечность: Электромагниты замков потребляют значительный ток и выделяют тепло при работе. Постоянная подача питания на замок (особенно на НО тип) приводит к его перегреву, повышенному энергопотреблению и сокращению срока службы. Импульсный режим, при котором питание подается лишь на 2-5 секунд, решает эту проблему.
  • Цель этого урока — создать полный, готовый к внедрению сценарий управления электромагнитным замком типа "Fail-Secure" (НО) с помощью контроллера HI. Мы пройдем все этапы: от физического подключения оборудования до создания и тестирования потока в Node-RED.

    Для выполнения практической части нам понадобится:

    ---

    Схема подключения и настройка оборудования

    > ⚠️ Внимание: COURSE-05-M02-L05: Всегда отключайте питание контроллера и периферийных устройств перед началом монтажных работ. Неправильное подключение может привести к выходу оборудования из строя или поражению электрическим током.

    Правильное физическое подключение — это 50% успеха. Ошибки на этом этапе могут быть самыми трудно диагностируемыми. В нашем примере мы будем управлять замком типа "Fail-Secure" (НО), который требует подачи питания для открытия.

    ### Схема подключения

    Схема подключения предельно проста: реле контроллера используется как управляемый выключатель в цепи питания замка.

    * `CTRL:HI-Core` — Контроллер

    * `PSU:12VDC` — Блок питания 12В

    * `MODBUS-RELAY` — Релейный модуль

    * `EM-LOCK-01` — Электромагнитный замок (НО тип)

    //========= WIRING-LOCK-001: Fail-Secure Lock Control via Modbus Relay =========
    
    

    // 1. Шина данных RS-485 (контроллер -> релейный модуль)

    // Используется кабель "витая пара", например, UTP Cat5e.

    [CTRL:HI-Core] [MODBUS-RELAY]

    (RS485-1 Port) (RS-485 Port)

    A ----------------(зеленый)--------- A

    B ----------------(белый)----------- B

    GND ----------------(черный)---------- GND (общий)

    // 2. Цепь питания замка

    // Реле разрывает цепь питания, идущую от блока питания к замку.

    [PSU:12VDC] [MODBUS-RELAY]

    Output +V ----(+)----------------------- C (Relay-1)

    NO (Relay-1) ----(+)----> +V (Lock)

    Output GND ----(-)------------------------------------------------> GND (Lock)

    ### Важные аспекты монтажа

  • Выбор контактов реле: Поскольку мы используем замок "Fail-Secure" (НО), который открывается при подаче питания, мы должны использовать нормально открытую (NO) и общую (C) группы контактов реле. Когда реле неактивно, цепь разомкнута, и замок закрыт. При активации реле контакты C и NO замыкаются, подавая питание на замок и открывая его.
  • Питание релейного модуля: Не забудьте подключить питание к самому релейному модулю в соответствии с его инструкцией. Обычно это 12В или 24В постоянного тока.
  • Полярность замка: Большинство электромагнитных замков нечувствительны к полярности, но всегда проверяйте документацию. Некоторые модели могут иметь встроенный диод для защиты от обратной ЭДС, требующий соблюдения полярности.
  • Настройка Modbus-адреса: На корпусе релейного модуля найдите DIP-переключатели или программный интерфейс для установки уникального Slave ID (адреса) на шине RS-485. Установите адрес (например, `5`) и запишите его. Все устройства на одной шине должны иметь уникальные адреса. Также убедитесь, что параметры связи (скорость, четность) соответствуют тем, что будут настроены в контроллере (например, `9600 8N1`).
  • После завершения монтажа и проверки всех соединений можно подавать питание на устройства и переходить к программной настройке.

    ---

    Реализация логики 'Импульс' в Node-RED

    > 🔗 Связанный материал: COURSE-05-M02-L05: Подробное описание принципов работы и настроек узла `trigger` было рассмотрено в уроке 'Шаблон 'Импульс' (Pulse)'. Здесь мы сосредоточимся на его практическом применении для нашей задачи.

    Для создания кратковременного импульса управления идеально подходит стандартный узел Node-RED — `trigger`. Он работает как таймер, который отправляет одно сообщение, ждет заданное время, а затем отправляет другое.

    ### Создание базового потока

    Давайте создадим поток, который по тестовой команде будет формировать управляющий импульс.

  • Добавьте узлы: Перетащите на поле узлы `inject`, `trigger` и `debug`. Соедините их последовательно: `inject` -> `trigger` -> `debug`.
  • Настройте узел `trigger`:
  • * Send: выберите `boolean` и установите значение `true`. Это будет наше начальное сообщение, которое активирует реле (подаст питание на замок).

    * then wait for: установите `3` `seconds`. Это длительность импульса — время, в течение которого дверь будет разблокирована.

    * then send: выберите `the original msg.payload`. По умолчанию узел `trigger` отправит второе сообщение, отличающееся от первого. Нам нужно явно указать, что мы хотим отправить. Поэтому изменим его. Выберите `boolean` и установите `false`. Это будет финальное сообщение, которое деактивирует реле.

    * Handling: `extend delay if new message arrives`. Это предотвратит "хлопанье" реле, если команды придут слишком часто.

    (Примечание: реальное изображение должно быть вставлено в платформу академии)

  • Настройте узел `inject`: Оставьте его с настройками по умолчанию (отправка `timestamp`). Он будет служить нам триггером для ручного тестирования.
  • Проверьте логику: Разверните (Deploy) поток и нажмите на кнопку узла `inject`. В окне отладки (Debug) вы должны увидеть:
  • * Сразу после нажатия: сообщение `true`.

    * Спустя 3 секунды: сообщение `false`.

    Поток готов. Теперь нам нужно правильно сформировать сообщение для отправки в узел, управляющий реле.

    ### Формирование контракта сообщения

    Как мы рассматривали в уроке 'Контракт сообщения для управления', стандартизация формата `msg` критически важна. Узел `modbus-write` ожидает в `msg.payload` простое значение `true` или `false`. Наш `trigger` уже настроен на генерацию именно таких значений.

    Пример сообщения, которое будет выходить из узла `trigger` и поступать в узел `modbus-write`:

    {
    

    "payload": true,

    "_msgid": "a1b2c3d4.e5f6g7"

    }

    {
    

    "payload": false,

    "_msgid": "h8i9j0k1.l2m3n4"

    }

    Эта простая структура полностью соответствует требованиям узла `modbus-write` и позволяет нам построить очень лаконичный и понятный поток.

    ---

    Настройка Modbus RTU для управления реле

    Теперь, когда у нас есть логика, генерирующая правильные сообщения, давайте отправим их на физическое устройство — наш релейный модуль.

    > 💡 Подсказка: COURSE-05-M02-L05: Для быстрой отладки используйте узел `modbus-response`. Он подключается к выходу узла `modbus-write` и позволяет увидеть полный ответ от Modbus-устройства (или сообщение об ошибке), чтобы убедиться, что команда была принята и обработана корректно.

    ### Добавление и настройка `modbus-write`

  • Установите палитру: Если она еще не установлена, через `Manage palette` установите `node-red-contrib-modbus`.
  • Добавьте узел: Найдите в палитре узел `modbus write` и перетащите его в наш поток, разместив между `trigger` и `debug`.
  • Настройте `modbus write`:
  • * Name: `Управление замком (Реле 1)`

    * Server: Нажмите на иконку карандаша для добавления нового сервера.

    * Type: `RTU-BUFFERD` (важно выбрать именно эту опцию для стабильной работы по RS-485).

    * Serial Port: Укажите путь к порту RS-485 на контроллере HI, например, `/dev/ttyUSB0` или `/dev/ttyS1`.

    * Serial-Type: `RTU`.

    * Baud Rate: `9600` (или то значение, что установлено на релейном модуле).

    * Data-Bits: `8`.

    * Parity: `None`.

    * Stop-Bits: `1`.

    * Нажмите "Add" или "Update".

    * Unit-Id: `5` (или тот адрес, который вы установили на релейном модуле).

    * FC (Function Code): `FC 5: Force Single Coil`. Этот код используется для записи одного бита (вкл/выкл) в один регистр типа "Coil".

    * Address: `0`. Это адрес первого реле на модуле. В документации он может быть указан как "Coil 1", но в Modbus адресация начинается с нуля.

    * Quantity: `1`.

    Теперь наш полный поток выглядит так: `inject` -> `trigger` -> `modbus write` -> `debug`.

    ### Финальное тестирование

    Разверните поток и снова нажмите на кнопку узла `inject`. Вы должны услышать характерный щелчок реле на модуле — оно включится. Спустя 3 секунды вы услышите второй щелчок — реле выключится. Если все работает, значит, и физическое подключение, и программная логика выполнены верно.

    Если щелчка нет, проверьте окно отладки. Узел `modbus write` при проблемах со связью (неверный адрес, плохой контакт, неправильные параметры порта) выдаст подробное сообщение об ошибке. Используйте эту информацию для диагностики, как мы разбирали в модуле по обработке ошибок.

    ---

    Пример: Интеграция с кнопкой выхода

    Тестовый `inject` — это хорошо для отладки, но в реальной системе команду на открытие замка дает пользователь через кнопку, считыватель карт или другую систему. Давайте заменим `inject` на узел, принимающий сигнал от физической кнопки.

    Предположим, у нас есть "сухой контакт" кнопки выхода, подключенный к универсальному входу `UI-22` контроллера HI. Мы можем считывать его состояние с помощью узла `rpi gpio in` (если входы контроллера отображаются как GPIO в системе).

    ### Поток с физической кнопкой

  • Удалите узел `inject`.
  • Добавьте узел `rpi gpio in` и настройте его на чтение входа `UI-22`. Важно также настроить Debounce (подавление дребезга контактов) прямо в узле, например, `25` миллисекунд, чтобы избежать ложных многократных срабатываний.
  • Соедините выход узла `rpi gpio in` со входом узла `trigger`.
  • Наш поток теперь выглядит так:

    `[rpi gpio in: UI-22]` -> `[trigger: 3 sec]` -> `[modbus write: Relay-1]`

    При каждом нажатии на физическую кнопку (изменение состояния входа с `0` на `1`) будет запускаться наш 3-секундный импульс, открывающий дверь.

    ### Пример преобразования сообщения

    В более сложных системах, например, при использовании шины KNX, сообщение от кнопки может приходить в виде сложного JSON-объекта. Его нужно преобразовать в простой сигнал для запуска `trigger`.

    Предположим, от KNX-кнопки приходит такое сообщение:

    {
    

    "payload": true,

    "topic": "knx/1/1/1",

    "source": "ga=1/1/1",

    "knx": {

    "event": "GroupValue_Write",

    "dpt": "1.001",

    "value": true,

    "raw": ""

    }

    }

    Наш узел `trigger` запустится от любого входящего сообщения. Однако, хорошей практикой является явное приведение сообщения к простому формату. Для этого можно использовать узел `function` перед `trigger`.

    Поток: `[knx-in]` -> `[function: Normalize]` -> `[trigger]` -> `[modbus write]` Код для узла `function: Normalize`:
    // Мы ожидаем, что кнопка пришлет 'true' при нажатии.
    

    // Нам не важно содержимое сообщения, важен сам факт его прихода.

    // Просто создаем новое, чистое сообщение для запуска триггера.

    if (msg.payload === true) {

    // Передаем дальше только payload, чтобы не тащить лишние данные.

    // Узел trigger все равно сработает от любого сообщения.

    return { payload: "open_command" };

    }

    // Если пришло сообщение 'false' (отпускание кнопки), игнорируем его.

    return null;

    Этот подход делает поток более читаемым и устойчивым к изменениям формата входящего сообщения. Мы явно объявляем, что нас интересует только событие нажатия на кнопку.

    ---

    Итоги и рекомендации

    В рамках этого урока мы успешно решили практическую задачу по управлению электромагнитным замком. Мы прошли весь путь от анализа задачи и проектирования схемы до реализации и тестирования логики в Node-RED на реальном оборудовании.

    Ключевые результаты:

    ### Что дальше? Пути для улучшения и масштабирования

    Созданный нами поток является отличной базой, но его можно и нужно развивать для повышения надежности и функциональности системы:

  • Добавление обратной связи: Что если команда на выключение реле не пройдет? В текущей схеме мы об этом не узнаем. Рекомендуется добавить в поток параллельную ветку с узлом `modbus-read`, которая будет периодически (например, раз в 5 секунд) считывать реальное состояние реле (Coil 0). Сравнивая желаемое состояние с реальным, можно генерировать тревожное сообщение (alarm), если они не совпадают.
  • Визуализация статуса: Используя узел `status`, можно выводить текущее состояние замка ("Открыт", "Закрыт", "Ошибка связи") прямо под узлом `modbus write`, что значительно упрощает диагностику.
  • Масштабирование: Созданный импульсный блок (`trigger` -> `modbus write`) можно вынести в субпоток (subflow). Это позволит управлять десятками замков на объекте, просто добавляя экземпляры этого субпотока и меняя в его настройках только адрес реле.
  • Интеграция с расписаниями и сценариями: Вход нашего потока (сейчас это кнопка) можно подключить к выходам других логических блоков, реализуя сложные сценарии: автоматическое открытие по расписанию, блокировка в ночном режиме, интеграция с пожарной сигнализацией для разблокировки всех эвакуационных выходов.
  • В следующем уроке мы рассмотрим, как реализовать обратную связь и создать полноценный субпоток для управления исполнительным устройством, превратив наш простой сценарий в переиспользуемый и отказоустойчивый компонент.