Часть 1. От практики к теории.
Часть 2. Реализация регулятора – от простого к настоящему.
Часть 3. Реализация регулятора – вот теперь регулятор.
Часть 4. Мир развивается, а «велосипед» остается.
Инженерные единицы переменных и масштабирование.
В полноценных ПЛК, поддерживающих значения с плавающей точкой, переменные технологического процесса отображаются в «инженерных» единицах – Па, метры в секунду, миллиметры и т.д., при этом ошибка на входе ПИД-функции имеет размерность переменной процесса. Например, в нашем примере, ошибка может быть в миллиметрах уровня (0-1000мм), а выход ПИД-функции будет в процентах открытия клапана (0-100%). Поскольку коэффициенты ПИД-функции связывают ошибку с выходным значение, то значение коэффициентов будет зависеть от размерности переменных. Например, при шкале уровня 0-1000мм коэффициент П-функции будет 0,1 (на 10мм ошибки уровня клапан переместиться на 1%). Но если размерность уровня принять в 0-1 метр, то коэффициент П-функции должен быть 100 (в тысячу раз больше, т.к. размерность изменилась на 1000).
Чтобы коэффициенты ПИД-функции не были привязаны к размерности, при реализации ПИД-регулятора перед ПИД-функцией всегда используется масштабирование «инженерных» единиц в условные. Условные единицы будут зависеть от ПЛК, для целочисленных знаковых вычислений это максимальное значение переменной 0-32767 (положительный диапазон), для плавающей точки 0-100 (или 0-1 или..).
Следовательно, в практической реализации регулятора добавляются функциональные блоки, выполняющие масштабирование входных и выходных переменных в условные единицы, а ПИД-функция оперирует уже с переменными в условных единицах. PV – переводится в переменную RPV, SP в RSP, ROP в OP.
Можно заметить, что значение ошибки Е может принимать как положительные, так и отрицательные значения, соответственно выход ПИД-функции ROP также может принимать любое положительное или отрицательное значение. Поэтому кроме масштабирования ROP в OP необходимо анализировать выход OP за допустимый диапазон. В практических реализация ПИД-регулятора для выходной переменной может задаваться как масштабирование, так и допустимые границы диапазона (например, для выхода на клапан инженерные единицы будут 0-100%, а допустимые границы -5…105%)
Чтобы не путаться в дальнейшем рассмотрении нашего примера, для всех переменных значения в «инженерных» единицах примем 0-100, тогда диапазоны инженерных единиц будут совпадать с диапазоном в условных единицах.
Ручное управление выходом регулятора. Безударный переход из ручного в автоматический режим, смещение выхода.
Для возможности практического использования, кроме просто ПИД-функции, регулятор как минимум должен иметь возможность ручного управления процессом.
В нашем примере, управление расходом на отходящем трубопроводе посредством регулирующего клапана, в реальной системе может выполняться как в автоматическом режиме с использованием ПИД-функции, так и в ручном режиме, когда оператор непосредственно задает значение выхода регулятора (положение клапана). Для этого в реализации регулятора необходимо предусмотреть еще несколько параметров:
- режим руч/авт – режим работы регулятора, в ручном режиме оператор непосредственно задает значение выхода регулятора OP, в автоматическом оператор задает уставку регулятору SP, а регулятор формирует выходное значение OP;
- значение выхода ManOP – значение выхода регулятора для ручного режима, в ручном режиме значение ManOP записывается в OP;
Соответственно в реализации регулятора для выходного значения OP необходимо выполнить селектор: в ручном режиме OP=ManOP, в автоматическом OP=ROP (после масштабирования и ограничения диапазона). Но на самом деле все не так просто.
Когда регулятор находится в ручном режиме, ПИД-функция продолжает рассчитывать выходное значение ROP, и это значение ROP будет отличаться от текущего заданного в ручную выхода регулятора OP=ManOp. Не соответствие значений ManOP и ROP в ручном режиме приводит к «удару» при переводе регулятора из ручного в автоматический режим.
Например, вы перевели регулятор в ручной режим, «успокоили» процесс в ручном режиме подобрав необходимое положение клапана ManOP=23. При этом уставка SP=30, а переменная процесса PV остановилась на значении 25, т.е. на входе П-функции есть ошибка Е=5, и при П-коэффициенте kP=2 выход П-функции будет ROP=kP*E=2*5=10. Теперь переводим регулятор в автоматический режим, селектор переключает выход с ManOP на ROP и значение OP «ударно» меняется с 23 на 10, движение клапана вносит возмущение, и уже стабилизированный в ручном режиме процесс снова приходит в движение.
- PV tracking - чтобы избавится от ошибки при переключении из ручного в автоматический режим, можно реализовать функцию «отслеживание входной переменной». Когда регулятор находится в ручном режиме, значение переменной процесса PV копируется в значение уставки SP, и при переключении в автоматический режим, уставка и текущее значение переменной равны (PV=SP), следовательно ошибка на входе П-функции равна 0, т.е. в предыдущем примере при переключении в автоматический режим SP=PV=25. Ошибки нет, но … выход клапана все равно ударно изменится.
Если вы включили функцию PV tracking или постарались, и в ручном режиме вывели переменную процесса на значение уставки, т.е. SP=PV и получили при этом значение выхода, например, ManOP=55 (клапан открыт на 55%), тогда ошибка в момент переключения в автоматический режим будет E=RPV-RSP=0, и все вроде хорошо, но выходное значение П-функции будет равно НУЛЮ (ROP=E*kP=0*2=0) и при перевод регулятора в автоматический режим клапан закроется. Если этот клапан регулировал подачу топливного газа в печь, печь отключится со всеми вытекающими последствиями.
Это и называется «удар при переключении режима», и значит нужно реализовать алгоритм безударного переключения и ввести еще одну переменную:
- смещение выхода offset – дополнительная переменная, которая содержит расхождение между значением выхода регулятора в ручном режиме ManOP и значением, рассчитанным П-функцией ROP (с учетом масштабирования и ограничения диапазона).
В ручном режиме offset=ManOP-ROP, в автоматическом режиме OP=ROP+offset. Если вернуться к примеру с потухшей печью, в ручном режиме регулятора смещение выхода будет offset=ManOP-ROP=55-0=55. Тогда при переключении в автоматический режим выход регулятора будет равен OP=ROP+offset=55, и теперь выход регулятора будет рассчитываться с учетом смещения. Значение смещения будет сохраняться до следующего переключения в ручной режим.
Сразу хочу заметить, что в реализации ПИ-регулятора функцию смещения выполняет И-составляющая, и отдельная переменная «смещение» не используется, в этом случае для обеспечения безударного перехода НЕЛЬЗЯ полностью отключать И-составляющую. Если требуется режим П-регулятора, то для И-составляющей надо установить минимальный, но не нулевой И-коэффициент (или максимальное время интегрирования).
Только при реализации двух функций: «отслеживание входной переменной» (PV tracking) и «смещение выхода» (offset) мы обеспечиваем безударное переключение регулятора из ручного в автоматический режим.
Аналогично, при переходе из автоматического режима в ручной будет «скачком» меняться значение выхода с ROP на ManOP, но с этом бороться проще. Надо в автоматическом режиме записывать текущее значение OP в ManOP, тогда при переводе из автоматического режима в ручной ManOP будет равно текущему значению OP, «скачка» не будет.
Часть 4. И наконец про И и Д.
Как объяснялось в предыдущих частях статьи, регулятор с одной П-функцией всегда имеет статическую ошибку в установившемся режиме, что во многих случаях просто неприемлемо. В эру паровых машин, когда и появились П-регуляторы, обороты машины зависели от нагрузки, что не нравилось инженерам. В поисках решения был придуман «изодром», дополнительное устройство в регуляторе, позволяющее исключить статическую ошибку. Есть обоснованное подозрение, что устройство изначально было изобретено инженерами, а потом уже математики дали ему описание и обозвали интегральным звеном. В начале первой часть дана ссылка на теоретический курс, там про изодром все доступно описано с картинками.
Итак, переходим к описанию практической реализации И-составляющей, она же изодромное звено (хоть это не совсем корректно), или более «инженерно-программистское» название «интегральная сумма». Название «интегральная сумма» выражает суть этой функции, поэтому дальше и будем часто его использовать.
И-составляющая – это еще одна функция регулятора, на входе которой ошибка (рассогласование), а выходное значение суммируется с выходом П-функции и формирует значение ROP.
В каждом цикле выполнения И-функции значение ошибки E умножается на коэффициент kI и прибавляется к значению интегральной суммы Isum=Isum+kI*E.
Во многих реализациях ПИ-регулятора вместо коэффициент kI используется переменная "время интегрирования" tI, тогда формула И-составляющей будет выглядеть так Isum=tc/tI*E+Isum. Если период контура tc – константа, то время интегрирования tI будет обратной величиной к kI. Ну и надо помнить, что время интегрирования не может иметь нулевое значение (деление на ноль). Использование в ПЛК времени интегрирования для И-функции осталось в наследие от пневматических и механических И-регуляторов.
Работа П+И-функций.
После того, как на входе ПИ-функций сформировалась ошибка, и П-функция сдвинула клапан в соответствующее положение, ошибка на входе все равно сохраняется. Поэтому в каждом цикле выполнения ПИ-функций к интегральной сумме прибавляется некоторое значение (kI*E), и интегральная сумма меняет выход регулятор, сдвигая положение клапана. При этом ошибка E уменьшается, соответственно уменьшается значение П-составляющей. Поскольку ошибке E может быть как положительной, так и отрицательной, то интегральная сумма может увеличиваться или уменьшаться.
На следующем цикле интегральная сумма опять увеличивается, выход снова сдвигается, ошибка и значение П-составляющей еще уменьшаются. И так до тех пор, пока ошибка не будет равна нулю, соответственно и П-составляющая будет равна нулю, а выход ROP будет определяться только значением интегральной суммы.
Понятно, что если коэффициент kI будет большой, интегральная сумма будет меняться очень быстро и регулятор потеряет устойчивость. И надо учитывать влияние изменения интегральной суммы на изменение значения П-функции. При низком значении kI от И-составляющей практически нет пользы, при высоком регулятор потеряет устойчивость, причем потеря устойчивости может проявится при возмущающем воздействии на объект.
Вроде все просто, но на практике есть тонкости.
Возвращаемся к исходному примеру, с уровнем в емкости и клапаном. По какой-то причине клапан не справлялся и уровень в емкости оставался «перелитым» несколько часов, при этом на входе ПИ-функции сохранялась ошибка и соответственно выполнялся расчет интегральной суммы. За это время интегральная сумма достигнет астрономических значений, соответственно выход ROP будет находится в «зашкаленном» состоянии долгое время даже после снижения уровня и изменении знака ошибки, т.е. ПИ-регулятор будет неработоспособным. Если функция смещения выхода offset реализована с использованием интегральной суммы, тогда чтобы вернуть интегральную сумму к «разумному» значению, необходимо перевести регулятор в ручной режим, установить выход OP в нужное значение и перевести регулятор снова в автоматический режим (или каким-то другим способом сбросить накопленное значение интегральной суммы). Но для полноценной работы нужно в регуляторе реализовать простой алгоритм, который поможет избежать «зашкаливания» интегральной суммы. Нужно отслеживать значение ОР и при выходе за допустимый диапазон (например 5-95%) останавливать расчет интегральной суммы и значение «замораживается». Но даже при этом иногда приходится «передергивать» регулятор автомат-руки-автомат чтобы он начал корректно работать.
И еще одна полезная функция в ПИ-регуляторе – задание зоны нечувствительности. Нулевого значения ошибки достичь физически невозможно, к нему можно только стремиться, поэтому на входе ПИ-функции всегда есть значение ошибки, пусть даже ничтожное и часто с переменным знаком. И значение переменной процесса в силу бесконечного количества причин может колебаться в пределах 1-2%. Это приводит к постоянному расчету ПИ-функций, небольшому изменению выхода и ненужному подергиванию клапана (исполнительного устройства). Чтобы избежать этого, в регуляторе задается параметр «зона нечувствительности» и задается значение, например 1%, когда ошибка меньше этого значения, ПИ-функция не выполняется и выход не изменяется.
И еще пару слов про Д-составляющую.
Часто можно услышать мнение, что И-составляющая делает регулятор неустойчивым, поэтому нужна Д-составляющая, чтобы компенсировать «недостатки» И-составляющей. Это заблуждение.
Д-составляющая или дифференциальное звено, формирует реакцию регулятора на быстрое изменение ошибки (или входной переменной). Д-функция вычисляет разницу ошибки на текущем и предыдущем шаге, умножает на коэффициент kD и прибавляет к выходу ROP.
Классический пример использования Д-функции – стабилизация положения самолет. Воздух не является статичным, при движении летательного аппарата на планер постоянно действуют кратковременные возмущающие воздействия. Чтобы компенсировать влияние возмущений и используется Д-функция, которая также кратковременно отклоняет элероны, интерцепторы, рули высоты или направления. Когда смотришь на крыло летящего самолета видно, что элероны и интерцепторы постоянно «подергиваются». Сейчас конечно ПИД-регуляторы в стабилизации летательных аппаратов не используются, но изначально эту роль выполняла Д-функция.
С Д-функцией тоже есть момент, когда вы меняете уставку регулятору, например на 10%, у вас мгновенно меняется ошибка, что приведет к «скачку» значения Д-функции, поэтому в реализации обычно можно выбрать, что будет подаваться на вход Д-функции: ошибка Е или переменная процесса PV. Значение E и PV меняются синхронно, но чтобы избежать скачка при корректировки уставки, логично привязать Д-функцию к PV.
На первых порах инженерной деятельности я пытался «приспособить» Д-функцию для работы в регуляторах на технологическом процессе, но пришел к выводу, что в большинстве случаев она не имеет смысла. В большинстве своем процессы медленные, кратковременных возмущений, которые требуют реакции регулятора просто нет. Исполнительные механизмы тоже медленные и не могут (и не должны) реагировать на кратковременное изменение выхода регулятора. Да и отклик технологического процесса на управляющее воздействие в целом тоже медленный. Д-функция просто «реагирует на шумы» в контуре регулирования, мешая работе ПИ-функции и бессмысленно дергая выход регулятора. Понятно, задачи бывают разные, я говорю про то, с чем сталкивался, но я всегда выключал Д-функцию и не помню случая, когда приходилось ее использовать.
На этом описание ПИД-регулятора в минимальном объеме, необходимом для практического использования, можно считать выполненным. Каждый производитель ПЛК может реализовывать дополнительный функционал для решения определенных задач.
В некоторых реализациях ПИД-регуляторов есть возможность выбора «зависимых» и «независимых» коэффициентов. Независимые я описывал выше, это когда в каждой функции П И Д используются свои коэффициенты kP, kI, kD. При зависимых коэффициентах функции заключаются в скобки и коэффициент kP выносится за скобку и называется коэффициент усиления регулятора, выглядит это так ROP=kP*(E+kI*E+kD*(En-E(n-1)). Наверно есть применения, когда такой подход востребован.
Часто на практике используют каскадное построение регуляторов, когда выход первого регулятора является заданием для второго. Пример, регулирование температуры верха колонны подачей орошения, на трубопроводе орошения установлен расходомер и клапан, на колонне датчик температуры. Для регулирования температуры надо управлять расходом жидкости через клапан. Первый контур регулирования связывает температуру в колонне с расходом, второй контур – расход и клапан. У каскадного регулятора есть три режима работы:
1. Ручное управление клапаном – оператор непосредственно задает положение клапана;
2. Автоматическое поддержание заданного расхода – оператор задает уставку по расходу во втором контуре, регулятор управляет клапаном для поддержания заданного расхода;
3. Каскадное регулирование – оператор задает уставку по температуре в колонне (уставка первого контура), первый контур регулирования формирует требуемый расход орошения и передает его в качестве уставки второму контуру (выход ОР первого контура является уставкой для второго контура), второй контур управляет клапаном, чтобы обеспечить требуемый расход.
Каскадные регуляторы используют из-за большей гибкости настройки (для медленного контура температуры можно настроить медленный регулятор, для более быстрого контура расхода и регулятор будет более быстрый), возмущения в контуре расхода, изменение производительности насоса или гидравлики в трубопроводе компенсируются вторым быстрым контуром без внесения возмущения в первый контур, что увеличивает качество регулирования. И у оператора есть возможность задать поддержание как температуры, так и отдельно расхода орошения, что бывает очень полезным.