OPC-ua Client in C++ für SIMATIC OPC-ua Server programmieren

trialanderror

Level-1
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo @all,

ich bin im Moment dabei ein OPC-Client-Plugin für ein anderes Programm zu schreiben. Hierzu habe ich zunächst mal einen lokalen OPC-UA-Server mithilfe der SIMATIC NET Software aufgesetzt (Was nebenbei recht nervenaufreibend war).

Nun möchte ich einen Client in C++ schreiben und suche vergebens eine Funktionsreferenz zu den gelieferten Bibliotheken. Genauso vermisse ich ein paar anständige C++ Beispielprogramme. Alles was ich bisher gesehen habe waren ein paar Beispiel-Brocken zu Automation Schnittstelle in VB.

Habe ich einen Denkfehler in meiner Vorgehensweise oder wie fange ich da an?

Danke schonmal für eure Zeit.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da gibt es verschiedenste Beispiele. Einige sind bereits installiert (sind bei der Installation von SimaticNET mit dabei), am besten Du schaust mal unter /Programme/Siemens/SimaticNET/opc2/samples

Siemens liefert auf der SimaticNET CD eine Art kostenloses Client Toolkit mit, es ist kostenlos und hat dafür die "Einschränkung" dass es NUR mit Simatic OPC Servern funktioniert, aber immerhin. Die API ist in der Doku beschrieben und heist "OPC Client API" glaube ich.

Weiterhin überaus hilfreich und VIEL besser dokumentiert sind die Beispiele aus dem Customer Support bei Siemens, die entsprechenden "BeitragsIDs" wurden hier schon mehrfach gepostet.

Gerade für C++ gibt es auch kommerzielle Toolkits (z.B. Unified Automation, Softing) dort gibt es auch Beispiele.

Für einen OPC UA Client benötigst Du erst mal den UA-Kommunikations-Stack (den gibt es für Mitglieder bei der OPC Foundation, für Nichtmitglieder gibt es den nur bei kommerziellen Anbietern von OPC Software). Zusätzlich zu dieser Library (mit ANSI C API) benötigst Du die Kapselung der ANSI C API in eine C++ API sowie die erforderlichen allgemeinen Basismechanismen, die ein Client so braucht (Hantierung von Zertifikaten, deren Validierung, Verbindungsaufbau, etc.). Um das alles nicht "neu" schreiben zu müssen, kannst du dir ein Toolkit zulegen, kostet zwar etwas, spart aber auch massenhaft Arbeit. Kostenloser Download z.B. hier: www.unifiedautomation.com
 
Ok, danke erstmal.

Ich habe wie gesagt die SIMATIC Software gekauft um und mit steht auch die uastack.dll zur Verfügung. Also die DLL die die Grundfunktionen bereitstellt. Und zumindest für diese Funktionen benötige ich eine Funktionsreferenz, da die Nutzung sonst schwierig wird.
Diese hab ich bei der Siemensdoku nicht gefunden. Die API ist nur für die Nutzung mit .NET beschrieben.

Ich hab jetzt einfach mal den Siemens Support bemüht. Mal schauen, was die meinen.
 
Die API ist nur für die Nutzung mit .NET beschrieben.
Da hast du recht, die OPC Client API des Siemens Toolkits ist für .NET, Du wolltest aber C++ machen.

Die uastack.dll ist die reine Kommunikationsschicht, es ist eine ANSI C Library mit einer C-API, die das UA Binary Protokoll (Encoder/Decoder der UA Nachrichten, Anbindung an TCP/IP) enthält. Grundsätzlich könnte man mit dieser Library zwar einen UA Client schreiben (z.B. in C) aber ohne die Header und ohne Dokumentation wird das sicher schwierig. Zunächst müssten die rohen C Strukturen, die aus dem Stack kommen in C++ Typen gekapselt werden, zusätzlich werden weitere Funktionen/Klassen benötigt, die z.B. den Verbindungsaufbau regeln oder Subscription und Publish abwickeln. Also bräuchtest Du eigenltich die stack.dll UND eine client.dll, die dir dann ein (komfortables) C++ Interface bietet an dem Du deine Applikation andocken kannst.

Eine derartige Bibliothek ist die oben erwähnte "OPC Client API" allerdings nur für .NET. Diese Bibliothek geht sogar noch einen Schritt weiter und unterstützt die alte COM-DA und die neue UA Variante von OPC. Deine Clientapplikation könnte dann beides über ein "einheitliches" Interface verwenden. Allerdings mit der funktionalen Einschränkung auf "nur" DA Funktionen (lesen/schreiben/beobachten, keine Alarme, keine Methoden, keine komplexen Datentypen, etc.) und eingeschränkt auf "nur" Simatic OPC Server. Wie gesagt immerhin kostenlos.

Da du aber C++ machen willst und "nur" OPC UA (was prinzipiell eine gute Idee ist, weil plattformunabhängig) empfehle ich dir eine "kommerzielle" Client Bibliothek. Dann steht dir der volle Funktionsumfang von UA zur Verfügung und du sparst viel Zeit (und Nerven).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also nochmal der Vollständigkeit halber fasse ich mal nochmal zusammen:

Siemens bietet mit der SIMATIC NET SOftware nur eine vernünftige API mit .NET.
Eine vernünftige Funktionsreferenz für die in uastack.dll definierten Funktionen existiert nicht, auch nicht von der OPC Foundation.

Möchte man eine C++ API benötigt man eine aufsetzende Bibliothek eines Fremdanbieters (Wenn man nicht mühsam selbst programmieren möchte, den ich denke der Aufwand ist nicht zu unterschätzen). Diese ist soweit man es nicht kommerziell nutzen möchte von Unified Automation kostenlos erhältlich http://www.unified-automation.com/opc-ua-development (Nur mit englischer Doku). Ansonsten sind alle anderen Alternativen kostenpflichtig.
 
Zurück
Oben