Objekt Transition
Symbol:
In einer Transition legen Sie eine Bedingung fest, unter der ein nachfolgender Schritt aktiv werden soll. Eine Transitionsbedingung kann den Wert TRUE oder FALSE haben. Wenn sie TRUE ist, wird der nachfolgende Schritt ausgeführt. Eine Transitionsbedingung kann auf folgende zwei Arten definiert werden:
- (1) Direkt („Inline-Bedingung“): Sie ersetzen den Standard-Transitionsnamen durch den Namen einer booleschen Variablen, einer booleschen Adresse, einer booleschen Konstante oder einer Anweisung mit booleschem Ergebnis (z. B. (i<100) AND b). Sie dürfen hier keine Programme, Funktionsbausteine oder Zuweisungen angeben.
- (2) Verwendung eines separaten Transitions- oder Eigenschaftenobjekts („multi-use condition“): Sie ersetzen den Standard-Transitionsnamen durch den Namen eines Transitions- oder Eigenschaften-Objekts. Sie legen diese Objekte über den Befehl Hinzufügen > Transition.. im Kontextmenü an (siehe Abschnitt „Objekt Transition anlegen“). Dies erlaubt eine Mehrfachverwendung („multiple-use“) von Transitionen. Das Objekt kann wie eine „Inline-Bedingung“ eine boolesche Variable, Adresse, Konstante oder Anweisung enthalten, aber auch Mehrfachanweisungen mit beliebigem Code.
Beachten Sie die Hinweise im Abschnitt „Zugriff auf VAR_IN_OUT_Variablen des Funktionsbausteins“.
Objekt Transition anlegen
- 1. Selektieren Sie im Projektmappen-Explorer im SPS-Projektbaum einen Funktionsbaustein oder ein Programm.
- 2. Wählen Sie im Kontextmenü den Befehl Hinzufügen > Transition…
- Der Dialog Transition hinzufügen öffnet sich.
- 3. Geben Sie einen Namen ein und wählen Sie eine Implementierungssprache aus.
- 4. Klicken Sie auf Öffnen.
- Das Objekt wird zum SPS-Projektbaum hinzugefügt und im Editor geöffnet.
Dialog Transition hinzufügen
Name | Name der Transition |
Implementierungssprache | Auswahlkästchen für die Implementierungssprache |
Transition aufrufen
Syntax:
Im Gegensatz zu TwinCAT 2 PLC Control wird eine Transitionsbedingung wie ein Methodenaufruf behandelt. Die Eingabe erfolgt nach folgender Syntax:
<Transitionsname> := <Transitionsbedingung>
oder
<Transitionsbedingung>
Enthält eine Transition mehrfache Anweisungen, müssen Sie den gewünschten Ausdruck der Transitionsvariable zuweisen (erste Variante der Syntax).
Beispiele:
Aufruf der Transition Trans1 in einer ST-POU:
PRG_SFC.Trans1:
Trans1 := (nCount<=100);
PRG_SFC:
nCount := nCount+1;
IF Trans1 = TRUE THEN // IF nCount<=100 THEN …
nVar:=1;
ELSE
nVar:=2;
END_IF
Aufruf der Transition Trans1 in einer SFC-POU:
Zugriff auf VAR_IN_OUT-Variablen des Funktionsbausteins in einer Methode/Transition/Eigenschaft
Auf die VAR_IN_OUT-Variablen eines Funktionsbausteins kann in einer Methode, einer Transition oder einer Eigenschaft des Funktionsbausteins prinzipiell zugegriffen werden. Bei einem solchen Zugriff ist folgendes zu beachten:
- Wird der Rumpf oder eine Aktion des Funktionsbausteins von außerhalb des FBs aufgerufen, stellt der Compiler sicher, dass bei diesem Aufruf die VAR_IN_OUT-Variablen des Funktionsbausteins zugewiesen werden.
- Bei dem Aufruf einer Methode, Transition oder Eigenschaft des Funktionsbausteins ist dies nicht der Fall, da die VAR_IN_OUT-Variablen des FBs nicht innerhalb eines Methoden-, Transitions- oder Eigenschaftenaufrufs zugewiesen werden können. Es könnte daher gegebenenfalls ein Zugriff auf die VAR_IN_OUT-Variablen stattfinden, indem die Methode/Transition/Eigenschaft aufgerufen wird, bevor die VAR_IN_OUT-Variablen einer gültigen Referenz zugewiesen wurden. Da dies einem ungültigen Zugriff während der Laufzeit entsprechen würde, ist es potentiell riskant, auf die VAR_IN_OUT-Variablen des FBs in einer Methode, einer Transition oder einer Eigenschaft zuzugreifen.
Aus diesem Grund wird bei einem Zugriff auf die VAR_IN_OUT-Variablen des FBs in einer Methode, einer Transition oder einer Eigenschaft folgende Warnung mit der ID C0371 ausgegeben:
„Warning: Access to VAR_IN_OUT <Var> declared in <POU> from external context <Method/Transition/Property>”
Eine adäquate Reaktion auf diese Warnung ist beispielsweise die Überprüfung der VAR_IN_OUT-Variablen innerhalb der Methode/Transition/Eigenschaft, bevor auf sie zugegriffen wird. Diese Überprüfung ist mithilfe des Operators __ISVALIDREF möglich, mit dem geprüft werden kann, ob eine Referenz auf einen gültigen Wert verweist. Ist diese Prüfung vorhanden, kann zum einen davon ausgegangen werden, dass sich der Anwender des Risikos bewusst ist, das potentiell vorhanden ist, wenn auf die VAR_IN_OUT-Variablen des FBs in einer Methode/Transition/Eigenschaft zugegriffen wird. Zum anderen liegt durch die Überprüfung der Referenz ein angemessener Umgang mit diesem Risiko vor. Somit kann die Warnung für diesen überprüften Bereich mittels Attribut 'warning disable' unterdrückt werden.
Die dazugehörige Beispielimplementierung einer Methode ist im Folgenden dargestellt.
Funktionsbaustein FB_Sample:
FUNCTION_BLOCK FB_Sample
VAR_IN_OUT
bInOut : BOOL;
END_Var
Methode FB_Sample.MyMethod:
METHOD MyMethod
VAR_INPUT
END_VAR
// The warning can be disabled here as the user is aware of the risk that the reference may not be valid by checking its validity
{warning disable C0371}
// Checking the VAR_IN_OUT reference, leave the current method in case of invalid reference
IF NOT __ISVALIDREF(bInOut) THEN
RETURN;
END_IF
// Access to VAR_IN_OUT reference (only if the reference was confirmed as valid before)
bInOut := NOT bInOut;
// The warning may be restored at the end of the access area
{warning restore C0371}
Siehe auch:
- Objektorientiert programmieren
- Erweitern eines Funktionsbausteins
- Referenz Programmierung: AS-Elemente Schritt und Transition