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

Standardmäßiges SPS- Template

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

Leeres SPS- 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-SPS-Vorlage“, 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()