ГлавнаяАкадемияДатчики и входы: нормализация сигналов → Подключение аналоговых датчиков к универсальным входам

Подключение аналоговых датчиков к универсальным входам

Урок 2 · Датчики и входы: нормализация сигналов · 30 мин · theory

Введение в универсальные входы (УВ) контроллеров HI

В современной автоматизации гибкость является ключевым фактором. Универсальный вход (УВ) — это физический порт на контроллере HI, который может быть сконфигурирован для работы с различными типами электрических сигналов. Вместо того чтобы иметь отдельные, жестко специализированные входы для каждого типа датчика (один для температуры, другой для "сухого контакта", третий для аналогового сигнала), универсальный вход позволяет инженеру-инсталлятору адаптировать один и тот же порт под конкретную задачу на объекте. Это значительно упрощает проектирование, складирование оборудования и монтаж.

На контроллерах HI, универсальные входы (обозначенные как UI1, UI2... UI22) являются мощным инструментом, поддерживающим несколько фундаментальных режимов работы.

> 💡 Подсказка: Всегда сверяйтесь с технической документацией на конкретную модель контроллера HI. Расположение и функция джамперов могут незначительно отличаться между ревизиями.

Обзор поддерживаемых режимов

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

| Режим работы | Тип сигнала | Типичные устройства | Принцип работы |

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

| 0-10В | Аналоговое напряжение | Датчики освещенности, влажности, давления, положения задвижек | Вход измеряет напряжение в диапазоне от 0 до 10 Вольт. Значение напряжения прямо пропорционально измеряемой физической величине. |

| 4-20мА | Аналоговый ток ("токовая петля") | Промышленные датчики давления, расхода, уровня, газоанализаторы | Вход измеряет ток в диапазоне от 4 до 20 миллиампер. Этот стандарт высокоустойчив к помехам и позволяет диагностировать обрыв (ток падает до 0 мА). |

| NTC/Резистивный | Сопротивление | NTC-термисторы (датчики температуры), фоторезисторы | Вход измеряет сопротивление подключенного пассивного элемента. Для NTC-термисторов это позволяет точно определять температуру. |

| "Сухой контакт" | Дискретный | Кнопки, выключатели, герконы, реле, выходы датчиков движения | Вход определяет два состояния: замкнуто (низкое сопротивление) или разомкнуто (высокое сопротивление). |

Физическая конфигурация УВ с помощью джамперов

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

Каждый универсальный вход (или группа входов) имеет свой джампер, который позволяет выбрать между режимом измерения напряжения (`VOLT`) и режимом измерения тока (`AMP`).

Режим 4-20мА: Для работы с датчиками "токовой петли" джампер переключается в положение измерения тока. При этом параллельно входу подключается внутренний прецизионный шунтирующий резистор (обычно 50-250 Ом). Контроллер фактически измеряет падение напряжения на этом резисторе, а затем, по закону Ома (U = I R), вычисляет протекающий в цепи ток.

Программная настройка режима

После того как физическая конфигурация входа выполнена с помощью джампера, необходимо указать контроллеру, как интерпретировать данные с этого входа. Это делается в среде разработки HI, как правило, в настройках узла Node-RED, отвечающего за чтение данных с универсальных входов. Здесь вы указываете тип датчика (0-10V, 4-20mA, NTC 10K и т.д.), что позволяет программному обеспечению применить правильные алгоритмы первичной обработки.

Эта двухуровневая система (физические джамперы + программная настройка) обеспечивает максимальную гибкость и защиту от ошибок конфигурации.

---

Схемы подключения аналоговых датчиков

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

> ⚠️ Внимание: Подключение датчика 4-20мА без соответствующего внешнего источника питания или с неверной схемой может привести к выходу из строя как самого датчика, так и аналогового входа контроллера.

Ниже приведены стандартные схемы подключения для основных типов аналоговых датчиков к универсальным входам (УВ) контроллера HI.

Подключение датчика с выходом 0-10В

Это наиболее простая схема, требующая трех проводов.

1. Питание (+V): Подключается к выходу блока питания (например, +24V).

2. Общий (GND): Объединяет "минус" блока питания и клемму GND универсального входа контроллера.

3. Сигнальный (Out/Signal): Подключается непосредственно к клемме УВ (например, UI5).

//========= Схема подключения датчика 0-10В (например, освещенности) =========

[PSU: 24VDC] (Датчик 0-10V) [Контроллер HI]

+24V <-------------> VIN

GND <---+---------> GND

|

'-----------+------------------> GND (на клемме УВ)

|

(Сигнал) Out '------------------> UI5

Подключение датчика с выходом 4-20мА (Токовая петля)

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

Схема для 2-проводного датчика

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

//====== Схема подключения 2-проводного датчика 4-20мА (последовательная цепь) ======

[PSU: 24VDC] [Контроллер HI]

+24V ----(+)---> (Датчик +)

(Датчик -) ----(-)---> UI6

