2016-06-24 105 views
0

Ich arbeite derzeit mit dem OPC UA Foundation Java Stack, ohne zusätzliche SDKs.OPC UA Java - Wie bekomme ich MonitoredItemID von einem Abonnement? PublishResponse

Ich habe es geschafft, Subskriptionen mit mehreren überwachten Elementen zu implementieren, und ich erhalte die Änderungsbenachrichtigungen korrekt über die Veröffentlichungsantwort.

Das Problem ist, dass ich nicht herausfinden kann, welches überwachte Element für die Datenänderungsantwort verantwortlich ist, wenn ich mehrere Elemente in einem Abonnement habe. Die MonitoredItemNotification scheint keine Methode dafür zu haben ?! Also, wie kann ich eine itemId, displayname, nodeId oder nur irgendwas, um das Element in der Antwort zu identifizieren?

Dies ist die Antwort, die ich erhalten (für jedes Element fast identisch aussieht):

ResponseHeader=ResponseHeader 
Timestamp=06/23/16 10:36:41.9018551 GMT 
RequestHandle=0 
ServiceResult=GOOD (0x00000000) "" 
ServiceDiagnostics=Diagnostic Info: 

StringTable=class java.lang.String[0] 
AdditionalHeader=null 
SubscriptionId=92 
AvailableSequenceNumbers=class org.opcfoundation.ua.builtintypes.UnsignedInteger[2] 
[0]=1 
[1]=2 
MoreNotifications=false 
NotificationMessage=NotificationMessage 
SequenceNumber=2 
PublishTime=06/23/16 10:36:41.9018551 GMT 
NotificationData=class org.opcfoundation.ua.builtintypes.ExtensionObject[1] 
    [0]=DataChangeNotification: DataChangeNotification 
    MonitoredItems=class org.opcfoundation.ua.core.MonitoredItemNotification[1] 
     [0]=MonitoredItemNotification 
     ClientHandle=0 
     Value=DataValue(value=true, statusCode=GOOD (0x00000000) "", sourceTimestamp=06/23/16 10:36:41.7146527 GMT, sourcePicoseconds=0, serverTimestamp=null, serverPicoseconds=0) 
    DiagnosticInfos=class org.opcfoundation.ua.builtintypes.DiagnosticInfo[0] 

Results=class org.opcfoundation.ua.builtintypes.StatusCode[0] 
DiagnosticInfos=class org.opcfoundation.ua.builtintypes.DiagnosticInfo[0] 
+0

haben Bitte geben Sie die Antwort markiert als angenommen, da es auch Menschen helfen, die gleiche Frage, die Lösung easilly verstehen zu müssen. –

Antwort

1

Jeder MonitoredItem trägt ihre eigenen clienthandle haben.

Wenn Sie eine CreateMonitoredItems-Anforderung an den Server senden, sollten Sie das gewünschte ClientHandle in jedem MonitoredItemCreateRequest übergeben. Dies wird in der MonitoredItemNotification jeder Publish Response zurückgegeben.

Ich denke, man den Wert „0“ übergeben, das ist, warum Sie

[0]=MonitoredItemNotification 
    ClientHandle=0 
    Value=DataValue(value=true, statusCode=GOOD (0x00000000) "", sourceTimestamp=06/23/16 10:36:41.7146527 GMT, sourcePicoseconds=0, serverTimestamp=null, serverPicoseconds=0)