Autor Thema: PT1 Filter  (Gelesen 14671 mal)

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 850
  • Think easy!
    • mollgruppe
PT1 Filter
« am: Oktober 26, 2014, 13:48:21 Nachmittag »
Hinweis: Aus meiner praktischen Erfahrung über die Jahre, setze ich mittlerweile nur noch den untenstehenden FB Tiefpass ein.
   Grund ist der einfache Code und die nicht mehr benötigte Zykluszeit.

Ein weiteres Beispiel aus der eigenen Sammlung von nützlichen Bausteinen.

Ein PT1-Filter, universell einsetzbar in der Analogwertverarbeitung.
Hinweis: Bitte die Zeitkonstante nur so groß wie nötig wählen, um ungewollte Signalverzögerungen zu vermeiden.

FUNCTION_BLOCK PT1_Filter
(*
##############################################################
Programmbeschreibung:
einfacher PT1 Filter zum glätten von verrauschten Signalen
##############################################################
Änderungsindex
Name:TL Version:0.1 Datum: 06.06.2012 Grund: neu
##############################################################
*)
VAR_INPUT
EN: BOOL; (*x Filter EIN*)
IN: REAL; (*r Signaleingang*)
TC: REAL := 1.0; (*r Zeitkonstante in s*)
Cycle: INT := 10; (*i Zykluszeit in ms*)
END_VAR
VAR_OUTPUT
OUT: REAL; (*r Signalausgang*)
END_VAR
VAR
K: REAL;    (*K-Faktor*)
Cy: REAL;  (*Zykluszeit in real*)
END_VAR

################################################

Cy:= INT_TO_REAL(Cycle);
K:= Cy / (Cy + 1000 * TC); (*Zeitfaktor berechnen*)
IF EN THEN
OUT:= OUT+K*(IN-OUT);; (*Filtern*)
ELSE
OUT:= IN;          (*Bei Filter AUS, Signal durchreichen*)
END_IF

Have a lot of fun!
« Letzte Änderung: April 26, 2025, 12:28:06 Nachmittag von radar17892 »
Weil Einfach einfach Einfach ist!

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 850
  • Think easy!
    • mollgruppe
Re:PT1 Filter
« Antwort #1 am: März 18, 2015, 22:02:54 Nachmittag »
Hallo,
eine neue Version des Filters mit verbessertem Anlaufverhalten.

Im ersten Aufruf wird OUT:=IN übernommen, auch bei festem EN:= TRUE
Hierdurch wird ein Filterstartwert von 0 umgangen.

FUNCTION_BLOCK PT1_Filter
(*
##############################################################
Programmbeschreibung:
einfacher PT1 Filter zum glätten von verrauschten Signalen
##############################################################
Änderungsindex
Name:TL Version:0.1 Datum: 06.06.2012 Grund: neu
Name:TL Version:0.2 Datum: 18.03.2015 Grund: Änderung Anlaufverhalten
##############################################################
*)
VAR_INPUT
EN: BOOL; (*x Filter EIN*)
IN: REAL; (*r Signaleingang*)
TC: REAL := 1.0; (*r Zeitkonstante in s*)
Cycle: INT := 10; (*i Zykluszeit in ms*)
END_VAR
VAR_OUTPUT
OUT: REAL; (*r Signalausgang*)
END_VAR
VAR
K: REAL;    (*K-Faktor*)
Cy: REAL;  (*Zykluszeit in real*)
xAnlauf: BOOL; (*Anlaufmerker*)
END_VAR

#########################################################

Cy:= INT_TO_REAL(Cycle);
K:= Cy / (Cy + 1000 * TC); (*Zeitfaktor berechnen*)
IF (xAnlauf AND EN) THEN
OUT:= OUT+K*(IN-OUT); (*filtern*)
ELSE
OUT:= IN;          (*Bei Filter AUS, Signal durchreichen*)
END_IF
(*wird PT1 erstmals aufgerufen, soll der aktuelle Wert übernommen werden
um bei filtern nicht erst von Null hochlaufen zu müssen*)
IF NOT xAnlauf THEN xAnlauf :=TRUE; END_IF


Have a lot of fun!
Weil Einfach einfach Einfach ist!

Offline radar17892

  • Sr. Member
  • ****
  • Beiträge: 850
  • Think easy!
    • mollgruppe
Antw:PT1 Filter
« Antwort #2 am: Januar 25, 2018, 13:29:29 Nachmittag »
Eine weitere Variante, Typ: Tiefpass

FUNCTION_BLOCK Tiefpass
(*
##############################################################
Programmbeschreibung:
einfacher PT1 Filter nahe der e-Funktion
Y= ((X-Y)/N)+Y
Endwert wird nach N Zyklen erreicht (begrebzt auf 5-250)
##############################################################
Änderungsindex
Name:TL Version:0.1 Datum: 06.05.2017 Grund: neu

##############################################################
*)
VAR_INPUT
IN: REAL;
N: USINT:=50; (*Endwert wird nach N Zyklen erreicht*)
END_VAR
VAR_OUTPUT
OUT: REAL;
END_VAR
VAR
END_VAR

+++++++++++++++++++++++++++++++++++++

N:= LIMIT(5, N, 250);
OUT:= ( (IN - OUT) / N) + OUT;

Viel Spass!
Thomas

Weil Einfach einfach Einfach ist!