Блог

ПИД-регулятор в ПЛК: Почему Kp, Ti и Ki нельзя переносить «как есть»

На объекте это выглядит обидно просто. Был отдельный регулятор температуры, частотник или старый ПЛК. Контур работал терпимо: не идеально, но технологи привыкли. Потом управление переносят в новый ПЛК, находят старые настройки Kp, Ti, иногда Ki, аккуратно переписывают их в новый блок - и контур начинает жить своей жизнью. То долго не выходит на уставку, то перелетает, то качается, то после ручного режима уезжает в насыщение.
Первый рефлекс - “ПИД в новом ПЛК плохой”. Второй - “надо заново настроить”. Иногда это правда. Но часто причина проще и неприятнее: настройки перенесли как числа, а не как смысл. В старом устройстве и новом ПЛК могли быть разные формы ПИД, разные единицы времени, разный период вызова блока, другой масштаб входа и выхода, другая логика ручного режима и другой антиwindup. На бумаге коэффициенты совпали. В математике - нет.
Эта статья не повторяет базовый материал про настройку ПИД-регулирования, перерегулирование и антиwindup. Здесь узкий, но очень частый вопрос: почему нельзя взять Kp, Ti, Td, Ki или Tn из частотника, автономного регулятора или старого проекта и без проверки вставить их в ПЛК.

Одна надпись PID, разные формулы

ПИД-регулятор кажется универсальным: есть ошибка между уставкой и измерением, есть пропорциональная, интегральная и дифференциальная части, есть выход на клапан, привод или нагрев. Но в промышленных блоках встречаются разные формы записи.
В одной системе интегральная часть задается временем интегрирования Ti: чем меньше Ti, тем сильнее интеграл. В другой системе задается коэффициент Ki: чем больше Ki, тем сильнее интеграл. Где-то используется обозначение Tn, где-то I gain, где-то интегральная часть уже умножена на Kp, а где-то независима от него. В одном блоке формула выглядит как зависимая форма: общий Kp усиливает и P, и I, и D. В другом - независимая: каждая часть имеет свой коэффициент.
Из-за этого фраза “перенеси Ki” без уточнения формы почти бессмысленна. Если старый регулятор использовал Ti = 20 s, а новый блок ждет Ki = 1/s или repeat/min, прямой перенос числа 20 может усилить интеграл в десятки раз. Контур не обязан прощать такую арифметику.

Kp тоже не всегда тот же Kp

С Kp кажется проще: коэффициент усиления и коэффициент усиления. Но даже здесь есть подвох. Kp зависит от того, в каких единицах живет ошибка и выход.
Если старый регулятор видел температуру в процентах диапазона, а новый ПЛК считает ошибку в градусах, один и тот же Kp означает разную реакцию. Ошибка 5 °C и ошибка 5 % - это не одно и то же, если диапазон измерения 0-200 °C. Если выход в старом устройстве был 0-100 %, а в ПЛК задается 0-27648, 0-10 В или инженерная величина расхода, масштаб снова меняется.
Поэтому перед переносом нужно понять не только “какой Kp стоял”, но и “какую ошибку он умножал” и “в каком масштабе формировался выход”. Без этого коэффициент превращается в красивую цифру без контекста.

Ti, Tn и Ki: главная ловушка переноса

Больше всего ошибок возникает с интегральной частью. Время интегрирования Ti или Tn и коэффициент интегрирования Ki связаны, но не являются одним и тем же параметром.
Если говорить грубо, Ti показывает, за какое время интегральная часть “догоняет” пропорциональную при постоянной ошибке. Чем больше Ti, тем мягче интеграл. Ki обычно работает наоборот: чем больше Ki, тем быстрее накапливается интегральная часть. Поэтому переносить Ti в поле Ki нельзя. И переносить Ki в поле Ti тоже нельзя.
Сложность в том, что разные блоки могут использовать секунды, миллисекунды, минуты или внутреннее время цикла. Старый регулятор мог показывать Tn = 0.5 min, а инженер воспринимает это как 0.5 s. Частотник мог задавать время интегрирования в секундах, а ПЛК-блок ждет коэффициент в обратных секундах. В интерфейсе это может выглядеть почти одинаково, но объект увидит совсем другую динамику.
Если после переноса контур стал резко раскачиваться, первым делом стоит проверить не “плохой ли объект”, а правильно ли пересчитали интегральную часть.

Период вызова блока меняет все