GND <----------------------------------------- GND (на клемме УВ)

Логика цепи: Ток выходит из `+` блока питания, проходит через датчик, входит в универсальный вход контроллера `UI6` (на котором джампером включен шунтирующий резистор), и возвращается на `GND` блока питания через общий проводник `GND` контроллера.

Схема для 4-проводного датчика

Такие датчики имеют отдельные клеммы для питания и для сигнальной петли. Это упрощает подключение.

//========= Схема подключения 4-проводного датчика 4-20мА =========

[PSU: 24VDC] (Датчик 4-20мА, 4-пров.) [Контроллер HI]

+24V <-----------> V+ (Питание)

GND <-----------> GND (Питание)

I_Out+ (Сигнал) --------> UI7

I_Out- (Сигнал) --------> GND (на клемме УВ)

Подключение пассивных резистивных датчиков (NTC)

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

//========= Схема подключения NTC-термистора =========

(NTC-датчик 10K) [Контроллер HI]

Вывод 1 <------------------------------> UI8

Вывод 2 <------------------------------> GND (на клемме УВ)

Типичные ошибки подключения

---

Работа с "сырыми" данными АЦП в Node-RED

После физического подключения и конфигурации джамперов следующим шагом является получение данных в программной среде контроллера. Для этого в кастомизированной сборке Node-RED для платформы HI используется специальный узел `hi-universal-input`.

Этот узел является мостом между аппаратной частью контроллера (его аналого-цифровым преобразователем - АЦП) и логикой ваших потоков автоматизации. Как мы рассматривали в предыдущем уроке, АЦП преобразует непрерывный аналоговый сигнал (напряжение или ток) в дискретное цифровое значение.

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

`hi-universal-input` — это узел-источник. Он не имеет входов и периодически генерирует сообщения, содержащие текущее значение, считанное с выбранного универсального входа.

Конфигурация узла

Панель настроек узла `hi-universal-input` предельно проста и содержит ключевые параметры:

Анализ выходного сообщения (`msg`)

При каждом срабатывании `hi-universal-input` отправляет на свой выход стандартный объект `msg`. Ключевая информация содержится в `msg.payload`. Для аналоговых режимов (0-10V, 4-20mA) `payload` будет содержать целочисленное значение, напрямую полученное от АЦП.

Например, контроллер HI оснащен 12-битным АЦП. Это означает, что он может представить аналоговый сигнал в виде одного из 2^12 = 4096 уровней.

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

> * "Сырые" данные (Raw Data): Необработанное целочисленное значение от АЦП (например, от `0` до `4095`). Эти числа часто называют "попугаями", так как они не имеют прямого физического смысла без дальнейшего преобразования.

Предположим, мы считываем данные с датчика 0-10В.

Выходное сообщение узла будет выглядеть следующим образом:

{

"payload": 2047,

"topic": "hi/input/ui5/raw",

"_msgid": "a1b2c3d4.e5f6g7"

}

Влияние интервала опроса

Выбор интервала опроса — это компромисс между отзывчивостью системы и нагрузкой на контроллер.

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

---

Линейная нормализация: от "попугаев" к физическим величинам

Получать "сырые" значения `2047` или `3150` от АЦП неудобно и неинформативно. Для построения логики, отображения на панелях управления и ведения архивов нам нужны реальные физические величины: Вольты, градусы Цельсия, Люксы, проценты влажности.

Процесс преобразования "сырого" значения АЦП в осмысленную физическую величину называется нормализацией.

Для датчиков с линейной зависимостью, таких как 0-10В и 4-20мА, применяется линейная нормализация. Это простое математическое сопоставление двух диапазонов.

Математическая основа

В основе лежит уравнение прямой: `Y = aX + b`, где:

Наша задача — найти `a` и `b`, зная две точки на графике. Этими точками являются границы диапазонов.

Пример:

Допустим, у нас есть датчик освещенности с рабочим диапазоном 0-1000 Люкс, который выдает сигнал 0-10В. Контроллер имеет 12-битный АЦП.

Нам нужно сопоставить два диапазона:

