ГлавнаяАкадемияМонтаж и пусконаладка контроллера → Что такое карта входов-выходов (I/O Map)

Что такое карта входов-выходов (I/O Map)

Урок · Монтаж и пусконаладка контроллера · 15 мин · theory

Что такое I/O Map и зачем она нужна

Карта входов-выходов (I/O Map, от Input/Output Map) — это фундаментальный проектный документ, который служит единым источником правды для всех физических и логических подключений в системе автоматизации. В своей сущности, это таблица, которая сопоставляет каждое устройство, датчик и исполнительный механизм с конкретной клеммой на контроллере, а также с его логическим представлением в программном обеспечении (например, с MQTT-топиком).

> ℹ️ Информация: I/O Map — это фундамент проекта. Его отсутствие или некорректное ведение — основная причина до 70% проблем, возникающих на этапе пусконаладки (ПНР). Он является связующим звеном между электрической схемой, монтажной бригадой и инженером-программистом.

Ключевая роль I/O Map проявляется на всех этапах жизненного цикла проекта:

  • Проектирование: На этом этапе I/O Map используется для подсчета и распределения ресурсов контроллера. С его помощью проектировщик убеждается, что количества универсальных входов, релейных выходов и портов (RS-485, DALI) достаточно для реализации всех требуемых функций. Он позволяет заранее спланировать нагрузку на контроллер и при необходимости заложить модули расширения.
  • Монтаж: Для инженера-монтажника I/O Map является прямым руководством к действию. В документе четко указано, какой кабель от какого устройства к какой именно клемме контроллера HI-Core необходимо подключить. Это полностью исключает двусмысленность и ошибки, вызванные неверной интерпретацией схем. Использование карты вместе со стандартами маркировки, которые мы рассматривали ранее, превращает монтаж в предсказуемый и контролируемый процесс.
  • Пусконаладка (ПНР): Для инженера-программиста, работающего в среде Node-RED, I/O Map — это главный справочник. Вместо того чтобы гадать, на какой физический вход заведен датчик движения в коридоре, он просто смотрит в таблицу и видит, например, `UI-07`. Это позволяет ему немедленно настроить соответствующий узел в Node-RED для считывания сигнала. Карта `I/O` напрямую связывает физический мир с цифровой логикой.
  • Техническое обслуживание и модернизация: Спустя годы после сдачи объекта, когда возникает необходимость заменить датчик или добавить новую функцию, I/O Map становится бесценным инструментом. Он позволяет любому техническому специалисту, даже не участвовавшему в первоначальной установке, быстро разобраться в архитектуре системы, найти нужный кабель, клемму или логический адрес, не тратя часы на "прозвон" цепей и анализ чужого кода.
  • Таким образом, грамотно составленная и поддерживаемая в актуальном состоянии I/O Map — это не просто формальность, а критически важный актив, который экономит время, снижает затраты и обеспечивает надежность и долговечность всей системы автоматизации.

    ---

    Структура и ключевые компоненты I/O Map

    Стандартизированная I/O Map должна содержать исчерпывающую информацию для всех участников проекта. Как правило, она ведется в виде электронной таблицы (Google Sheets, Microsoft Excel) для удобства совместной работы и фильтрации. Рассмотрим обязательные столбцы на примере типового проекта для квартиры.

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

    * DI (Digital Input): Дискретный вход (сигнал вкл/выкл, "сухой контакт").

    * DO (Digital Output): Дискретный выход (например, реле).

    * AI (Analog Input): Аналоговый вход (сигнал 0-10В, 4-20мА, показания датчика температуры).

    * AO (Analog Output): Аналоговый выход (например, управление диммером 0-10В).

    Пример типовой 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` |

    Детальное описание столбцов:

    * Для устройств, подключенных напрямую к контроллеру, это номер клеммы (`UI-01` - `UI-22`, `RL-01` - `RL-22`).

    * Для устройств на шине данных это имя шины и адрес на шине. Например, `RS485-1, Адрес 10` для Modbus-устройства или `DALI-1, Адрес 0` для DALI-драйвера.

    * 🔗 Связанный материал: Как мы обсуждали в паттерне "Контракт сообщения", для систем на базе MQTT это MQTT-топик. Стандартизированная структура топиков (например, `тип/расположение/назначение/действие`) делает систему предсказуемой и легко интегрируемой.

    ---

    Процесс создания I/O Map: пошаговое руководство

    Создание карты входов-выходов — это итеративный процесс, который начинается на этапе проектирования и финализируется во время пусконаладки.

    Шаг 1: Инвентаризация всех устройств и функций

    Составьте полный список всего, чем нужно управлять или что нужно измерять. Мыслите категориями.

    Шаг 2: Распределение физических адресов

    Теперь, имея полный список, "раскидайте" устройства по клеммам контроллера HI-Core и шинам данных.

  • Начните с выходов (Реле): Распределите все нагрузки (свет, розетки, приводы) по релейным выходам `RL-01`...`RL-22`.
  • > 💡 Подсказка: Группируйте выходы по комнатам или функциям. Например, `RL-01` по `RL-05` — гостиная, `RL-06` по `RL-08` — кухня. Это упростит монтаж и навигацию в щите.

  • Распределите входы (UI): Назначьте выключатели, датчики движения, герконы и аналоговые датчики на универсальные входы `UI-01`...`UI-22`.
  • > ⚠️ Внимание: Помните, что входы контроллера HI-Core — универсальные. Убедитесь, что вы правильно указали в примечаниях тип подключаемого устройства (1-Wire, "сухой контакт", аналоговый 0-10В), так как это повлияет на программную конфигурацию входа.

  • Выделите устройства на шинах: Все устройства с интерфейсами RS-485, CAN, DALI занесите в соответствующие секции карты. Присвойте им уникальные адреса на шине.
  • Проверьте, что ресурсов контроллера хватает. Если входы или выходы закончились, а устройства еще остались, необходимо запланировать установку модулей расширения.

    Шаг 3: Определение логической адресации

    Это работа на стыке проектирования и программирования. Вам нужно придумать систему именования, которая будет использоваться в Node-RED.

    Рекомендуемая структура MQTT-топиков:

    `{проект}/{тип}/{расположение}/{имя_устройства}/{действие}`

    > 💡 Подсказка: Разработайте и задокументируйте вашу схему именования топиков в самом начале проекта. Последовательное ее применение — ключ к созданию поддерживаемой системы.

    Шаг 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: Чтение данных с датчика

  • Находим в I/O Map: Датчик движения подключен к `UI-02`. Это нормально замкнутый (NC) "сухой контакт".
  • Создаем узел в Node-RED: Добавляем узел `rpi gpio in`.
  • Настраиваем узел:
  • * Pin: Выбираем соответствующий пин для `UI-02`.

    * Resistor: `pull-up` (так как контакт NC подключается к земле).

    * Name: `Датчик движения (UI-02)`.

  • Добавляем узел `function` для форматирования по контракту:
  • * 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;

  • Публикуем в MQTT: Соединяем узел `function` с узлом `mqtt out`, который публикует `msg` в брокере.
  • Часть 2: Управление светом

  • Находим в I/O Map: Свет в холле подключен к `RL-05`.
  • Создаем узел в Node-RED: Добавляем узел `rpi gpio out`.
  • Настраиваем узел:
  • * Pin: Выбираем пин, соответствующий `RL-05`.

    * Initial level: `low (0)`.

    * Name: `Свет холл (RL-05)`.

  • Строим логику: Узел `mqtt in`, подписанный на `home/telemetry/hall/motion`, получает сообщение о движении. Узел `trigger` отправляет `1` (включить свет), а через 3 минуты — `0` (выключить свет). Эти значения подаются на настроенный `rpi gpio out`.
  • > ⚠️ Внимание: Без I/O Map вам пришлось бы методом проб и ошибок определять, к какой клемме подключены датчик и лампа. С картой этот процесс занимает секунды и полностью исключает ошибки.

    ---

    Что дальше

    В этом уроке мы определили, что такое карта входов-выходов (I/O Map), изучили ее структуру и поняли ее критическую роль в жизненном цикле проекта автоматизации. Мы рассмотрели пошаговый процесс создания карты и на практическом примере увидели, как она напрямую связывает физические подключения с логикой в Node-RED.

    В следующем уроке мы перейдем к финальному этапу подготовки контроллера — "Развертывание и базовая конфигурация программного обеспечения". Мы установим необходимые пакеты, настроим системные параметры Linux-окружения и подготовим среду Node-RED к загрузке нашего первого проекта, опираясь на созданную I/O Map.