Edge Triggered Function Blocks¶
Flankengesteuerte Funktionsbausteine werden im Kontext dieses Dokuments wie folgt definiert:
Die Eingangsvariable
xExecute
definiert den Typ dieses Funktionsbausteins.Eine steigende Flanke an der Eingangsvariable
xExecute
(start condition) startet die Bearbeitung dieses speziellen flankengetriggerten Funktionsbausteins.Alle Eingänge außer
xExecute
und die optional vorhandene VariablexAbort
werden mit dieser steigenden Flanke abgetastet. Ihre Werte werden lokal gespeichert. Somit können spätere Änderungen dieser Eingänge die definierte Funktionalität nicht beeinflussen, während sie läuft [1].Die Eingangsvariable
xExecute
kann aufFALSE
gesetzt werden, nachdem die AusgangsvariablexBusy
TRUE
wurde.Eine fallende Flanke an der Eingangsvariablen
xExecute
bricht die Bearbeitung nicht ab. Die Bearbeitung läuft normal bis zu ihrer ready condition, abort condition oder error condition weiter.Nur der Wert
TRUE
, der an der optional vorhandenen EingangsvariablenxAbort
angelegt wird, bricht die definierte Bearbeitung ab (abort condition)..Wenn die optional vorhandene Variable
xAbort
und die EingangsvariablexExecute
den WertTRUE
haben, wird die Abbruchbedingung sofort erreicht.Nur eine der Ausgangsvariablen
xDone
,xBusy
,xError
oder die optional vorhandene Ausgangsvariablen xAborted` kann den ZustandTRUE
haben.Wenn eine Abbruchbedingung entdeckt wurde, wird die Ausgangsvariable
xAborted
aufTRUE
gesetzt, nachdem die AusgangsvariablexBusy
aufFALSE
gesetzt wurde.Mit der fallenden Flanke von
xBusy
wird die EingangsvariablexExecute
gelesen 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
xExecute
bereits schon aufFALSE
gesetzt wurde. In diesem Fall (reset request istTRUE
) wird der interne Zustand des Funktionsbausteins automatisch neu initialisiert. In allen anderen Fällen (xExecute
ist nochTRUE
) wartet der Funktionsbaustein auf eine fallende Flanke an der EingangsvariablenxExecute
, bevor der Funktionsbaustein neu initialisiert wird (standard handshake).Der Zustand aller Ausgangsvariablen außer
xDone
,xBusy
,xError
,xAborted
odereErrorID
ist gültig, solangexDone
den ZustandTRUE
[2][3] hat.Mit einem aktiven reset request und nachdem eine der Ausgangsvariablen
xDone
,xError
oderxAborted
TRUE
wurde, kann die EingangsvariablexExecute
wieder aufTRUE
gesetzt werden und der Funktionsbaustein kann die definierte Operation neu starten (quick handshake).
Für detaillierte Beschreibungen der Referenzimplementierung der verschiedenen flankengesteuerten Funktionsbausteine siehe ETrig (FB) | ETrigTl (FB) | ETrigTo (FB) | ETrigTlTo (FB) | ETrigA (FB) | ETrigATl (FB) | ETrigATo (FB) | ETrigATo (FB) | ETrigATlTo (FB).
Gemeinsame Eigenschaften dieser Funktionsbausteintypen:
Wenn ein spezieller Aufruf eines Funktionsbausteins eine start condition entdeckt, wird die Ausgangsvariable
xBusy
sofort auf den ZustandTRUE
gesetzt.Solange die definierte Bearbeitung eines Funktionsbausteins läuft, hat die Ausgangsvariable
xBusy
den ZustandTRUE
.Wenn eine error condition entdeckt wurde, wird die Ausgangsvariable
xError
aufTRUE
gesetzt und die AusgangsvariablexBusy
wird aufFALSE
gesetzt. Zusätzlich wird einer der definierten Fehlercodes (ein Wert des lokalen EnumerationstypsERROR
) der AusgangsvariableneErrorID
zugewiesen.Wenn eine ready condition erfüllt wurde, wird die Ausgangsvariable
xDone
aufTRUE
gesetzt und die AusgangsvariablexBusy
wird aufFALSE
gesetzt.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
xBusy
erscheint nie der WertTRUE
.Mit einer steigenden Flanke an
xDone
, wird der Zustand aller Ausgangsvariablen eingefroren.Solange eine der Ausgangsvariablen
xDone
,xBusy
oderxError
den StatusTRUE
hat, 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 Bearbeitungszeit):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 ParameterudiTimeLimit
bestimmt, wie viel Zeit pro Aufruf für die Ausführung des jeweiligen Funktionsbausteins erlaubt ist. Funktionsbausteine mit einer EingangsvariablenudiTimeLimit
werden 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 ParameterudiTimeOut
kann definieren, wie viel Zeit für die Ausführung der definierten Bearbeitung erlaubt ist. Funktionsbausteine mit der EingangsvariablenudiTimeOut
werden so implementiert, dass der aktuelle Aufruf zur error condition über geht (xError``⇒ ``TRUE
undeErrorID
⇒ERROR.TIME_OUT
), wenn das mitudiTimeOut
definierte 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.