IEC 61850 Control Model

Überblick

Um kritische Befehle an ein Schutzgerät zu übermitteln, müssen bestimmte vom Control Model definierte Operationen durchgeführt werden. Diese Definitionen beinhalten:

  • Operationen verschiedener Sicherheitsebenen

  • Services die zum Ausführen dieser Operationen erforderlich sind

  • Datenstrukturen zum Handhaben und Überwachen von Service-Requests

Ziel einer Operation ist das steuerbare Objekt, beispielsweise die Position eines Schalters mit allen Attributen.

Anmerkung:

Es ist nicht möglich, die Position eines Schalters auf einem Schutzgerät nur durch Schreiben des gewünschten Wertes zu ändern.

Operations

Zum Schreiben von Befehlen an ein Peripheriegerät definiert der IEC 61850 Standard folgende Operationen:

  • Steuerung mit normaler Sicherheit

    • Direkt ohne Rücküberwachung

    • Select before operate (SBO) ohne Rücküberwachung

  • Steuerung mit erweiterter Sicherheit

    • Direkt mit Rücküberwachung

    • Select before operate (SBO) mit Rücküberwachung

Direkte Steuerung bietet einen einfachen Weg um Aktionen auf Gerätelevel zu starten, ohne die Sicherheitsaspekte zu überprüfen. Es kann verwendet werden, um ein lokales Objekt auf Geräteebene oder ein externes Objekt bei dem Überwachungsinformationen auf Clientseite nicht kritisch sind, zu kontrollieren. Das Modell kann keine Konfliktsituationen verhindern, die auftreten können, wenn mehrere Clients gleichzeitig Steuerungsdaten schicken.

Steuerung mit normaler Sicherheit

Der Status des steuerbaren Objekts wird nicht überwacht. Daher wird der Client nicht informiert, ob die Operation erfolgreich ausgeführt wurde oder fehlgeschlagen ist.

Direkt ohne Rücküberwachung

Erlaubt die Services Operate, TimeActivatedOperate und Cancel. Ein Befehl kann durch Aufrufen der Services Operate oder TimeActivatedOperate sofort übermittelt werden.

Select before operate ohne Rücküberwachung

Erlaubt die Services Select, Operate, TimeActivatedOperate und Cancel. Bevor ein Befehl übermittelt werden kann, muss das steuerbare Objekt durch Verwenden des Select-Services ausgewählt werden.

Steuerung mit erweiterter Sicherheit

Bei Verwendung der erweiterten Sicherheit wird der Status der Operation überwacht. Außerdem bietet das Peripheriegerät im Fall eines Fehlschlags detaillierte Informationen.

Direkt mit Rücküberwachung

Erlaubt die Services Operate, TimeActivatedOperate und Cancel. Ein Befehl kann durch Aufrufen der Services Operate oder TimeActivatedOperate sofort übermittelt werden.

Select before operate mit Rücküberwachung

Erlaubt die Services SelectWithValue, Operate, TimeActivatedOperate und Cancel. Bevor ein Befehl übermittelt werden kann, muss das steuerbare Objekt durch Verwenden des SelectWithValue-Services ausgewählt werden.

Services

Folgende Services werden eingesetzt, um Operationen durchzuführen

Operate

Wird verwendet, um einen Befehl, z.B. Positionswechsel eines Schalters am Peripheriegerät, zu übermitteln.

TimeActivatedOperate

Wird verwendet, um einen Befehl zu einer definierten Zeit abzusetzen.

Cancel

Wird verwendet, um einen Befehl abzubrechen, bevor er ausgeführt wird.

Select

Wird verwendet, um ein steuerbares Objekt auszuwählen, bevor Befehle übermittelt werden. Die Operation muss innerhalb der durch das Attribut sboTimeout festgelegten Zeitspanne durchgeführt werden. Das Objekt ist für diese Zeitspanne explizit für den Client, der es ausgewählt hat, reserviert und wird freigegeben, sobald die Zeit abgelaufen oder der Befehl beendet ist.

SelectWithValue

Bietet die gleiche Funktionalität wie Select, nur dass hier der Steuerwert gemeinsam mit dem Select-Request gesendet wird.

Datenstrukturen

Der IEC Standard definiert zum Bedienen und Überwachen von steuerbaren Objekten folgende Datenstrukturen:

Oper- und SBOw-Struktur

