Zugriff auf, Erstellung von und Umgang mit SPS-Bibliotheken und -Platzhaltern
In diesem Kapitel wird der Zugriff auf und der Umgang mit SPS-Bibliotheken und SPS-Platzhaltern ausführlich erläutert. Die folgende Liste enthält alle Kapitel dieses Artikels:
- Allgemeine Informationen über SPS-Bibliotheken und -Platzhalter
- Durch Referenzen navigieren
- Referenzen hinzufügen
- Referenzen entfernen
- Verfügbare Bibliotheken durchsuchen
- Platzhalterversion einfrieren
- Mit Repositories arbeiten
Allgemeine Informationen über SPS-Bibliotheken und -Platzhalter
In TwinCAT 3 gibt es zwei Bibliotheks-Objekttypen: Bibliotheken und Platzhalter. Weitere Informationen über beide Typen finden Sie in der TwinCAT 3-Dokumentation über Bibliotheksverwaltung.
In einem TwinCAT 3 SPS-Projekt werden die Referenzen zu Bibliotheken und Platzhaltern als untergeordnete Tree Items zum Referenzenknoten unterhalb des entsprechenden SPS-Projekts hinzugefügt. Bei Auswahl der Vorlage "Standard PLC Project" werden dem Projekt standardmäßig bestimmte Bibliotheken und Platzhalter hinzugefügt, z.B. Tc2_Standard, Tc2_System, ... .
Bei Verwendung des Automation Interface können Sie mit Hilfe der Methode ITcSysManager::LookupTreeItem() einfach durch den Referenzenknoten navigieren.
Code-Ausschnitt (C#):
ITcSmTreeItem references = systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References");
Code-Ausschnitt (Powershell):
$references = $systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References")
Damit Sie dieses Objekt korrekt handhaben können, muss es einer der ITcPlcLibraryManager-Schnittstelle entsprechenden Typumwandlung unterzogen werden.
ITcPlcLibraryManager libManager = (ITcPlcLibraryManager) references;
Achten Sie darauf, dass dieser Schritt in Windows Powershell nicht erforderlich ist.
Durch Referenzen navigieren
Sie können alle Referenzen durchlaufen unter Verwendung der ITcPlcLibraryManager::References Eigenschaft. Diese Eigenschaft gibt eine ITcPlcReferences-Sammlung zurück von entweder Bibliotheksobjekten (dargestellt durch ITcPlcLibrary) oder Platzhalterobjekten (dargestellt durch ITcPlcPlaceholderRef).
Code-Ausschnitt (C#):
ITcSmTreeItem references = systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References");
ITcPlcLibraryManager libManager = (ITcPlcLibraryManager) references;
foreach (ITcPlcLibRef libRef in libManager.References)
{
if (libRef is ITcPlcLibrary)
{
ITcPlcLibrary library = (ITcPlcLibrary) libRef;
// do something
}
else if (libRef is ITcPlcPlaceholderRef)
{
ITcPlcPlaceholderRef placeholder = (ITcPlcPlaceholderRef) libRef;
// do something
}
}
Das Objekt libRef; das für die Iteration verwendet wird, ist vom Typ ITcPlcLibRef. Dies ist eine gemeinsame Basisklasse für ITcPlcLibrary und ITcPlcPlaceholderRef-Objekte. Um mit einer dieser spezifischen Klassen arbeiten zu können, müssen wir das Objekt einer entsprechenden Typumwandlung unterziehen, wie oben im Code-Ausschnitt gezeigt.
Code-Ausschnitt (Powershell):
$references = $systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References")
ForEach( $libRef in $references )
{
$libRef.LanguageIndependentName
}
Referenzen hinzufügen
Die Klasse ITcPlcLibraryManager bietet zwei Methoden, mit denen einem SPS-Projekt eine Bibliotheks- oder Platzhalterreferenz hinzugefügt werden kann: AddLibrary() und AddPlaceholder().
Eine Bibliothek kann auf zwei verschiedene Weisen hinzugefügt werden:
- Entweder mittels Angabe des Namens, der Version und des Verteilers der Bibliothek
- oder mittels des Anzeigenamens der Bibliothek
- oder (im Falle eines Platzhalters) mit dem Platzhalternamen.
Der Anzeigename einer Bibliothek kann im Eigenschaftenfenster der Bibliothek oder des Platzhalters bestimmt werden:
Bibliotheken hinzufügen:
Code-Ausschnitt (C#):
ITcSmTreeItem references = systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References");
ITcPlcLibraryManager libManager = (ITcPlcLibraryManager) references;
libManager.AddLibrary("Tc2_MDP", "*", "Beckhoff Automation GmbH"); // name, version, distribution list
libManager.AddLibrary("Tc2_Math, * (Beckhoff Automation GmbH)"); //monitored name
Code-Ausschnitt (Powershell):
$references = $systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References")
$references.AddLibrary("Tc2_MDP", "*", "Beckhoff Automation GmbH")
$references.AddLibrary("Tc2_Math, * (Beckhoff Automation GmbH)")
Ein Platzhalter kann auf zwei verschiedene Weisen hinzugefügt werden:
- Entweder mittels Angabe des Platzhalternamens, des Namens, der Version und des Verteilers der Bibliothek
- oder unter Verwendung des Platzhalternamens, wenn der Platzhalter bereits existiert
Platzhalter hinzufügen:
Code-Ausschnitt (C#):
ITcSmTreeItem references = systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References");
ITcPlcLibraryManager libManager = (ITcPlcLibraryManager) references;
libManager.AddPlaceholder("Tc2_MC2_Camming"); // add existing place holder with name
libManager.AddPlaceholder("Placeholder_NC", "Tc2_NC", "*", "Beckhoff Automation GmbH");
Code-Ausschnitt (Powershell):
$references = $systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References")
$references.AddPlaceholder("Tc2_MC2_Camming")
$references.AddPlaceholder("Placeholder_NC", "Tc2_NC", "*", "Beckhoff Automation GmbH")
Bitte beachten: Beim Hinzufügen eines neuen Platzhalters bestimmen die Parameter der AddPlaceholder()-Methode dessen standardmäßige Auflösung. Um die effektive Auflösung festzulegen, einfach die Methode ITcPlcLibraryManager::SetEffectiveResoltion() verwenden.
Referenzen entfernen
Um eine Referenz zu entfernen, einfach die Methode ITcPlcLibraryManager::RemoveReference() verwenden. Weil diese Methode ITcPlcLibRef-Elemente bearbeitet (welche die Basisklasse für ITcPlcLibrary und ITcPlcPlaceholderRef-Objekte ist), können Sie diese Methode für beide, Bibliotheks- und Platzhalterreferenzen verwenden.
Bibliotheksreferenzen können entweder unter Angabe ihres Namens, ihrer Version und ihres Verteilers oder unter Angabe ihres Anzeigenamens entfernt werden.
Platzhalterreferenzen können unter Angabe ihres Platzhalternamens entfernt werden.
Code-Ausschnitt (C#):
ITcSmTreeItem references = systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References");
ITcPlcLibraryManager libManager = (ITcPlcLibraryManager) references;
libManager.RemoveReference("Tc2_Math"); // delete library
libManager.RemoveReference("Placeholder_NC"); // delete a placeholder
Code-Ausschnitt (Powershell):
$references = $systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References")
$references.RemoveReference("Tc2_Math")
$references.RemoveReference("Placeholder_NC")
Verfügbare Bibliotheken durchsuchen
Um das System nach allen verfügbaren SPS-Bibliotheken zu durchsuchen, benutzen Sie einfach die Methode ITcPlcLibraryManager::ScanLibraries(). Diese Methode gibt eine ITcPlcReferences-Sammlung von Bibliotheken zurück (Typ ITcPlcLibrary).
Code-Ausschnitt (C#):
ITcSmTreeItem references =
systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References");
ITcPlcLibraryManager libManager = (ITcPlcLibraryManager) references;
ITcPlcReferences libraries = libManager.ScanLibraries();
foreach(ITcPlcLibrary library in libraries)
{
// do something
}
Code-Ausschnitt (Powershell):
$references = $systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References")
$libraries = $references.ScanLibraries()
ForEach( $lib in $libraries )
{
$lib.Name
}
Platzhalterversion einfrieren
Es ist möglich, die verwendete Version eines Platzhalters auf eine bestimmte Version einzufrieren. Dies kann mit der Methode ITcPlcLibraryManager::FreezePlaceholder() erzielt werden. Diese Methode wird auf ein Objekt aufgerufen, das auf den Referenzenknoten zeigt.
Code-Ausschnitt (C#):
ITcSmTreeItem references = systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References");
ITcPlcLibraryManager libManager = (ITcPlcLibraryManager) references;
libManager.FreezePlaceholder(); // freezes the version of all place holders
libManager.FreezePlaceholder("Placeholder_NC"); // freezes the version of a specific place holder
Code-Ausschnitt (Powershell):
$references = $systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References")
$references.FreezePlaceholder()
$references.FreezePlaceholder("Placeholder_NC")
Bitte beachten: Die Version wird mit der effektiven Auflösung eingefroren. Wenn die effektive Auflösung auf "*" zeigt, dann wird die neueste Version im System verwendet.
Mit Repositories arbeiten
Das Automation Interface bietet eine Methode für den Umgang mit SPS-Bibliotheks-Repositories. Ein standardmäßiges Repository ist Teil einer jeden TwinCAT-Installierung. Um zusätzliche Repositories zu erstellen, können Sie die Methode ITcPlcLibraryManager::InsertRepository() verwenden.
Code-Ausschnitt (C#):
ITcSmTreeItem references = systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References");
ITcPlcLibraryManager libManager = (ITcPlcLibraryManager) references;
libManager.InsertRepository("TestRepository", @"C:\Temp", 0);
Code-Ausschnitt (Powershell):
$references = $systemManager.LookupTreeItem("TIPC^Untitled1^Untitled1 Project^References")
$references.InsertRepository("TestRepository", "C:\Temp", 0)
Beim Installieren einer neuen Bibliothek in das System, muss die Bibliothek Teil eines Repository sein. Diese Einfügung kann mit Hilfe der Methode ITcPlcLibraryManager::InstallLibrary() vorgenommen werden.
Code-Ausschnitt (C#):
libManager.InstallLibrary("TestRepository", @"C:\SomeFolder\TcTestLibrary.library", false);
Code-Ausschnitt (Powershell):
$references.InstallLibrary("TestRepository", "C:\SomeFolder\TcTestLibrary.library", $false)
Um eine Bibliothek aus dem Repository zu entfernen, verwenden Sie die Methode ITcPlcLibraryManager::UninstallLibrary().
Code-Ausschnitt (C#):
libManager.UninstallLibrary("TestRepository", "Tc2_MDP", "*", "Beckhoff Automation GmbH");
Code-Ausschnitt (Powershell):
$references.UninstallLibrary("TestRepository", "Tc2_MDP", "*", "Beckhoff Automation GmbH")
Um ein Repository zu entfernen, verwenden Sie die Methode ITcPlcLibraryManager::RemoveRepository().
Code-Ausschnitt (C#):
libManager.RemoveRepository("TestRepository");
Code-Ausschnitt (Powershell):
$references.RemoveRepository("TestRepository")