# Siemens S7 kommunikation mit EXCEL VBA OPC Client



## bobby765 (13 Juni 2011)

Hallo an das Super Forum, :TOOL:

stehe vor einem großen Problem:
Ich habe einen OPC Client in Excel VBA programmiert, wobei 4 Variablen gelesen werden sollen und eine an die SPS gesendet werden soll.
Klappt ja soweit gar nicht schlecht, nur hab ich das Problem, dass ich nicht zuordnen kann welcher Wert sich geändert hat.

wie bekomme ich das hin, damit ich weiß, dass sich jetzt die 3.Variable geändert hat.

Danke für eure Hilfe


----------



## Andi888 (14 Juni 2011)

Hallo bobby765


 normalerweise bekommst du über ein Event jede variable Änderung mitgeteilt.

* [FONT=NDLILE+TimesNewRoman,Bold, Times New Roman, serif]4.4.4.5 IsSubscribed [/FONT] *

*[FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]Description             [/FONT] *

*[FONT=NDLHMM+TimesNewRoman, Times New Roman, serif](Read/Write)             This property controls asynchronous notifications to the group. A             group that is subscribed receives data changes from the server. [/FONT] *

*[FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]Syntax             [/FONT] *

*[FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]IsSubscribed             As Boolean [/FONT] *

*[FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]Remarks             [/FONT] *

*[FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]Default             value for this property is the value from the OPCGroups             corresponding default value at time of the Add(); [/FONT] *

*[FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]Example             [/FONT] *

* [FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]VB             Syntax Example (getting the property): Dim CurrentValue As Boolean             Set MyGroups = AnOPCServer.OPCGroups [/FONT] *

* [FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]Set             OneGroup = MyGroups.ConnectPublicGroup ( “AnOPCGroupName” ) [/FONT] *

* ‘ [FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]some             more code here [/FONT] *

* [FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]Set             CurrentValue = OneGroup.IsSubscribed ‘ to get the value [/FONT] *

* [FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]VB             Syntax Example (setting the property): Set MyGroups =             AnOPCServer.OPCGroups [/FONT] *

* [FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]Set             OneGroup = MyGroups.ConnectPublicGroup ( “AnOPCGroupName” ) [/FONT] *

* ‘ [FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]some             more code here [/FONT] *

* [FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]OneGroup.IsSubscribed             = True ‘ to set the value [/FONT] *





* [FONT=NDLILE+TimesNewRoman,Bold, Times New Roman, serif]4.4.6.1 DataChange [/FONT] *

*[FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]Description             [/FONT] *

*[FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]The             DataChange event is fired when a value or the quality of a value             for an item within the group has changed. Note the event will not             fire faster than the update rate of the group. Therefore, item             values will be held by the server and buffered until the current             time + update rate is greater than the time of the previous update             (event fired). This is also affected by active states for both             Group and Items. Only items that are active, and whose group is             active will be sent to the client in an event. [/FONT] *

*[FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]Syntax             [/FONT] *

*[FONT=NDLHMM+TimesNewRoman, Times New Roman, serif]DataChange             (TransactionID As Long, NumItems As Long, ClientHandles() As Long,             ItemValues() As Variant, Qualities() As Long, TimeStamps() As             Date) [/FONT] *



grüße Andi


----------



## Dr. OPC (22 Juli 2011)

Wenn dein Excel Client eine Gruppe angelegt und dann mit "AddItems()" die Variablen hinzufügt, wird für jedes OPC Item ein sogenanntes ClientHandle vergeben. Das ist eine Index-Nummer die du (der Client) selber vergeben kannst. 

Beispiel: nehmen wir an du hast für deine vier Items 1,2,3,4 als ClientHandle vergeben.

Der Server merkt sich diese ClientHandles und wenn er dich über Datenänderungen informiert, schickt er dir einen OnDataChange Event. Dieser Callback enthält nur die Items, die sich auch geändert haben inklusive der dazugehörigen ClientHandles. 

Im Eventhandler diese Callbacks kannst du also, anhand des mitgelieferten ClientHandles, erkennen welche deiner OPCItems sich geändert hat.

Beispiel: nehmen wir an es kommt ein DataChange mit zwei geänderten Werten, einer vom ClientHandle 2 und einer vom ClientHandle 4.


----------



## OPCNews (1 August 2011)

Vielleicht auch interessant? Es gibt einen fertigen OPC-Server für die S7 Steuerung von MatrikonOPC... einfach mal testen:

http://www.matrikonopc.de/opc-server/opc-siemens-s7.aspx


----------



## Dr. OPC (1 August 2011)

> Vielleicht auch interessant?


Leider NICHT interesant, da wir hier versuchen grundsätzliches Problem von bobby765 zu lösen, nähmlich die Frage wie man im DataChange erkennt welche Items sich geändert haben. Das ist unabhängig davon welchen OPC Server von welchen Firma man verwendet.

Auf eine Werbung für Matrikon-OPC Server kann also verzichtet werden, es sei denn es gibt dort ein Excel-Beispiel in dem die Auswertung von DataChanges in VBA super erklärt wäre. Dieses Codefragment darfs Du gerne hier posten.


----------

