Verbindung zum TIA Portal aufbauen - 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
Verbindung zum TIA Portal aufbauen

Einleitung

Sie starten das TIA Portal mit TIA Portal Openness oder stellen die Verbindung zu einem bereits ausgeführten TIA Portal her. Wenn Sie das TIA Portal mit einer TIA Portal Openness-Anwendung starten, geben Sie an, ob das TIA Portal mit oder ohne grafische Benutzeroberfläche gestartet werden soll. Wenn Sie mit dem TIA Portal ohne Benutzeroberfläche arbeiten, wird das TIA Portal nur als Prozess des Betriebssystems gestartet. Sie erstellen mit einer TIA Portal Openness-Anwendung bei Bedarf mehrere Instanzen des TIA Portals.

Hinweis

Wenn Sie über die TIA Portal Openness-Anwendung auf die Oberfläche des TIA Portals zugreifen, können Sie keinen HMI-Editor verwenden. Sie können den Editor „Geräte & Netze“ oder den Programmiereditor manuell oder mit TIA Portal Openness API öffnen.

Zum Starten des TIA Portals mit einer TIA Portal Openness-Anwendung stehen Ihnen folgende Optionen zur Verfügung.

  • Verwenden Sie eine Anwendungskonfigurationsdatei (in den meisten Fällen zu empfehlen).

  • Verwenden Sie die Methode "AssemblyResolve" (zu empfehlen beim Kopieren usw.).

  • Kopieren Sie die Siemens.Engineering.dll in das Verzeichnis der TIA Portal Openness-Anwendung.

Hinweis

Es empfiehlt sich, die Siemens.Engineering.dll mit Hilfe der Anwendungskonfigurationsdatei zu laden. Bei Verwendung dieser Methode werden die starken Namen berücksichtigt und schädliche Änderungen an der Engineering.dll führen zu einem Ladefehler. Bei Verwendung der Methode AssemblyResolve ist dies nicht erkennbar.

Starten des TIA Portals mit einer Anwendungskonfigurationsdatei

Erzeugen Sie in der Anwendungskonfigurationsdatei Verweise auf alle erforderlichen Programmbibliotheken. Die Anwendungskonfigurationsdatei verteilen Sie zusammen mit der TIA Portal Openness-Anwendung.

Speichern Sie die Anwendungskonfigurationsdatei "app.config" im selben Verzeichnis wie die TIA Portal Openness-Anwendung und beziehen Sie diese Datei in Ihre Anwendung ein. Prüfen Sie, ob der Dateipfad in jedem Code mit dem Installationspfad des TIA Portals übereinstimmt.

Für die Anwendungskonfigurationsdatei können Sie den folgenden Codeausschnitt verwenden:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

<?xml version="1.0"?>

<configuration>

    <runtime>

        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

            <dependentAssembly>

                <assemblyIdentity name="Siemens.Engineering" culture="neutral" publicKeyToken="d29ec89bac048f84"/>

                <!-- Edit the following path according to your installed version of TIA Portal -->

                <codeBase version="xx.x.x.x" href="FILE://C:\Program Files\Siemens\Automation\Portal Vxx\PublicAPI\Vxx\Siemens.Engineering.dll"/>

            </dependentAssembly>

            <dependentAssembly>

                <assemblyIdentity name="Siemens.Engineering.Hmi" culture="neutral" publicKeyToken="d29ec89bac048f84"/>

                <!-- Edit the following path according to your installed version of TIA Portal -->

                <codeBase version="xx.x.x.x" href="FILE://C:\Program Files\Siemens\Automation\Portal Vxx\PublicAPI\Vxx\Siemens.Engineering.Hmi.dll"/>

            </dependentAssembly>

        </assemblyBinding>

    </runtime>

</configuration>

Verwenden Sie den folgenden Programmcode zum Öffnen einer neuen Instanz des TIA Portals über die Anwendungskonfigurationsdatei:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

//Connect a TIA Portal Openness application via API using

using System;

using System.IO;

