# OPC Client (Excel & VBA)



## WinCCPapst (15 Juli 2011)

Hallo liebe Leute,

ich hab folgendes Problem....

Habe einen OPC Server (Siemens) und greife mit Excel und VBA auf Variablen zu. Funktioniert soweit.

Wie kann ich umsetzen, dass bei Tastendruck am TP (vor Ort) in Excel automatisch eine Messwertarchivierung erfolgt.

Kann ich im Client Werte und Variablen automatisch anzeigen bzw. aktualisieren lassen (bei Wertänderung)?

Grüße und vielen Dank vorab für jegliche Ideen...


----------



## thomass5 (15 Juli 2011)

Du kannst doch im Excel ein Script laufen lassen, was bei einer Wertänderung (deine Variable hinter dem  Tastendruck) die Aufzeichnung startet. 
Thomas


----------



## WinCCPapst (15 Juli 2011)

Mein Problem ist es diese Wertänderung zu erkennen.

Die Werte im Excel OPC- Client aktualisiere ich per Steuerelement mit nem Script und der Funktion:SynchRead.

Wie kann ich die Items vom OPC- Server bei Wertänderung im Client aktualisieren?


----------



## 4nD1 (15 Juli 2011)

Das mit der Werteaktualsierung geht normal automatisch. Da musst du nichts machen. So ist es zumindest bei dem OPC-Server denn wir verwenden.


----------



## WinCCPapst (15 Juli 2011)

Ne, is klar....

Hab mich miserabel ausgedrückt, sorry

Die Wertänderung bekommt der OPC- Server natürlich mit.

Nur mein Client nicht, da ich momentan mit der Funktion SyncRead die Werte vom OPC-Server abhole.

Ich würde jedoch gern, ohne den SyncRead anzustoßen, direkt die Werte des Servers in Zellen meines Excel-Clients anzeigen lassen.

Gruß


----------



## Dr. OPC (22 Juli 2011)

Als erstes must du die Gruppe mit "WithEvents" deklarieren

```
Private WithEvents MyGroup As OPCGroup
```
dann legst du die Gruppe ganz normal an und schaltest sie erstmal "inaktiv"

```
'create group object
  Set MyGroup = MyServer.OPCGroups.Add()
'disable callbacks
  MyGroup.IsActive = False
  MyGroup.IsSubscribed = False
```
anschließend fügst du die Items, die du "beobachten" möchtest, in die Gruppe ein, ganz normal wie sonst auch

```
Call MyGroup.OPCItems.AddItems(bla, bla, ein Haufen Parameter)
```
danach schaltest du die Gruppe "scharf"

```
' enable the callbacks
    MyGroup.IsActive = True
    MyGroup.IsSubscribed = True
```
da die Gruppe mit den Schlüsselwort "WithEvents" deklartiert wurde, gibt es einen EventHandler für das Gruppen-Objekt. Hier ruft der Server immer dann rein, wenn er dir neue Werte mitteilen möchte

```
Private Sub MyGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)
' ToDo
' abfüllen der Werte in die richtigen Excel-Cells
End Sub
```


----------

