Quick Start (TwinCAT 2)
Das folgende Kapitel ermöglicht einen Schnelleinstieg in den TwinCAT OPC UA Client. In dieser Anleitung wird das SPS-Beispiel verwendet, um eine Verbindung zu einem OPC UA Server aufzubauen und eine Variable auszulesen. Als OPC UA Server kann ein beliebiger Server verwendet werden, z.B. der TwinCAT OPC UA Sample Server, welcher als ausführbare Datei auch auf einem TwinCAT 2 System gestartet werden kann. Alternativ können Sie auch den .NET Standard Sample Server der OPC Foundation verwenden, welcher aus dem GitHub Repository der OPC Foundation bezogen werden kann.
Das folgende Beispiel orientiert sich an dem TwinCAT OPC UA Sample Server. Um die einzelnen Schritte nachzuvollziehen, muss der Server nicht zwangsläufig gestartet werden. Ziel dieses Schnelleinstiegs soll sein, dass Sie mit dem SPS-Beispiel vertraut werden und lernen, welche Stellen des Samples Sie auf Ihre Betriebsumgebung anpassen müssen.
Im Foglenden werden die Handlungsschritte ihrer Reihenfolge nach genauer beschrieben:
- Adressraum des Sample OPC UA Servers
- Identifizieren der auszulesenden OPC UA Node
- Anpassen des SPS-Beispiels für den TwinCAT OPC UA Client
![]() | TwinCAT OPC UA I/O Client Der TwinCAT OPC UA I/O Client steht nur unter TwinCAT 3 zur Verfügung. Unter TwinCAT 2 ermöglichen wir die Kommunikation ausschliesslich über die SPS-Bibliothek Tc2_PLCopen_OpcUa. Dieser Artikel ist entsprechend für die Verwendung dieser Bibliothek geschrieben worden. |
Adressraum des Sample OPC UA Servers
Nach dem Starten des Servers enthält dessen Adressraum einige Nodes, welche von einem Client ausgelesen werden können. Ein OPC UA Client benötigt für den Verbindungsaufbau die folgenden Informationen:
- Server-URL
- Endpunkt
- Informationen zum verwendeten IdentityToken
In diese Beispiel ist der Server unter der folgenden Server URL und dem Endpunkt „None/None“ erreichbar. Als IdentityToken wird „Anonymous“ verwendet. Die folgenden Screenshots wurden auf Basis der Software „UA Expert“ erstellt.

Nach dem Verbindungsaufbau stellt sich der Adressraum von dem hier verwendeten Server wie folgt dar:

Identifizieren der auszulesenden OPC UA Node
Zum Auslesen einer Node benötigen Sie die konkreten Adressinformationen, welche Sie in Form der sogenannten „Attribute“ vorfinden. Die folgenden Attribute werden für das Auslesen einer Node benötigt:
- NodeID (bestehend aus NamespaceIndex oder NamespaceName, sowie IdentifierType und Identifier)
- Datentyp der Node
In diesem Beispiel wollen wir die Node „MyInt16“ auslesen. Die oben genannten Attribute sehen hierbei wie folgt aus:

Durch das PLCopen Mapping ist vorgegeben, dass eine OPC UA Node vom Datentyp „Int16“ auf den SPS-Datentyp „INT“ gemapped werden muss. Dies müssen wir im folgenden Schritt berücksichtigen.
Sie können zur Kommunikation durchaus den NamespaceIndex verwenden. Best Practice ist jedoch die Verwendung des zugehörigen NamespaceName, da sich der NamespaceIndex dynamisch ändern kann. Der NamespaceName ist hingegen statisch und ermöglicht zur Laufzeit eine Auflsung in den NamespaceIndex. Sie finden den NamespaceName unterhalb des Objekts „Server“ und dort im sogenannten „NamespaceArray“. Der NamespaceName ist dann der x-te Eintrag in dem Array, also in diesem Fall der zweite Eintrag.

Anpassen des SPS-Beispiels für den TwinCAT OPC UA Client
Öffnen Sie das SPS-Beispiel im TwinCAT PLC Control und öffnen Sie darin das Programm PRG_Read_INT. In diesem Programm finden Sie bereits eine vorgefertigte State Machine, welche die Funktionsbausteine aus der Bibliothek Tc2_PLCopen_OpcUa verwendet, um eine Verbindung mit einem OPC UA Server aufzubauen und eine Node zu lesen.

Verbindungsaufbau
Die folgenden Variablenwerte müssen nun ggf. für den Verbindungsaufbau angepasst werden:
- sOpcUA_URL: Setzen Sie diesen Variablenwert auf die ServerURL des Servers, also in diesem Fall 'opc.tcp://localhost:48030'
- SessionConnectInfo.eSecurityMode: In diesem Fall verwendet der von uns eingesetzte Server den SecurityMode 'None'. Der Variablenwert muss somit auf 'eUASecurityMsgMode_None' gesetzt werden.
- SessionConnectInfo.eSecurityPolicyUri: In diesem Fall verwendet der von uns eingesetzte Server die SecurityPolicy 'None'. Der Variablenwert muss somit auf 'eUASecurityPolicy_None' gesetzt werden.
- Da der verwendete Server als IdentityToken 'Anonymous' verwendet, müssen Sie keine Werte für die Variable SessionConnectInfo.stUserIdentTokenType festlegen.
Dieser Teil des SPS-Programms sieht somit wie folgt aus:

Auflösen des NamespaceName
Im nächsten Schritt müssen wir den NamespaceName in den zugehörigen NamespaceIndex auflösen. Hierzu verwenden wir den Funktionsbaustein UA_GetNamespaceIndex. Als Eingang erhält dieser Baustein den von uns ermittelten NamespaceName. Setzen Sie in dem SPS-Beispiel also den Wert der Variablen sNamespaceName auf 'http://yourorganisation.org/TcOpcUaSampleServer/'.
Anpassen der Adressinformationen
Nun können wir die weiteren Adressinformationen (IdentifierType und Identifier) der Node im SPS-Beispiel anpassen. Hierfür setzen wir die Variablen sNodeName und NodeID.eIdentifierType auf die entsprechend vorher ermittelten Werte. Der Deklarationsteil des Programms sieht somit wie folgt aus:

Und der Implementierungsteil:

Nach diesen Anpassungen können Sie das Programm aktivieren. Der Variablenwert der OPC UA Node wird anschliessend vom Server ausgelesen und in der SPS-Variablen iReadData gespeichert.