FB_ALY_TimeBasedEnvelope_1Ch
Der Algorithmus Time Based Envelope 1Ch vergleicht, ob die periodischen Eingangsdaten innerhalb einer konfigurierten Bandbreite von Werten liegen, die aus einer Datei gelesen werden. Dabei kann es sich beispielsweise um ein Referenzsignal handeln, welches zuvor mit dem Time Based Teach Path 1Ch erlernt wurde. Der Vergleich beginnt, wenn das Signal des Flags Start Period TRUE ist. Es wird empfohlen, Time Based Envelope 1Ch aufgrund des konkurrierenden Dateizugriffs nicht gleichzeitig mit Time Based Teach Path 1Ch zu verwenden. Stattdessen sollte zunächst ein Referenzsignal mit dem Time Based Teach Path 1Ch eingelernt werden und erst im Anschluss die Auswertung mithilfe des Time Based Envelope 1Ch erfolgen.
Syntax
Definition:
FUNCTION_BLOCK FB_ALY_TimeBasedEnvelope_1Ch
VAR_OUTPUT
ipResultMessage: Tc3_EventLogger.I_TcMessage;
bError: BOOL;
bNewResult: BOOL;
bConfigured: BOOL;
bBusy: BOOL;
eState: E_ALY_ReadState;
bExecutingCompare: BOOL;
nValueNumber: ULINT;
fValueRead: LREAL;
fBandLower: LREAL;
fBandUpper: LREAL;
bWithinBand: BOOL;
eCompareResult: E_ALY_Classification_Bounds;
nCurrentComparedCycles: ULINT;
nCountWithinBand: ULINT;
nCountSmaller: ULINT;
nCountBigger: ULINT;
stFileHeader: ST_ALY_FileHeader;
END_VAR
Ausgänge
Name | Typ | Beschreibung |
---|---|---|
ipResultMessage | Beinhaltet nähere Informationen zum aktuellen Rückgabewert. Für diesen speziellen Schnittstellenzeiger ist intern sichergestellt, dass er immer gültig/zugewiesen ist. | |
bError | BOOL | Der Ausgang ist |
bNewResult | BOOL | Wenn ein neues Ergebnis berechnet wurde, ist der Ausgang |
bConfigured | BOOL | Zeigt |
bBusy | BOOL |
|
eState | Aktueller Status des FB. Notwendig aufgrund von asynchronem Dateizugriff. | |
bExecutingCompare | BOOL |
|
nValueNumber | ULINT | Wertzahl des Datenpunkts in der Datei, die gegenwärtig verglichen wird. |
fValueRead | LREAL | Wert des aus einer Datei gelesenen Datenpunkts. |
fBandLower | LREAL | Berechnete untere Grenze. |
bWithinBand | BOOL | Berechnete obere Grenze. |
eCompareResult | Klasse, zu der die Eingangswerte gehören (WithinBounds/Smaller/Bigger). | |
nCurrentComparedCycles | ULINT | Anzahl der verglichenen Zyklen. |
nCountWithinBand | ULINT | Zählt, wie oft die Werte innerhalb des Bandes lagen. |
nCountSmaller | ULINT | Zählt, wie oft die Werte kleiner als das Band waren. |
nCountBigger | ULINT | Zählt, wie oft die Werte größer als das Band waren. |
stFileHeader | ST_ALY_FileHeader | Header-Informationen der gelesenen Datei. |
Methoden
Name | Definitionsort | Beschreibung |
---|---|---|
Call() | Local | Methode zur Berechnung der Ausgänge für eine bestimmte Konfiguration. |
Configure() | Local | Allgemeine Konfiguration des Algorithmus mit seinen parametrisierten Bedingungen. |
GetBusyState() | Local | Diese Methode liefert den Zustand Busy des Funktionsbausteins. |
Reset() | Local | Setzt alle internen Zustände oder die bisher durchgeführten Berechnungen zurück. |
SetChannelValue() | Local | Methode zur Übergabe von Werten an den Algorithmus. |
SwitchState_Idle() | Local | Initiieren des Wechsels vom Zustand Read in den Zustand Idle. Siehe Zustandsdiagramm. |
SwitchState_Read() | Local | Initiieren des Wechsels vom Zustand Idle in den Zustand Read. Siehe Zustandsdiagramm. |
UpdateState() | Local | Aktualisierung des Zustands, nachdem eine Zustandsänderung initiiert wurde und bis der Zielzustand nicht erreicht ist. |
Zustandsdiagramm
Aufgrund des asynchronen Dateizugriffs in Echtzeitanwendungen benötigt dieser Funktionsbaustein eine Zustandsmaschine, um den Dateizugriff vorzubereiten und abzuschließen.
Beim Start ist der Funktionsbaustein im Zustand Idle. Um die eingehenden Daten mit den Daten aus der Datei zu vergleichen, muss er in den Zustand Read wechseln. Daher muss die Methode SwitchState_Read() einmal aufgerufen werden, um den Funktionsbaustein in den Zustand PendingRead zu versetzen. Anschließend muss die Methode UpdateState() aufgerufen werden, bis sich der Funktionsbaustein im Zustand Read befindet. In diesem Zustand können ein oder mehrere Vergleichszyklen durchlaufen werden. Wenn der Funktionsbaustein keine weiteren Zyklen vergleichen soll, kann er wieder in den Zustand Idle versetzt werden. Um den Zustandswechsel zu initiieren, muss die Methode SwitchState_Idle() aufgerufen werden. Anschließend muss die Methode UpdateState() aufgerufen werden, bis sich der Funktionsbaustein im Zustand Idle befindet.
Zustandsdiagramm für den Lesevorgang der Daten:

Beispiel
VAR
fbTimeBasedEnvelope : FB_ALY_TimeBasedEnvelope_1Ch;
eBandMode : E_ALY_BandMode := E_ALY_BandMode.Absolute;
fBand : LREAL := 2.0;
nSegmentSize : UDINT := 200;
tTimeout : TIME := T#5S;
sFilePath : STRING := 'C:\TwinCAT\3.1\Boot\TimeBasedTeach.tas';
bNegateStartPeriod : BOOL := FALSE;
bConfigure : BOOL := TRUE;
eState : E_ALY_ReadState := E_ALY_ReadState.Idle;
bRead : BOOL;
fInput : LREAL;
bStartPeriod : BOOL;
END_VAR
// Configure algorithm
IF bConfigure THEN
bConfigure := FALSE;
fbTimeBasedEnvelope.Configure(eBandMode, fBand, nSegmentSize, tTimeout, sFilePath, bNegateStartPeriod);
END_IF
// Call algorithm
eState := fbTimeBasedEnvelope.eState;
CASE eState OF
E_ALY_ReadState.Idle:
IF bRead THEN
fbTimeBasedEnvelope.SwitchState_Read();
fbTimeBasedEnvelope.UpdateState();
END_IF
E_ALY_ReadState.Read:
fbTimeBasedEnvelope.SetChannelValue(fInput);
fbTimeBasedEnvelope.Call(bStartPeriod:=bStartPeriod);
IF NOT bRead THEN
fbTimeBasedEnvelope.SwitchState_Idle();
fbTimeBasedEnvelope.UpdateState();
END_IF
E_ALY_ReadState.Pending,
E_ALY_ReadState.PendingIdle,
E_ALY_ReadState.PendingRead:
fbTimeBasedEnvelope.UpdateState();
eState := fbTimeBasedEnvelope.eState;
END_CASE
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v3.1.4024.0 | PC oder CX (x64, x86) | Tc3_Analytics |