Forum: PC-Programmierung Visual C++ 2008 OPC Client


von Daniel C. (fali)


Lesenswert?

Hallo zusammen,

meine Konfiguration (für meine Frage nicht von Bedeutung nur zur Info):
Ich habe zwei Layouts erstellt auf einem Board sind 4 Atmega 169 an die 
unter anderem Taster, LEDs und Relais angeschlossen sind. Für die 
Kommunikation mit dem anderen Layout habe ich noch eine RS232 
Schnittstelle spendiert. Das zweite Layout ist sozusagen die 
"Steuereinheit". Hier kommt ein Atmega 128 zum Einsatz. Dieser µC wird 
mit einem PC verbunden und steuert mit dessen Befehlen und dem MPC-Mode 
(Multi-Prcessor-Communication)  die anderen 4 µCer. Dazu gehört es 
Eingänge abzufragen oder Ausgänge zu schalten.


Ich habe folgendes Problem:
Ich habe mit Visual C++ 2008 express ein programm geschrieben, das die 
Daten von mehreren Mikrocontrollern ausliest und auswertet. Die Daten 
sind also im Visual C++ Programm schon verfügbar. Nun muss ich die Daten 
aus diesem Programm an einen OPC Server senden. Der OPC Server und das 
Visual C++ Programm laufen auf dem gleichen Rechner. Dies soll die Sache 
laut internet angeblich vereinfachen. Also möchte ich in mein Visual C++ 
Programm gerne einen OPC Client integrieren. Deswegen habe ich tagelang 
im Internet nach einer Einführung und Beispiel Quellcode gesucht. Leider 
ohne Erfolg. Ich habe bis jetzt noch überhaupt keinen Ansatz. Wenn also 
schon jemand Erfahrungen mit OPC Clients gemacht hat, wäre ich für jeden 
Tipp dankbar.

Gruß Daniel

von Gast (Gast)


Lesenswert?

Also ich verstehe untereinem OPC Client ein Programm das Daten abholt, 
nicht schickt.

von Daniel C. (fali)


Lesenswert?

So wie ich das verstanden habe stellt der OPC Server Speicherplatz in 
Form von Items oder Tags zur Verfügung. Diese kann man dann entweder 
auslesen oder schreiben.

Wenn ich das falsch verstanden habe bin ich für neue Infos dankbar.

Gruß Daniel

von Karl H. (kbuchegg)


Lesenswert?

( Hat OLE heuer schon wieder einen neuen Namen bekommen? )

Also wenn ich in Google 'OPC Client' eingebe, dann ist bereits der erste 
Link

http://www.opcconnect.com/freecli.php

und das sieht doch nicht schlecht aus. Da müsste sich doch einiges 
finden lassen.

von Gast (Gast)


Lesenswert?

Ok ein Client kann auch Tags schreiben. War von mir ein bisschen blöd 
ausgedrückt.

Anhand von diesem Bild:
http://www.fh-sw.de/sw/fachb/et/halbl/opc/opc.htm

Ist deine µC Anwendung ein Client oder die Steckkarte ganz unten.

von Daniel C. (fali)


Lesenswert?

Der µC ist eigentlich nicht wichtig, da ich meine Daten schon in Visual 
C++ habe. Also soll mein Visual Programm zum Client werden und die Daten 
an den OPC Server übertragen.

von Gast (Gast)


Lesenswert?

Was du machen willst ist kein OPC Client sondern eher der Treiber 
zwischen OPC Server und Hardware. Bei sowas polled der Server 
klassischerweise die Werte von der Steuerung ab.

von Daniel C. (fali)


Lesenswert?

OK was ich mich frage ist, wie ich die Variablen aus meinem Programm in 
den OPC Server bekomme. Ich dachte mir es gäbe zwei Grundsätzliche 
Möglichkeiten.

1. Der Server holt und sendet die Daten von bzw. zu meinem Programm.

2. Mein Programm sendet die Variablen an den Server und liest ihn aus 
(also eigentlich wie ein "client") oder?

Wie ich das ganze realisieren kann habe ich noch nicht verstanden.

Gruß Daniel

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bei OPC ist die Richtung der Datenübertragung klar definiert.
Ein OPC-Server stellt Daten zur Verfügung, die von OPC-Clients abgefragt 
oder verändert werden können.

Wo die Daten herkommen, die der OPC-Server zur Verfügung stellt, ist 
implementierungsabhängig; oft verbirgt sich dahinter irgendein 
Automationssystem, das seine physikalischen Mess/Steuerdaten damit zur 
Nutzung durch andere Systeme zur Verfügung stellt.

Um wie vom Threadstarter gewünscht "Daten an einen OPC Server" senden zu 
können, müssen im Datenmodell des Servers entsprechende OPC-Items 
("Datenpunkte") vorhanden sein, die vom Client dann mit Werten 
beschrieben werden. Dazu müssen dem Client auch die zu verwendenden 
Namen ("Tags") der Items bekannt sein.

Ob das aber der richtige Weg ist, die Problemstellung zu lösen, ist ohne 
Zusatzinformationen nicht zu klären.
Was ist das für ein OPC-Server? Was kommuniziert noch mit diesem 
OPC-Server? Welcher Art sind die Daten, die "an den OPC-Server gesendet" 
werden sollen?

von Daniel C. (fali)


Lesenswert?

Hallo,

ich habe mich natürlich weiter mit dem Thema beschäftigt, bis jetzt mit 
folgendem Ergebnis.

Der normale Weg ist wohl ein OPC Server zu erstellen der in meine 
Software integriert werden muss. Dieser Server updated die Daten die vom 
µC kommen und stellt sie für die Clients zur Verfügung.