ПИД-блок в ПЛК должен вызываться с понятным периодом. Не “когда программа дошла”, не “примерно каждый цикл”, а с тем временем, которое заложено в расчет. Если блок считает интеграл и производную через время дискретизации, период вызова становится частью настройки.
Один и тот же Ki при вызове раз в 100 мс и раз в 1 секунду может вести себя по-разному, если блок не получает корректный параметр dt или сам не привязан к стабильной задаче. Производная часть еще чувствительнее: шум измерения, редкий вызов и скачущий цикл легко превращают D-составляющую в генератор дерганий.
На практике это особенно часто всплывает при переносе из отдельного регулятора или частотника. Там внутренняя дискретизация была фиксирована и скрыта от пользователя. В ПЛК инженер сам решает, где вызвать блок: в основной программе, периодической задаче, быстром цикле, медленном цикле. Если это решение не совпадает с математикой ПИД, старые настройки теряют смысл.
Перед переносом нужно ответить на простой вопрос: старый регулятор считал контур с каким периодом, а новый блок будет вызываться с каким? Если ответа нет, перенос “как есть” уже рискован.

Нормирование PV, SP и выхода

PID не видит технологический объект напрямую. Он видит числа. Если числа плохо нормированы, регулятор будет честно регулировать не тот масштаб.
Измерение PV может приходить в градусах, процентах, кодах АЦП, барах, миллиамперах или уже отфильтрованной инженерной величине. Уставка SP должна жить в том же масштабе, что и PV. Выход CV должен соответствовать тому, что понимает исполнительный механизм: проценты, герцы, миллиамперы, задание клапана, мощность нагрева.
При переносе из частотника ловушка часто такая: старый PID регулировал частоту двигателя внутри ПЧ, где выход был в процентах или герцах с внутренними ограничениями. В ПЛК выход внезапно становится аналоговым сигналом, сетевым заданием или внутренней переменной, которую еще надо масштабировать. Если сделать это формально, можно получить выход, который вроде бы меняется, но объект реагирует слишком резко или слишком вяло.
Здесь полезна дисциплина из статьи «Можно ли доверять цифре на экране: метрология для смены»: красивая цифра в интерфейсе не доказывает, что вся измерительная цепочка корректна. Для ПИД это особенно важно. Если PV уже смещен, отфильтрован, округлен или неверно масштабирован, настройка регулятора превращается в лечение симптома.

Ручной и автоматический режим

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

Насыщение выхода и antiwindup

Реальный исполнительный механизм имеет пределы. Клапан не откроется больше 100 %. Частотник не уйдет выше заданной максимальной частоты. Нагреватель не даст больше своей мощности. Если ПИД просит больше, чем возможно, выход насыщается.
В этот момент интегральная часть может продолжать накапливать ошибку. Объект еще не догнал уставку, интеграл растет, выход уперт в максимум. Потом процесс наконец приближается к уставке, но интегральная сумма уже слишком большая, и контур перелетает. Это и есть windup.
В одном регуляторе antiwindup мог быть включен по умолчанию. В другом блоке ПЛК его нужно настроить: ограничить интеграл, включить tracking, задать обратный расчет, связать ручной выход с внутренним состоянием регулятора. Если старые коэффициенты переносить без проверки antiwindup, можно получить поведение, которого раньше просто не было.
Особенно внимательно нужно смотреть контуры, где выход часто упирается в предел: нагрев при холодном старте, насос на малом расходе, заслонка с ограничением, частотник с минимальной и максимальной частотой. Там antiwindup - не украшение, а часть работоспособности.

Перенос из частотника

Частотник часто имеет свой встроенный PID: давление, расход, уровень, температура. Когда такой контур переносят в ПЛК, кажется логичным взять параметры из ПЧ. Но частотник мог учитывать особенности привода: рампы, ограничения частоты, минимальную скорость, фильтр обратной связи, внутреннее масштабирование задания, знак регулирования, sleep/wake-up, ограничения ускорения.
ПЛК-блок этого не знает, если вы сами не описали. Он может дать выход 0-100 %, а дальше уже отдельная логика превратит его в частоту. Если между ПИД и ПЧ стоят ramp, лимиты, deadband, переключение насосов или защита от сухого хода, фактический объект для регулятора меняется.
Поэтому перенос из ПЧ в ПЛК - это не копирование трех чисел. Это перенос всей обвязки: диапазонов, фильтра PV, направления действия, ограничений выхода, ramp, минимальной частоты, ручного режима, аварийной логики и поведения при потере датчика.

Перенос из отдельного регулятора

С автономными регуляторами похожая история. На панели старого прибора могут быть P, I, D, но за ними скрываются десятки настроек: тип входа, диапазон датчика, период управления, гистерезис, тип выхода, режим нагрева/охлаждения, ограничения, auto-tune, фильтр измерения. Иногда параметр P задается не как усиление, а как пропорциональная полоса. Тогда увеличение числа может ослаблять реакцию, а не усиливать.
Если инженер переписывает только видимые P/I/D, он переносит верхушку. А поведение контура определялось еще и внутренней логикой прибора. Новый ПЛК должен воспроизвести эту логику осознанно, иначе контур станет другим.
Лучший путь - не гадать по названиям, а найти руководство старого регулятора и выяснить форму PID. Если документации нет, стоит воспринимать старые параметры как стартовую подсказку, а не как готовую настройку.

