Функциональный блок PID — ПИД-регулятор.
| Имя
переменной | Тип данных | Описание |
|---|
| Входные переменные |
| ACTUAL | REAL | Фактическое значение, измеренная величина |
SET_POINT | REAL | Заданное значение,
уставка |
KP | REAL | Коэффициент пропорциональности P |
| TN | REAL | Время интегрирования I [сек]. TN > 0, иначе регулятор
не вычисляется |
TV | REAL | Постоянная времени дифференцирования D [сек]. Если
задана как 0, то работает как P-регулятор |
Y_MANUAL | REAL | Y устанавливается в это значение при MANUAL = TRUE |
Y_OFFSET | REAL | Смещение (offset) регулирующего воздействия |
Y_MIN | REAL | Минимальное значение регулирующего
воздействия |
Y_MAX | REAL | Максимальное значение регулирующего
воздействия |
MANUAL | BOOL | TRUE: ручной режим, Y не изменяется регулятором; FALSE: Y формируется регулятором |
RESET | BOOL | TRUE: устанавливает Y в значение Y_OFFSET и сбрасывает
интегральную часть |
| Выходные переменные |
| Y | REAL | Управляющее воздействие |
Представляет ПИД-регулятор
ПИД-регулятор непрерывно вычисляет значение ошибки e(t) как разность
между заданным значением (уставкой) и измеренной технологической величиной.
ПИД-регулятор формирует корректирующее воздействие на основе пропорциональной,
интегральной и дифференциальной составляющих (обычно обозначаемых P, I и D соответственно),
что и определяет тип регулятора.
P учитывает текущее значение ошибки. Например, если ошибка велика
и положительна, выход регулятора также будет большим и положительным.
I учитывает прошлые значения ошибки. Например, если текущий выход
недостаточно велик, интеграл ошибки будет накапливаться со временем,
и регулятор отреагирует увеличением воздействия.
D учитывает возможные будущие тенденции ошибки на основе текущей
скорости её изменения.
Поскольку PID-регулятор опирается только на измеряемую технологическую
величину и не требует знания модели объекта, он широко применим. Настройкой
трёх параметров модели PID-регулятор можно адаптировать под требования
конкретного процесса. Реакцию регулятора можно описать через скорость
отклика на ошибку, степень перерегулирования относительно уставки
и выраженность колебаний системы. Использование PID-алгоритма не гарантирует
оптимальное управление системой или даже её устойчивость.
Y_OFFSET, Y_MIN и Y_MAX используются для преобразования регулирующего воздействия Y в заданный диапазон. MANUAL может
использоваться для переключения на ручной режим, RESET — для повторной
инициализации регулятора. В нормальном режиме работы (MANUAL = RESET = LIMITS_ACTIVE = FALSE)
регулятор вычисляет ошибку e (t) как разность SET_POINT — ACTUAL, формирует производную по
времени
и
сохраняет эти значения внутренне.
Выход, то есть управляющее воздействие Y, в отличие от PD-регулятора содержит
дополнительную интегральную составляющую и вычисляется следующим образом: 
Таким образом, помимо пропорциональной части (P), на Y влияют и текущая
скорость изменения ошибки (D), и история ошибки (I). PID-регулятор можно легко преобразовать
в PI-регулятор, установив TV = 0. Из-за наличия интегральной части при некорректной
параметризации возможно переполнение, если интеграл ошибки становится
слишком большим. Для обеспечения безопасности предусмотрен логический
выход OVERFLOW, который в этом случае принимает значение TRUE. Обычно это происходит,
если система управления неустойчива из-за неверной параметризации.
При этом регулятор будет остановлен и сможет быть активирован снова
только после повторной инициализации.
ПримечаниеПока активны ограничения регулирующего воздействия
(Y_MIN, Y_MAX), интегральная часть будет подстраиваться так, как если бы история
входных значений автоматически влияла на ограниченный выход. Если
такое поведение нежелательно, возможен следующий обходной вариант:
отключить ограничения в PID-регуляторе (Y_MIN>= Y_MAX) и вместо этого применить
оператор LIMIT (стандарт IEC) к выходному значению Y.
ПримечаниеПри изменении времени цикла не требуется повторно
настраивать параметры регулятора (KP, TN, TV).
Пример:
VAR
fbPID: PID;
actual: REAL := 45.0; // текущее значение
setPoint: REAL := 50.0; // уставка
yOut: REAL; // выход регулятора
limits: BOOL; // признак ограничения выхода
overflow: BOOL; // признак переполнения интегральной части
END_VAR
fbPID(
ACTUAL := actual,
SET_POINT := setPoint,
KP := 2.0,
TN := 10.0,
TV := 1.0,
Y_OFFSET := 0.0,
Y_MIN := 0.0,
Y_MAX := 100.0,
MANUAL := FALSE,
RESET := FALSE
);
yOut := fbPID.Y;
limits := fbPID.LIMITS_ACTIVE;
overflow := fbPID.OVERFLOW; |