Составим систему уравнений:

  • Когда `X = 0`, `Y` должен быть `0`. => `0 = a * 0 + b` => `b = 0`.
  • Когда `X = 4095`, `Y` должен быть `1000`. => `1000 = a * 4095 + 0` => `a = 1000 / 4095 ≈ 0.2442`.
  • Таким образом, формула нормализации для этого датчика: `Люксы = 0.2442 * [Значение АЦП]`.

    Если бы датчик работал в диапазоне 4-20мА, АЦП мог бы выдавать значения, например, от `819` (соответствует 4мА) до `4095` (соответствует 20мА). Тогда расчеты были бы немного сложнее, но принцип остался бы тем же — сопоставление двух известных точек.

    > 🔗 Связанный материал: Для нелинейных датчиков, таких как NTC-термисторы, используется более сложный подход с использованием таблиц соответствия (lookup tables) или формулы Стейнхарта-Харта. Это будет подробно рассмотрено в уроке `COURSE-04-M04-L04`.

    К счастью, в Node-RED нет необходимости вычислять эти коэффициенты вручную. Для этого существует стандартный узел `range`.

    ---

    Практикум: Нормализация данных с помощью ноды `range`

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

    Давайте создадим поток, который считывает "сырые" данные с датчика освещенности и преобразует их в Люксы.

    Задача: Датчик освещенности 0-1000 Люкс подключен к универсальному входу UI5. Контроллер имеет 12-битный АЦП (0-4095).

    Пошаговое руководство

  • Создайте поток: На палитру Node-RED перетащите узлы `hi-universal-input`, `range` и `debug`. Соедините их последовательно.
  • * ASCII-схема потока (`FLOW-AUTO-SENS-001`):

            [hi-universal-input]---->[range]---->[debug]

  • Настройте узел `hi-universal-input`:
  • * Name: `Датчик освещенности Гостиная (RAW)`

    * Канал: `5`

    * Интервал опроса: `10` секунд.

    * Режим: `0-10V`.

  • Настройте узел `range`: Это самый важный шаг.
  • * Откройте панель настроек узла `range`.

    * Action: `Scale and map to the destination range`.

    * Input range (диапазон входа):

    * `from`: `0`

    * `to`: `4095`

    (Это диапазон "сырых" значений нашего 12-битного АЦП).

    * Output range (диапазон выхода):

    * `from`: `0`

    * `to`: `1000`

    (Это диапазон физических величин нашего датчика, в Люксах).

    * Оставьте опцию `Round result to the nearest integer` неактивной, чтобы получать дробные значения для большей точности.

  • Настройте узел `debug`:
  • * Output: `complete msg object`. Это позволит нам увидеть, как изменился `msg.payload`.

  • Разверните поток (Deploy).
  • Проверка результата

    Теперь откройте боковую панель Debug. Каждые 10 секунд вы будете видеть сообщение.

        // Сообщение, ВХОДЯЩЕЕ в узел range

    {

    "payload": 3071,

    "topic": "hi/input/ui5/raw",

    ...

    }

    `Y = (3071 - 0) / (4095 - 0) (1000 - 0) + 0 = 0.75 1000 = 750`

        // Сообщение, ВЫХОДЯЩЕЕ из узла range

    {

    "payload": 750,

    "topic": "hi/input/ui5/raw",

    ...

    }

    Теперь это значение (`750 Люкс`) можно использовать в логике (например, "если освещенность < 100 Люкс, включить свет"), отправлять по MQTT в систему верхнего уровня или сохранять в базу данных MySQL для построения графиков.

    Чтобы сделать поток завершенным в соответствии со стандартами Академии, добавим форматирование сообщения по "Контракту сообщения".

    // Вставьте узел Function после узла range
    

    // Код для узла Function:

    let lux = msg.payload;

    // Формируем исходящее сообщение по контракту

    msg.payload = {

    "value": parseFloat(lux.toFixed(2)), // Округляем до 2 знаков

    "unit": "Lux",

    "source": "light-sensor-livingroom-01",

    "ts": Date.now()

    };

    msg.topic = "telemetry/livingroom/light_level";

    return msg;

    Теперь наш поток не просто измеряет и нормализует данные, но и приводит их к стандартному, документированному виду, готовому для интеграции с остальной системой.

    ---

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

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

    Краткое повторение процесса:

  • Выбор режима: Мы определили, какой датчик используем (0-10В, 4-20мА и т.д.) и установили соответствующий джампер на плате контроллера HI.
  • Физическое подключение: Мы собрали схему подключения согласно стандартам, обеспечив правильное питание датчика и подключение сигнальных линий.
  • Чтение "сырых" данных: С помощью узла `hi-universal-input` мы начали получать целочисленные значения от АЦП — "попугаи".
  • Линейная нормализация: Используя узел `range`, мы сопоставили диапазон АЦП с рабочим диапазоном датчика и преобразовали "попугаев" в реальные физические величины.
  • Форматирование: С помощью узла `Function` мы привели сообщение к стандартному "Контракту сообщения", добавив единицы измерения, источник и временную метку.
  • Ключевой вывод этого урока — разница между "сырыми" и нормализованными данными. Профессиональная система автоматизации всегда должна оперировать нормализованными, физически осмысленными величинами. Это делает логику понятной, а систему — легко поддерживаемой и масштабируемой.

    Важность правильного выбора схемы подключения и конфигурации входа нельзя переоценить. Ошибка на этом "физическом" уровне сделает все последующие программные ухищрения бесполезными.

    Что дальше

    Мы освоили работу с линейными датчиками. Однако существует огромный класс очень популярных датчиков, которые имеют нелинейную характеристику — NTC-термисторы для измерения температуры. Простое масштабирование с помощью узла `range` для них не подходит.

    В следующем уроке, `COURSE-04-M04-L04`, мы подробно разберем: