Блог

Из 4-20 мА нужен дискретный сигнал: Как задать порог без дребезга и ложных переключений

Датчик давления показывает 5,98 бар, затем 6,03, потом 5,99. В программе стоит сравнение Pressure >= 6.0, поэтому признак готовности включается и выключается почти каждый цикл. На HMI мигает состояние, в журнал летят десятки событий, а контактор или клапан получает команды, которых технологический процесс не требовал.
Проблема не в том, что аналоговый сигнал нельзя превратить в дискретный. Проблема в попытке сделать это одним сравнением с одной константой. Реальный процесс колеблется, измерение шумит, АЦП имеет конечное разрешение, фильтр добавляет задержку, а значение может на короткое время перейти через границу без устойчивого изменения режима.
Ниже разбираем, как сформировать признаки “есть/нет”, “выше/ниже” и разрешение межблокировки с учетом масштабирования, гистерезиса, выдержек времени, качества сигнала, обрыва и ручного режима. Универсальных порогов здесь не будет: их выбирают по данным процесса, риску ложного переключения и допустимому времени реакции.

Короткий ответ

Для устойчивого дискретного признака из 4-20 мА недостаточно условия PV >= Limit. Нужны как минимум два порога: отдельный для включения и отдельный для отключения, чтобы состояние сохранялось внутри зоны гистерезиса. Если краткие переходы через границу не должны менять режим, добавляют независимые выдержки включения и отключения. При Bad quality, обрыве или выходе за диапазон алгоритм должен перейти в заранее определенное безопасное состояние, а не принимать ошибочный ток за низкое технологическое значение.

Сначала убедитесь, что сравниваете правильную величину

Порог лучше задавать в инженерных единицах, понятных технологу: барах, градусах, процентах уровня, расходе. Но до сравнения ток 4-20 мА должен быть корректно преобразован. Если передатчик настроен на 0-10 бар, а блок масштабирования считает 0-16 бар, признак сработает не в той физической точке, хотя код сравнения будет безупречным.
Цепочка обычно выглядит так: raw-значение аналогового входа, проверка статуса, преобразование электрического диапазона, масштабирование в инженерные единицы, фильтрация и только затем логика порога. Порядок может отличаться, но качество канала нельзя потерять по дороге. Число без признака достоверности слишком легко принять за измерение.
Базовое различие аналоговых и дискретных каналов разобрано в статье “Дискретные и аналоговые сигналы в АСУ ТП”. Здесь важен практический вывод: дискретный признак, сформированный программой, не становится физическим дискретным входом. Он остается результатом интерпретации аналогового измерения и наследует все его ошибки.
Перед настройкой порога стоит проверить четыре вещи: диапазон передатчика, режим AI 4-20 мА, raw-код при известных состояниях и инженерную шкалу в ПЛК. Если хотя бы один слой не совпадает с КД, подбирать гистерезис рано. Он стабилизирует переключение, но не исправит смещенный диапазон.

Почему одно сравнение начинает дребезжать

Условие PV >= Limit не хранит историю. При 6,01 бар оно истинно, при 5,99 - ложно. Для программы это два разных состояния, даже если технолог считает оба значения одним устойчивым режимом около 6 бар.
Колебания появляются по нескольким причинам. Сам процесс может пульсировать из-за насоса, клапана или периодической нагрузки. Датчик и аналоговый вход добавляют собственный шум. Масштабирование округляет raw-код до видимой ступеньки. Задача ПЛК читает значение в разные моменты волны. Наконец, фильтр может уменьшить амплитуду, но не убрать пересечение порога.
Чем чаще выполняется логика, тем больше переключений она успевает заметить. Быстрый цикл ПЛК полезен для управления, но сам по себе не делает решение устойчивым. Если признак используется в межблокировке, каждое краткое ложное состояние может сбросить разрешение, остановить последовательность или породить новую запись аварии.
Программный дребезг похож на дребезг механического контакта только внешне. У кнопки меняется физический контакт. У аналогового порога непрерывная величина честно ходит вокруг границы. Поэтому лечить нужно не входной бит, а правило перехода между состояниями.

Гистерезис: два порога и память состояния

Гистерезис вводит отдельную границу для каждого направления. Допустим, признак “давление достаточно” должен включаться при достижении верхнего порога. После включения он не выключается при первом же небольшом снижении. Для отключения используется более низкий порог.
Логика состояния выглядит так:
•если признак выключен и значение достигло порога включения, появляется кандидат на включение;
•если признак включен и значение опустилось до порога отключения, появляется кандидат на отключение;
•между двумя порогами сохраняется предыдущее состояние.
Именно сохранение предыдущего состояния убирает переключения внутри узкой рабочей зоны. Одного арифметического выражения иногда достаточно, но явный автомат из двух состояний обычно легче читать, тестировать и показывать на HMI.

Ширина гистерезиса зависит от процесса

Слишком узкая зона не перекроет шум и пульсации. Слишком широкая заставит систему поздно выключаться или долго не возвращаться в исходное состояние. Поэтому ширину связывают не с красивым процентом, а с реальными данными.
Нужно знать типичную амплитуду шума в устойчивом режиме, разброс исправного датчика, скорость изменения процесса и разницу между технологически различимыми состояниями. Если сигнал в норме колеблется на 0,08 бар, гистерезис меньше этого разброса вряд ли даст устойчивость. Но это не означает, что нужно автоматически ставить 0,1 бар: для конкретной защиты такая зона может быть недопустима.
Полезно анализировать тренд без аварии и в момент реального перехода. На нем видно, насколько быстро процесс пересекает границу, сколько времени проводит рядом с ней и какова амплитуда колебаний. Порог, выбранный только по одному текущему числу, часто приходится переделывать после первого пуска.

Для признака “ниже нормы” направление меняется

Если нужен признак низкого уровня, он включается при переходе ниже нижнего порога, а выключается после подъема выше верхнего. Названия переменных должны отражать смысл: LowLevelActive, LowLevelOnThreshold, LowLevelOffThreshold. Абстрактные Limit1 и Limit2 через месяц заставят заново угадывать направление.

Выдержка времени: переход должен быть не только достигнут, но и подтвержден

Гистерезис защищает от колебаний по величине. Выдержка защищает от кратких переходов по времени. Эти механизмы решают разные задачи и обычно работают вместе.
Если значение пересекло порог включения, запускается таймер подтверждения. Признак меняется только тогда, когда условие непрерывно сохранялось заданное время. Если значение вернулось в зону до завершения выдержки, кандидат отменяется. Для отключения используют отдельный таймер, потому что допустимая задержка может быть другой.
Например, краткий всплеск расхода не должен давать разрешение на следующий шаг, но падение давления может требовать быстрого снятия разрешения. В другой системе все наоборот: включение вентилятора допускает задержку, а отключение после восстановления концентрации должно происходить только после устойчивой нормализации. Одна общая выдержка не описывает обе ситуации.

Время выбирают по последствиям

Слишком короткая выдержка пропускает технологические импульсы и шум. Слишком длинная делает защиту или межблокировку медленной. Поэтому сначала формулируют, что опаснее: ложное срабатывание или поздняя реакция.
Для разрешающего признака часто важна устойчивость: лучше подтвердить состояние, чем открыть следующий шаг по мгновенному выбросу. Для аварийного отключения приоритет может быть противоположным. Если сигнал относится к защитной функции, допустимое время реакции задается проектом и анализом безопасности, а не удобством программиста.
Таймер должен работать от реального времени задачи, а не от подсчета циклов вручную. Период задачи может измениться, появятся пропуски или перенос логики в другую задачу, и “сто циклов” перестанут означать прежнюю выдержку.

Фильтр не заменяет гистерезис и таймер

Фильтр уменьшает шум, но добавляет запаздывание. Если увеличить постоянную времени до тех пор, пока дискретный признак перестанет переключаться, можно получить красивый тренд и позднюю реакцию на реальное событие. Особенно опасно, когда один и тот же сильно отфильтрованный тег используется и для отображения, и для межблокировки.
Гистерезис отвечает на вопрос “насколько далеко нужно вернуться, чтобы изменить состояние обратно”. Выдержка отвечает “как долго условие должно сохраняться”. Фильтр отвечает “какую часть быстрых изменений оставить в измерении”. Эти вопросы нельзя сводить к одному ползунку.
Подробный слой про фильтрацию, пороги и качество сигнала есть в статье “Сигнал 4-20 мА на экране: фильтрация, аварии по порогу, что проверить в проекте”. Для дискретного признака из этой темы особенно важен контроль задержки: после фильтра реальный переход достигает порога позже.

Качество сигнала должно участвовать в решении

