DERIVATIVE
O bloco de função DERIVATIVE calcula a derivada XOUT de uma variável XIN ao longo do tempo CYCLE.
XOUT = (3 * (XIN - XIN[3]) + XIN[1] – XIN[2]) / (10 * CYCLE)
onde XIN[1], XIN[2] e XIN[3] são os valores anteriores de XIN ao longo do tempo CYCLE.
Bloco
DERIVATIVE
+-------------+
BOOL ----|RUN XOUT|---- REAL
| |
REAL ----|XIN |
| |
TIME ----|CYCLE |
+-------------+
Parâmetros
Nome |
Classe |
Tipo |
Dim. |
V. Ini. |
Descrição |
RUN |
Entrada |
BOOL |
FALSE |
FALSE: reset, TRUE: processa sinal de entrada |
|
XIN |
Entrada |
REAL |
0.0 |
Entrada a ser diferenciada |
|
CYCLE |
Entrada |
TIME |
T#0ms |
Tempo de amostragem |
|
XOUT |
Saída |
REAL |
0.0 |
Saída diferenciada |
Quando a entrada RUN é TRUE, calcula o valor da derivada XOUT da variável XIN ao longo do tempo CYCLE.
Exemplo
Declaração de Variáveis
Nome |
Tipo |
Valor Inicial |
Descrição |
|---|---|---|---|
inp_RUN |
BOOL |
FALSE |
FALSE: reset, TRUE: processa sinal de entrada |
inp_XIN |
REAL |
55.0 |
Entrada a ser diferenciada |
inp_CYCLE |
TIME |
T#200ms |
Tempo de amostragem |
out_XOUT |
REAL |
Saída diferenciada |
|
my_PD |
DERIVATIVE |
Instancia do bloco de função DERIVATIVE |
Código ST
(* ... *)
(* Timer TON para gerar ciclo de execução do bloco de função DERIVATIVE *)
my_TON(PT := inp_CYCLE);
my_TON.IN := TRUE;
(* se atingiu tempo de amostragem, executa bloco de função DERIVATIVE *)
IF (my_TON.Q = TRUE) THEN
(* executa do bloco de função DERIVATIVE a cada ciclo de amostragem *)
my_PD(
RUN := inp_RUN, (* FALSE: reset, TRUE: processa sinal de entrada *)
XIN := inp_XIN, (* Entrada a ser diferenciada *)
CYCLE := inp_CYCLE (* Tempo de amostragem *)
);
(* obtem valor de atuação gerado pelo bloco de função DERIVATIVE *)
out_XOUT := my_PD.XOUT;
(* reseta timer para gerar novo ciclo de ativação do bloco de função DERIVATIVE *)
my_TON.IN := FALSE;
END_IF;
(* ... *)