OPC UA Java - 如何从订阅publishResponse

时间:2016-06-24 07:34:07

标签: java subscription opc opc-ua

我目前正在使用OPC UA Foundation Java Stack,没有任何其他SDK。

我设法实现了包含多个受监控项目的订阅,并且我通过发布回复正确获取了更改通知。

问题是当我在一个订阅中有多个项目时,我无法弄清楚哪个受监视项目负责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]

1 个答案:

答案 0 :(得分: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)