Практика: Управление электромагнитным замком в импульсном режиме.
Введение: Электромагнитный замок и импульсный режим
Электромагнитный замок является одним из наиболее распространенных исполнительных устройств в системах контроля и управления доступом (СКУД). Его работа основана на удержании двери в закрытом состоянии с помощью мощного электромагнита. Понимание принципов его работы и правильных методов управления — ключевой навык для инженера-инсталлятора.
📋 Ключевые понятия:
- Нормально закрытый (НЗ / Fail-Safe): Такой замок находится в запертом состоянии только при подаче на него электропитания. При отключении питания замок открывается. Эта логика применяется на путях эвакуации и в помещениях, где в случае аварии (например, пожара) необходимо обеспечить беспрепятственный выход людей. Для управления таким замком через реле контроллера используется нормально замкнутая (NC) группа контактов реле.
- Нормально открытый (НО / Fail-Secure): Этот тип замка, наоборот, находится в запертом состоянии без питания. Для его открытия необходимо кратковременно подать напряжение. При отключении питания замок остается запертым. Такая логика является более безопасной с точки зрения защиты от проникновения и используется для входных дверей, ворот, калиток и серверных комнат. Для управления используется нормально открытая (NO) группа контактов реле.
| Тип замка | Состояние без питания | Состояние при подаче питания | Логика безопасности | Типичное применение | Группа контактов реле |
| ---------------------------- | --------------------- | ---------------------------- | ------------------- | ---------------------------- | --------------------- |
| НЗ (Normally Closed) | Открыт | Закрыт | Fail-Safe | Эвакуационные выходы | NC (Normally Closed) |
| НО (Normally Open) | Закрыт | Открыт | Fail-Secure | Входные двери, серверные | NO (Normally Open) |
Использование импульсного режима для управления замками является отраслевым стандартом по двум причинам:
Для выполнения практической части нам понадобится:
- Контроллер HI с доступом к Node-RED.
- Внешний релейный модуль с интерфейсом Modbus RTU.
- Блок питания на 12В или 24В (в зависимости от напряжения питания замка).
- Электромагнитный замок (в нашем примере — НО/Fail-Secure типа).
---
Схема подключения и настройка оборудования
> ⚠️ Внимание: COURSE-05-M02-L05: Всегда отключайте питание контроллера и периферийных устройств перед началом монтажных работ. Неправильное подключение может привести к выходу оборудования из строя или поражению электрическим током.
Правильное физическое подключение — это 50% успеха. Ошибки на этом этапе могут быть самыми трудно диагностируемыми. В нашем примере мы будем управлять замком типа "Fail-Secure" (НО), который требует подачи питания для открытия.
### Схема подключения
Схема подключения предельно проста: реле контроллера используется как управляемый выключатель в цепи питания замка.
- Легенда:
* `PSU:12VDC` — Блок питания 12В
* `MODBUS-RELAY` — Релейный модуль
* `EM-LOCK-01` — Электромагнитный замок (НО тип)
- ASCII-схема: `WIRING-LOCK-001`
//========= 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)
### Важные аспекты монтажа
После завершения монтажа и проверки всех соединений можно подавать питание на устройства и переходить к программной настройке.
---
Реализация логики 'Импульс' в Node-RED
> 🔗 Связанный материал: COURSE-05-M02-L05: Подробное описание принципов работы и настроек узла `trigger` было рассмотрено в уроке 'Шаблон 'Импульс' (Pulse)'. Здесь мы сосредоточимся на его практическом применении для нашей задачи.
Для создания кратковременного импульса управления идеально подходит стандартный узел Node-RED — `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`. Это предотвратит "хлопанье" реле, если команды придут слишком часто.
(Примечание: реальное изображение должно быть вставлено в платформу академии)
* Сразу после нажатия: сообщение `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`
* 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 в системе).
### Поток с физической кнопкой
Наш поток теперь выглядит так:
`[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.
- Создан надежный поток Node-RED, использующий стандартный шаблон 'Импульс' на базе узла `trigger`. Это решение является промышленным стандартом для кратковременного управления такими устройствами, как замки, звонки, сирены.
- Освоена настройка узла `modbus write` для отправки команд `FC 5: Force Single Coil` на исполнительное устройство, что является фундаментальным навыком при работе с промышленными протоколами.
### Что дальше? Пути для улучшения и масштабирования
Созданный нами поток является отличной базой, но его можно и нужно развивать для повышения надежности и функциональности системы:
В следующем уроке мы рассмотрим, как реализовать обратную связь и создать полноценный субпоток для управления исполнительным устройством, превратив наш простой сценарий в переиспользуемый и отказоустойчивый компонент.