Allerdings haben fast alle, von mir kontaktierten Drittanbieter von OPC 
Software, empfohlen einen OPC Client zu realisieren. Und ich denke am 
Ende ist es eigentlich auch egal wie der Server zu seinen Daten kommt. 
Wichtig ist nur dass er sie für die Clients zur Verfügung stellt.

Ich habe auch Erfahren, dass es diverse Toolkits gibt, mit denen man 
Server oder Clients erstellen kann. Allerdings bin ich auch damit nicht 
zu einem lauffähigen Ergebnis gekommen.


@ Rufus: Zur Zeit stehen mir nur Freeware bzw. Test OPC Server sowie 
Clients zur Verfügung. Aber es wird wahrscheinlich darauf hinauslaufen 
eine kommerzielle Software einzusetzen.
Der Server soll zusätzlich nur noch mit einem weiteren Client arbeiten, 
der die Daten vom µC abfragt und verarbeitet. Die Daten beschränken sich 
auf Steuerbefehle um z.B einen Pin oder Port des µC zu schalten. Und 
jeweils 1 Byte um die Portzustände abzufragen, an die z.B Taster 
angeschlossen sind.


Gruß Daniel

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn Du für diese Aufgabe wirklich OPC verwenden willst, dann kannst Du 
Dir hier einen Open-Source-OPC-Server ansehen: 
http://www.ipi.ac.ru/lab43/lopc-en.html

OPC ist allerdings ein mittlerer Krampf im Arsch, was die Konfiguration 
der beteiligten Rechner und die Fehlersuche betrifft, was an der 
grundlegenden Technik namens DCOM liegt. Es mag noch lausiger 
dokumentierte und noch schlechter debugbare Schnittstellen geben, aber 
OPC genügt, um viel Zeit zu binden.
Praktisch alle Hinweise darauf, wie man OPC zwischen zwei Rechnern zum 
laufen bekommt, sehen so aus, daß man praktisch alle möglichen Löcher 
und Einfallstore so weit wie nur irgendmöglich aufreißen muss ...

Ich habe persönlich mit dem "Toolkit" einer Firma namens FactorySoft 
gearbeitet (bzw. arbeiten müssen); ein so teurer Haufen lausig 
programmierter und schlecht dokumentierter Software ist mir vorher noch 
nicht untergekommen.

Recht einfach hingegen ist die Verwendung der DLL-Lösungen von Wintech 
http://www.win-tech.com/.

Überlege aber ernsthaft, ob Du wirklich OPC einsetzen willst. Vieles 
lässt sich einfacher mit Webserverbasierten Techniken umsetzen; in Dein 
C++-Programm einen Webserver zu integrieren ist keine besonders 
aufwendige Aktion.

Was letztendlich sinnvoll ist, hängt natürlich von der Anwendung und den 
Eckdaten wie Datenrate/Datenmenge ab ...

von Arc N. (arc)


Lesenswert?

Rufus t. Firefly schrieb:
> OPC ist allerdings ein mittlerer Krampf im Arsch, was die Konfiguration
> der beteiligten Rechner und die Fehlersuche betrifft, was an der
> grundlegenden Technik namens DCOM liegt. Es mag noch lausiger
> dokumentierte und noch schlechter debugbare Schnittstellen geben, aber
> OPC genügt, um viel Zeit zu binden.

Da gibt's so einige Fernwirkprotokolle (inkl. IEC-Standards die so offen 
sind, dass es keinen Standard gibt) und deren Umsetzungen...

> Recht einfach hingegen ist die Verwendung der DLL-Lösungen von Wintech
> http://www.win-tech.com/.
>
> Überlege aber ernsthaft, ob Du wirklich OPC einsetzen willst. Vieles
> lässt sich einfacher mit Webserverbasierten Techniken umsetzen; in Dein
> C++-Programm einen Webserver zu integrieren ist keine besonders
> aufwendige Aktion.

Oder den aktuellen Nachfolger OPC UA verwenden. Entweder HTTP + SOAP/XML 
oder binär über TCP/IP.
http://en.wikipedia.org/wiki/OPC_UA

Source code für OPC gibt's hier
http://www.opcconnect.com/delphi.php (OPC Server und Client)

Für den Nachfolger OPC UA
http://www.opcconnect.com/uafree.php
(allerdings sollte man in jedem Fall über eine OPC-Mitgliedschaft 
nachdenken, Referenzimplementation etc.)

von Daniel C. (fali)


Lesenswert?

Vielen Dank für eure hilfreichen Antworten. Was mir auch schon 
aufgefallen ist, ist dass es wenig hilfreiche Dokumentationen gibt. Und 
die Bücherauswahl ist auch sehr begrenzt.
Ich habe jetzt ein Toolkit von Visavi auprobiert. Für mich liegt der 
Vorteil dieser Software darin, dass man sie gut in Visual C++ 
integrieren kann und dann Objekte hat die man einfach einfügen kann. mit 
Visual C++ bekomme ich das ganze allerdings nicht compiliert. Ich bin 
jetzt auf Visual Basic 2008 umgestiegen und damit funktioniert es 
anscheinend.

Ich werde aber eure Links mal genauer betrachten. Vielleicht kann ich ja 
sogar eine kostenlose Lösung finden.

update wird folgen

@ Rufus:
Ich persönlich würde auch auf OPC verzichten, aber das ist eine der 
Vorgaben die ich bekommen habe. Denn die Software die verwendet werden 
soll arbeitet mit OPC.

@ Arc Net: Die Mitgliedschaft kann ich ja mal vorschlagen, welche 
Vorteile hat man dadurch noch? Irgendwelche Erfahrungen?

Gruß Daniel

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.