Diese Strukturen werden verwendet, um die Services Operate, TimeActivatedOperate und SelectWithValue aufzurufen.

Element WinCC OA Transformationstyp
ctlVal Abhängig vom CDC-Typ
operTm TIMESTAMP
origin.Orcat INT32
origin.orIdent OCTET STRING64
ctlNum INT8U
T TIMESTAMP
Test BOOLEAN
Check BITSTRING

Cancel-Struktur

Diese Struktur wird verwendet, um den Cancel-Service aufzurufen.

Element WinCC OA Transformationstyp
ctlVal Abhängig vom CDC-Typ
operTm TIMESTAMP
origin.Orcat INT32
origin.orIdent OCTET STRING64
ctlNum INT8U
T TIMESTAMP
Test BOOLEAN

Diese Datenstrukturen sind vom Functional Constraint CO (Controllable). In einem Gerät würden sie folgendermaßen strukturiert werden.

Steuerbare Object Service Parameter

ctlVal

Wert, der geschrieben wird. Bestimmt die Steuerungsaktivität. Der Typ von ctlVal stimmt mit dem Typ des gesteuerten Attributs überein, das in der Common Data Class des steuerbaren Objekts definiert ist.

operTm

Wird ein TimeActivatedOperate-Dienst ausgeführt, legt der Parameter operTm fest, wann der Befehl ausgeführt wird. Der Parameter ist optional und wird nicht von allen Geräten unterstützt.

origin

Der Service-Parameter origin bestimmt die Quelle des Steuerungsservice. Alle Service-Requests die zu einer Steuerungssequenz gehören, müssen durch den gleichen Originator gekennzeichnet werden.

origin.orCat

Originator Category legt die Kategorie der Quelle fest. Z.B.: wird Station Control (2) verwendet, wenn eine Steuerungsoperation von einem Operator auf Stationsebene ausgeführt wird. Automatic Station (5) wird verwendet, wenn die Steuerungsoperation von einer automatischen Funktion auf Stationsebene ausgelöst wird.

Wert Bedeutung
0 Nicht unterstützt
1 bay-control
2 station-control
3 remote-control
4 automatic-bay
5 automatic-station
6 automatic-remote
7 maintenance
8 process
Anmerkung:

Um zwischen den Operationsebenen (Bay, Station oder Remote) zu unterscheiden, wird der Config-Eintrag originatorCategory verwendet. Zur Unterscheidung, ob Befehle vom Operator oder der Applikation ausgelöst werden, wird Bit 6 des Command-Bytes verwendet. Durch Setzen dieses Bits wird der Befehl als "Automatic" definiert.

Beispiel: Der Config-Eintrag wird auf 3 gesetzt.

  • Bit 6 ist nicht gesetzt: Originator Category wird als "remote-control" definiert.

  • Bit 6 ist gesetzt: Originator Category wird als "automatic-remote" definiert.

origin.orIdent

Die Originator Identification identifiziert den Verbindungspartner der das Objekt gesendet hat (Request oder Response). Der Wert NULL bedeutet, dass die Quelle eines bestimmten Objekts nicht bekannt ist. Per Default wird der Originator Identifier folgendermaßen definiert: <Hostname>_<Projektname>_<Treibernummer>. Der Hostname kann mit dem Config-Eintrag originatorIdentifier definiert werden.

Anmerkung:

WinCC OA Projekt "IEC61850TestProject" läuft auf dem Host "MyETMHost". Dem WinCC OA 61850/61400 Client ist Treibernummer 1 zugewiesen. Per Default ist der Originator Identifier "MyETMHost_IEC61850TestProject_1". Durch Config-Eintrag originatorIdentifier = "SubstationTestHost" ändert sich der Originator Identifier auf "SubstationTestHost_IEC61850TestProject_1".

ctlNum

Der Service-Parameter ctlNum bestimmt die Sequenznummer des Steuerungsservices. Alle Service-Requests die zu einer Steuerungssequenz gehören, werden über die gleiche Sequenznummer identifiziert. Der Client weist die Sequenznummer im Bereich von 0 - 255 zu.

T

Der Service-Parameter T ist der Zeitstempel des Steuerungsobjekts und beinhaltet wann der Client einen Service Control Request erteilt.

Test

