Каскадный ПИД-регулятор
Каскад ПИД на практике: уровень-расход и температура-рубашка, когда два контура помогают, когда дерутся, сначала внутренний, bumpless на стыке SP.

На ёмкости с питанием насоса уровень гуляет ±80 мм, хотя один ПИД по уровню «уже настроен». Клапан на подаче дёргается вслед за каждым толчком давления в коллекторе. Технолог просит «добавить контур по расходу, как на соседней линии». Ставят второй ПИД: один держит уровень, второй - расход, оба смотрят в один и тот же позиционер. Через час уровень ещё хуже, расход пилит, два выхода в отладчике едут в разные стороны. Каскад обещали. Получили двух хозяев одного штока.
Разбираем каскад как связку внешнего и внутреннего контура: уровень и расход на подаче, температура аппарата и температура (или расход) в рубашке. Когда внутренний контур успевает съесть возмущение до того, как оно дойдёт до медленной переменной, и когда два ПИД начинают драться за арматуру. Порядок настройки: сначала внутренний, потом внешний. Уставка внутреннего берётся с выхода внешнего, не с отдельного поля оператора «на всякий случай». Здесь нет anti-windup как главной темы, нет разбора «контур гуляет после замены датчика» и нет электрики AO на клапан: ток, нагрузка петли и fail-safe штока - соседние материалы. Фокус - кто кому задаёт уставку и в каком порядке это живьём настраивают.
Блок ПИД живёт в цикле контроллера. Среду на том же железе заказывают как CODESYS 3.5 или как MasterSCADA 4D: это два равноценных runtime, а не «нижний ПИД и верхняя картинка». Диспетчерская SCADA показывает SP и PV, но не становится третьим регулятором, пока ей это явно не отдали.
Короткий ответ
Каскад - это не два независимых ПИД на одну трубу. Внешний (медленный) контур держит главную технологическую величину: уровень, температуру продукта. Его выход - не миллиамперы на клапан, а уставка внутреннего (быстрого) контура: расход подачи, температура или расход теплоносителя в рубашке. Внутренний смотрит на свою PV и крутит арматуру. Возмущение на подаче (давление коллектора, состав, расход соседа) отрабатывается быстрым контуром, внешний видит уже сглаженный эффект.
Каскад имеет смысл, когда внутренний параметр измеряется, связан с тем же исполнительным органом и заметно быстрее внешнего. Если постоянные времени близки, датчика внутреннего нет или оба ПИД пишут в один выход - получится драка, не каскад.
Порядок наладки: внутренний в AUTO при зафиксированном внешнем (MAN или константа SP внутреннего), затем внешний. Переход AUTO/MAN без удара по штоку (bumpless): внешний в режиме слежения пишет в свой выход текущую уставку внутреннего, внутренний при возврате не прыгает. На экране оператора видна пара SP/PV внешнего и пара SP/PV внутреннего, плюс кто в AUTO.
Два контура, один шток
Простой ПИД по уровню открывает клапан, когда уровень низок, и закрывает, когда высок. Пока давление перед клапаном стабильно, этого хватает. Как только коллектор «дышит», расход при том же проценте штока меняется. Уровень ещё не успел уехать, а масса уже пошла не та. Регулятор уровня узнает об этом с опозданием ёмкости и начинает качать клапан с периодом, который человеку кажется «гулянием ПИД».
Каскад добавляет измерение, которое видит возмущение раньше. Расход на той же подаче реагирует за секунды. Внутренний ПИД держит заданный расход. Внешний по уровню не трогает клапан напрямую: он говорит внутреннему, какой расход сейчас нужен. Скачок давления в коллекторе сначала ловит расходный контур и возвращает кг/ч. Уровень за это время почти не двигается.
Схема всегда односторонняя. Выход внешнего - SP внутреннего. Выход внутреннего - задание исполнительному механизму. Обратной дороги «внутренний пишет во внешний» нет. Если наладчик для «надёжности» повесил оба выхода на один канал AO через MAX, SUM или ручной переключатель в программе, это уже не каскад. Это два претендента на шток.
На экране две карточки контура, не один виджет с двумя Kp. Если внутренний упёрся в лимит, внешний это видит: иначе крутит SP расхода в потолок при штоке на упоре. Два клапана на обвязке - split-range или рецикл, не каскад «потому что оба про одно вещество». Каскад - иерархия уставок, не счёт арматуры.
Уровень и расход: типичная пара
Ёмкость, питание насоса или расход на технологию, клапан (или частотник) на подаче. PV внешнего - уровень. PV внутреннего - расход на той же линии, которой крутят объём. Возмущения внутреннего контура: давление до клапана, соседний потребитель, грязь на сетке, изменение вязкости. Возмущения внешнего: отбор из ёмкости, который внутренний не измеряет напрямую.
Почему пара работает. Объём ёмкости интегрирует расход. Постоянная времени уровня - минуты. Постоянная расхода - секунды. Внутренний контур успевает закрыть дыру в балансе массы, пока уровень ещё в допуске. Внешний считает медленно: его Kp меньше, Ti больше, часто без D.
Где ломается. Расходомер поставили после ответвления, а клапан - до. Внутренний держит «не тот» поток относительно объёма. Или расходомер на общем коллекторе на три ёмкости: внутренний видит сумму, внешний - одну тарелку. Или внутренний по расходу крутит частотник насоса, а внешний по уровню всё ещё пишет в клапан на той же трубе. Два выхода, одна гидравлика - классическая драка.
Ручной режим. Если оператор берёт внутренний в MAN и двигает клапан, внешний в AUTO продолжает менять SP расхода, которое никто не слушает. Через десять минут SP внутреннего уехала в 12 т/ч при фактических 4. Возврат внутреннего в AUTO даёт удар. Это не «забыли anti-windup». Это забыли слежение внешнего за реальным расходом (или за ручным выходом), пока внутренний не в каскаде.
Уставка, которую имеет право двигать человек. На каскаде уровня оператор обычно задаёт SP уровня. SP расхода - рабочая, с выхода внешнего, с лимитами. Отдельное поле «задать расход руками» нужно только в режиме, когда внешний снят: пуск, опорожнение, калибровка. Два поля SP, оба всегда активны - приглашение к гонке.
Температура и рубашка
Реактор, теплообменник, рубашка с паром или хладагентом. PV внешнего - температура продукта (или среды в аппарате). PV внутреннего - температура в рубашке, расход теплоносителя или давление пара на ветке. Клапан - на паре, на конденсате, на воде.
Зачем каскад. Продукт теплоёмкий, стенка и рубашка - быстрее. Скачок давления пара или температуры обратной воды сначала бьёт по рубашке. Если внешний ПИД сразу крутит клапан по температуре продукта, он узнает о возмущении с лагом аппарата и начнёт раскачивать. Внутренний по рубашке отрабатывает пар за десятки секунд, продукт видит уже ровную «баню».
Частая ошибка пары. Внутренним делают ту же температуру продукта со второго датчика «поблизости». Постоянные времени почти равны, датчики смотрят почти одно и то же, два ПИД с разными Kp спорят. Каскад требует разной динамики и разного смысла измерения: продукт vs рубашка, не «два Pt100 в одном объёме».
Вторая ошибка: внутренний по расходу хладагента, а клапан стоит на паре. Связь есть через процесс, но не прямая. Возмущение по воде внутренний ловит, возмущение по пару - нет. Параметр внутреннего должен быть на той же ветке, что исполнительный орган.
Третья: внешний по температуре продукта с Td «как в учебнике», внутренний ещё не настроен. Дифференциал внешнего видит шум и качает SP рубашки. На каскаде D внешнего часто режут или ставят очень мягко: быструю работу отдаёт внутренний.
Если после замены преобразователя каскад поехал, сначала масштаб и PV. Это соседний разбор, не повод крутить оба Ti.
Когда каскад помогает, когда два ПИД дерутся
Каскад помогает, если выполняются три условия сразу.
Внутренний параметр измеряется надёжно и в том же контуре массы или энергии, которым крутят арматуру.
Внутренний заметно быстрее внешнего: ориентир - внутренний отрабатывает за время, на порядок меньшее постоянной внешнего объекта. Не обязательно лабораторно считать τ. На тренде: ступенька клапана двигает расход сейчас, уровень - через минуты.
Главные возмущения сидят на внутреннем тракте: давление питания, расход соседа, температура теплоносителя. Внешний тогда не обязан быть «нервным».
Каскад вреден, когда внутренний такой же медленный, датчика нет (модель из выхода клапана - не измерение) или клапан всё время в насыщении: внешний не знает, что шток на упоре.
Драка двух ПИД выглядит узнаваемо.
Оба выхода идут в один AO: сумма, среднее, «кто больше», ручной ключ в ST. Шток не понимает иерархии. Лечение одно: единственный writer выхода - внутренний. Внешний пишет только SP внутреннего.
Внутренний в AUTO от своего поля SP на HMI, внешний тоже в AUTO и пишет в то же SP. Кто последний записал в этом цикле, тот и прав. Нужен селектор: источник SP внутреннего - выход внешнего или ручное поле, никогда оба.
Внешний быстрее внутреннего. Наладчик «поджал» Ti внешнего, потому что уровень «медленно берёт». Внешний качает SP расхода быстрее, чем расход успевает. Внутренний честно отрабатывает пилу задания. Снаружи кажется, что «расходной ПИД возбуждён». Лечат внешний, не Kp внутреннего.
Нет приоритета режима. Оператор снял внутренний в MAN, внешний продолжает интегрировать ошибку уровня и уезжает SP. Или наоборот: внешний в MAN, внутренний ещё слушает старый выход внешнего как SP. Матрица режимов должна быть короткой и одной на оба блока.
Override (MIN/MAX двух регуляторов на один клапан) - не каскад: там контуры равноправны по защите. Смешать SELECT и каскад в одном FB без рисунка - ночной обход.
Сначала внутренний
Порядок, который на объекте нарушают чаще всего: крутят оба Kp сразу, потому что «так быстрее». Получают неразделимую кашу. Разделяют по времени.
Шаг 1. Внешний в MAN. Его выход заморожен или заменён константой SP внутреннего, которую наладчик задаёт руками. Внутренний в AUTO. Ступеньки SP внутреннего: 10-20 % рабочего диапазона, если технология позволяет. Смотрят PV внутреннего и шток. Настраивают Kp/Ti внутреннего, пока он берёт расход (рубашку) без устойчивой пилы. D на быстром контуре - осторожно: шум расходомера усилит клапан.
Шаг 2. Внутренний оставляют в AUTO. Подключают внешний: его выход становится SP внутреннего. Сначала внешний с малым Kp, большим Ti. Ступенька SP уровня или температуры продукта. Смотрят, как едет медленная PV и насколько дёргается SP внутреннего. Если SP внутреннего пилит с периодом внутреннего контура - внешний слишком живой.
Шаг 3. Лимиты SP внутреннего: минимум и максимум расхода, которые технология и насос переживут. Внешний не имеет права потребовать 0 или 200 % шкалы расходомера без этой скобы. Насыщение внутреннего по штоку должно быть видно внешнему как «дальше SP двигать бесполезно». Как именно режут интеграл при упоре - отдельный разговор про windup; на каскаде достаточно не делать вид, что внутренний ещё слушает.
Шаг 4. Режимы и bumpless. Только после того, как оба контура живут в AUTO на рабочем режиме.
Не настраивают внутренний по тренду внешнего. Красивый уровень при пилящем расходе - не победа, а износ арматуры и скрытая неработоспособность каскада. Паспорт контура пишут парой: два набора коэффициентов, два периода вызова, чья SP откуда.
Внутренний имеет право на более быструю задачу контроллера, внешний - на медленную. Вызывать внутренний реже внешнего нельзя: SP будет меняться чаще, чем он считает.
Уставка внутреннего с выхода внешнего
Это правило, которое нужно произнести вслух на пуске. Рабочая SP внутреннего в режиме каскада равна выходу внешнего после ограничителя. Не «примерно равна». Не «оператор подкрутит». Не среднее между полем HMI и выходом.
Масштаб стыка. Выход внешнего часто 0-100 % «мощности». Внутренний хочет т/ч, °C, м³/ч. Один перевод на весь стык: 0-100 % внешнего → min…max инженерных внутреннего. Двойной масштаб (ещё раз в HMI, ещё раз в FB) даёт внутреннему сжатый диапазон: он ездит 30-70 % своей шкалы, внешний думает, что отдал полный ход. Три точки наладки: выход внешнего 0 / 50 / 100, что видит SP внутреннего в инженерных, что делает PV.
Знак. Рост выхода внешнего должен требовать рост внутреннего параметра в ту сторону, которая поднимает внешнюю PV. Для уровня: больше выход внешнего → больше расход налива. Если клапан на сливе, знак другой: больше выход → больше расход слива, уровень падает. Путаница знака на стыке выглядит как «каскад раскачивает». Инвертируют в одном месте, таблицей, как на простом ПИД.
Ручное поле SP внутреннего существует, но включается ключом: CAS (уставка с внешнего) / LOCAL (уставка с экрана). Ключ журналируется. В CAS поле на экране - индикация рабочей SP, не вход.
Запись «с SCADA в SP внутреннего в обход» ломает каскад так же, как второй ПИД на AO. Верхний уровень, если ему вообще разрешили писать, пишет SP внешнего (задание уровня, задания температуры продукта), не расход рубашки.
Bumpless: переход без удара по клапану
Удар - это скачок задания внутреннему или скачок выхода на клапан в момент смены режима. На каскаде точек перехода больше, чем у одиночного ПИД.
Внутренний AUTO → MAN. Оператор берёт шток. Выход внутреннего замирает на текущем и дальше слушается руки. Внешний, если остался в AUTO, больше не должен копить ошибку в свой выход как в свободный интегратор без слушателя. Варианты: внешний тоже в MAN; внешний в слежении (tracking), его выход равен текущей PV внутреннего или текущему ручному заданию расхода; внешний продолжает AUTO, но его выход ограничен и на экране горит «каскад разорван». Тихий AUTO внешнего при MAN внутреннего - мина на возврате.
Внутренний MAN → AUTO. Рабочая SP внутреннего в первый цикл AUTO должна быть равна тому, что сейчас есть: либо текущая PV внутреннего, либо текущий ручной эквивалент. Иначе внутренний увидит дыру в ошибке и дёрнет клапан. Внешний в этот момент отдаёт выход, который обязаны предварительно подтянуть к факту (initialize / tracking).
Внешний AUTO → MAN. Оператор задаёт расход (рубашку) напрямую, внутренний остаётся в AUTO. Это штатный режим пуска и мойки. Выход внешнего замораживают и показывают как «ручная SP внутреннего».
Внешний MAN → AUTO. Выход внешнего инициализируют текущей SP внутреннего, чтобы не прыгнуть заданием расхода. Интеграл внешнего - от фактической ошибки уровня после этого равенства, не от ночи в MAN.
Это tracking стыка двух регуляторов, не полный курс anti-windup. Если после всех инициализаций клапан всё равно «липнет» на 100 % при PV уже у SP - тогда смотрят насыщение интеграла. Сначала стык SP, потом windup.
На FAT каскад без реального расхода проверяют хотя бы цифрой: смена CAS/LOCAL не двигает выход внутреннего в первом цикле больше оговорённого порога (единицы процента штока, не десятки).
Что видит оператор и что писать в паспорт
Карточка каскада: SP/PV внешнего, SP/PV внутреннего, выход на клапан, режимы, ключ CAS/LOCAL, насыщение внутреннего, цвет «не в каскаде». Тренд из четырёх перьев. По одному уровню каскад не сдают.
Паспорт - один лист на пару: чья PV, откуда SP внутреннего, лимиты стыка, периоды, коэффициенты, поведение при Bad внутреннего (внутренний в безопасный выход, внешний в слежение или MAN). Без расхода внешний слеп и продолжает крутить SP - каскад рвут явно.
Таблица: пара параметров, внешний / внутренний, ошибка наладки
| Пара параметров процесса | Внешний / внутренний | Типичная ошибка наладки |
|---|---|---|
| Уровень ёмкости и расход налива | Уровень внешний; расход на той же подаче внутренний; выход внутреннего на клапан или частотник подачи | Оба ПИД пишут в AO; расходомер не на той ветке; внешний настроен раньше внутреннего |
| Уровень и расход слива | Уровень внешний; расход слива внутренний; знак стыка обратный к наливу | Забыли инверсию: рост выхода внешнего открывает налив вместо слива |
| Температура продукта и температура рубашки | Продукт внешний; рубашка внутренняя; клапан на теплоносителе | Два датчика в одном объёме продукта; D внешнего качает SP рубашки |
| Температура продукта и расход теплоносителя | Продукт внешний; расход пара/воды внутренний | Внутренний расход на другой рубашке/другом коллекторе; нет лимитов SP расхода |
| Давление пара потребителю и расход пара | Давление внешнее; расход внутренний | Внешний быстрее внутреннего; каскад на общий расходомер нескольких веток |
| Концентрация (медленно) и температура/расход реагента | Состав внешний; быстрый энергетический или расходный внутренний | Внутренний по лабораторному анализу с лагом смены; каскад становится двойным запаздыванием |
| Расход смеси и соотношение компонентов | Не каскад, а ratio; «внешний» задаёт общий расход, второй канал - доля | Называют каскадом и включают два независимых ПИД без ведущего SP |
| Один уровень и два клапана (подача и сброс) | Не каскад, а split-range или два контура | Суммируют два ПИД «чтобы живее»; штоки едут навстречу |
Таблица для выбора схемы и для программы пуска. Строка «не каскад» не хуже каскада: хуже назвать другую схему каскадом и настраивать как пару SP.
Типовые ошибки
Поставить второй ПИД «потому что уровень плохо держится» без датчика быстрее. Получают два медленных контура. Сначала чинят измерение, клапан, давление питания, потом думают про каскад.
Настраивать внешний первым. Внутренний ещё в MAN или с заводским Kp. Внешний честно раскачивает будущую SP. Потом внутренний «не может успокоиться».
Оставить на HMI живое поле SP внутреннего в режиме CAS. Ночная смена подкрутит расход «чуть-чуть». Внешний начнёт воевать с рукой.
Сложить выходы «для надёжности». Надёжность каскада в иерархии, не в сумме.
Забыть слежение при MAN внутреннего. Возврат в AUTO - удар по штоку. Винят библиотечный ПИД.
Считать каскад лекарством от плохого расходомера. Шум внутреннего PV внутренний усилит. Сначала живой сигнал, потом коэффициенты. Замена датчика и масштаб - отдельная проверка, не повод крутить оба Ti.
Вызвать внешний чаще внутреннего. Иерархия времени вверх ногами.
Вопросы при работе
Нужен ли каскад, если коллектор стабильный?
Не обязательно. Одиночный ПИД по уровню или температуре проще в наладке и в голове смены. Каскад окупается на живом питании и на тепловых аппаратах с рубашкой, не как мода в типовом проекте.
Что делать, если внутренний всё время в насыщении?
Каскад вырождается. Смотрят клапан, насос, лимиты, не Kp внешнего. Пока шток на упоре, внешний должен это знать. Механизм windup - отдельно; здесь достаточно не делать вид, что внутренний ещё управляем.
Где живёт каскад: в контроллере или в SCADA?
В цикле контроллера. Среда - CODESYS 3.5 или MasterSCADA 4D, как заказали runtime. Считать ПИД в диспетчерской и слать на ПЛК готовый процент штока - отдельная архитектура со своими обрывами, её не называют каскадом «потому что два блока на экране».
Чем каскад отличается от split-range?
Каскад: одна арматура, две PV, иерархия SP. Split-range: одна команда 0-100 %, два штока на разных участках шкалы. Путать на пуске нельзя.
Оператор просит «отключить внутренний, оставить уровень».
Это режим: внешний напрямую на клапан или внутренний в LOCAL по ручной SP. Его проектируют заранее, с bumpless, не выдёргивают внутренний FB из задачи на ходу.