Что переносим, что уточнить и что может пойти не так

Что переносим
Что уточнить перед вводом в ПЛК
Что может пойти не так
Kp
В каком масштабе была ошибка: проценты, инженерные единицы, код АЦП
Контур станет слишком резким или слишком вялым
Ti / Tn
Единицы времени и форма PID: зависимая или независимая
Интеграл окажется в разы сильнее или слабее
Ki
Это коэффициент, повторов в минуту, 1/с или внутренний параметр блока
Значение перенесут как время и получат раскачку
Td
Есть ли фильтр D-составляющей и насколько шумное измерение
Производная начнет дергать выход на шуме
Период цикла
Как часто старый регулятор считал PID и как часто вызывается блок ПЛК
Интеграл и производная изменят реальную силу
Диапазон PV
Где происходит масштабирование датчика и фильтрация
Регулятор будет работать по неверной ошибке
Диапазон выхода
Проценты, герцы, мА, код ЦАП, сетевое задание
Исполнительный механизм будет реагировать не так, как раньше
Ручной режим
Есть ли безударный переход и tracking ручного выхода
При включении автомата будет скачок
Ограничения выхода
Минимум, максимум, ramp, скорость изменения, технологические блокировки
PID попросит то, что объект физически не может выполнить
Antiwindup
Как ограничивается интегральная часть при насыщении
После упора выхода появится долгий перелет
Направление действия
Прямое или обратное регулирование
При ошибке регулятор пойдет не в ту сторону
Поведение при аварии датчика
Заморозка, ручной режим, безопасный выход, авария
Контур продолжит регулировать мусорное значение

Минимальный порядок проверки

Перед переносом настроек полезно не начинать с “вставим и посмотрим”, а сделать короткую инженерную сверку.
Сначала определите форму старого PID и нового блока. Если один работает через Kp/Ti/Td, а другой через Kp/Ki/Kd, нужен пересчет и проверка единиц. Затем проверьте масштаб PV, SP и выхода: все ли живет в тех же единицах, что раньше. После этого зафиксируйте период вызова блока в ПЛК и убедитесь, что он стабилен.
Дальше проверьте ограничения выхода, ramp и antiwindup. Затем отдельно проверьте ручной/автоматический режим: включение автомата не должно давать скачок. И только после этого можно использовать старые настройки как стартовую точку для осторожной проверки на объекте.
Важно не путать проверку ПИД с проверкой измерения. Если датчик шумит, аналоговый вход скачет или HMI показывает значение с задержкой, регулятор будет реагировать на эту реальность. В таких случаях полезно заранее посмотреть материалы про шум аналогового сигнала и про диагностику Pt100, если контур температурный.

Когда старые настройки можно использовать

Старые настройки не бесполезны. Они показывают порядок величин и дают представление о динамике объекта. Если контур был устойчивым, старые Kp/Ti/Td могут стать хорошей отправной точкой. Но именно отправной, а не финальной.
Их можно использовать увереннее, если совпадают диапазоны измерения и выхода, известна форма PID, совпадает или корректно задан период расчета, сохранены ограничения, antiwindup и логика ручного режима. Если все это подтверждено, перенос будет не копированием чисел, а переносом поведения.
Если же неизвестна форма старого регулятора, неясны единицы времени, поменялся датчик, другой исполнительный механизм, другая фильтрация или контур теперь вызывается в другом цикле ПЛК, старые параметры лучше считать только подсказкой. Безопаснее начать мягче, проверить реакцию малым шагом и потом доводить настройку.

Итог

Kp, Ti, Td, Ki и Tn нельзя переносить “как есть”, потому что за одинаковыми буквами могут стоять разные формулы, единицы и масштабы. ПИД-регулятор в ПЛК работает не с привычными словами, а с конкретной математикой блока, периодом вызова, нормированием сигнала, ограничениями выхода и режимами работы.
Если переносите контур из частотника, отдельного регулятора или старого ПЛК, переносите не только коэффициенты. Переносите контекст: форму PID, единицы времени, диапазоны, фильтры, ramp, антиwindup, ручной режим, ограничения и поведение при аварии датчика. Тогда старые настройки действительно помогают, а не превращаются в источник новых колебаний.
Главный практический принцип простой: сначала понять, что означала цифра в старой системе, потом решить, как выразить тот же смысл в новом ПЛК. И только после этого нажимать “автомат”.

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

Обсуждение