Implizite Variablen – SFC-Flags
Jeder SFC-Schritt und jede IEC-Aktion bietet implizit generierte Variablen für die Überwachung des Status von Schritten und IEC-Aktionen während der Laufzeit. Sie können auch Variablen für die Überwachung und Steuerung der Ausführung einer SFC (Timeouts, Reset, Tippmodus) definieren. Diese Variablen können auch implizit durch das SFC-Objekt erstellt werden.
Grundsätzlich wird für jeden Schritt und jede IEC-Aktion eine implizite Variable erstellt. Eine Strukturinstanz wird für das Element benannt, beispielsweise Schritt1 für einen Schritt mit Schrittnamen Schritt1. Sie können in den Elementeigenschaften definieren, ob für diese Flag eine Symboldefinition in die Symbolkonfiguration exportiert werden sollen und wie dieses Symbol in der Steuerung zugänglich sein soll.
Die Datentypen für diese impliziten Variablen werden in der Bibliothek IecSFC.library definiert. Diese Bibliothek wird automatisch in das Projekt aufgenommen, sobald ein SFC-Objekt hinzugefügt wird.
Schritt- und Aktionsstatus sowie Schrittzeit
Grundsätzlich wird für jeden Schritt und jede IEC-Aktion eine implizite Strukturvariable des Typs SFCStepType oder SFCActionType erstellt. Die Strukturkomponenten (Flags) beschreiben den Status eines Schritts oder einer Aktion oder die aktuelle verarbeitete Zeit eines aktiven Schritts.
Die Syntax für die implizite Variablendeklaration lautet:
<Schrittname>: SFCStepType;
oder
_<Aktionsname>:SFCActionType;
HINWEIS: Impliziten Variablen für IEC-Aktionen wird ein Unterstreichungszeichen vorangestellt.
Die folgenden booleschen Flags für Schritte oder Aktionen stehen zur Verfügung:
Boolesche Flags für Schritte:
Boolesches Flag |
Beschreibung |
---|---|
<Schrittname>.x |
zeigt den aktuellen Aktivierungsstatus an |
<Schrittname>._x |
zeigt den Aktivierungsstatus für den nächsten Zyklus an |
Wenn <Schrittname>.x = TRUE, wird der Schritt im aktuellen Zyklus ausgeführt.
Wenn <Schrittname>._x = TRUE und <Schrittname>.x = FALSE, wird der Schritt im folgenden Zyklus ausgeführt. Das bedeutet, dass <Schrittname>._x am Anfang eines Zyklus in <Schrittname>.x kopiert wird.
Boolesche Flags für Aktionen:
Boolesches Flag |
Beschreibung |
---|---|
_<Aktionsname>.x |
ist TRUE, wenn die Aktion ausgeführt wird. |
_<Aktionsname>._x |
ist TRUE, wenn die Aktion aktiv ist |
Symbolgenerierung
In den Elementeigenschaften eines Schritts oder einer Aktion können Sie definieren, ob eine Symboldefinition zu einer eventuell erstellten und heruntergeladenen Symbolkonfiguration für die Namens-Flag des Schritts oder der Aktion hinzugefügt werden soll. Erstellen Sie hierzu in der Spalte Symbol der Elementeigenschaftenansicht einen Eintrag für das gewünschte Zugriffsrecht.
HINWEIS: Wenn Sie das Flag <Schrittname>.x verwenden, um einen bestimmten Statuswert für einen Schritt zu erzwingen (um einen Schritt aktiv zu setzen), sollten Sie jedoch beachten, dass dadurch ein unkontrollierter Status innerhalb des SFC herbeigeführt wird.
|
UNBEABSICHTIGTER BETRIEBSZUSTAND DES GERÄTS |
Das boolesche Flag <Schrittname> darf nicht für die Forcierung eines Statuswerts zum Setzen eines Schritts als aktiv verwendet werden. |
Die Nichtbeachtung dieser Anweisungen kann Tod, schwere Verletzungen oder Sachschäden zur Folge haben. |
Zeit über TIME-Variablen:
Die Flag t gibt die aktuelle Zeit an, die seit der Aktivierung des Schritts verstrichen ist. Dies gilt nur für Schritte, ungeachtet dessen, ob eine Mindestdauer in den Schrittattributen definiert wurde oder nicht (siehe unten SFCError).
Für Schritte:
<Schrittname>.t (<Schrittname>._t für externe Zwecke nicht verwendbar)
Für Aktionen:
Die impliziten Zeitvariablen werden nicht verwendet.
Steuerung der SFC-Ausführung (Timeouts, Reset, Tippmodus)
Sie können einige implizit verfügbare Variablen, auch benannte SFC-Flags (siehe Tabelle unten), verwenden, um den Betrieb einer SFC zu steuern. Beispielsweise zur Anzeige von Time-Überläufen oder zur Aktivierung des Tippmodus für Schalttransitionen.
Um auf diese Flags zuzugreifen, müssen Sie sie deklarieren und aktivieren. Dies können Sie im Dialogfeld SFC-Einstellungen tun. Es handelt sich dabei um ein Unterdialogfeld des Objektdialogfelds Eigenschaften.
Eine manuelle Deklaration, wie in SoMachine / SoMachine Motion V3.1 erforderlich, ist nur nötig, um den Schreibzugriff von einer anderen POU zu aktivieren (siehe den Abschnitt Zugreifen auf Flags).
Berücksichtigen Sie in diesem Fall Folgendes:
Wenn Sie die Flag global deklarieren, müssen Sie die Option Deklarieren im Dialogfeld SFC-Einstellungen deaktivieren. Ansonsten führt dies zu einer implizit deklarierten lokalen Flag, die dann anstelle der globalen verwendet werden würde. Beachten Sie, dass die SFC-Einstellungen für eine SFC-POU anfangs durch die im Dialogfeld Optionen > SFC festgelegten Definitionen bestimmt werden.
Bedenken Sie, dass eine Deklaration einer Flag-Variablen, die ausschließlich über das Dialogfeld SFC-Einstellungen durchgeführt wurde, nur in der Online-Ansicht der SFC-POU sichtbar ist.
Die folgenden impliziten Variablen (Flags) können verwendet werden. Zu diesem Zweck müssen Sie sie im Dialogfeld SFC-Einstellungen deklarieren und aktivieren.
Variable |
Typ |
Beschreibung |
---|---|---|
SFCInit |
BOOL |
Wenn diese Variable TRUE wird, wird die Ablaufsprache auf den Initialschritt zurückgesetzt. Alle Schritte und Aktionen sowie andere SFC-Flags werden zurückgesetzt (Initialisierung). Dieser Initialschritt bleibt aktiv, wird aber nicht ausgeführt, solange die Variable TRUE ist. Setzen Sie SFCInit zurück auf FALSE, um mit der normalen Verarbeitung fortzufahren. |
SFCReset |
BOOL |
Diese Variable verhält sich ähnlich wie SFCInit. Im Gegensatz zu letzterer findet die weitere Verarbeitung jedoch nach der Initialisierung des Initialschritts statt. Deshalb könnte in diesem Fall ein Reset der Flag SFCReset auf FALSE im Initialschritt durchgeführt werden. |
SFCError |
BOOL |
Sobald ein Timeout in einem der Schritte der SFC auftritt, wird diese Variable TRUE. Voraussetzung: SFCEnableLimit muss TRUE sein. Beachten Sie, dass ein weiteres Timeout erst dann registriert werden kann, sobald ein Reset von SFCError durchgeführt wurde. SFCError muss definiert werden, wenn Sie die anderen Flags zur Steuerung der Zeit (SFCErrorStep, SFCErrorPOU, SFCQuitError) verwenden möchten. |
SFCEnableLimit |
BOOL |
Sie können diese Variable für die explizite Aktivierung (TRUE) und Deaktivierung (FALSE) der Zeitsteuerung in Schritten über SFCError verwenden. Das heißt, wenn diese Variable deklariert und aktiviert ist (SFC-Einstellungen), muss TRUE für sie festgelegt sein, damit SFCError funktioniert. Andernfalls werden Timeouts des Schritts nicht registriert. Die Verwendung kann bei Starts oder bei manuellem Betrieb sinnvoll sein. Wenn die Variable nicht definiert ist, funktioniert SFCError automatisch. Voraussetzung: SFCError muss definiert sein. |
SFCErrorStep |
STRING |
Diese Variable speichert den Namen eines Schritts, bei dem ein Timeout durch SFCError.timeout registriert wurde. Voraussetzung: SFCError muss definiert sein. |
SFCErrorPOU |
STRING |
Diese Variable speichert den Namen der SFC-POU, in der das Timeout aufgetreten ist. Voraussetzung: SFCError muss definiert sein. |
SFCQuitError |
BOOL |
Solange diese Variable TRUE ist, wird die Ausführung des SFC-Diagramms angehalten, und die Variable SFCError wird zurückgesetzt. Sobald die Variable auf FALSE zurückgesetzt wurde, werden alle aktuellen Zeitstatus im aktiven Schritt zurückgesetzt. Voraussetzung: SFCError muss definiert sein. |
SFCPause |
BOOL |
Solange die Variable TRUE ist, wird die Ausführung des SFC-Diagramms angehalten. |
SFCTrans |
BOOL |
Diese Variable wird TRUE, sobald eine Transition ausgelöst wird. |
SFCCurrentStep |
STRING |
Diese Variable speichert den Namen des aktuell aktiven Schritts, unabhängig von der Zeitüberwachung. Bei mehreren gleichzeitigen Abläufen wird der Name des äußeren rechten Schritts registriert. |
SFCTipSFCTipMode |
BOOL |
Diese Variablen ermöglichen die Verwendung des Tippmodus innerhalb des aktuellen Diagramms. Wenn dieser Modus über SFCTipMode=TRUE eingeschaltet wurde, können Sie nur zum nächsten Schritt gelangen, indem Sie SFCTip=TRUE setzen (steigende Flanke). Solange SFCTipMode auf FALSE gesetzt ist, können die Transitionen übersprungen werden. |
Die folgende Abbildung zeigt ein Beispiel einiger durch SFC erkannter Fehler-Flags im Online-Modus des Editors.
Ein Timeout wurde in Schritt s1 im SFC-Objekt POU durch Flag SFCError erkannt.
Um den Zugriff auf die Flags für die Steuerung der SFC-Ausführung (Timeouts, Reset, Tippmodus) zu ermöglichen, deklarieren und aktivieren Sie die Flag-Variablen wie oben beschrieben (Steuerung der SFC-Ausführung).
Syntax für den Zugriff von einer Aktion oder Transition innerhalb der SFC-POU:
<Schrittname>.<flag>
oder
_<Aktionsname>.<flag>
Beispiele:
status:=step1._x;
checkerror:=SFCerror;
Syntax für den Zugriff von einer anderen POU:
<SFC-POU>.<Schrittname>.<Flag>
oder
<SFC POU>._<Aktionsname>.<flag>
Beispiele:
status:=SFC_prog.step1._x;
checkerror:=SFC_prog.SFCerror;
Beachten Sie Folgendes bei einem Schreibzugriff von einer anderen POU:
oDie implizite Variable muss zusätzlich explizit als eine Variable vom Typ VAR_INPUT der SFC-POU deklariert werden,
ooder sie muss global in einer GVL (Globale Variablenliste) deklariert werden.
Beispiel: Lokale Deklaration
PROGRAM SFC_prog
VAR_INPUT
SFCinit:BOOL;
END_VAR
Beispiel: Globale Deklaration in einer GVL
VAR_GLOBAL
SFCinit:BOOL;
END_VAR
Zugreifen auf die Flag in PLC_PRG:
PROGRAM PLC_PRG
VAR
setinit: BOOL;
END_VAR
SFC_prog.SFCinit:=setinit; //Write access to SFCinit in SFC_prog