Client - SBO Control with normal security
Dieses Beispiel zeigt die exemplarische Implementierung des Befehls: Anwahl-vor-Ausführung (ctlModel := 2, select before operate control with normal security) in einem TwinCAT IEC 61850 Client-Projekt für folgende Datenklassen der Schaltersteuerung (Common Data Class, CDC):
- SPC (controllable single point) object;
- DPC (controllable double point) object
- APC (controllable analogue process value) object
- BAC (binary controlled analogue process value) object
- BSC (binary controlled step position information) object
- ENC (controllable enumerated status) object: Mod
- INC (controllable integer status) object
- ISC (integer controlled step position information) object
Download TwinCAT XAE Project (*.zip): Sample05.zip
Das hier beschriebene Beispiel nutzt die Statemachine, welche in dem Kapitel „Allgemeine Client - Projektstruktur“ beschrieben ist. Die States: 0,1,11 und 100 sind identisch zu der dort beschriebenen Statemachine. Andere States wurden für das Beispiel modifiziert oder auch neue States hinzugefügt.
Für die Implementierung der Befehle: Anwahl-vor-Ausführung wird ein zusätzlicher, selbstimplementierter Funktionsbaustein benötigt. Im Beispiel wurde dafür ein neuer Funktionsbaustein: „FB_SBOControl“ hinzugefügt. Der Funktionsbaustein: „FB_SBOControl“ wickelt die eigentliche Befehlsausführung für die unterschiedlichen CDC-Typen ab.
Im modifizierten State 10 vom „FB_IEDClient“ sind mehrere IF-Anweisungen aufgeführt, welche über die Instanz des „FB_SBOControl“-Funktionsbausteins die Befehlsausführung des Clients aktivieren. Um sämtliche Zustände des SBO-Befehls (SBO = select before operate) zu berücksichtigen, wird hier ein Enum zur Aktivierung verwendet. Sobald eines der Enums, z. B. „eControl_LLN0_Mod“ nicht „E_AcsiCtlService.None“ ist, wird der Befehl aktiviert. Dies kann der Benutzer über die Online-Werte der Applikation auslösen.
Methoden des "FB_DirectControl"-Funktionsbausteins
Methodenname | Beschreibung |
---|---|
APC BAC BSC DPC ENC_Mod INC ISC SPC | Für jeden steuerbaren CDC-Typ ist eine Methode hinzugefügt worden, da die meisten CDCs unterschiedliche Typen verwenden, z. B. „APC“ -> „REAL“ und „SPC“ -> „BOOL“. Weil die CDCs unterschiedliche Typen verwenden, besitzt auch jede dieser Methoden für den Kontrollwert (z. B. „ctlVal“) einen anderen Eingangsparameter. Innerhalb der Methode wird der Wert auf einen Union-Typ geschrieben, welches für jeden CDC-Typ einen Member enthält. Die Union-Variable wird an die „Request“-Methode übergeben. Die „Request“-Methode ist eine private Methode und sie aktiviert die Befehlsausführung. |
Execute | Sobald die „Request“-Methode des Funktionsbausteins erfolgreich aufgerufen wurde, muss die „Execute“-Methode in jeden Zyklus aufgerufen werden. Innerhalb dieser Methode befindet sich eine separate Statemachine, welche unabhängig von der Statemachine im Client-Funktionsbaustein arbeitet. Hierdurch wird der Code in kleinere Abschnitte aufgeteilt und kann in Zukunft besser erweitert werden. |
Clear | Bricht den Befehl ab und setzt den Funktionsbaustein zurück. |
Der Befehl, abhängig vom CDC-Typen, modifiziert den Kontrollwert des CDCs. Zu Demonstrationszwecken wird z. B. ein Zahlenwert hochgezählt oder ein boolescher Wert getoggelt.
Abhängig von dem Enum-Wert zum Auslösen eines Befehls ändert sich die Ausführung. Das Enum kann folgende Werte annehmen: None, Select, Operate, Select&Operate, Cancel. Bei Select, Operate und Cancel wird nur ein Befehl ausgeführt. Bei Select & Operate wird zuerst ein Select-Befehl durchgeführt, sobald dieser erfolgreich abgeschlossen wurde beginnt der Operate-Befehl. Der Benutzer kann sich für eine dieser Möglichkeiten beim Umschalten des Enums in den Online-Werten entscheiden.
Sobald bei einem der Enum-Werte eine Änderung erfolgte, wird die jeweilige Methode, passend zum CDC-Typ, ausgerufen. Wenn dies erfolgreich beendet wurde, wechselt die Statemachine in den State 11. Dies ist notwendig, da die Bearbeitung der Befehle länger als einen Zyklus in der SPS benötigen. Innerhalb dieses States wird die „Execute“-Methode zyklisch aufgerufen. Anhand des „ipResult“-Schnittstellenzeigers kann ermittelt werden, ob der Befehl noch bearbeitet wird oder bereits abgeschlossen ist. Dies wird über die „IsBusy()“-Methode abgefragt. Sobald der Befehl erfolgreich durchgeführt wurde, wechselt die Statemachine in den State 0.
Dies ist nur eine exemplarische Implementierung der Befehle: Anwahl-vor-Ausführung in der TwinCAT SPS. |