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

Clique aqui para baixar a tabela de variáveis

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)
    );

(* ... *)