Level Controlled Function Blocks¶
Zustandsgesteuerte Funktionsbausteine werden im Kontext dieses Dokuments wie folgt definiert:
Die Eingangsvariable
xEnabledefiniert den Typ dieses Funktionsbausteins.Der Status
TRUEan der EingangsvariablenxExecute(start condition) startet die Funktionalität, die mit diesem speziellen zustandsgesteuerten Funktionsbaustein definiert wurde. Die definierte Operation läuft bis zur ihrer ready condition oder error condition, während die EingangsvariablexEnableTRUEist. Der StatusFALSEan der EingangsvariablenxEnablewird als Abbruch interpretiert (abort condition). Dies bedeutet, dass der interne Zustand des Funktionsbausteins und alle Ausgangsvariablen neu initialisiert werden und er dann bereit für einen Neustart ist (standard handshake).Die Eingangsvariablen werden nicht lokal gespeichert und können so den Ablauf der definierten Bearbeitung beeinflussen.
Es kann immer nur eine der Ausgangsvariablen
xDone,xBusyoderxErrorden ZustandTRUEhaben.Die Zustände aller Ausgangsvariablen sind so lange gültig, wie der Zustand der Ausgangsvariablen
xBusyoderxDoneTRUEist [2].Mit der fallenden Flanke von
xBusywird die EingangsvariablexEnablegelesen und ihr invertierter Wert wird als reset request gespeichert.Der Zustand der Ausgangsvariablen ist für mindestens einen Aufruf gültig, auch wenn der Zustand der Eingangsvariablen
xEnableschon aufFALSEgesetzt wurde. In diesem Fall (reset request istTRUE) wird der interne Zustand des Funktionsbausteins automatisch neu initialisiert. Dies kann vor allem nach einer Fehlerbedingung während des Abbruchs der Bearbeitung auftreten.Der Zustand der Ausgangsvariablen außer
xDone,xBusy,xErrorodereErrorIDist gültig, solangexDoneden StatusTRUE[1][2] hat.Mit einem aktiven reset request und nachdem eine der Ausgangsvariablen
xDoneoderxErrorTRUEwurde, kann die EingangsvariablexEnablewieder aufTRUEgesetzt werden und der Funktionsbaustein startet die Bearbeitung neu (quick handshake).Manchmal ist ein Behaviour Model notwendig, das niemals seine ready condition erreicht. Ein solcher Funktionsbaustein hat keine Ausgangsvariable
xDoneund keine ZustandDone. Diese Verhalten wird als Continuous Behaviour definiert. Im Kontext dieses Dokuments heißen diese Behaviour ModelsLConCundLConTlC.Für detaillierte Beschreibungen der Referenzimplementierung der unterschiedlichen zustandsgesteuerten Funktionsbausteine siehe: LCon (FB) | LConTl (FB) | LConTo (FB) | LConTlTo (FB) | LConC (FB) | LConTlC (FB)
Gemeinsame Eigenschaften dieser Funktionsbausteintypen:
Wenn ein spezieller Aufruf eines Funktionsbausteins eine start condition entdeckt, wird die Ausgangsvariable
xBusysofort auf den ZustandTRUEgesetzt.Solange die definierte Bearbeitung eines Funktionsbausteins läuft, hat die Ausgangsvariable
xBusyden ZustandTRUE.Wenn eine error condition entdeckt wurde, wird die Ausgangsvariable
xErroraufTRUEgesetzt und die AusgangsvariablexBusywird aufFALSEgesetzt. Zusätzlich wird einer der definierten Fehlercodes (ein Wert des lokalen EnumerationstypsERROR) der AusgangsvariableneErrorIDzugewiesen.Wenn eine ready condition erfüllt wurde, wird die Ausgangsvariable
xDoneaufTRUEgesetzt und die AusgangsvariablexBusywird aufFALSEgesetzt.Wenn die definierte Operation in einem Aufruf vollständig abgearbeitet werden kann, werden die ready condition oder die error condition sofort erreicht und an der Ausgangsvariablen
xBusyerscheint nie der WertTRUE.Mit einer steigenden Flanke an
xDone, wird der Zustand aller Ausgangsvariablen eingefroren.Solange eine der Ausgangsvariablen
xDone,xBusyoderxErrorden StatusTRUEhat, ist die Bearbeitung dieses Funktionsbausteins noch nicht abgeschlossen. Weitere Aufrufe sind notwendig, um den Zustand Resetting abzuschließen.
Das Zeitverhalten dieser Funktionsbausteine
udiTimeLimit([µs], 0: Keine Begrenzung der Ausführungszeit):Ein Funktionsbaustein könnte zum Beispiel eine komplexe Task in einer Schleife abschließen. Je größer die Aufgabe ist, umso mehr Zeit wird beim Aufruf des Funktionsbausteins verbraucht. Der ParameterudiTimeLimitbestimmt, wie viel Zeit pro Aufruf für die Ausführung des jeweiligen Funktionsbausteins erlaubt ist. Funktionsbausteine mit einer EingangsvariablenudiTimeLimitwerden so implementiert, dass der aktuelle Aufruf beendet wird, wenn die Aufgabe beendet ist (Ready Condition), oder wenn die verbrauchte Zeit die Einstellung inudiTimeLimitüberschritten hat.udiTimeOut([µs], 0: Keine Begrenzung der Bearbeitungszeit):Bei der Ausführung seiner Operation kann ein Funktionsbaustein zum Beispiel gezwungen werden, auf ein externes Ereignis zu warten. Dies kann in einer internen Schleife (Busy Wait) geschehen, oder der FB kann bei jedem Aufruf überprüfen, ob seine Funktion vollständig ausgeführt werden kann. Der ParameterudiTimeOutkann definieren, wie viel Zeit für die Ausführung der definierten Bearbeitung erlaubt ist. Funktionsbausteine mit der EingangsvariablenudiTimeOutwerden so implementiert, dass der aktuelle Aufruf zu error condition über geht (xError``⇒ ``TRUEundeErrorID⇒ERROR.TIME_OUT), wenn das mitudiTimeOutdefinierte Zeitintervall überschritten wurde.
Fehlerdomänen und Fehlercodes (ERROR (Enum) und eErrorID (output)) und ihre Organisation in verschiedenen Domänen:
Jeder Funktionsbaustein dieses Dokuments hat einen booleschen Ausgang xError, der anzeigt, dass eine Fehlerbedingung aufgetreten ist. In diesem Fall wird die entsprechende Information zusammen mit dem Wert des Ausgangs eErrorID angezeigt. Die eErrorID ist ein Integer-Wert, der die Fehlerursache anzeigt. Oft wird dieser Integer-Wert als Eingang für einen zusätzlichen FB verwendet, der die Nummer in einen lokalisierten String der geeigneten Sprache umwandelt.