Самая неприятная ошибка - преобразовать обрыв петли в нормальный технологический ноль. Вход видит ток ниже диапазона, масштабирование выдает отрицательное значение или нижнюю границу, а условие PV < Limit включает признак “низкий уровень”. Формально сравнение сработало правильно. По смыслу система перепутала неисправность измерения с состоянием процесса.
Перед пороговой логикой нужно сформировать достоверность входа. В нее могут входить Good quality, отсутствие wire break, underflow, overflow, module fault и устаревшего значения. Набор признаков зависит от конкретного модуля и драйвера.
При плохом качестве есть несколько вариантов поведения:
•снять разрешение и перейти в безопасное состояние;
•удержать предыдущее состояние на ограниченное время;
•использовать резервный канал;
•запросить решение оператора в предусмотренном режиме;
•сформировать отдельную неисправность измерения.
Выбор зависит от процесса. Нельзя универсально объявить, что при обрыве любой признак должен стать FALSE. Для сигнала “давление достаточно” это может быть разумно. Для признака “опасная концентрация присутствует” простое FALSE при потере датчика способно создать опасное разрешение. Требуемое состояние определяют технолог, разработчик алгоритма и специалисты по безопасности.
Отдельно стоит решить, что происходит после восстановления качества. Признак не должен мгновенно включаться по старому значению или обнуленному таймеру без понятного правила. Часто после восстановления снова требуется выдержка подтверждения.

Межблокировка, разрешение и авария - не одно и то же

Из одного аналогового значения могут формироваться разные дискретные признаки: предупреждение, авария, разрешение пуска, условие перехода шага, сигнал для резервирования. У них могут быть разные пороги, гистерезисы, выдержки и правила сброса.
Не стоит использовать один бит PressureOK сразу везде. Для пуска может требоваться устойчивое давление в течение нескольких секунд. Для снятия разрешения во время работы допустима другая граница. Предупреждение может быть информационным и не влиять на механизм. Авария может фиксироваться до квитирования, даже если измерение уже вернулось в норму.
Если все функции завязаны на один порог, изменение уставки ради удобства оператора неожиданно меняет межблокировку. Разделение признаков делает влияние каждой настройки видимым.

Ручной режим не должен тихо обходить плохой сигнал

Ручной режим часто добавляют после первой жалобы: “дайте оператору включить, когда датчик шалит”. Если сделать это одной перемычкой в логике, временный обход быстро становится постоянным способом эксплуатации.
Нужно разделять ручное управление механизмом и принудительное состояние расчетного признака. Оператор может получить право вручную подать команду, но это не означает, что программа должна показывать недостоверное давление как нормальное. На HMI сохраняют реальное значение, качество, состояние пороговой логики и активный обход.
Для разрешенного обхода задают владельца, причину, время начала, срок действия и условия автоматического снятия. Критичные защиты ручной режим не должен отменять, если это не предусмотрено проектом и процедурой. Все переходы в ручной режим и изменения порогов записывают в журнал действий оператора.

Что показывать на HMI

Оператору недостаточно одного зеленого индикатора “норма”. Если он не видит, почему признак еще не включился или уже выключился, начнутся просьбы уменьшить задержку и сузить гистерезис.
На экране полезно показывать текущее значение с единицами, качество сигнала, рабочие пороги, итоговое дискретное состояние и режим. Когда идет выдержка, можно отображать нейтральный статус “условие подтверждается” без превращения интерфейса в экран отладки. При обрыве вместо правдоподобного нуля нужен явный признак недостоверности.
Порог включения и отключения должны быть различимы в тренде. Тогда после события видно: значение только коснулось границы или действительно удерживалось за ней. Для наладки это намного полезнее, чем спор по записи “признак мигал”.
Если уставки доступны с HMI, журнал фиксирует старое и новое значение, пользователя, время и рабочее место. Для пары порогов полезно контролировать взаимное расположение, чтобы оператор не смог случайно поменять их местами или создать отрицательный гистерезис.

Практическая структура алгоритма

Алгоритм удобно разделить на последовательные слои. Сначала принимается raw и статус AI. Затем значение масштабируется и, если нужно, фильтруется. После этого формируется признак достоверности. Только для достоверного значения вычисляются кандидаты по порогам и запускаются таймеры подтверждения. Итоговое состояние хранится отдельно и передается в межблокировки, HMI и журнал.
Такую структуру легче тестировать. На стенде или в симуляции можно отдельно проверить шум около порога, краткий выброс, медленный переход, обрыв, восстановление качества, ручной режим и изменение уставки. Если вся логика спрятана в одном длинном выражении, даже автору трудно объяснить, почему бит переключился.
При тестировании важен не только ожидаемый переход, но и отсутствие лишних событий. Система должна один раз зафиксировать включение, один раз отключение и отдельно неисправность сигнала. Если журнал заполняется сотней одинаковых строк, гистерезис может быть исправен, а регистрация события настроена по уровню вместо фронта.

Таблица: условие процесса, риск и защита алгоритма

