Direkte Auswertung von Digitalen Zuständen mit OPC

Zuviel Werbung?
-> Hier kostenlos registrieren
Nach langem probieren bin ich leider nicht viel schlauer geworden. Wenn ich pErrors in S_OK ändere kommt exact der selbe Fehler. Wenn ich aber S_FALSE einsetze, lässt es sich nicht mal mehr debuggen. Braucht man diesen pErrors überhaupt? Was sagt der eigentlich aus?
gruß
Michael
 
Nein, da scheint es ein Verständnisplroblem zu geben.

Bei AddItems werden die Items in die OPC Gruppe hinzugefügt. Die Funktion gibt als HR entweder S_OK oder S_False zurück. Wenn S_OK kommt ist alles gut gegangen, wenn S_False zurückkommt, ist es "teilweise" gut gegangen und dann musst du dir den pErrors anschauen (den bekommst du zurück es ist ein OUT Parameter). Da du mehrere Items in einem AddItems aufruf hinzufügen kannst, ist der pErrors ein Array mit Fehlercodes für jedes einzelne Item, das du hinzugefügt hast. Es könnte ja sein das von 20 Items, die du hinzufügst 18 funktioniert haben aber bei 2 hast du versehentlich eine falsche ItemID reingegeben, dann wäre für 18 Items der pErrors = S_OK aber für die zwei falschen ist der pErrors= E_OPC_InvalidItemID (falsche Syntax) oder für pErrors=E_OPC_UnknownItemID (richtige Syntax aber das Item gibt es nicht).

Tatsächlich wurden dann nur 18 und nicht alle 20 Items in die Gruppe hinzugefügt.

Und natürlich bekommst du dann für die 2 "defekten" Items auch keinen DataChange. Für welche Items ein DataChange gekommen ist, erkennst du anhand des ClientHandles. Das legst du bei AddItems selber fest (IN-Parameter) und beim DataChange gibt dir der Server dieses ClientHandle zurück (OUT-Parameter) damit du weißt welche deiner 18 Items sich geändert haben, denn es müssen sich ja nicht unbedingt alle Items gleichzeitig geändert haben (vielleicht nur 3, 7 und 15).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke erstmal.
Ich denk die ganze Zeit, dass das ahrErrors das Array für die Fehler ist, da das ja auch das Array ist, das mit den Arrays (ClientHandle,ServerHandle..) an AddItems übergeben wird. Aber wofür ist denn jetzt das ahrErrors?
Und wieso stürzt das Programm immer an der Stelle des Aufrufes von pErrors ab? Der Rückgabewert hr ist bei Aufruf laut Debugger S_OK. Also rührt der Fehler, wie Dr. OPC vermutet hatte, nicht daher.


Vielleicht kann man dieses Thema auch in den Hochsprachen & OPC verschieben. ICh glaub da ist es besser aufgehoben.
 
Zuletzt bearbeitet:
Hallo Leute!
Erst mal dicken Dank für Eure Hilfe. Besonders an Dr. OPC. Ich hab es jetzt geschafft mir einen kleinen Client zu schreiben, der auf Änderungen der Eingangsvariablen reagiert. Alles was jetzt kommt sollte nur noch C++ Mfc sein. Wenn nicht, weiß ich ja wo ich Euch finde ;-)

Gruß Michael
 
Zurück
Oben