Automatische Code-Erzeugung

Automatische Code-Erzeugung 1:

Automatische SPS Code Generierung

Der von dem TwinCAT Telecontrol Configurator erzeugte Code ist lediglich ein Anwendungsbeispiel, welches auch von Version zu Version angepasst werden kann. Um mit den Funktionsbausteinen der IEC 61850 eine funktionsfähige Applikation zu realisieren, sind mehrere Wege möglich.

Die automatische SPS-Code-Erzeugung aus dem TwinCAT Telecontrol Configurator erfolgt über das TwinCAT Automation Interface.
1. Durch die Betätigung des Buttons Create PLC Project in der Toolbar(a) oder im Tools-Menü des Konfigurators(b) öffnet sich der Deploy TwinCAT Telecontrol-Dialog.
Automatische Code-Erzeugung 2:
2. Im Tab Telecontrol haben Sie die Möglichkeit, zwischen Client- und Serverkonfiguration zu wählen ( Project Type). Falls GOOSE Control Blocks im zu generierenden Projekt vorhanden sind, so wird auch automatisch der zugehörige GOOSE Typ ausgewählt.
Automatische Code-Erzeugung 3:
3. Im Tab Solution wählen Sie einen Pfad aus ( Solution Path) und vergeben die Namen für Solution, XAE-Projekt und SPS-Projekt. Hierbei können Sie entweder eine neue Solution erstellen oder die Änderungen mit Hilfe des TwinCAT Project Compare-Tools in eine bestehende Solution einbinden. Wählen Sie hierzu zunächst die Option Merge to existing Project und danach eine bestehende SLN-Datei mit dem nebenstehenden Button „“aus.
Unter Project data structure können Sie zusätzlich auswählen, ob Unterordner (Create sub folders)generiert werden sollen. Standardmäßig werden diese generiert, um in der Ordnerhierarchie das konfigurierte Datenmodell abzubilden.
Wenn Sie längere Namen für die Komponenten des Datenmodells verwenden, kann es notwendig sein, keine Unterordner zu generieren, um die maximale Pfadlänge nicht zu überschreiten.
Automatische Code-Erzeugung 4:
4. Im Tab IDE haben Sie die Möglichkeit, eine Entwicklungsumgebung ihrer Wahl zur SPS-Code-Generierung zu nutzen (Target IDE Version). Voraussetzung hierfür ist eine vorhandene TwinCAT-Integration in der Entwicklungsumgebung.
Zudem können Sie einstellen, ob die Entwicklungsumgebung nach abgeschlossener SPS-Code-Generierung geöffnet bleiben soll ( Keep IDE open) und ob die Entwicklungsumgebung während der SPS-Code-Generierung sichtbar sein soll (Show IDE during code generation).
Automatische Code-Erzeugung 5:
5. Das letzte, abschließende Tab Summary bietet Kurzübersicht der getätigten Einstellungen.
Die SPS-Code-Generierung wird gestartet, sobald Sie den Button Deploy drücken.
Automatische Code-Erzeugung 6:
Während der SPS-Code-Generierung, wird der Fortschritt im sich automatisch öffnenden Log-Fenster angezeigt.
6. Um genauere Informationen zu den einzelnen Kategorien, wie IDE oder TwinCAT PLC Code Generation zu erhalten, können Sie die jeweilige Kategorie anklicken.
Mit der Bring to Front-Option bleibt das Log-Fenster dauerhaft im Vordergrund.
Automatische Code-Erzeugung 7:
Nach der abgeschlossenen Generierung ist eine neue Instanz der ausgewählten Entwicklungsumgebung geöffnet. Der SPS-Code ist vollkommen transparent, sodass die Applikation bestmöglich geschrieben werden kann.
Automatische Code-Erzeugung 8:
Unabhängig davon, ob SPS-Code für einen IEC 61850 Client oder Server generiert wird, bildet die globale Variablenliste TcTelecontrol den Einstiegspunkt.
VAR_GLOBAL
    ipCreator         : I_AcsiCodeCreatorClass := GVL_AcsiVars.Creator.SetCodeRev(codeRev:=2).SetGuiVer(major:=1, minor:=0, build:=93, revision:=10);
    fb[IEDName]       : FB_IED_[IEDName];
    fb[IEDName]Client : FB_[IEDName]Client := (fbConnection:=(ipIED:=fb[IEDName],settings:=(sRemoteHost:='127.0.0.1')));
    fb[IEDName]Gse    : FB_[IEDName]Gse := (fbAdapter:=(ipIED:=fb[IEDName], settings:=(sMulticastAddr:='01-0C-CD-01-00-00', eDispatchMode:=E_GseDispatchMode.NonPromiscuous)));
END_VAR

Neben dem Datenmodell finden Sie dort z. B. für den Client den FB_[IEDName]Client. Dies ist ein Applikationsbaustein, der den FB_iec61850ClientClass und die komplette Kommunikation kapselt. Hier ist es besonders wichtig die IP-Adresse des Servers anzugeben, was Sie auch schon im Konfigurator tun können.

Generieren Sie einen Server, sieht die globale Variablenliste etwas anders aus.

VAR_GLOBAL
    ipCreator                 : I_AcsiCodeCreatorClass := GVL_AcsiVars.Creator.SetCodeRev(codeRev:=2).SetGuiVer(major:=1, minor:=1, build:=94, revision:=1);
    fb[IEDName]               : FB_IED_[IEDName];
    fb[IEDName]Server         : FB_iec61850ServerClass := (ipIED:=fb[IEDName], settings:=(bEnable:=TRUE, sLocalHost:='127.0.0.1'));
    fb[IEDName]ServerSession1 : FB_[IEDName]ServerSession := (fbConnection:=(ipServer:=fb[IEDName]Server, settings:=(bEnable:=TRUE)));
    fb[IEDName]Gse            : FB_[IEDName]Gse := (fbAdapter:=(ipIED:=fb[IEDName], settings:=(sMulticastAddr:='01-0C-CD-01-00-00', eDispatchMode:=E_GseDispatchMode.NonPromiscuous)));
END_VAR

Der FB_iec61850ServerClass und die für die Kommunikation nötigen Sessions sind nicht in einem Applikationsbaustein gekapselt, da hier auch mehrere Sessions parallel für unterschiedliche Clients angelegt werden können.