DERIVATIVE
Calcula a derivada XOUT de uma variável de entrada XIN ao longo do tempo de amostragem CYCLE; requer instância. É um bloco de função.
Biblioteca: IEC_STD · Namespace: IEC · Tipo: bloco de função
Bloco de função
DERIVATIVE
+-------------+
BOOL ----|RUN XOUT|---- REAL
| |
REAL ----|XIN |
| |
TIME ----|CYCLE |
+-------------+
Quando a entrada RUN é TRUE, o bloco calcula a derivada XOUT da variável XIN
ao longo do tempo de amostragem CYCLE. Quando RUN é FALSE, o bloco é resetado.
O cálculo é feito segundo:
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 amostrados
ao longo do tempo CYCLE.
Parâmetros
Nome |
Direção |
Tipo |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|
RUN |
IN |
BOOL |
FALSE |
— |
FALSE: reset; TRUE: processa o sinal de entrada. |
XIN |
IN |
REAL |
0.0 |
— |
Entrada a ser diferenciada. |
CYCLE |
IN |
TIME |
T#0ms |
— |
Tempo de amostragem. |
XOUT |
OUT |
REAL |
0.0 |
— |
Saída diferenciada. |
Observações
O bloco deve ser executado periodicamente, a cada intervalo
CYCLE, para que a derivada seja calculada corretamente.Enquanto
RUNestiver em FALSE, o histórico interno de amostras é zerado.
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
VAR
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 *)
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 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 o 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;
(* ... *)