Voraussetzung
-
TIA Portal Openness ist mit dem TIA Portal verbunden.
Siehe Verbindung zum TIA Portal aufbauen -
Ein Projekt ist geöffnet.
Siehe Projekt öffnen
Einleitung
Sie können mit TIA Portal Openness aus dem Quelldokument spezifische Bibliothekstypen in einem TIA Portal-Projekt anlegen.
Die Quelle liefert Ihnen die Verzeichnisinformationen, die die Dateien (SimaticML, WinCCML, S7DCL, SCL, STL, UDT), den Dateinamen und die Zielumgebung enthalten.
Die API ist in der Projektbibliothek verfügbar und wird über die globale Bibliothek nicht unterstützt. Wird die API über die globale Bibliothek verwendet, wird eine Engineering-Ausnahme ausgelöst.
Methode, Parameter und Enum
Um erfolgreich einen Bibliothekstyp aus dem Dokument zu erstellen, können Sie die Methode CreateFromDocuments() verwenden, die folgende Parameter akzeptiert:
|
Parametername |
Datentyp |
Obligatorisch |
Beschreibung |
|---|---|---|---|
|
dirInfo |
System.IO.DirectoryInfo |
Ja |
Verzeichnisinformationen des Dokuments. |
|
fileNameWithoutExtension |
System.String |
Ja |
Dateiname des Dokuments ohne Erweiterung. |
|
targetEnvironment |
Siemens.Engineering.Library.IEngineeringObject |
Nein |
Die Zielumgebung kann eine PlcBlockGroup oder eine PlcTypeGroup sein, wobei die Instanz im Projekt erstellt wird (gilt nur für Step7-Typen). |
|
createOptions |
Siemens.Engineering.Library.Types.CreateOptions |
Ja |
Optionen für Sie, um während der Versionserstellung zu entscheiden, ob eine bestehende Version im Zustand "in Bearbeitung" basierend auf der Versionsnummer der Bibliotheksmetadatei überschrieben werden muss. Die Verwendung von CreateOptions.None löst eine Ausnahme aus, wenn bereits eine Version im Zustand "in Bearbeitung" existiert. |
|
libraryImportOption1 |
Siemens.Engineering.Library.LibraryImportOptions |
Ja |
Der Enumerationswert wird verwendet, um kulturspezifische Inhalte zu importieren. Der Zweck dieses Enumerationswerts ist, die Projektsprachen zu steuern, nicht die Bibliothekskommentare. WinCC verwendet nicht das Instanzenkonzept, so dass es Projektsprachen beim Importieren in die Bibliothek nicht ändert. In der Bibliothek sind die TypeObject- oder VersionObject-Kommentare nicht mehrsprachig. |
Für die Definition des Enumerationswerts libraryImportOption und der Rückgabetypen der Methode CreateFromDocuments() siehe Abschnitt Neuen Typ aus dem Dokument anlegen -> Methode, Parameter und Enum.
Ausnahme
In den folgenden Fällen wird eine EngineeringTargetInvocation ausgelöst:
-
Wenn einer der obligatorischen Parameter nicht übertragen wird.
-
Wenn das Dokument nicht von einem Client verarbeitet wird
-
Wenn ein Verzeichnis mehrere Dateien mit unterstützten Erweiterungen enthält, die dem angegebenen Dateinamen entsprechen, wird keine neue Version erstellt und es wird eine Ausnahme ausgelöst. Beispiel: Der angegebene Dateiname ist 'Block_1'.
Das Verzeichnis enthält 'Block_1.xml', 'Block_1.s7dcl'. -
Die neu erstellte Typenversion muss die "MinimumTargetDeviceVersion" basierend auf der Version der exportierten Bibliotheksmetadatei aufweisen. Dies gilt nur für von WinCC Unified MTDV unterstützte Typen. Das folgende Beispiel ist ein Muster einer Bibliotheksmetadatei:
|
{ |
Programmcode
Um einen Bibliothekstyp aus einem Dokument für die HMI zu erstellen, ändern Sie folgenden Programmcode:
|
private void CreateLibraryTypeFromDocumentForHMI() { using (TiaPortal portal = new TiaPortal(TiaPortalMode.WithoutUserInterface)) { Console.WriteLine("TIA portal connection is successful"); Project project = portal.Projects.Open(new System.IO.FileInfo(@"D:\Temp\Test\Project1_test2\Project1_test2.ap20")); DirectoryInfo importLocation = new DirectoryInfo(@"D:\Temp\Test"); const string fileName = "TestFile"; try { // Get library type LibraryType libraryType = GetLibraryType(); LibraryTypeVersionComposition versionComposition = type.Versions; VersionCreateTransferResults versionCreateTransferResult = versionComposition. CreateFromDocuments(directoryInfo, fileName, CreateOptions.Override,LibraryImportOptions.Override); if(versionCreateTransferResult.TransferResultState == TransferResultState.Success) { LbraryTypeVersion version = versionCreateTransferResult.CreatedVersion; Console.WriteLine("Version created successfully"); } else { Console.WriteLine("Version creation failed."); foreach (TransferResultMessageComposition transferResultMessage in versionCreateTransferResult.Messages) { Console.WriteLine(transferResultMessage.Message); } } project.Save(); project.Close(); } catch (EngineeringException e) { Console.WriteLine(e); } } private LibraryType GetLibraryType() { return project.ProjectLibrary.TypeFolder.Types[1]; } } |
Um einen spezifischen Bibliothekstyp aus einem Dokument für STEP7 zu erstellen, ändern Sie folgenden Programmcode:
|
private void CreateLibraryTypeFromDocumentForStep7() { using (TiaPortal portal = new TiaPortal(TiaPortalMode.WithoutUserInterface)) { Console.WriteLine("TIA portal connection is successful"); Project project = portal.Projects.Open (new System.IO.FileInfo(@"D:\Temp\Test\Project1_test2\Project1_test2.ap20")); DirectoryInfo importLocation = new DirectoryInfo(@"D:\Temp\Test"); const string fileName = "TestFile"; // Get Device Device device = GetDevice() //Get DeviceItem DeviceItem rack = GetDeviceItem(Device device) //Get DeviceItem DeviceItem plc = GetDeviceItem(DeviceItem rack); SoftwareContainer softwareContainer = plc .GetService<SoftwareContainer>(); PlcSoftware plcSoftware = softwareContainer?.Software as PlcSoftware; PlcBlockSystemGroup blockGroup = plcSoftware.BlockGroup; //For by copy type test environment is required. Console.WriteLine("Calling Create from document on version composition"); try { TypeCreateTransferResults typeCreateTransferResults = project.ProjectLibrary. TypeFolder.Types.CreateFromDocuments(importLocation, fileName, blockGroup,CreateOptions.Override,LibraryImportOptions.Override); if(typeCreateTransferResults.TransferResultState == TransferResultState.Success) { LbraryType createdType = typeCreateTransferResults.CreatedType; Console.WriteLine("Type created successfully"); } else { Console.WriteLine("Type creation failed."); foreach (TransferResultMessageComposition transferResultMessage in typeCreateTransferResults.Messages) { Console.WriteLine(transferResultMessage.Message); } } Console.WriteLine("Type created successfully"); project.Save(); project.Close(); } catch (EngineeringException e) { Console.WriteLine(e); } } |