Rekonfiguration mit Initialwerten
In diesem Beispiel wird exemplarisch gezeigt, wie ein Filter während der Laufzeit rekonfiguriert bzw. dynamisch angepasst werden kann. Dabei wird auch beschrieben, wie das Vorwissen über ein betrachtetes Signal genutzt werden kann, um die Einschwingzeit eines Filters nach der Rekonfiguration zu verkürzen.
Download: Tc3_Filter_InitVals.zip (*.tnzip)
Beschreibung:
- Das Beispielprojekt besteht aus einem TwinCAT-SPS-Projekt und einem Measurement-Projekt.
- Im Measurement-Projekt sind zwei Ausgangssignale und eine Counter-Variable konfiguriert.
- Das Eingangssignal wird über einen in der SPS aufgerufenen Funktionsgenerator synthetisch erzeugt. Das Signal wird von zwei unterschiedlich konfigurierten Filtern vom Typ „Butterworth-Tiefpass“ verarbeitet.
- Jeder Filter wird in einem separaten Funktionsbaustein beschrieben, der im SPS‑Programm MAIN instanziiert wird.
- Das SPS-Programm MAIN wird von einer Task mit 1 ms Zykluszeit aufgerufen.
Beobachtung:
Die Aufnahme des TwinCAT 3 Scope zeigt einen Signalverläufe, die stark verrauscht sind und zwischen zwei Plateaus springen.

Das erste Filter, das im Funktionsbaustein FB_ContinousFilter
beschrieben ist, bleibt während der Laufzeit unverändert. Das Ausgangsignal dieses Filters ist in seiner Dynamik wegen der Tiefpasswirkung beschränkt.
Das zweite Filter, das im Funktionsbaustein FB_DynamicFiltering
beschrieben ist, reagiert während der Laufzeit dynamisch auf die Sprungstellen des Eingangssignals.

Über den Eingang bTrigger
wird der Instanz fbDynamicLowPass
des Funktionsbausteins FB_DynamicFiltering
mitgeteilt, dass ein Sprung im Signal vorliegt. In der Praxis kann dies anhand des Signals selbst oder auf Basis einer durch die SPS eingeleiteten Aktion angezeigt werden.
Wenn bTrigger
auf TRUE
gesetzt wird, wird die Methode Configure()
aufgerufen, welche die Grenzfrequenz des Tiefpasses auf den maximal zulässigen Wert setzt. Dadurch geht beim nächsten Aufruf der Methode Call()
die Tiefpasswirkung verloren. Das Ausgangsignal kann dem Sprung im Eingangssignal jedoch schnell folgen.
Schließlich wird die Filterwirkung wieder aktiviert, indem die Methode Configure()
aufgerufen und die Grenzfrequenz stark verringert wird.
Um außerdem die Einschwingzeit des Filters stark zu reduzieren, wird das Vorwissen über die beiden Plateaus genutzt. Dazu wird dem Parameter pInitialValues
der Konfigurationsstruktur stParams
(Typ ST_FTR_IIRSpec
) der Initialwert 1 bzw. 5 zugewiesen. Die Werte werden im Programm MAIN festgelegt (fPreKnowledgeHigh
, fPreKnowledgeLow
) und spiegeln das Wissen des Anwenders wider, dass das zu bewertende Signal ungefähr zwischen 1 und 5 springen wird. Das Filter befindet sich so beim ersten Aufruf der Methode Call()
bereits im eingeschwungenen Zustand um diesen Wert.
stParams.fCutoff := Main.fCutOff; // reduce cutoff freq.
IF bRisingEdge THEN
// on rising edge apply preknowledge (Signal around 5)
bRisingEdge := FALSE;
stParams.pInitialValues := ADR(fInitValHighLevel);
stParams.nInitialValuesSize := SIZEOF(fInitValHighLevel);
ELSE
// on falling edge
stParams.pInitialValues := ADR(fInitValBaseLevel);
stParams.nInitialValuesSize := SIZEOF(fInitValBaseLevel);
END_IF;
fbFilter.Configure(stConfig := stParams);
Durch das event-basierte Umschalten der Filtercharakteristik kann die Einschwingzeit auf das neue Plateau deutlich reduziert werden.
Siehe auch: