INTEGRAL
O bloco de função INTEGRAL calcula a integral XOUT de uma variável XIN ao longo do tempo CYCLE.
XOUT = XOUT + (XIN * CYCLE)
Bloco
INTEGRAL
+-------------+
BOOL ----|RUN Q|---- BOOL
| |
BOOL ----|R1 XOUT|---- REAL
| |
REAL ----|XIN |
| |
REAL ----|X0 |
| |
TIME ----|CYCLE |
+-------------+
Parâmetros
Nome |
Classe |
Tipo |
Dim. |
V. Ini. |
Descrição |
RUN |
Entrada |
BOOL |
FALSE |
1 = integrate, 0 = hold |
|
R1 |
Entrada |
BOOL |
FALSE |
Overriding reset |
|
XIN |
Entrada |
REAL |
0.0 |
Input variable |
|
X0 |
Entrada |
REAL |
0.0 |
Initial value |
|
CYCLE |
Entrada |
TIME |
T#0ms |
Sampling period |
|
Q |
Saída |
BOOL |
FALSE |
NOT R1 |
|
XOUT |
Saída |
REAL |
0.0 |
Integrated output |
Se a entrada R1 é TRUE, o valor de XOUT será definido pelo valor de X0. Caso contrário:
Quando a entrada RUN é TRUE, o valor de XOUT será a integral da variável XIN ao longo do tempo CYCLE.
Quando a entrada RUN é FALSE, o valor de XOUT será mantido no último valor.
Exemplo
Declaração de Variáveis
Nome |
Tipo |
Valor Inicial |
Descrição |
|---|---|---|---|
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 |
Código ST
(* ... *)
(* 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 do 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;
(* ... *)