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

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, ... .

Zugriff auf, Erstellung von und Umgang mit SPS-Bibliotheken und -Platzhaltern 1:

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:

Der Anzeigename einer Bibliothek kann im Eigenschaftenfenster der Bibliothek oder des Platzhalters bestimmt werden:

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

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:

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")