using Siemens.Engineering;

namespace UserProgram

{

    internal class MyProgram

    {

        public static void Main(string[] args)

        {

            // To start TIA Portal with user interface:

            // using (TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithUserInterface))

            //

            // To start TIA Portal without user interface:

            // using (TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithoutUserInterface))

            using (TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithUserInterface))

            {

                //begin of code for further implementation

                //...

                //end of code

            }

        }

    }

}

Starten des TIA Portals mit der Methode "AssemblyResolve"

Bauen Sie den Programmcode von TIA Portal Openness so auf, dass die Registrierung auf das Ereignis "AssemblyResolve" so früh wie möglich erfolgt. Verkapseln Sie den Zugriff auf das TIA Portal in einem zusätzlichen Objekt oder einer zusätzlichen Methode.

Vorsicht ist beim Auflösen der Engineering Assembly mit einer Assembly-Resolver-Methode geboten. Wenn Typen aus der Engineering Assembly verwendet werden, bevor der Assembly Resolver ausgeführt wurde, stürzt das Programm ab. Der Grund dafür ist, dass der Just-in-time-Übersetzer (JIT-Übersetzer) eine Methode erst dann übersetzt, wenn er sie ausführen muss. Wenn Typen einer Engineering Assembly beispielsweise in "Main" verwendet werden, versucht der JIT-Übersetzer, "Main" bei laufendem Programm zu übersetzen. Das schlägt fehl, weil der JIT-Übersetzer nicht weiß, wo die Engineering Assembly zu finden ist. Die Registrierung des Assembly Resolver in Main ändert daran nichts. Die Methode muss vor der Registrierung des Assembly Resolver laufen und übersetzt werden, bevor der Assembly Resolver ausgeführt werden kann. Die Lösung für dieses Problem besteht darin, die Business Logic, die Typen aus der Engineering Assembly verwendet, in einer separaten Methode unterzubringen. Dabei verwendet die separate Methode nur Typen, die der JIT-Übersetzer bereits versteht. Das vorliegende Beispiel verwendet eine Methode, die "void" zurückgibt, keine Parameter hat und sämtliche Business Logic enthält. Jetzt wird "Main" vom JIT-Übersetzer erfolgreich übersetzt, weil er alle Typen in Main versteht. Wenn RunTiaPortal während der Laufzeit aufgerufen wird, ist der Assembly Resolver bereits registriert. Somit weiß der JIT-Übersetzer bei dem Versuch, die Typen der Business Logic zu finden, wo sich die Engineering Assembly befindet.

Verwenden Sie den folgenden Programmcode zum Öffnen einer neuen Instanz des TIA Portals.

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

using System;

using System.IO;

using System.Reflection;

using Siemens.Engineering;

namespace UserProgram

{

    static class MyProgram

    {

        public static void Main(string[] args)

        {

            AppDomain.CurrentDomain.AssemblyResolve += MyResolver;

            RunTiaPortal();

        }

        private static void RunTiaPortal()

        {

            // To start TIA Portal with user interface:

            // using (TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithUserInterface))

            //

            // To start TIA Portal without user interface:

            // using (TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithoutUserInterface))

            using (TiaPortal tiaPortal = new TiaPortal(TiaPortalMode.WithUserInterface))

            {

                //begin of code for further implementation

                //...

                //end of code

            }

        }

        private static Assembly MyResolver(object sender, ResolveEventArgs args)

