Zugriff auf, Erstellung von und Umgang mit SPS-Projekten

In diesem Kapitel wird die Erstellung von, der Zugriff auf und der Umgang mit SPS-Projekten ausführlich erklärt. Die folgende Liste enthält alle Kapitel dieses Artikels:

Allgemeine Informationen über SPS-Projekte

SPS-Projekte werden mit Hilfe ihrer sogenannten Projekt-Templates spezifiziert. Derzeit stellt TwinCAT zwei Templates zur Verfügung, die mittels einer Template-Datei im TwinCAT-Verzeichnis beschrieben sind. Die folgende Tabelle zeigt, welche SPS-Templates verfügbar sind, und die entsprechende Template-Datei:

Template-Name

Template-Datei

Standard PLC Template

C:\TwinCAT\3.x\Components\Plc\PlcTemplate\Plc Templates\Standard PLC Template.plcproj

Empty PLC Template

C:\TwinCAT\3.x\Components\Plc\PlcTemplate\Plc Templates\Empty PLC Template.plcproj

Erstellung von und Umgang mit SPS-Projekten

Um ein neues SPS-Projekt mit Hilfe des Automation Interface zu erstellen, müssen Sie zum SPS-Knoten navigieren und dann die CreateChild()-Methode mit der entsprechenden Vorlagendatei als Parameter ausführen.

Code-Ausschnitt (C#):

ITcSmTreeItem plc = systemManager.LookupTreeItem("TIPC");
ITcSmTreeItem newProject = plc.CreateChild("NameOfProject", 0, "", pathToTemplateFile);

Code-Ausschnitt (Powershell):

$plc = $systemManager.LookupTreeItem("TIPC")
$newProject = $plc.CreateChild("NameOfProject", 0, "", pathToTemplateFile)
Zugriff auf, Erstellung von und Umgang mit SPS-Projekten 1:

Bitte beachten

Stellen Sie bei der Verwendung von Standard-SPS-Vorlagen, wie sie von Beckhoff bereitgestellt werden, sicher, dass Sie nur den Vorlagennamen statt des gesamten Pfads, z. B. „Standard PLC Template“, verwenden.

Alle nachfolgenden Operationen, wie Erstellung von und Umgang mit POUs, sowie entsprechende Code-Eingabe werden in einem getrennten Artikel beschrieben.

Nachdem das SPS-Projekt erstellt ist, kann es weiter verwendet werden, indem es in die spezielle Schnittstelle ITcPlcIECProject umgewandelt wird, die mehr Funktionalitäten und den Zugriff auf die projektspezifischen Attribute gewährt:

Code-Ausschnitt (C#):

ITcSmTreeItem plcProject = systemManager.LookupTreeItem("TIPC^NameOfProject^NameOfProject Project");
ITcPlcIECProject iecProject = (ITcPlcIECProject) plcProject;

Code-Ausschnitt (Powershell):

$plcProject = $systemManager.LookupTreeItem("TIPC^NameOfProject^NameOfProject Project")

Das "iecProject"-Objekt kann jetzt dazu verwendet werden, um auf die Methoden der ITcPlcIECProject-Schnittstelle zuzugreifen, um z.B. das SPS-Projekt als eine SPS-Bibliothek abzuspeichern.

Bestehende SPS-Projekte öffnen

Zum Öffnen eines bestehenden SPS-Projekts mit Hilfe von Automation Interface, müssen Sie zum SPS-Knoten navigieren und dann die CreateChild()-Methode mit dem Pfad der entsprechenden SPS-Projektdatei als Parameter ausführen.

Sie können drei verschiedene Werte als SubType verwenden:

Grundsätzlich repräsentieren diese Werte die Funktionalitäten (Ja, Nein, Abbrechen) von der folgenden MessageBox in TwinCAT XAE:

Zugriff auf, Erstellung von und Umgang mit SPS-Projekten 2:

Anstelle der Vorlagendatei müssen Sie den Pfad zum SPS-Projekt (bzw. dessen plcproj Datei) verwenden, das hinzugefügt werden muss. Alternativ können Sie auch ein SPS-Projektarchiv (tpzip Datei) verwenden.

Code-Ausschnitt (C#):

ITcSmTreeItem plc = systemManager.LookupTreeItem("TIPC");
ITcSmTreeItem newProject = plc.CreateChild("NameOfProject", 1, "", pathToProjectOrTpzipFile);

Code-Ausschnitt (Powershell):

$plc = $systemManager.LookupTreeItem("TIPC")
$newProject = $plc.CreateChild("NameOfProject", 1, "", pathToProjectOrTpzipFile)

TwinCAT SPS-Projekte bestehen aus zwei verschiedenen Bereichen – dem sogenannten „nested Projekt“ und der Projektinstanz. Das nested Projekt (Tree Item-Subtyp 56) enthält den Quellcode des SPS-Programms, wohingegen die Projektinstanz die deklarierten Ein- und Ausgangsvariablen des SPS-Programms enthält.

Zugriff auf, Erstellung von und Umgang mit SPS-Projekten 3:

Der folgende Code-Ausschnitt zeigt einen gemeinsamen Weg, um im Allgemeinen auf beide Tree Items zuzugreifen, wenn der vollständige Pfadname nicht bekannt ist.

Code-Ausschnitt (C#):

ITcSmTreeItem plc = sysManager.LookupTreeItem("TIPC");
foreach (ITcSmTreeItem plcProject in plc)
{
ITcProjectRoot projectRoot = (ITcProjectRoot)plcProject;
ITcSmTreeItem nestedProject = projectRoot.NestedProject;
ITcSmTreeItem projectInstance = plcProject.get_Child(1);
}

Code-Ausschnitt (Powershell):

$plc = $sysManager.LookupTreeItem("TIPC")
ForEach( $plcProject in $plc)
{
    $nestedProject = $plcProject.NestedProject
    $projectInstance = $plcProject.get_Child(1)
}
Zugriff auf, Erstellung von und Umgang mit SPS-Projekten 4:

Bitte beachten

Ein Minimum TwinCAT 3.1 Build 4018 ist erforderlich, um auf die Schnittstelle ITcProjectRoot zuzugreifen.

Das SPS-Projekt als Bibliothek speichern

Um ein SPS-Projekt als eine SPS-Bibliothek abzuspeichern, müssen Sie die Methode ITcPlcIECProject::SaveAsLibrary() verwenden.

Code-Ausschnitt (C#):

iecProject.SaveAsLibrary(pathToLibraryFile, false); 

Code-Ausschnitt (Powershell):

$plcProject.SaveAsLibrary(pathToLibraryFile, $false)

Der zweite Parameter bestimmt, ob die Bibliothek, nachdem sie als Datei gespeichert wurde, in das standardmäßige Repository installiert wird.

Umgang mit den Online-Funktionalitäten (Login, StartPlc, StopPlc, ResetCold, ResetOrigin)

Erforderliche Version: TwinCAT 3.1 Build 4010 und höher

Das Automation Interface bietet Ihnen zudem Online-SPS-Funktionen, um sich z.B. in eine SPS-Laufzeit einzuloggen und das SPS-Programm zu starten/stoppen/zurückzusetzen. Auf diese Features kann man über die ITcSmTreeItem::ProduceXml() und ITcSmTreeItem::ConsumeXml() Methoden zugreifen. Diese Funktionen können auf einen ITcPlcIECProject-Knoten angewendet werden.

XML-Struktur:

<TreeItem>
<IECProjectDef>
<OnlineSettings>
<Commands>
<LoginCmd>false</LoginCmd>
<LogoutCmd>false</LogoutCmd>
<StartCmd>false</StartCmd>
<StopCmd>false</StopCmd>
</Commands>
</OnlineSettings>
</IECProjectDef>
</TreeItem>

Code-Ausschnitt (C#):

string xml = "<TreeItem><IECProjectDef><OnlineSettings><Commands><LoginCmd>true</LoginCmd></Commands></OnlineSettings></IECProjectDef></TreeItem>";
ITcSmTreeItem plcProject = systemManager.LookupTreeItem("TIPC^NameOfProject^NameOfProject Project");
plcProject.ConsumeXml(xml);

Code-Ausschnitt (Powershell):

Die folgende Tabelle beschreibt jeden XML-Knoten im Einzelnen:

XML

Beschreibung

LoginCmd

true = in SPS-Laufzeit einloggen

LogoutCmd

true = aus SPS-Laufzeit ausloggen

StartCmd

true = Starten des aktuell in die Laufzeit geladenen SPS-Programms

StopCmd

true = Stoppen des aktuell in die Laufzeit geladenen SPS-Programms

Bitte beachten: Um Befehle wie ResetOriginCmd benutzen zu können, müssen Sie vorher einen LoginCmd ausführen – ähnlich wie TwinCAT XAE.

Bootprojektoptionen einstellen

Der folgende Code-Ausschnitt zeigt, wie die ITcPlcProject Schnittstelle verwendet wird, um Bootprojektoptionen für ein SPS-Projekt einzustellen.

Code-Ausschnitt (C#):

ITcSmTreeItem plcProjectRoot = systemManager.LookupTreeItem("TIPC^PlcGenerated");
ITcPlcProject plcProjectRootIec = (ITcPlcProject) plcProjectRoot;
plcProjectRootIec.BootProjectAutostart = true;
plcProjectRootIec.GenerateBootProject(true);

Code-Ausschnitt (Powershell):

$plcProject = $systemManager.LookupTreeItem("TIPC^PlcGenerated")
$plcProject.BootProjectAutostart = $true
$plcProject.GenerateBootProject($true)

Projekt und/oder Lösung als Archiv speichern

Zum Speichern der gesamten TwinCAT Lösung in einer ZIP-kompatiblen Archivdatei (*.tszip) kann die ITcSysManager9 Schnittstelle verwendet werden.

Code-Ausschnitt (C#):

ITcSysManager9 newSysMan = (ITcSysManager9)systemManager;
newSysMan.SaveAsArchive(@"C:\test.tszip");

Code-Ausschnitt (Powershell):

$systemManager.SaveAsArchive("C:\test.tszip")

Zum erneuten Laden einer zuvor gespeicherten TSZIP-Datei kann die DTE Methode AddFromTemplate() verwendet werden.

Code-Ausschnitt (C#):

dte.Solution.AddFromTemplate("C:\test.tszip",@"C:\tmp","CreatedFromTemplate");

Code-Ausschnitt (Powershell):

$dte.Solution.AddFromTemplate("C:\test.tszip","C:\tmp","CreatedFromTemplate")

Zum Speichern eines spezifischen SPS-Projekts in einer ZIP-kompatiblen Archivdatei (*.tpzip) kann die Methode ITcSmTreeItem::ExportChild() verwendet werden.

Code-Ausschnitt (C#):

ITcSmTreeItem plc= sysManager.LookupTreeItem("TIPC");
plc.ExportChild("PlcProject",@"C:\PlcTemplate.tpzip");

Code-Ausschnitt (Powershell):

$plc = $systemManager.LookupTreeItem("TIPC")
$plc.ExportChild("PlcProject", "C:\PlcTemplate.tpzip")

Zum erneuten Laden einer zuvor gespeicherten TSZIP-Datei kann die ITcSmTreeItem::CreateChild() Methode verwendet werden.

Code-Ausschnitt (C#):

plcConfig.CreateChild("PlcFromTemplate", 0, null, @"C:\PlcTemplate.tpzip");

Code-Ausschnitt (Powershell):

$plc.CreateChild("plcFromTemplate", 0, $null, "C:\PlcTemplate.tpzip")

Aufruf CheckAllObjects()

Zum Aufruf der CheckAllObjects() Methode auf einem Nested SPS-Projekt können Sie die entsprechende Methode verwenden, die in der Schnittstelle ITcPlcIECProject2 verfügbar ist.

Code-Ausschnitt (C#):

ITcSmTreeItem plcProject = systemManager.LookupTreeItem("TIPC^NameOfProject^NameOfProject Project");
ITcPlcIECProject2 iecProject = (ITcPlcIECProject2) plcProject;
iecProject.CheckAllObjects();

Code-Ausschnitt (Powershell):

$plcProject = $systemManager.LookupTreeItem("TIPC^NameOfProject^NameOfProject Project")
$plcProject.CheckAllObjects()