2016-06-24 30 views
0

我目前正在使用OPC UA Foundation Java Stack,沒有任何額外的SDK。OPC UA Java - 如何從訂閱中獲取MonitoredItemID publishResponse

我設法實現與多個監控項目的訂閱,並通過發佈響應正確地獲取更改通知。

問題是,當我在一個訂閱中有多個項目時,我無法確定哪個監控項目負責datachange響應。 MonitoredItemNotification似乎沒有一個方法呢?! 那麼我怎麼能得到一個itemId,displayname,nodeId或只是任何東西來識別響應中的項目?

這是我得到的迴應(看起來幾乎相同的每個項目):

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

請註明答案所接受,因爲這將也有助於具有相同問題easilly瞭解解決方案的人。 –

回答

1

每個MonitoredItem應有自己ClientHandle。

當您向服務器發送CreateMonitoredItems請求時,您應該在每個MonitoredItemCreateRequest中傳遞所需的ClientHandle。 這將在每個發佈響應的MonitoredItemNotification中返回。

我猜你傳遞的值「0」,這就是爲什麼你必須

[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)