ГлавнаяАкадемияМонтаж и пусконаладка контроллера → Подключение аналоговых датчиков (0-10В)

Подключение аналоговых датчиков (0-10В)

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

Введение в аналоговые сигналы 0-10В: Принцип работы и применение

В предыдущих уроках мы рассмотрели, как работать с дискретными сигналами и цифровыми датчиками на шине 1-Wire. Теперь мы переходим к изучению аналоговых сигналов — мощного инструмента для получения данных от широкого спектра измерительных приборов и управления исполнительными устройствами. Одним из наиболее распространенных стандартов в автоматизации зданий является аналоговый сигнал по напряжению 0-10В.

> 💡 Подсказка: Сигнал 0-10В является одним из самых надежных и помехозащищенных аналоговых стандартов для небольших и средних расстояний (до 100-150 метров при использовании качественного экранированного кабеля), что делает его идеальным для большинства задач в рамках одного здания.

Принцип кодирования данных

В отличие от дискретного сигнала, который имеет только два состояния ("включено/выключено" или 1/0), аналоговый сигнал может принимать любое значение в заданном диапазоне. В случае стандарта 0-10В, этим диапазоном является напряжение постоянного тока от 0 до 10 вольт.

Ключевой принцип — прямопропорциональная зависимость между уровнем напряжения и измеряемой физической величиной. Это означает, что:

Именно эта простота и предсказуемость сделали стандарт 0-10В таким популярным в индустрии.

Области применения

Стандарт 0-10В используется для решения двух основных задач: сбор данных с датчиков и управление исполнительными механизмами.

📋 Ключевые понятия: Типовые устройства со входом/выходом 0-10В:

Активные и пассивные датчики

При выборе и подключении датчиков 0-10В крайне важно понимать разницу между активными и пассивными устройствами.

| Тип датчика | Описание | Схема подключения |

| :---------- | :------------------------------------------------------------------------------------------------------------------------------------ | :---------------- |

| Активный | Имеет встроенную электронику и требует отдельного питания (обычно 24В DC). Датчик сам генерирует выходное напряжение 0-10В. | 3-проводная |

| Пассивный | Не требует отдельного питания. Устройство ведет себя как переменный резистор, который модулирует внешнее напряжение, подаваемое на него. | 2-проводная |

Контроллер HI спроектирован для работы с активными датчиками, которые являются наиболее распространенным типом на рынке. Пассивные датчики встречаются реже и требуют более сложных схем подключения с внешним источником опорного напряжения. В рамках данного курса мы сосредоточимся на подключении активных датчиков.

---

Схемы подключения датчиков 0-10В к контроллеру HI

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

> ⚠️ Внимание: Всегда проверяйте полярность и напряжение питания датчика перед подключением. Подача сетевого напряжения 230В или переполюсовка питания 24В на сигнальный вход универсального входа контроллера приведет к его необратимому повреждению.

Идентификация клемм на контроллере

Для подключения аналоговых датчиков на контроллере HI используются универсальные входы (UI), которые программно могут быть настроены в режим измерения напряжения.

Схема подключения активного датчика (3-проводная)

