PID_EX
O bloco de função PID_EX realiza o controle Proporcional/Integral/Derivativo. Calcula o valor OUT considerando o erro entre o valor desejado (SP) e a variável de processo (PV). Utilizando os ganhos KP, KI e KD calcula o valor da saída de controle OV através da seguinte equação.
OUT = KP * ((SP - PV) + (KI * I_TERM) + (KD * D_TERM))
onde I_TERM corresponde ao termo integral e D_TERM ao termo derivativo.
A implementação do bloco possui estratégia ANTI-WINDUP para evitar saturação do termo integral e incorpora o recurso de BUMPLESS quando o PID é comutado de manual para automático, evitando transientes na saída de controle OV.
A entrada START ativa o bloco que pode operar em modo manual ou automático, controlado pela entrada AUTO. Quando em manual, o valor da saída de controle OV não é alterado pelo bloco e pode ser livremente definido pela aplicação.
A entrada CYC_TME especifica o tempo de ciclo do PID (default = 200 ms), fazendo com que o bloco de controle seja executado 1 vez a cada intervalo de tempo.
Os valores de PV e SP devem ser fornecidos para o bloco na faixa entre PV_MIN e PV_MAX. O valor da saida de controle é gerado pelo bloco na faixa entre OV_MIN e OV_MAX, sendo inicializado (na ativação de START) com o valor OV_INI.
Para controle do bloco em modo automático o usuário deve especificar os ganhos definidos pelos parâmetros KP, KI e KD.
A entrada REV quando ativa permite inverter o modo de controle de forma que um valor de erro positivo faz com que a saída de controle diminua e vice versa.
A entrada OUT_CPL quando ativa complementa o valor calculado da saída de controle.
A entrada RESET quando alterar de 0 -> 1 irá recalcular o termo integral na próxima interação do bloco.
Bloco
PID_EX
+----------------+
BOOL ----|START CYC_EVT|---- BOOL
| |
BOOL ----|AUTO OVFL|---- BOOL
| |
BOOL ----|REV UNDF|---- BOOL
| |
BOOL ----|OUT_CPL RESULT|---- INT
| |
BOOL ----|RESET |
| |
TIME ----|CYC_TME |
| |
REAL ----|KP |
| |
REAL ----|KI |
| |
REAL ----|KD |
| |
REAL ----|PV_MIN |
| |
REAL ----|PV_MAX |
| |
REAL ----|PV |
| |
REAL ----|SP |
| |
REAL ----|OV_INI |
| |
REAL ----|OV_MIN |
| |
REAL ----|OV_MAX |
| |
REAL ----|OV ------------ |----
+----------------+
Parâmetros
Nome |
Classe |
Tipo |
Dim. |
V. Ini. |
Descrição |
START |
Entrada |
BOOL |
TRUE |
Inicia operação |
|
AUTO |
Entrada |
BOOL |
TRUE |
Modo de operação (FALSE: Manual, TRUE: Automático) |
|
REV |
Entrada |
BOOL |
FALSE |
Ação de controle reversa (ERR > 0 => diminuição em OV) |
|
OUT_CPL |
Entrada |
BOOL |
FALSE |
Saída de controle complementar |
|
RESET |
Entrada |
BOOL |
FALSE |
Ajusta o termo integral para manter a saída inalterada (Opera por transição de subida) |
|
CYC_TME |
Entrada |
TIME |
T#200ms |
Tempo de ciclo do PID |
|
KP |
Entrada |
REAL |
0.5 |
Ganho proporcional |
|
KI |
Entrada |
REAL |
0.2 |
Ganho integral |
|
KD |
Entrada |
REAL |
0.0 |
Ganho derivativo |
|
PV_MIN |
Entrada |
REAL |
0.0 |
Valor minimo da variavel de processo e setpoint |
|
PV_MAX |
Entrada |
REAL |
100.0 |
Valor maximo da variavel de processo e setpoint |
|
PV |
Entrada |
REAL |
0.0 |
Variavel de processo em unidade de engenharia |
|
SP |
Entrada |
REAL |
0.0 |
Setpoint em unidade de engenharia |
|
OV_INI |
Entrada |
REAL |
0.0 |
Valor inicial da saída |
|
OV_MIN |
Entrada |
REAL |
0.0 |
Valor mínimo da saída |
|
OV_MAX |
Entrada |
REAL |
100.0 |
Valor máximo da saída |
|
CYC_EVT |
Saída |
BOOL |
FALSE |
Gera um pulso igual a TRUE no ciclo anterior a uma nova interação do PID |
|
OVFL |
Saída |
BOOL |
FALSE |
PID saturado por overflow na saída de controle |
|
UNDF |
Saída |
BOOL |
FALSE |
PID saturado por underflow na saída de controle |
|
RESULT |
Saída |
INT |
0 |
Código de falha detectado no processo dd inicialização |
|
OV |
Entrada/Saída |
REAL |
0.0 |
Output value (OV_MIN .. OV_MAX) |
START
Inicia operação. Quando ativado o bloco efetua as inicializações necessárias para operação. Deve se manter este sinal ativo para que o bloco fique operacional.
AUTO
Modo de operação do bloco PID. Quando igual a FALSE, o bloco opera em modo Manual. Neste modo o PID não atua na variável de saída OV. Quando a entrada for TRUE (valor default) o bloco opera em modo automático, gerando o valor de OV em função dos parâmetros correntes.
REV
Ação de controle reversa. Em uma operação normal esta entrada deve ser FALSE (valor padrão). Nesta condição, a saída de controle aumenta quando o setpoint é maior que a variável de processo. Quando igual a TRUE a saída de controle diminue quando o setpoint é maior que a variável de processo e vice versa.
OUT_CPL
Saída de controle complementar. O valor default desta entrada é FALSE. Quando igual a TRUE o valor da saída de controle será o complemento do valor calculado, ou seja:
OV := OV_MAX - (OV - OV_MIN);
RESET
Esta entrada executa uma ação apenas na transição de 0 -> 1. Nete evento o bloco PID, na próxima interação, irá recalcular o termo integral em função da saída OV e dos parâmetros correntes de ganho. Para que uma nova ação deste tipo seja executada o usuário deverá desativar e ativar novamente esta entrada.
CYC_TME
Tempo de ciclo do PID. Este valor define o intervalo de tempo a ser aguardado para executar uma nova interação do bloco PID. O valor default para este parâmetro é de 200 ms. No instante em que e entrada START for ativada este valor é salvo internamente e alterações deste parâmetro enquando a entrada START estiver ativa não serão computadas.
Importante
O tempo de ciclo é definido em função do processo a ser controlado. Em geral valores de tempo de ciclo entre 100 e 200 ms são suficientes para controle da malha com boa resposta e estabilidade. Para processos mais rápidos este tempo deve ser reduzido lembrando sempre que, o tempo de execução de um bloco PID é significativo no tempo total de scan da aplicação. Portanto, mantenha este valor o maior possível que atenda à sua aplicação.
KP
Especifica o ganho proporcional do bloco PID. Este valor deve ser maior que zero para habilitar a operação do bloco.
KI
Especifica o ganho integral do bloco PID. Note que este parâmetro não é o tempo integral como existem em outras implementações de blocos PID. O ganho integral é definido como:
KI = KP / TI onde:
KP = ganho proporcional
TI = tempo integral (repetições por minutos)
Este valor deve ser maior ou igual a zero para habilitar a operação do bloco PID. Quando igual a zero remove o termo integral da equação do PID.
KD
Especifica o ganho derivativo do bloco PID. Note que este parâmetro não é o tempo derivativo como existem em outras implementações de blocos PID. O ganho derivativo é definido como:
KD = KP * TD onde:
KP = ganho proporcional
TD = tempo derivativo (repetições por minutos)
Este valor deve ser maior ou igual a zero para habilitar a operação do bloco PID. Quando igual a zero remove o termo diferencial da equação do PID.
PV_MIN
Valor mínimo utilizado para variável de processo e setpoint. No instante em que e entrada START for ativada este valor é salvo internamente e alterações deste parâmetro enquando a entrada START estiver ativa não serão computados.
PV_MAX
Valor máximo utilizado para variável de processo e setpoint. No instante em que e entrada START for ativada este valor é salvo internamente e alterações deste parâmetro enquando a entrada START estiver ativa não serão computados.
PV
Variável de processo. Deve estar sempre entre PV_MIN e PV_MAX.
SP
Setpoint de processo. Deve estar sempre entre PV_MIN e PV_MAX.
OV_INI
Valor inicial utilizado para variável de saída. Este valor é transferido para a saída OV na transição de 0 -> 1 da entrada de START.
OV_MIN
Valor mínimo utilizado para variável de saída. No instante em que e entrada START for ativada este valor é salvo internamente e alterações deste parâmetro enquando a entrada START estiver ativa não serão computados.
OV_MAX
Valor máximo utilizado para variável de saída. No instante em que e entrada START for ativada este valor é salvo internamente e alterações deste parâmetro enquando a entrada START estiver ativa não serão computados.
CYC_EVT
Evento de amostragem. Esta saída gera um pulso igual a TRUE no ciclo imediatamente anterior a uma nova interação do bloco PID. Pode ser utilizada para ajustar parâmetros (faixa da variável de processo ou ganhos) antes da interação do bloco evitando que este processo seja realizado continuamente consumindo tempo desnecessário da aplicação.
OVFL
Saída que indica quando ativa que a saída de controle OV esta saturada por oveflow (limite máximo da saída atingido). Neste caso, a estratégia de ANTI-WINDUP trata o termo integral para não atrasar a resposta do controle quando a saída retornar para a faixa linear.
UNDF
Saída que indica quando ativa que a saída de controle OV esta saturada por underflow (limite mínimo da saída atingido). Neste caso, a estratégia de ANTI-WINDUP trata o termo integral para não atrasar a resposta do controle quando a saída retornar para a faixa linear.
RESULT
Código de falha detectado no processo. Esta saída RESULT indica no momento que a entrada START for acionada se existem erros de parâmetros que impedem a operação do bloco PID. Quando houverem erros a saída indica um codigo diferente de HILS.SUCCESS (0) e o bloco PID permanece inativo até que a entrada START seja retornada para FALSE, a condição de erro seja solucionada e a entrada START seja ativada novamente. As possíveis condições de erro retornadas são:
CÓDIGO |
Descrição |
HILS.GL_INV_PAR |
Tempo de ciclo inválido. Este parâmetro deve ser maior que zero. |
HILS.GL_INV_PAR |
SP_MAX <= SP_MIN |
HILS.GL_INV_PAR |
OV_MAX <= OV_MIN |
HILS.GL_INV_PAR |
OV_INI < OV_MIN ou OV_INI > OV_MAX |
Nota
Se houverem erros no processo de inicialização do PID a saída de controle permanece inalterada. Apenas quando não houverem erros nos parâmetros especificados é que a saída de controle OV assumirá o valor OV_INI definido.
OV
Valor calculado para a saída do bloco PID quando o mesmo estiver em modo automático. Este valor estará entre (OV_MIN .. OV_MAX). Em modo MANUAL o bloco PID não altera este valor que pode ser modificado pela aplicação.
Exemplo
Declaração de Variáveis
Nome |
Classe |
Tipo |
Valor Inicial |
|---|---|---|---|
MY_KP |
Externa |
REAL |
0.5 |
MY_KD |
Externa |
REAL |
0.0 |
MY_KI |
Externa |
REAL |
0.1 |
MY_OV |
Externa |
REAL |
0.0 |
MY_SP |
Externa |
REAL |
60.0 |
MY_PV |
Externa |
REAL |
60.0 |
MY_CYCLE |
Externa |
TIME |
T#200ms |
MY_PV_MIN |
Externa |
REAL |
0 |
MY_PV_MAX |
Externa |
REAL |
100 |
MY_OV_MIN |
Externa |
REAL |
0 |
MY_OV_MAX |
Externa |
REAL |
100 |
MY_OV_INI |
Externa |
REAL |
40.0 |
MY_PID |
Local |
HILS.PID_EX |
|
START |
Local |
BOOL |
FALSE |
MY_MAN_AUTO |
Local |
BOOL |
TRUE |
Código ST
(* ... *)
IF MY_PID.CYC_EVT THEN
// Ajusta o range da entrada analógica padrão para 0 .. 100
MY_PV := HILS.LCONV(
INT_TO_REAL(AI00), // X [REAL] = Valor de entrada
0.0, // XMIN [REAL] = Valor mínimo da entrada X
4095.0, // XMAX [REAL] = Valor máximo da entrada X
0.0, // YMIN [REAL] = Valor mínimo da saída Y
100.0 // YMAX [REAL] = Valor máximo da saída Y
);
END_IF;
// Chama instância do bloco PID
MY_PID( // PID_EX
START := START, // [BOOL] Inicia operação
AUTO := MY_MAN_AUTO, // [BOOL] Modo de operação (FALSE: Manual, TRUE: Automático)
//REV := , // [BOOL] Ação de controle reversa (ERR > 0 => diminuição em OV)
//OUT_CPL := , // [BOOL] Saída de controle complementar
//RESET := , // [BOOL] Ajusta o termo integral para manter a saída inalterada (Opera por transição de subida)
CYC_TME := MY_CYCLE, // [TIME] Tempo de ciclo do PID
KP := MY_KP, // [REAL] Ganho proporcional
KI := MY_KI, // [REAL] Ganho integral
KD := MY_KD, // [REAL] Ganho derivativo
PV_MIN := MY_PV_MIN, // [REAL] Valor minimo da variavel de processo e setpoint
PV_MAX := MY_PV_MAX, // [REAL] Valor maximo da variavel de processo e setpoint
PV := MY_PV, // [REAL] Variavel de processo em unidade de engenharia
SP := MY_SP, // [REAL] Setpoint em unidade de engenharia
OV_INI := MY_OV_INI, // [REAL] Valor inicial da saída
OV_MIN := MY_OV_MIN, // [REAL] Valor mínimo da saída
OV_MAX := MY_OV_MAX, // [REAL] Valor máximo da saída
OV := MY_OV // [REAL] Output value (OV_MIN .. OV_MAX)
);
(* ... *)