FO_DFT
Implementa um filtro digital de 1ª ordem sobre um sinal REAL: quando habilitado, suaviza a entrada segundo uma constante de tempo configurável; caso contrário a saída acompanha diretamente a entrada. É um bloco de função (mantém estado entre scans; requer instância).
Biblioteca: HI_STD · Namespace: HILS · Tipo: bloco de função
Bloco de função
FO_DFT
+-------------+
BOOL ---|RUN OUT|--- REAL
| |
REAL ---|INP UPD|--- BOOL
| |
TIME ---|TAU |
| |
TIME ---|CYC |
+-------------+
O filtro implementa a equação:
Y(k) = Y(k-1) + ( X(k) - Y(k-1) ) * (Ts/Tf) onde:
Y(k) = saída do filtro no instante k
Y(k-1) = saída do filtro no instante anterior
X(k) = valor da entrada no instante k
Ts = período de amostragem do sinal (CYC)
Tf = constante de tempo do filtro (TAU)
Quando a entrada
RUNestá inativa, a saídaOUTsegue diretamente o valor da entradaINP.Quando a entrada
RUNestá ativa, a saídaOUTé o resultado da equação descrita.A entrada
INPé do tipo REAL, o mesmo tipo da saídaOUT.A saída
UPDgera um pulso no instante em que o valor deOUTé atualizado pelo bloco.
Importante
O valor de TAU deve ser maior que o tempo de amostragem definido (CYC).
Se TAU for menor ou igual a CYC, é considerado TAU = CYC.
Parâmetros
Nome |
Direção |
Tipo |
Padrão |
Faixa / Unidade |
Descrição |
|---|---|---|---|---|---|
RUN |
IN |
BOOL |
TRUE |
— |
Habilita o cálculo da saída filtrada. |
INP |
IN |
REAL |
— |
— |
Sinal de entrada a ser filtrado. |
TAU |
IN |
TIME |
T#5s |
> |
Constante de tempo do filtro. |
CYC |
IN |
TIME |
T#200ms |
— |
Tempo de amostragem do sinal. |
OUT |
OUT |
REAL |
— |
— |
Saída filtrada. |
UPD |
OUT |
BOOL |
— |
— |
Pulso a cada atualização de |
Pré-condições
TAUdeve ser maior queCYC(caso contrário assume-seTAU=CYC).
Observações
Com
RUNinativo o bloco atua como passagem direta (OUT=INP).UPDpulsa apenas no scan em queOUTé recalculado.
Exemplo
Clique aqui para baixar a tabela de variáveis
Código ST
VAR
my_FO_DFT : HILS.FO_DFT; (* Instancia do filtro *)
END_VAR
(* Exemplo de ativacao do bloco dentro da POU *)
my_FO_DFT(
RUN := TRUE, (* [BOOL] Habilita calculo da saida *)
INP := 1.5, (* [REAL] Sinal de entrada a ser filtrado *)
TAU := T#2s, (* [TIME] Constante de tempo do filtro *)
CYC := T#50ms (* [TIME] tempo de amostragem do sinal *)
(* OUT => , [REAL] saida filtrada *)
(* UPD => [BOOL] Valor de saida atualizado (pulso) *)
);