Это наиболее распространенный сценарий. Вам понадобится источник питания 24В DC (если он не встроен в щит автоматизации), сам датчик и кабель.

  • Питание датчика:
  • * Клемма `+V` или `24V` на датчике подключается к `+24V` источника питания.

    * Клемма `GND` или `0V` на датчике подключается к `GND` источника питания.

  • Сигнальная линия:
  • * Клемма `Out` или `Vout` на датчике подключается к выбранному универсальному входу контроллера (например, `UI-17`).

    * Клемма `GND` контроллера должна быть соединена с клеммой `GND` источника питания датчика. Это необходимо для выравнивания потенциалов и корректного измерения напряжения.

    Ниже представлена типовая ASCII-схема подключения.

    //========= WIRING-ANALOG-001: Active 0-10V CO2 Sensor ==============
    
    

    [PSU:24VDC] (SENS:CO2:Room101) [CTRL:HI-Core]

    +24V ---- (Красный) ------------ +V

    GND ---- (Черный) ------------ GND --+

    |

    (Зеленый / Сигнальный) -- Out--+--------- UI-17

    |

    (Экран кабеля) ---- (только здесь) ------+--------- GND

    // Черный провод (GND) от источника питания также подключается к GND контроллера

    Рекомендации по выбору кабеля и заземлению

    Для аналоговых сигналов крайне важно минимизировать влияние электромагнитных помех, источником которых могут служить силовые кабели, двигатели, люминесцентные лампы.

    ---

    Настройка универсального входа в Node-RED для работы в режиме 0-10В

    После корректного физического подключения необходимо программно настроить контроллер на прием и обработку аналогового сигнала. Это делается в среде Node-RED с помощью специального узла из палитры HI.

    Обзор узла `hi-universal-input`

    Для работы со всеми типами входов на контроллере используется узел `hi-universal-input`. Он позволяет гибко конфигурировать каждый из 22 универсальных входов для работы в разных режимах: дискретный, счетчик импульсов, 1-Wire, измерение напряжения и др.

    Пошаговая конфигурация узла

  • Создание потока: Откройте редактор Node-RED, перейдите на новую вкладку и перетащите узел `hi-universal-input` из левой палитры в рабочую область.
  • Настройка свойств: Дважды кликните по узлу, чтобы открыть окно его настроек.
  • * Name: Задайте осмысленное имя, отражающее назначение входа. Например, "Датчик CO2 (кабинет)".

    * Channel: В выпадающем списке выберите номер физического входа, к которому вы подключили датчик. Например, `Universal Input 17`.

    * Mode: Это ключевой параметр. Установите его в значение `Voltage (0-10V)`.

    * Poll Interval (s): Укажите, как часто контроллер будет опрашивать вход и отправлять новое значение. Для медленно меняющихся параметров, как CO₂, достаточно интервала в `15-30` секунд. Для управления светом может потребоваться `1` секунда.

    * Deadband (V): "Зона нечувствительности". Узел будет отправлять новое сообщение, только если значение изменилось более чем на указанную величину. Это позволяет отфильтровать незначительные колебания и снизить нагрузку на систему. Рекомендуемое значение: `0.1` (что соответствует 1% от всего диапазона).

  • Деплой и проверка:
  • * Соедините выход узла `hi-universal-input` с входом узла `debug`.

    * Убедитесь, что в узле `debug` выбран вывод `msg.payload`.

    * Нажмите кнопку Deploy.

    Теперь в боковой панели `Debug messages` вы будете видеть сообщения, приходящие от вашего аналогового входа с заданной периодичностью. `msg.payload` будет содержать "сырое" значение напряжения, измеренное на клемме.

    // Пример сообщения в панели Debug
    

    {

    "_msgid": "a1b2c3d4.e5f6g7",

    "payload": 2.54,

    "topic": "ui/17",

    "channel": 17,

    "mode": "voltage"

    }

    Получение таких данных подтверждает, что физическое подключение и базовая настройка узла выполнены корректно.

    ---

    Масштабирование данных: Преобразование вольт в физические величины

    На предыдущем шаге мы получили сырые данные в вольтах. Эти данные бесполезны для конечного пользователя или для сложной логики автоматизации. Наша задача — преобразовать их в реальные физические единицы: ppm для CO₂, % для влажности, люксы для освещенности и т.д. Этот процесс называется масштабированием.

    Для масштабирования идеально подходит стандартный узел Node-RED — `range`. Он выполняет линейное преобразование одного диапазона чисел в другой.

    Настройка узла `range`

    Предположим, мы используем датчик CO₂, в документации которого указано:

    Это означает, что напряжению 0В соответствует 400 ppm, а напряжению 10В — 5000 ppm.

    Выполним настройку узла `range` для этого примера:

  • Перетащите узел `range` в рабочую область и соедините его с выходом узла `hi-universal-input`.
  • Откройте настройки узла `range`.
  • Заполните поля секции Range:
  • * `Input range`: `0` до `10` (это диапазон наших входных данных в вольтах).

    * `Output range`: `400` до `5000` (это целевой диапазон в ppm).

  • В секции Action оставьте опцию `Scale and map to the target range`. Это стандартное линейное масштабирование.
  • Соедините выход узла `range` с новым узлом `debug`. Назовите его "PPM Value" для ясности.
  • Нажмите Deploy.
  • Анализ преобразования

    Теперь давайте посмотрим, как изменился объект `msg` после прохождения через узел `range`.

    До узла `range`:
    // msg объект от узла hi-universal-input
    

    {

    "payload": 2.5, // Напряжение на входе

    "topic": "ui/17"

    // ... другие свойства

    }

    После узла `range`:
    // msg объект на выходе узла range
    

    {

    "payload": 1550, // Масштабированное значение в ppm

    "topic": "ui/17"

    // ... другие свойства

    }

    Как видите, узел `range` взял значение `msg.payload` (2.5), которое составляет 25% от входного диапазона [0, 10], и вычислил соответствующее значение в 25% от выходного диапазона [400, 5000].

    Расчет: `400 + (5000 - 400) (2.5 / 10) = 400 + 4600 0.25 = 400 + 1150 = 1550`.

    ℹ️ Информация: Хотя то же самое преобразование можно выполнить в узле `function` с помощью кода, использование узла `range` является предпочтительным. Это делает поток более наглядным, стандартизированным и легким для понимания другими инженерами.

    // Пример аналогичной логики в узле Function (не рекомендуется)
    

    const in_min = 0;

    const in_max = 10;

    const out_min = 400;

    const out_max = 5000;

    let value_in = msg.payload;

    let value_out = ((value_in - in_min) * (out_max - out_min)) / (in_max - in_min) + out_min;

    msg.payload = Math.round(value_out); // Округляем до целого

    return msg;

    ---

    Публикация обработанных данных в MQTT

    Конечная цель сбора данных с датчика — сделать их доступными для других систем: панели визуализации, мобильного приложения, системы верхнего уровня или других контроллеров. Стандартным протоколом для этого в экосистеме HI является MQTT.

    > 🔗 Связанный материал: Подробно о работе с MQTT брокером и структуре топиков мы говорим в модуле `COURSE-05-M01 "Основы работы с MQTT"`. Здесь мы рассмотрим только практическое применение для нашей задачи.

    Построение потока для публикации

  • Добавление узла `mqtt out`: Перетащите узел `mqtt out` из палитры и соедините его с выходом узла `range`, который выдает уже масштабированные данные в ppm.
  • Настройка узла `mqtt out`:
  • * Server: Выберите из выпадающего списка MQTT брокер. Обычно это `localhost:1883`, так как брокер работает на самом контроллере HI. Если это первая настройка, нажмите на иконку карандаша и укажите адрес `localhost` и порт `1883`.

    * Topic: Это самый важный параметр. Он определяет "адрес", по которому будут опубликованы данные. Следуйте стандарту именования, принятому в академии, чтобы обеспечить единообразие на всех объектах.

    * Формат: `hi/<Расположение>/<Назначение>`

    * Пример: `hi/floor-1/room-101/sensors/co2_level`

    * QoS (Quality of Service): Установите `0`. Для телеметрии с датчиков этот уровень является достаточным и наиболее производительным.

    * Retain: Установите `true`. Это означает, что брокер сохранит последнее опубликованное значение. Любой новый клиент, подписавшийся на этот топик, немедленно получит актуальные данные, а не будет ждать следующего обновления от датчика.

  • Нажмите Deploy.
  • Теперь ваш контроллер каждые 15-30 секунд (в зависимости от настроек `Poll Interval`) считывает напряжение, масштабирует его в ppm и публикует в MQTT.

    Верификация с помощью MQTT-клиента

    Чтобы убедиться, что все работает, используйте внешний MQTT-клиент, например, MQTT Explorer.

  • Запустите MQTT Explorer на вашем рабочем ноутбуке.
  • Создайте новое подключение к IP-адресу вашего контроллера HI, порт `1883`.
  • После подключения вы увидите дерево всех топиков. Найдите ваш топик `hi/floor-1/room-101/sensors/co2_level`.
  • Кликните по нему. Вы должны увидеть последнее опубликованное значение, а также наблюдать, как оно обновляется в реальном времени.
  • Наличие корректных, регулярно обновляемых данных в MQTT Explorer является финальным подтверждением, что вся цепочка от физического датчика до системы автоматизации работает исправно.

    ---

    Итоги и проверка работоспособности

    В этом уроке мы прошли полный цикл подключения и настройки аналогового датчика 0-10В — от монтажа до получения осмысленных данных в системе.

    Краткий обзор выполненных шагов:
  • Физическое подключение: Подключили активный датчик к источнику питания 24В и универсальному входу контроллера HI, соблюдая полярность и используя экранированный кабель.
  • Настройка входа: С помощью узла `hi-universal-input` в Node-RED сконфигурировали порт `UI` для работы в режиме "Напряжение (0-10В)".
  • Масштабирование: Использовали узел `range` для преобразования "сырого" напряжения в физические единицы (ppm) в соответствии с документацией на датчик.
  • Публикация: Настроили узел `mqtt out` для отправки обработанных данных на внутренний MQTT брокер с флагом `retain` для немедленной доступности данных.
  • Диагностика и решение типовых проблем

    Если что-то пошло не так, следуйте этому простому плану диагностики:

  • Нет никаких данных в Node-RED:
  • * Проверка: С помощью мультиметра в режиме измерения напряжения DC убедитесь, что на клеммах питания датчика есть ~24В. Затем измерьте напряжение между клеммой `UI` и `GND` на контроллере. Оно должно быть в диапазоне 0-10В.

    * Решение: Если напряжения нет, проверьте кабель на обрыв и правильность схемы подключения. Если напряжение есть, но узел `hi-universal-input` ничего не выдает, перепроверьте номер канала и режим работы в настройках узла.

  • Данные есть, но они неверные (например, всегда 5000 ppm):
  • * Проверка: Посмотрите на "сырые" данные в вольтах до узла `range`. Если там всегда 10В, возможно, датчик неисправен или сигнальная линия где-то замкнута на линию питания +24В.

    * Решение: Отключите сигнальный провод от клеммы `UI` и измерьте напряжение на нем. Если оно по-прежнему аномальное, проблема в датчике или кабеле. Если напряжение в норме, проблема может быть в самом входе контроллера.

  • Данные в вольтах корректные, но в ppm — нет:
  • * Проверка: Внимательно перепроверьте настройки узла `range`. Не перепутаны ли местами входной и выходной диапазоны? Соответствуют ли они документации на датчик?

    * Решение: Скорректируйте диапазоны в узле `range` и нажмите `Deploy`.

    Что дальше?

    Вы успешно освоили работу с аналоговыми входами. Это открывает возможности для подключения огромного парка промышленных и бытовых датчиков.

    В следующем уроке мы перейдем к еще более мощному и универсальному интерфейсу — RS-485 (Modbus RTU), который позволяет подключать десятки устройств на одну двухпроводную шину.