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:

Beobachtung:

Die Aufnahme des TwinCAT 3 Scope zeigt einen Signalverläufe, die stark verrauscht sind und zwischen zwei Plateaus springen.

Rekonfiguration mit Initialwerten 1:
Signalverlauf des Eingangssignals (rot) und Signalverläufe der Ausgangssignale (grün FB_ContinuousFilter, blau: FB_DynamicFiltering)

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.

Rekonfiguration mit Initialwerten 2:
Signalverlauf des Eingangssignals (rot) und Signalverläufe der Ausgangssignale (grün FB_ContinuousFilter, blau: FB_DynamicFiltering) (Zoom in eine Flanke)

Ü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: