PID
Realiza o controle proporcional/integral/derivativo (PID) de uma variável de
processo ao longo do período de amostragem CYCLE, calculando a saída de
atuação XOUT a partir do erro entre PV e SP e dos ganhos KP,
TR e TD. É um bloco de função (mantém estado entre scans; requer
instância).
Biblioteca: IEC_STD · Namespace: IEC · Tipo: bloco de função
Bloco de função
PID
+-------------+
BOOL ----|AUTO XOUT|---- REAL
| |
REAL ----|PV |
| |
REAL ----|SP |
| |
REAL ----|X0 |
| |
REAL ----|KP |
| |
REAL ----|TR |
| |
REAL ----|TD |
| |
TIME ----|CYCLE |
+-------------+
A saída é dada por XOUT = KP * ((PV - SP) + (I_TERM / TR) + (D_TERM * TD)),
onde I_TERM é o termo integral e D_TERM o termo derivativo, ambos
integrados ao longo do período CYCLE.
Quando AUTO é FALSE (modo manual), XOUT assume o valor de X0. Quando
AUTO é TRUE (modo automático), XOUT é calculado a partir do erro
(PV - SP) e dos ganhos KP, TR e TD ao longo do tempo CYCLE.
Nota
O bloco deve ser executado a cada período de amostragem CYCLE para que a
integração dos termos integral e derivativo seja consistente.
Parâmetros
Nome |
Direção |
Tipo |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|
AUTO |
IN |
BOOL |
FALSE |
— |
Modo de operação: FALSE = manual ( |
PV |
IN |
REAL |
0.0 |
— |
Variável de processo (process variable). |
SP |
IN |
REAL |
0.0 |
— |
Valor desejado (set point). |
X0 |
IN |
REAL |
0.0 |
— |
Ajuste manual da saída, tipicamente de uma estação de transferência. |
KP |
IN |
REAL |
0.0 |
— |
Constante de proporcionalidade (ganho proporcional). |
TR |
IN |
REAL |
0.0 |
— |
Tempo de reset (constante de tempo integral). |
TD |
IN |
REAL |
0.0 |
— |
Constante de tempo derivativa. |
CYCLE |
IN |
TIME |
T#0ms |
— |
Período de amostragem. |
XOUT |
OUT |
REAL |
0.0 |
— |
Valor de atuação calculado (saída do controlador). |
Pré-condições
O bloco deve ser executado periodicamente, a cada intervalo
CYCLE(por exemplo, disparado por um TON).TRdeve ser diferente de zero para o cálculo do termo integral.
Observações
Em modo manual (
AUTO= FALSE),XOUTacompanhaX0, permitindo a transferência suave para o modo automático.A consistência da resposta do controlador depende da execução regular do bloco no período
CYCLE.
Ver também
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
VAR
inp_AUTO : BOOL := FALSE; (* 0 - manual, 1 - automatic *)
inp_PV : REAL := 10.0; (* Process variable *)
inp_SP : REAL := 80.0; (* Set point *)
inp_X0 : REAL := 50.0; (* Manual output adjustment *)
inp_KP : REAL := 3.0; (* Proportionality constant *)
inp_TR : REAL := 1.0; (* Reset time *)
inp_TD : REAL := 2.0; (* Derivative time constant *)
inp_CYCLE : TIME := T#200ms; (* Sampling period *)
out_XOUT : REAL; (* Output value *)
my_PID : PID; (* Instancia do bloco de função PID *)
my_TON : TON; (* Timer para gerar o ciclo de amostragem *)
END_VAR
(* ... *)
(* Timer TON para gerar ciclo de execução do bloco de função PID *)
my_TON(PT := inp_CYCLE);
my_TON.IN := TRUE;
(* se atingiu tempo de amostragem, executa bloco de função PID *)
IF (my_TON.Q = TRUE) THEN
(* executa bloco de função PID a cada ciclo de amostragem *)
my_PID(
AUTO := inp_AUTO, (* 0 - manual, 1 - automatic *)
PV := inp_PV, (* Process variable *)
SP := inp_SP, (* Set point *)
X0 := inp_X0, (* Manual output adjustment *)
KP := inp_KP, (* Proportionality constant *)
TR := inp_TR, (* Reset time *)
TD := inp_TD, (* Derivative time constant *)
CYCLE := inp_CYCLE (* Sampling period *)
);
(* obtem valor de atuação gerado pelo bloco de função PID *)
out_XOUT := my_PID.XOUT;
(* reseta timer para gerar novo ciclo de ativação do bloco de função PID *)
my_TON.IN := FALSE;
END_IF;
(* ... *)