OPC UA Java - 如何从订阅 publishResponse 获取 MonitoredItemID
OPC UA Java - How to get MonitoredItemID from a subscription publishResponse
我目前正在使用 OPC UA Foundation Java 堆栈,没有任何额外的 SDK。
我设法实现了对多个受监控项目的订阅,并且我通过发布响应正确地收到了更改通知。
问题是当我在一个订阅中有多个项目时,我无法确定哪个监控项目负责数据更改响应。
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]
每个 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)
我目前正在使用 OPC UA Foundation Java 堆栈,没有任何额外的 SDK。
我设法实现了对多个受监控项目的订阅,并且我通过发布响应正确地收到了更改通知。
问题是当我在一个订阅中有多个项目时,我无法确定哪个监控项目负责数据更改响应。 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]
每个 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)