Client - Direct Control with normal security
Dieses Beispiel zeigt die exemplarische Implementierung der Direktbefehle (ctlModel := 1, direct 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): Sample04.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 direkten Befehle wird ein zusätzlicher, selbstimplementierter Funktionsbaustein benötigt. Im Beispiel wurde dafür ein neuer Funktionsbaustein: „FB_DirectControl“ hinzugefügt. Der Funktionsbaustein: „FB_DirectControl“ 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_DirectControl“-Funktionsbausteins die Befehlsausführung des Clients aktivieren. Im Deklarationsteil von „FB_IEDClient“ sind mehrere boolesche Variablen definiert. Eine steigende Flanke an der entsprechenden booleschen Variablen aktiviert in der IF-Anweisung die Befehlsausführung. 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 Kontrollwert-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.
Sobald einer der Befehle ausgelöst und erfolgreich abgearbeitet wurde, wird die Statemachine des „FB_IEDClient“-Funktionsbausteins in den State 11 versetzt. Hier verweilt die Statemachine, bis der Befehl erfolgreich durchgeführt wurde. Dafür wird in dem State 11 die „Execute“-Methode in jedem Zyklus aufgerufen und 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 Direktbefehle in der TwinCAT SPS. |