Академический Документы
Профессиональный Документы
Культура Документы
Версия от 26.10.2015.
//Исходный код.
ER:=SP-PV; //Расчет ошибки регулирования.
Страница 1 из 7
IF ((DBMIN<ER)AND(ER<DBMAX)) //Зона нечувствительности к ошибке.
THEN
ER:=0.0;
END_IF;
IF (Kd<>0.0)
THEN
D_PART:=(ER*Kd-D_INTEGRATOR)*Kdf; //Дифференциальная составляющая.
ELSE
D_PART:=0.0; //Если не используем, то не считаем.
END_IF;
P_PART:= Kp*ER; //Пропорциональная составляющая.
AUTO:=P_PART+I_PART+D_PART; //Выход ПИД регулятора.
//Ручное управление.
IF (MAN_ON) //Переключение режима работы "Ручной / Автоматический".
THEN
SW:=MANUAL; //Включить ручной режим, если MAN_ON=1.
ELSE
SW:=AUTO; //Включить автоматический режим, если MAN_ON=0.
END_IF;
//Амплитудный ограничитель.
IF (SW>=OPMAX) //Ограничение выхода сверху.
THEN
OP:=OPMAX;
END_IF;
IF (SW<=OPMIN) //Ограничение выхода снизу.
THEN
OP:=OPMIN;
END_IF;
IF ((OPMIN<SW)AND(SW<OPMAX)) //Выход без ограничения.
THEN
OP:=SW;
END_IF;
SUBTRACT:= OP - AUTO; //Вычет для ограничения интегральной составляющей по
амплитуде.
IF (Kd<>0.0)
THEN
D_INTEGRATOR:= D_INTEGRATOR + (Ts * D_PART); //Интегратор
дифференциальной составляющей.
ELSE
D_INTEGRATOR:=0.0; //Если перестали использовать, то обнулим.
END_IF;
IF (Ki<>0.0) //Интегратор интегральной составляющей регулятора.
THEN
I_PART:=I_PART + (((Ki * ER) + SUBTRACT) * Ts);
ELSE
I_PART:= 0.0; //Если перестали использовать, то обнулим.
END_IF;
END_FUNCTION_BLOCK
Страница 2 из 7
Описание.
Страница 3 из 7
Описание.
Где:
Страница 5 из 7
Рисунок 3. Пример использования.
Страница 6 из 7
Рисунок 4. Переключение режимов работы.
Страница 7 из 7