Funktionsbausteine
Grundstruktur der Funktionsbausteine
Alle Funktionsbausteine der Bibliothek Tc3_Filter basieren auf derselben Grundstruktur. Dies erleichtert das Engineering, wenn von einem Filtertyp zu einem anderen gewechselt wird.
Syntax
FUNCTION_BLOCK FB_FTR_<type>
VAR_INPUT
stConfig : ST_FTR_<type>;
END_VAR
VAR_OUTPUT
bError : BOOL;
bConfigured : BOOL;
ipResultMessage : I_TCMessage;
END_VAR
Eingänge
Zur Konfiguration des Filters wird den Funktionsbausteinen bei der Instanziierung eine Konfigurationsstruktur vom Typ ST_FTR_<type> übergeben. Die Konfigurationsstruktur kann in der Deklaration oder über die Methode Configure()
zur Laufzeit zugewiesen werden.
Siehe auch: Datentypen > Konfigurationsstrukturen
Beispiel zur Konfiguration in der Deklaration:
(* define configure structure – exemplary for IIRSpec *)
stParams : ST_FTR_IIRSpec := (
eFilterName := E_FTR_Name.eButterworth,
eFilterType := E_FTR_Type.eLowPass,
nFilterOrder := nFilterOrder,
fSamplingRate := fSampleRate,
fCutoff := fCutoff,
nOversamples := cOversamples,
nChannels := cChannels);
(* create filter instance with configure structure *)
fbFilter : FB_FTR_IIRSpec := (stConfig := stParams);
Ausgänge
Alle Funktionsbausteine haben als Ausgangsparameter ein Error-Flag bError
und ein Flag bConfigured
vom Typ BOOL
. Diese zeigen an, ob ein Fehler vorliegt und ob die zugehörige Funktionsbausteininstanz erfolgreich konfiguriert wurde. Der Ausgang ipResultMessage
vom Typ I_TcMessage
bietet verschiedene Eigenschaften zur Erläuterung einer Event-Ursache sowie Methoden zur Verarbeitung der Message (Event-Liste).
Siehe auch: I_TcEventBase und I_TcMessage
Methoden
Alle Funktionsbausteine der Bibliothek Tc3_Filter verfügen über drei Methoden. Diese liefern einen positiven Rückgabewert, wenn sie fehlerfrei ausgeführt wurden.
Configure()
Die Methode kann zur Laufzeit verwendet werden, um die Instanz eines Filterbausteins initial zu konfigurieren (wenn nicht schon in der Deklaration geschehen) oder zu rekonfigurieren.
METHOD Configure : BOOL
VAR_INPUT
stConfig : ST_FTR_<type>;
END_VAR
Call()
Die Methode berechnet aus einem Eingangssignal, das in Form eines Pointers übergeben wird, ein manipuliertes Ausgangssignal.
METHOD Call : BOOL
VAR_INPUT
pIn : POINTER TO LREAL; (*address of input array*)
nSizeIn : UDINT; (*size of input array*)
pOut : POINTER TO LREAL; (*address of output array*)
nSizeOut : UDINT; (*size of output array*)
END_VAR
Reset()
Die Methode setzt den internen Status eines Filters zurück. Der Einfluss der vergangenen Werte auf den aktuellen Ausgangswert wird eliminiert.
METHOD Reset : BOOL
Eigenschaften
Die Bibliothek Tc3_Filter referenziert auf den TwinCAT 3 EventLogger und stellt somit sicher, dass Informationen (Ereignisse) über die standardisierte Schnittstelle I_TcMessage bereitgestellt werden.
Jeder Funktionsbaustein verfügt über die Eigenschaften eTraceLevel
vom Typ TcEventSeverity
und eTraceLevelDefault
vom Typ BOOL
.
Das Trace-Level bestimmt die Severity eines Events (Verbose, Info, Warning, Error, Critical) und wird über die Eigenschaft eTraceLevel
gesetzt.
(* Sample of setting fbFilter to trace level info *)
fbFilter.eTraceLevel := TcEventSeverity.Info;
Über die Eigenschaft eTraceLevelDefault
kann das Trace-Level wieder auf den Standardwert (TcEventSeverity.Critical
) gesetzt werden.
Auf die Eigenschaft kann lesend und schreibend zugegriffen werden, d. h. über die Eigenschaft eTraceLevelDefault
kann abgefragt werden, ob der Standardwert gesetzt ist.
Die Eigenschaften können auch im Online View gesetzt werden.
Umgang mit Oversampling und mehreren Kanälen
Alle Funktionsbausteine sind Oversampling- und Multi-Channel-fähig, wobei unterschiedliche Arten der Nutzung möglich sind. Die Deklaration der Filter-Funktionsbausteininstanz fbFilter
ist hier immer gleich.
Multi-Channel mit 2-dimensionalen Signal-Arrays
Die Definition eines 2-dimensionalen Arrays hat den Vorteil, dass die Definition allgemeingültig ist und der Parameter cChannels
in anderen Projekten auch auf 1 gesetzt werden kann. Ebenso lassen sich die Kanäle im TwinCAT 3 Scope einzeln selektieren, sodass alle Kanäle unabhängig voneinander betrachtet werden können.
Darstellung des mehrdimensionalen Arrays im „Target Browser“:
Beispiel:
VAR CONSTANT
cChannels : UINT := 2;
cOversamples : UINT := 10;
END_VAR
VAR
aInput : ARRAY [1..cChannels] OF ARRAY [1..cOversamples] OF LREAL;
aOutput : ARRAY [1..cChannels] OF ARRAY [1..cOversamples] OF LREAL;
END_VAR
bSucceed := fbFilter.Call(ADR(aInput), SIZEOF(aInput), ADR(aOutput), SIZEOF(aOutput));
Multi-Channel mit 1-dimensionalen Signal-Arrays
Alternativ können die Abtastwerte der verschiedenen Kanäle auch in einem eindimensionalen Array liegen. Die Aufnahme der einzelnen Kanäle mit dem TwinCAT 3 Scope ist dann jedoch nicht so einfach möglich.
Beispiel:
VAR CONSTANT
cChannels : UINT := 2;
cOversamples : UINT := 10;
END_VAR
VAR
aInput : ARRAY [1..cChannels*cOversamples] OF LREAL;
aOutput : ARRAY [1..cChannels*cOversamples] OF LREAL;
END_VAR
bSucceed := fbFilter.Call(ADR(aInput), SIZEOF(aInput), ADR(aOutput), SIZEOF(aOutput));
Einkanalige Anwendung mit Oversamples
Wenn nur ein einzelner Kanal betrachtet wird, können die Ein- und Ausgangsarrays als eindimensionale Größen deklariert werden.
VAR CONSTANT
cChannels : UINT := 1;
cOversamples : UINT := 10;
END_VAR
VAR
aInput : ARRAY [1..cOversamples] OF LREAL;
aOutput : ARRAY [1..cOversamples] OF LREAL;
END_VAR
bSucceed := fbFilter.Call(ADR(aInput), SIZEOF(aInput), ADR(aOutput), SIZEOF(aOutput));
Einkanalige Anwendung ohne Oversamples
Wenn nur ein einzelner Kanal betrachtet und auch kein Oversampling angewendet wird, können die Ein- und Ausgangsgrößen auch als LREAL
deklariert werden.
VAR CONSTANT
cChannels : UINT := 1;
cOversamples : UINT := 1;
END_VAR
VAR
fInput : LREAL;
fOutput : LREAL;
END_VAR
bSucceed := fbFilter.Call(ADR(fInput), SIZEOF(fInput), ADR(fOutput), SIZEOF(fOutput));