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
- Erstellung von und Umgang mit SPS-Projekten
- Bestehende SPS-Projekte öffnen
- Verschachtelte (nested) Projekte und Projektinstanzen
- Das SPS-Projekt als Bibliothek speichern
- Umgang mit den Online-Funktionalitäten (Login, StartPlc, StopPlc)
- Bootprojektoptionen einstellen
- Projekt und/oder Lösung als Archiv speichern
- Aufruf CheckAllObjects()
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)
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:
- 0: Projekt zum Lösungsverzeichnis kopieren
- 1: Projekt zum Lösungsverzeichnis verschieben
- 2: Original-Projektspeicherort verwenden (falls verwendet, verwenden Sie bitte
""
als Projektnamensparameter)
Grundsätzlich repräsentieren diese Werte die Funktionalitäten (Ja, Nein, Abbrechen) von der folgenden MessageBox in TwinCAT XAE:
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.
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)
}
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()