FB_IEC61850Server
Mit diesem Funktionsbaustein kann in der TwinCAT SPS ein Server nach der IEC 61850 Norm realisiert werden. Über die Eingangsvariablen appPara und srvPara werden die Verbindungsparameter wie IP-Adresse und die applikationsspezifischen Parameter eingestellt.
Der Server-Baustein besitzt zwei Aktionen:
- A_INIT; Beim Aufruf dieser Aktion wechselt der Server in den Zustand INITIALIZING. In dieser Phase wird die interne Datenbank initialisiert (die Instanzen der gemeinsamen Datenklassen, Attribute, logische Knoten usw. werden erzeugt). Nach der Initialisierung der internen Datenbank befindet sich der Server im PREOP-Zustand. In diesem Zustand können weitere applikationsabhängige Datenklassen in der Datenbank generiert werden z.B. Datasets.
- A_OPERATE; Durch den Aufruf dieser Aktion wechselt der Server zum Zustand: OPERATIONAL. In diesem Zustand kann der Server eine Verbindung zum Client aufbauen und aktiv Daten austauschen.
VAR_INPUT
VAR_INPUT
appPara : ST_MMS_ApplicationPara; (* Application parameter *)
srvPara : ST_MMS_ProtocolPara; (* Communication parameter *)
pLD : DWORD := 0; (* Pointer to logical device node *)
cbLD : UDINT := 0; (* Byte size of logical device node *)
END_VAR
appPara: Applikationsspezifische Konfigurationsparameter (MMS- und IEC 61850-Parameter).
srvPara: Parameter die hauptsächlich die Konfiguration des Kommunikationsstacks unterhalb von MMS betreffen.
pLD: Pointer (Adresse) auf die Instanz der Struktur mit der Modellbeschreibung des logischen Gerätes (LD). Die Adresse kann mit dem ADR-Operator ermittelt werden.
cbLD: Bytegröße der Struktur mit der Modellbeschreibung des logischen Gerätes (LD). Die Bytegröße kann mit dem SIZEOF-Operator ermittelt werden.
VAR_OUTPUT
VAR_OUTPUT
system : ST_IED_System;
eState : E_IED_STATE;
END_VAR
system: System-Variable.
eState : Gerätestatus.
Beispiel:
Weitere Beispiele inklusive aller Sourcen finden Sie unter: Beispiele.
PROGRAM MAIN
VAR
bInit : BOOL := TRUE;
bOperate : BOOL := TRUE;
bServer : FB_IEC61850Server := ( srvPara := ( sHost := '127.0.0.1',(* change the IP-Address to meet your needs *)
debug := ( bError := TRUE, bLog := TRUE ) ) );(* Server instance *)
fbChange : FB_ACSI_ChangePresence;(* This function block changes the mandatory/optional presence parameter *)
Relay : ST_LD_Relay;(* Our logical device *)
END_VAR
IF bInit THEN
bInit := FALSE;
fbServer.appPara.bAccessCtrl := FALSE; (* TRUE = Use access control/authentication, FALSE = Don't use access control/authentication *)
(* first user *)
fbServer.appPara.accessCtrl[1].bAuthentication := TRUE;(* TRUE = access control/authentication for this user enabled, FALSE = Disabled *)
fbServer.appPara.accessCtrl[1].authentMechanism := '2.2.3.1';
fbServer.appPara.accessCtrl[1].authentPassword := 'PASSWORD';
(* second user *)
fbServer.appPara.accessCtrl[2].bAuthentication := TRUE;
fbServer.appPara.accessCtrl[2].authentMechanism := '2.2.3.1';
fbServer.appPara.accessCtrl[2].authentPassword := 'OTHER';
(* at this point you can change the presence of some attributes... *)
(* change presence of some attributes *)
(* fbChange( pDO := ADR( Relay.LLN0.Loc.subEna ), cbDO := SIZEOF( Relay.LLN0.Loc.subEna ), bPresence := TRUE );*)(* change to mandatory *)
(* fbChange( pDO := ADR( Relay.LLN0.Loc.t ), cbDO := SIZEOF( Relay.LLN0.Loc.t ), bPresence := FALSE );*)(* change to optional *)
fbServer.A_INIT( pLD := ADR( Relay ), cbLD := SIZEOF( Relay ) );
END_IF
IF bOperate THEN(* switch to oparating state *)
IF fbServer.eState = eIED_STATE_PREOP THEN
bOperate := FALSE;
(* at this point you can configure your data sets...*)
fbServer.A_OPERATE( pLD := ADR( Relay ), cbLD := SIZEOF( Relay ) );
END_IF
END_IF
fbServer( pLD := ADR( Relay ), cbLD := SIZEOF( Relay ) );
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken |
---|---|---|
TwinCAT v2.10.0 Build >= 1340 | PC oder CX (X86, ARM) | TcIEC61850Server.Lib |