Typ aus dem Dokument aktualisieren - TIAPortal

TIA Portal Openness: API für die Automatisierung von Engineering-Workflows

ft:publication_title
TIA Portal Openness: API für die Automatisierung von Engineering-Workflows
Product
TIAPortal
Version
V20
Publication date
01/2025
Language
de-DE
Typ aus dem Dokument aktualisieren

Voraussetzung

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:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

{
"DocumentHash": [
{
"FileName": "Block_1.scl",
"Hash": "2dvpc7N6aZt2VCR2wXi8KqO/8ovFF90BaMvH6+72B3w="
}
],
"LibraryMetaFileHash": "NtUaou9IHWmmfE2DK/9d6DymIZK6bLoNHLiQHzATRHY=",
"TiaPortalLibrary": {
"IsProjectLibrary": true,
"LibraryName": "Project1",
"Author": "z003y3kj",
"Version": "",
"Family": "",
"Copyright": "",
"Comment": "",
"LibraryType": {
"TypeName": "Block_1",
"Namespace": "Test",
"TypeGuid": "45e9f803-eb80-4171-af9e-46796145a784",
"DoNotUse": false,
"Folder": "Types"
},
"LibraryVersion": {
"VersionGuid": "691ee24b-517b-44a7-863b-5bac1ec91163",
"VersionNumber": "0.0.1",
"Author": "z003y3kj",
"IsDefault": true,
"InWork": false,
"VersionComment": "",
"DependsOn": [],
"MinimumTargetDeviceVersion": ""
}
}
}

Programmcode

Um einen Bibliothekstyp aus einem Dokument für die HMI zu erstellen, ändern Sie folgenden Programmcode:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

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:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

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

    }

}