        {

            int index = args.Name.IndexOf(',');

            if (index == -1)

            {

                return null;

            }

            string name = args.Name.Substring(0, index) + ".dll";

            // Edit the following path according to your installed version of TIA Portal

            string path = Path.Combine(@"C:\Program Files\Siemens\Automation\Portal Vxx\PublicAPI\Vxx\", name);

            string fullPath = Path.GetFullPath(path);

            if (File.Exists(fullPath))

            {

                return Assembly.LoadFrom(fullPath);

            }

            return null;

        }

    }

}

Auf aktive Instanzen des TIA Portals zugreifen

Um die Verbindung zu einer aktiven Instanz des TIA Portals mit einer TIA Portal Openness-Anwendung herstellen zu können, listen Sie zunächst die Instanzen des TIA Portals auf. Innerhalb einer Windows-Sitzung können Sie Verbindungen zu mehreren Instanzen herstellen. Die aktive Instanz kann das TIA Portal mit oder ohne gestartete Benutzeroberfläche sein:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

foreach (TiaPortalProcess tiaPortalProcess in TiaPortal.GetProcesses())

{

//...

}

Hinweis

Zur Enumeration aller aktiven TIA Portal-Prozesse ist keine Instanz des TIA Portals erforderlich, da es sich bei GetProcesses um eine statische Methode für die Klasse TiaPortal handelt.

Wenn Sie die Prozess-ID der Instanz des TIA Portals kennen, verwenden Sie die Prozess-ID für den Zugriff auf das Objekt. Der Startvorgang des TIA Portals benötigt eine gewisse Zeit, bevor Sie TIA Portal Openness mit dem TIA Portal verbinden können.

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

Process process = ...;

Thread.Sleep(TimeNeededToStartUp); // The process may not be ready to service requests immediately.

TiaPortalProcess tiaPortalProcess = TiaPortal.GetProcess(process.Id);

Hinweis

Die Prozess-ID, über die der Benutzer verbunden ist, muss ausgeführt werden und einen Zustand erreicht haben, in dem sie Anfragen bezüglich Prozessinformationen beantworten kann.

Beim Herstellen einer Verbindung zu einer aktiven Instanz des TIA Portals erscheint eine Verbindungsaufforderung der TIA Portal Openness-Firewall. Hier können Sie für die Verbindung Folgendes angeben:

  • Verbindung einmal erlauben

  • Verbindung nicht erlauben

  • Verbindungen von dieser Applikation immer erlauben

    Weitere Informationen hierzu siehe TIA Portal Openness-Firewall.

    Hinweis

    Wird die Registry-Eingabeaufforderung dreimal zurückgewiesen, löst das System eine Ausnahme vom Typ EngineeringSecurityException aus.

Nach Herstellung der Verbindung zum Prozess können Sie mit Hilfe eines der folgenden Attribute Informationen zu den Instanzen des TIA Portals abrufen:

Attribut

Information

InstalledSoftware as IList<TiaPortalProduct>

Gibt Informationen über die installierten Produkte zurück.

Mode as TiaPortalMode

Gibt den Modus zurück, in dem das TIA Portal gestartet wurde (WithoutUserInterface/WithUserInterface).

AttachedSessions as IList<TiaPortalSession>

Gibt ein Liste von Anwendungen zurück, die mit dem TIA Portal verbunden sind.

ProjectPath as FileInfo

Gibt den Dateinamen des im TIA Portal geöffneten Projekts einschließlich des Ordners zurück, z. B.

"D:\WinCCProjects\ColorMixing\ColorMixing.ap*"

Wenn kein Projekt geöffnet ist, wird eine leere Zeichenfolge zurückgegeben.

ID as int

Gibt die Prozess-ID der Instanz des TIA Portals zurück.

Path as FileInfo

Gibt den Pfad zur ausführbaren Datei des TIA Portals zurück.

Hinweis

TIA Portal Openness unterstützt keinen Kompatibilitätsmodus. Jedes im Projekt verwendete Optionspaket oder HSP aus TIA Portal muss für die Openness-Anwendung installiert werden, um geöffnet oder dem Projekt angehängt werden zu können.

Zum Abruf des aktuellen TIA Portal-Prozesses aus einer TIA Portal-Anwendung durch Aufrufen von GetCurrentProcess() an der Instanz des TIA Portals:

Kopiert den nachfolgenden Programmcode in die Zwischenablage.

TiaPortal tiaPortal = ...;

TiaPortalProcess tiaPortalProcess = tiaPortal.GetCurrentProcess();