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 RUN estiver 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;
(* ... *)