Der Service-Parameter Test zeigt, ob der Client einen Steuerungsservice nur zu Testzwecken versendet. TRUE bedeutet, dass es nur zu Testzwecken versendet wurde.

Alle Service-Requests die zu einer Steuerungssequenz gehören müssen den gleichen Teststatus aufweisen.

Check

Definiert, welche Art von Überprüfung ein Steuerungsobjekt ausführt, bevor eine Steuerungsoperation versendet wird, wenn die Common Data Class DPC (double point control) ist. Der Service-Parameter Check wird ignoriert, wenn er vom Objekt nicht unterstützt wird.

Beispielskript zum Generieren einer oper-Struktur wenn ctlval nicht vom Typ BOOLEAN ist:

dyn_string dpeList = makeDynString();
dyn_string dpeValue = makeDynString();
string sValue; 
bool bValue;
uint iValue;
int sIntValue;
                                 
//As add ref:ied1.IED1LogicalDevice1/GGIO1$CO$SPCSO1$Oper$ctlVal
dynAppend(dpeList, "System1:Bool_Testing.Oper.ctlVal:_original.._value"); 
dpGet("System1:Bool_Testing.Oper.ctlVal:_original.._value", bValue);
//Check "bValue" whether it is TRUE or FALSE.. If TRUE, write bValue = FALSE and vice versa..
bValue = TRUE;
dynAppend(dpeValue, bValue);
                                 
//As add ref: ied1.IED1LogicalDevice1/GGIO1$CO$SPCSO1$Oper$ctlNum
dynAppend(dpeList, "System1:Bool_Testing.Oper.ctlNum:_original.._value");
dpGet("System1:Bool_Testing.Oper.ctlNum:_original.._value", iValue);
//Increment iValue with 1. If iValue reaches 255, reset iValue to 0(zero)
iValue = 2;
dynAppend(dpeValue, iValue);
                                 
//As add ref: ied1.IED1LogicalDevice1/GGIO1$CO$SPCSO1$Oper$T
dynAppend(dpeList, "System1:Bool_Testing.Oper.T:_original.._value");
//Write system Timestamp
sValue = getCurrentTime();
dynAppend(dpeValue, sValue);
                                 
//As add ref: ied1.IED1LogicalDevice1/GGIO1$CO$SPCSO1$Oper$Test
dynAppend(dpeList,
"System1:Bool_Testing.Oper.Test:_original.._value");
dpGet("System1:Bool_Testing.Oper.Test:_original.._value", bValue);
//Value shall be TRUE or FALSE.
bValue = FALSE;
dynAppend(dpeValue, bValue);
                                 
//As add ref: ied1.IED1LogicalDevice1/GGIO1$CO$SPCSO1$Oper$Check
dynAppend(dpeList,
"System1:Bool_Testing.Oper.Check:_original.._value");
dpGet("System1:Bool_Testing.Oper.Check:_original.._value", sValue);
/* Values shall be
sValue = 0600 (Equivalent to Enum string – “No-check”)
sValue = 0640 (Equivalent to Enum string – “synchrocheck”)
sValue = 0680 (Equivalent to Enum string – “interlocking-check”)
sValue = 06C0 (Equivalent to Enum string – “both”) */
sValue = 0640;
dynAppend(dpeValue, sValue);
                                 
//As add ref: ied1.IED1LogicalDevice1/GGIO1$CO$SPCSO1$Oper$origin$orCat
dynAppend(dpeList, "System1:Bool_Testing.Oper.origin.orCat:_original.._value");
                                
dpGet("System1:Bool_Testing.Oper.origin.orCat:_original.._value", sIntValue);
// Default value shall be 2.. Range is 0 to 8 according to the Enum structure.
sIntValue = 2;
dynAppend(dpeValue, sIntValue);
                                 
//As add ref: ied1.IED1LogicalDevice1/GGIO1$CO$SPCSO1$Oper$origin$orldent
dynAppend(dpeList, "System1:Bool_Testing.Oper.origin.orldent:_original.._value");
                                
dpGet("System1:Bool_Testing.Oper.origin.orldent:_original.._value", sValue);
//sValue shall be Octet String.
sValue = "abcdef";
dynAppend(dpeValue, sValue); 
                                 
//Writing values to the device
dpSet(dpeList, dpeValue); 
Anmerkung:

Die Richtung der “Oper”, “SBOw” und “Cancel” DPE ist entweder “Output” oder “In/Out”.