ONF_CTRL
Este bloco implementa um controlador do tipo ON-OFF com histeresse.
Se o valor da histerese for maior que zero o comportamento do controle é o seguinte:
|
| ...
| . ... ...
SP+HIS |_______________._______._____________.___._______
| ... . . .
| . .. . .
SP |________...________________.______._________.____
| .. .. . ..
| .. . .
| . .
PV |..
|
+-------------------------------------------------
OV |---------------+ +---------+ +----
| | | | |
+ +-----------+ +------+
Se PV >= SP + HIS => OV = FALSE
Se PV < SP => OV = TRUE
Se o valor da histerese for menor que zero o comportamento do controle é o seguinte:
|
| ...
| . ... ...
SP |_______________._______._____________.___._______
| ... . . .
| . .. . .
SP-HIS |________...________________.______._________.____
| .. .. . ..
| .. . .
| . .
PV |..
|
+-------------------------------------------------
OV |---------------+ +---------+ +----
| | | | |
+ +-----------+ +------+
Se PV > SP => OV = FALSE
Se PV <= SP - HIS => OV = TRUE
A entrada INV quando ativada, inverte o estado da saída de controle.
A entrada de LOCK define um tempo mínimo para a variação da saída de controle. Ou seja, se o tempo de LOCK for por exemplo igual a 5 segundos, a sáida de controle após alterar o seu estado, se manterá na mesma condição por pelo menos 5 segundos, mesmo que o bloco de controle leve o sinal de saída para o outro estado.
Se a entrada FREEZE se tornar ativa, a saída de controle será mantiva no estado presente quando ocorreu a transição deste sinal.
Bloco
ONF_CTRL
+---------------+
BOOL ----|RUN OUT|---- BOOL
| |
BOOL ----|INV |
| |
BOOL ----|MAN_AUT |
| |
BOOL ----|MAN_OUT |
| |
REAL ----|SP |
| |
REAL ----|PV |
| |
REAL ----|HIS |
| |
TIME ----|LOCK |
| |
BOOL ----|FREEZE |
+---------------+
Quando a entrada RUN estiver inativa o valor da saida OUT é zero e o bloco de controle não é executado
Quando a entrada RUN estiver ativa o valor da entrada MAN_AUT define o comportamento do bloco. Se MAN_AUT estiver inativo, valor da saída é definido pela entrada MAN_OUT. Se MAN_AUT estiver ativo, valor da saída é calculada em função dos parâmetros de entrada PV, SP e HIS.
Os valores de PV, SP e HIS devem estar na mesma faixa de unidade de engenharia.
Nome |
Parâmetro |
Tipo Dado |
V. Ini. |
Descrição |
RUN |
Entrada |
BOOL |
TRUE |
Habilita o controle quando igual a TRUE, desliga a saída se FALSE |
INV |
Entrada |
BOOL |
FALSE |
Habilita controle invertido [ Default = OFF ] |
MAN_AUT |
Entrada |
BOOL |
TRUE |
Controle manual (OFF) ou automático (ON) [ Default = ON ] |
MAN_OUT |
Entrada |
BOOL |
0 |
Valor da saída de controle em modo manual |
SP |
Entrada |
REAL |
0.0 |
Setpoint do processo |
PV |
Entrada |
REAL |
0.0 |
Variável de processo |
HIS |
Entrada |
REAL |
0.0 |
Histeresse de controle |
LOCK |
Entrada |
TIME |
T#1s |
Tempo de congelamento da saída após alteração de valor [ Default = 1 seg ] |
FREEZE |
Entrada |
BOOL |
FALSE |
Congela o valor da saida de controle no estado corrente |
OUT |
Saída |
BOOL |
FALSE |
Saída de controle |
Exemplo
Declaração de Variáveis
Nome |
Tipo |
Descrição |
|---|---|---|
my_ONF |
HILS.ONF_CTRL |
Instancia do bloco ONF_CTRL |
sp_value |
REAL |
Setpoint do processo |
pv_value |
REAL |
Variável de processo |
his_value |
REAL |
Histeresse de controle |
Código ST
(* Exemplo de utilização do ONF_CTRL *)
...
sp_value := 80.0; (* Setpoint do processo *)
pv_value := 70.0; (* Variável de processo, ler de uma entrada analógica *)
his_value := 1.5; (* Histeresse de controle *)
my_ONF(
RUN := TRUE,
//INV := FALSE, (* nao necessita ser atribuido se controle direto *)
//MAN_AUT:= TRUE, (* nao necessita ser atribuido se operando sempre em automatico *)
//MAN_OUT:= FALSE, (* nao necessita ser atribuido se operando sempre em automatico *)
SP := sp_value,
PV := pv_value,
HIS := his_value,
//LOCK := T#1s, (* nao necessita ser atribuido se recurso de LOCK for de 1 seg *)
//FREEZE := FALSE (* nao necessita ser atribuido se recurso de FREEZE nao for utilizado *)
);
if (my_ONF.OUT) then
...
end_if;
...