INTEGRAL
Calcula a integral XOUT de uma variável de entrada XIN ao longo do tempo
de amostragem CYCLE; enquanto R1 estiver ativo, XOUT é forçado ao valor
inicial X0. É 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
INTEGRAL
+-------------+
BOOL ----|RUN Q|---- BOOL
| |
BOOL ----|R1 XOUT|---- REAL
| |
REAL ----|XIN |
| |
REAL ----|X0 |
| |
TIME ----|CYCLE |
+-------------+
Integração numérica pelo método retangular, acumulando a cada execução:
XOUT = XOUT + (XIN * CYCLE).
Se a entrada R1 é TRUE, o valor de XOUT é definido pelo valor de X0
(reset com prioridade). Caso contrário:
Quando
RUNé TRUE,XOUTacumula a integral deXINao longo do tempoCYCLE.Quando
RUNé FALSE,XOUTé mantido no último valor.
A saída Q reflete NOT R1.
Nota
O bloco deve ser executado a cada período de amostragem CYCLE para que a
integração seja consistente (por exemplo, disparado por um TON).
Parâmetros
Nome |
Direção |
Tipo |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|
RUN |
IN |
BOOL |
FALSE |
— |
TRUE = integra; FALSE = mantém o valor de |
R1 |
IN |
BOOL |
FALSE |
— |
Reset com prioridade: força |
XIN |
IN |
REAL |
0.0 |
— |
Variável de entrada a ser integrada. |
X0 |
IN |
REAL |
0.0 |
— |
Valor inicial atribuído a |
CYCLE |
IN |
TIME |
T#0ms |
período de amostragem |
Intervalo de tempo entre execuções do bloco. |
Q |
OUT |
BOOL |
FALSE |
— |
Reflete |
XOUT |
OUT |
REAL |
0.0 |
— |
Saída integrada. |
Pré-condições
O bloco deve ser chamado a cada período
CYCLEpara uma integração correta.
Observações
R1tem prioridade sobreRUN: comR1em TRUE a integração é suspensa eXOUTé mantido emX0.
Ver também
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
VAR
inp_RUN : BOOL := TRUE; (* 1 = integrate, 0 = hold *)
inp_R1 : BOOL := FALSE; (* Overriding reset *)
inp_XIN : REAL := 50.0; (* Input variable *)
inp_X0 : REAL := 1.0; (* Initial value *)
inp_CYCLE : TIME := T#200ms; (* Sampling period *)
out_Q : BOOL; (* NOT R1 *)
out_XOUT : REAL; (* Integrated output *)
my_PI : INTEGRAL; (* Instancia do bloco de função INTEGRAL *)
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 INTEGRAL *)
my_TON(PT := inp_CYCLE);
my_TON.IN := TRUE;
(* se atingiu tempo de amostragem, executa bloco de função INTEGRAL *)
IF (my_TON.Q = TRUE) THEN
(* executa o bloco de função INTEGRAL a cada ciclo de amostragem *)
my_PI(
RUN := inp_RUN, (* 1 = integrate, 0 = hold *)
R1 := inp_R1, (* Overriding reset *)
XIN := inp_XIN, (* Input variable *)
X0 := inp_X0, (* Initial value *)
CYCLE := inp_CYCLE (* Sampling period *)
);
(* obtem valor de atuação gerado pelo bloco de função INTEGRAL *)
out_XOUT := my_PI.XOUT;
out_Q := my_PI.Q;
(* reseta timer para gerar novo ciclo de ativação do bloco de função INTEGRAL *)
my_TON.IN := FALSE;
END_IF;
(* ... *)