Что такое карта входов-выходов (I/O Map)
Что такое I/O Map и зачем она нужна
Карта входов-выходов (I/O Map, от Input/Output Map) — это фундаментальный проектный документ, который служит единым источником правды для всех физических и логических подключений в системе автоматизации. В своей сущности, это таблица, которая сопоставляет каждое устройство, датчик и исполнительный механизм с конкретной клеммой на контроллере, а также с его логическим представлением в программном обеспечении (например, с MQTT-топиком).
> ℹ️ Информация: I/O Map — это фундамент проекта. Его отсутствие или некорректное ведение — основная причина до 70% проблем, возникающих на этапе пусконаладки (ПНР). Он является связующим звеном между электрической схемой, монтажной бригадой и инженером-программистом.
Ключевая роль I/O Map проявляется на всех этапах жизненного цикла проекта:
Таким образом, грамотно составленная и поддерживаемая в актуальном состоянии I/O Map — это не просто формальность, а критически важный актив, который экономит время, снижает затраты и обеспечивает надежность и долговечность всей системы автоматизации.
---
Структура и ключевые компоненты I/O Map
Стандартизированная I/O Map должна содержать исчерпывающую информацию для всех участников проекта. Как правило, она ведется в виде электронной таблицы (Google Sheets, Microsoft Excel) для удобства совместной работы и фильтрации. Рассмотрим обязательные столбцы на примере типового проекта для квартиры.
📋 Ключевые понятия:
- Входы/Выходы (Inputs/Outputs): Физические клеммы на контроллере.
* DO (Digital Output): Дискретный выход (например, реле).
* AI (Analog Input): Аналоговый вход (сигнал 0-10В, 4-20мА, показания датчика температуры).
* AO (Analog Output): Аналоговый выход (например, управление диммером 0-10В).
- Картирование (Mapping): Процесс сопоставления физического адреса с логическим.
Пример типовой I/O Map
| ID Устройства | Назначение / Функция | Тип Устройства | Физический Адрес (Контроллер) | Логический Адрес (Node-RED/MQTT) | Маркировка Кабеля | Примечания |
| :------------ | :---------------------------- | :------------------------- | :------------------------------- | :------------------------------------------ | :------------------ | :----------------------------- |
| `IN-01` | Выключатель света, гостиная | Кнопка без фиксации | `UI-01` | `hw/input/livingroom_switch_01` | `SW-LIV-01` | Нажатие = `true` |
| `IN-02` | Датчик движения, коридор | "Сухой контакт" (NC) | `UI-02` | `telemetry/hall/motion` | `MOT-HALL-01` | Сработка = `false` |
| `IN-03` | Датчик температуры, спальня | DS18B20 (1-Wire) | `UI-03` (шина 1-Wire) | `telemetry/bedroom/temperature` | `SENS-BED-TEMP-01` | ID 1-Wire: `28-0...a1b2` |
| `IN-04` | Датчик протечки, санузел | Датчик протечки (WSP) | `UI-04` | `telemetry/bathroom/leakage` | `SENS-BATH-LEAK-01` | `true` = протечка |
| `OUT-01` | Основной свет, гостиная | Реле HI-Core | `RL-01` | `cmd/livingroom/main_light/set` | `LGT-LIV-MAIN-01` | Нагрузка 250W |
| `OUT-02` | Розетки, кухня (отключаемая) | Реле HI-Core | `RL-02` | `cmd/kitchen/sockets/set` | `SOCK-KIT-01` | Max 16A |
| `OUT-03` | Кран перекрытия хол. воды | Привод 230V нормально-откр. | `RL-03` | `cmd/water/cold_valve/set` | `VALVE-COLD-01` | `true` = закрыть |
| `MOD-01` | Счетчик электроэнергии | WB-MAP12E (Modbus) | `RS485-1`, Адрес `10` | `telemetry/power/main_meter/*` | `BUS-RS485-01` | Читать регистры `40001+` |
| `DALI-01` | Диммируемый свет, спальня | DALI Driver | `DALI-1`, Адрес `0` | `cmd/bedroom/dim_light/set` | `BUS-DALI-01` | Группа `1` |
Детальное описание столбцов:
- ID Устройства: Уникальный, короткий идентификатор внутри проекта. Помогает быстро найти строку.
- Назначение / Функция: Человекопонятное описание того, что делает это устройство. Например, не просто "Датчик", а "Датчик открытия входной двери".
- Тип Устройства: Конкретная модель или тип устройства (например, "DS18B20", "Кнопка Legrand Valena Allure", "Привод Gidrolock Ultimate 230V"). Это важно для понимания его электрических характеристик и логики работы (например, нормально замкнутый/разомкнутый контакт).
- Физический Адрес: Самый важный столбец для монтажника.
* Для устройств на шине данных это имя шины и адрес на шине. Например, `RS485-1, Адрес 10` для Modbus-устройства или `DALI-1, Адрес 0` для DALI-драйвера.
- Логический Адрес: Самый важный столбец для программиста. Это имя, по которому устройство будет доступно в системе.
- Маркировка Кабеля: Уникальный код, который физически наносится на кабель с обеих сторон. Позволяет безошибочно найти нужный кабель в щите среди десятков других.
- Примечания: Поле для любой дополнительной, но важной информации. Например: логика работы ("`true` = закрыть кран"), диапазон значений, особые требования к монтажу, серийный номер или MAC-адрес устройства.
---
Процесс создания I/O Map: пошаговое руководство
Создание карты входов-выходов — это итеративный процесс, который начинается на этапе проектирования и финализируется во время пусконаладки.
Шаг 1: Инвентаризация всех устройств и функций
Составьте полный список всего, чем нужно управлять или что нужно измерять. Мыслите категориями.
- Освещение: Какие группы света, где, какой тип (диммируемый, недиммируемый)?
- Климат: Датчики температуры, влажности, CO2. Управление радиаторами, теплыми полами, кондиционерами.
- Безопасность: Датчики движения, открытия дверей/окон, датчики протечки, дыма. Клапаны перекрытия воды.
- Управление: Настенные выключатели, кнопки, сенсорные панели.
- Учет ресурсов: Счетчики электроэнергии, воды, тепла.
Шаг 2: Распределение физических адресов
Теперь, имея полный список, "раскидайте" устройства по клеммам контроллера HI-Core и шинам данных.
> 💡 Подсказка: Группируйте выходы по комнатам или функциям. Например, `RL-01` по `RL-05` — гостиная, `RL-06` по `RL-08` — кухня. Это упростит монтаж и навигацию в щите.
> ⚠️ Внимание: Помните, что входы контроллера HI-Core — универсальные. Убедитесь, что вы правильно указали в примечаниях тип подключаемого устройства (1-Wire, "сухой контакт", аналоговый 0-10В), так как это повлияет на программную конфигурацию входа.
Проверьте, что ресурсов контроллера хватает. Если входы или выходы закончились, а устройства еще остались, необходимо запланировать установку модулей расширения.
Шаг 3: Определение логической адресации
Это работа на стыке проектирования и программирования. Вам нужно придумать систему именования, которая будет использоваться в Node-RED.
Рекомендуемая структура MQTT-топиков:`{проект}/{тип}/{расположение}/{имя_устройства}/{действие}`
- `home/cmd/livingroom/main_light/set` — Команда на управление устройством.
- `home/state/livingroom/main_light` — Состояние устройства (обратная связь).
- `home/telemetry/bedroom/temperature` — Показания с датчика.
> 💡 Подсказка: Разработайте и задокументируйте вашу схему именования топиков в самом начале проекта. Последовательное ее применение — ключ к созданию поддерживаемой системы.
Шаг 4: Заполнение таблицы
Теперь, когда вся информация собрана, аккуратно внесите ее в таблицу I/O Map. Перепроверьте каждую строку. Этот документ станет вашим главным помощником на следующих этапах.
---
Связь I/O Map и Node-RED: от таблицы к рабочему сценарию
Рассмотрим на практическом примере, как строка из I/O Map превращается в работающий узел в среде Node-RED на контроллере HI-Core.
Фрагмент I/O Map:| ID Устройства | Назначение | Тип Устройства | Физический Адрес | Логический Адрес (MQTT) |
| :------------ | :------------------- | :--------------------- | :--------------- | :-------------------------- |
| `IN-02` | Датчик движения, холл | "Сухой контакт" (NC) | `UI-02` | `home/telemetry/hall/motion`|
| `OUT-05` | Свет, холл | Реле HI-Core | `RL-05` | `home/cmd/hall/light/set` |
Задача: Реализовать сценарий SCN-LIGHT-011: при обнаружении движения в холле включать свет на 3 минуты. Реализация в Node-RED: ASCII-схема потока (FLOW-AUTO-LIGHT-003): +-----------------+ +-----------------+ +---------------+
UI-02 Pin -> | rpi gpio in | -> | function: fmt | -> | mqtt out | -> (Topic: home/telemetry/hall/motion)
+-----------------+ +-----------------+ +---------------+
(Topic: home/telemetry/hall/motion)
+-----------------+ +-------------------+ +----------------+ +-----------------+
| mqtt in | -> | switch: is_move | -> | trigger: 3 min | -> | function: build | -> | rpi gpio out | -> RL-05 Pin
+-----------------+ +-------------------+ +----------------+ +-----------------+ +-----------------+
Часть 1: Чтение данных с датчика
* Pin: Выбираем соответствующий пин для `UI-02`.
* Resistor: `pull-up` (так как контакт NC подключается к земле).
* Name: `Датчик движения (UI-02)`.
* Name: `Format Motion Payload`
* Код:
// Входящее сообщение от rpi gpio in: msg.payload = 0 (движение есть) или 1 (движения нет)
// Тип датчика NC, поэтому 0 = сработка.
const isMotion = (msg.payload == 0);
// Формируем сообщение по стандартному контракту
msg.payload = {
"value": isMotion,
"source": "motion-sensor-hall-01",
"ts": Date.now()
};
msg.topic = "home/telemetry/hall/motion"; // Берем топик из I/O Map
node.status({fill: isMotion ? "blue" : "grey", shape:"dot", text: isMotion ? "Движение" : "Покой"});
return msg;
Часть 2: Управление светом
* Pin: Выбираем пин, соответствующий `RL-05`.
* Initial level: `low (0)`.
* Name: `Свет холл (RL-05)`.
> ⚠️ Внимание: Без I/O Map вам пришлось бы методом проб и ошибок определять, к какой клемме подключены датчик и лампа. С картой этот процесс занимает секунды и полностью исключает ошибки.
---
Что дальше
В этом уроке мы определили, что такое карта входов-выходов (I/O Map), изучили ее структуру и поняли ее критическую роль в жизненном цикле проекта автоматизации. Мы рассмотрели пошаговый процесс создания карты и на практическом примере увидели, как она напрямую связывает физические подключения с логикой в Node-RED.
В следующем уроке мы перейдем к финальному этапу подготовки контроллера — "Развертывание и базовая конфигурация программного обеспечения". Мы установим необходимые пакеты, настроим системные параметры Linux-окружения и подготовим среду Node-RED к загрузке нашего первого проекта, опираясь на созданную I/O Map.