# PLC Daten über OPC in C++ Programm bearbeiten



## D_Lar (23 März 2011)

Hallo zusammen,

ich mache gerade eine Praktikum bei einer kleinen Firma. Ich soll eine GUI erstellen (in C++), welche ein paar PLC-Dateien Anzeigt. Die Vorgabe ist, die PLC-Dateien über den OPC-Server zu bekommen. Mir steht ein HIM-Advanced zur Verfügung und ich programmiere mit Visual C++ 2010 Professional.

Ich weiß, dass ich einen OPC-Client einbauen muss. Aber wie genau appliziere ich den?

Seit Tagen habe ich schon im Netz gesucht, komm aber nicht weiter und bin inzwischen schon ganz frustriert, da der Druck immer mehr wächst. :sad:
Kann mir jemand helfen ???? 

Hat jemand vielleicht ein kleines Beispielprogramm? Das würde mir schon sehr weiterhelfen.

Gruß D_Lar


----------



## D_Lar (25 März 2011)

*ItemID von PLC- Datei???*

Hi, ich bin jetzt schon mal weitergekommen.

mit einem Beispiel-Client-C++Programm von :

http://sourceforge.net/projects/opcclient/

und einem OPC-Tutorial:

http://pgras.home.cern.ch/pgras/OPCClientTutorial/

habe ich einen Client erstellt, der nun mit dem SINUMERIK OPC-Server verbunden ist. Ich kann dessen Status auslesen, Gruppen erstellen, aber:

*wie komm ich jetzt an die PLC-Daten dran?* 
In dem ich ein Item erstelle, klar, aber wie sind die _ItemID_ aufgebaut???

Ich wäre echt dankbar wenn jemand mir da weiterhilft.


----------



## LowLevelMahn (25 März 2011)

*z.B. ein Bit auf der PLC*

"/Plc/Datablock/Bit[c200,1.1]"

die Varianten findest du in einer btss_gr.hlp irgendwo im HMI-Advanced-Ordner


----------



## D_Lar (30 März 2011)

LowLevelMahn schrieb:


> "/Plc/Datablock/Bit[c200,1.1]"
> 
> die Varianten findest du in einer btss_gr.hlp irgendwo im HMI-Advanced-Ordner



Hallo LowLevlMahn, 

vielen dank für deine Antwort!! Ich kann Bits und Bytes damit lesen, aber sobald ich ein Word oder DoubleWord lesen will, erhalt ich nur das Value 0.

Muss man bei einem Word oder DoubleWord etwas specielles berücksichtigen?

D_Lar


----------



## LowLevelMahn (31 März 2011)

es geht also kein /Plc/Datablock/Word[c200,1]

c200 == db-nr: 200
1 = bytenr


----------



## D_Lar (1 April 2011)

LowLevelMahn schrieb:


> es geht also kein /Plc/Datablock/Word[c200,1]
> 
> c200 == db-nr: 200
> 1 = bytenr



Ja, wenn ich ein beliebiges Word so ansprechen möchte, bekomme ich als Value entweder 0 oder einen Fehlerwert (Bsp: 115487). Woran kann das liegen??? 

Bin echt confused, danke für deine Hilfe LowLewelMahn!!


----------



## LowLevelMahn (1 April 2011)

*probiers mal mit dem OPC-Client...*

probier mal mit einem anderen OPC-Client deine Abfrage zu tätigen

z.B. http://www.dopc.kassl.de/explorer.shtml

wenn es damit geht - liegt es an deinem Code - und ich denke das es so ist

Achtung der opc-maschineswitch hat kein Browsing d.h. du musst einfach eine Gruppe + dein Word-Item anlegen


----------



## D_Lar (1 April 2011)

LowLevelMahn schrieb:


> probier mal mit einem anderen OPC-Client deine Abfrage zu tätigen
> 
> z.B. http://www.dopc.kassl.de/explorer.shtml
> 
> ...



Ja, an meinem Code hab ich auch zuerst gezweifelt, deshalb hab ich, um die ItemID herauszubekommen, den Client von Matrikon verwendet :

http://www.matrikonopc.com/downloads/176/software/index.aspx

Ich hab gehört, dass Siemens eine andere Wertung von Bits hat, kann das der Grund sein, dass ich meistens den Wert 0 oder einen utopisch hohen Wert bekomme?


----------



## LowLevelMahn (1 April 2011)

*die Word-Adressierung ist glaube Word-basiert*



> Ja, an meinem Code hab ich auch zuerst gezweifelt, deshalb hab ich, um  die ItemID herauszubekommen, den Client von Matrikon verwendet :



und damit hat es geklappt? oder auch die "Fehlermeldung" (Fehlermeldungen sind nicht Teil des Values sondern ein Value)

was bekommst du bei?

/Plc/Datablock/Byte[c100,0] -> 0x??
/Plc/Datablock/Byte[c100,1] -> 0x??

/Plc/Datablock/Word[c100,0] -> 0x?? ?? (wie oben?)


----------



## D_Lar (1 April 2011)

OK, ich habs selber herausgefunden. 

bei einem WORD oder DOUBLEWORD oder FLOAT muss man das Zeichen > setzen:

bsp: PLC/Datablock/WORD[c100,>2]
oder: PLC/Memory/DOUBLEWORD[>123]

so klapt es.


----------



## LowLevelMahn (1 April 2011)

*was auch immer*



> OK, ich habs selber herausgefunden.
> 
> bei einem WORD oder DOUBLEWORD oder FLOAT muss man das Zeichen > setzen:
> 
> ...



musste ich noch nie setzen - und ich habs jahrelang verwendet --> wie hast du das rausgefunden (doku, probieren?)


----------