Условие процесса
Риск ложного переключения
Что заложить в алгоритм
Значение шумит около рабочего порога
Бит меняется почти каждый цикл
Раздельные пороги включения и отключения, сохранение состояния внутри зоны
Есть короткие технологические импульсы
Краткий выброс дает ложное разрешение
Выдержка включения с отменой при возврате до окончания времени
Краткие провалы допустимы во время работы
Разрешение снимается от одиночной просадки
Отдельная выдержка отключения, согласованная с технологом
Реальное аварийное падение требует быстрой реакции
Слишком длинный таймер задержит отключение
Независимая короткая выдержка отключения или отсутствие задержки по проекту
Процесс медленно проходит через порог
Состояние долго находится в неопределенной зоне
Явное хранение предыдущего состояния и понятная индикация ожидания
У сигнала заметна пульсация насоса
Порог пересекается на каждой волне
Гистерезис по данным тренда, при необходимости умеренная фильтрация
Канал имеет ступенчатый raw-код
Округление перебрасывает значение через границу
Порог в инженерных единицах после корректного масштабирования, достаточная зона гистерезиса
Петля 4-20 мА оборвалась
Низкий ошибочный ток принимается за низкий процесс
Отдельный признак качества и политика безопасного состояния
Значение вышло выше диапазона
Overflow принимается за реальное превышение
Диагностический статус, отдельная неисправность измерения, запрет слепого сравнения
Связь восстановилась после Bad quality
Признак мгновенно включается по первому отсчету
Повторное подтверждение качества и выдержки после восстановления
Оператор включил ручной режим
Обход остается активным и скрывает неисправность
Отдельный режим, видимая индикация, срок действия, права и журналирование
Порог меняют с HMI
Пороги меняются местами или зона становится слишком узкой
Проверка диапазонов и взаимного положения, запись старого и нового значения
Один бит используется для пуска и аварии
Настройка одной функции ломает другую
Раздельные признаки, пороги, таймеры и правила фиксации
Сильно отфильтрованный сигнал выглядит стабильным
Реальный переход обнаруживается поздно
Контроль задержки фильтра, разные теги для отображения и критичной логики при необходимости
Событие пишется по уровню каждый цикл
Журнал заполняется дублями
Регистрация фронта состояния, отдельные события включения, отключения и отказа

Типовые ошибки

Один порог в обоих направлениях.
Алгоритм не имеет зоны, в которой сохраняется предыдущее состояние. Любое колебание через границу вызывает новый переход.
Только таймер без гистерезиса.
Если сигнал постоянно пересекает порог, таймер будет запускаться и сбрасываться. Иногда признак не включится вообще, хотя среднее значение уже соответствует режиму.
Только гистерезис без учета длительности.
Большой единичный импульс сразу пересечет порог включения. Если такие импульсы допустимы, нужна временная проверка.
Bad quality превращается в ноль.
Неисправность измерения смешивается с реальным низким значением. В результате алгоритм может разрешить или запретить действие по несуществующему процессу.
Ручной режим подменяет достоверность.
На экране все становится зеленым, хотя датчик по-прежнему неисправен. Режим управления и качество измерения должны оставаться разными признаками.
Уставка есть, а происхождения нет.
Число выбрали на пуске и забыли записать, почему именно оно принято. Без тренда, допуска и владельца следующий инженер не сможет безопасно изменить порог.

Вопросы при работе

Какой гистерезис поставить для датчика 4-20 мА?
Его нельзя выбрать только по электрическому диапазону. Нужны шум и пульсации в инженерных единицах, динамика процесса, точность измерения и допустимая разница между включением и отключением.
Нужна ли задержка, если уже есть фильтр?
Возможно. Фильтр сглаживает измерение, а задержка подтверждает длительность условия. При этом суммарное запаздывание нужно проверить на допустимость.
Что делать с признаком при обрыве датчика?
Переводить его в заранее определенное безопасное состояние или отдельный режим отказа. Конкретное решение зависит от смысла сигнала и проекта безопасности.
Стоит ли фиксировать дискретный признак до квитирования?
Для аварии это может быть нужно, для обычного разрешения - нет. Фиксация, квитирование и возврат в норму определяются назначением конкретного признака.
Можно ли дать оператору менять оба порога?
Можно, если это предусмотрено правами и технологией. Программа должна проверять диапазоны, минимальную допустимую зону и журналировать изменение.
Что писать в журнал при переключении?
Полезны новое состояние, текущее аналоговое значение, порог, режим, качество и причина перехода. Для ручного изменения дополнительно нужны пользователь и старая настройка.

Ссылки по теме

Обсуждение