我使用Milo项目启动了OPC UA项目来创建OPC UA客户端。我对OPC UA还很新。现在,我很难找到在一个特定节点的数据更改后从多个节点读取值的最佳实践。
信息模型如下所示: RfidSensorType
在我的服务器上,我将有几个这个RfidSensorType的对象。客户端在CurrentAtTag节点上创建订阅以侦听数据更改。
我的问题: 当CurrentAtTag的值改变时,将在我的客户端中调用回调函数,该函数包含UaMonitoredItem和CurrentAtTag的DataValue。 在我的应用程序中,我需要处理(同时)也在那时更改的Station,IOLPort和CurrentValue的值。 如何在CurrentAtTag回调中访问这些值?
我唯一的解决方案是:在该回调中使用同步读取请求 - >这是一种合法的做法吗?
我的研究: 1)TriggeringService 我已经看到存在TriggerigService,只有当一个特定节点更改它时,监视项才会发送报告。 问题:这将调用几个回调,而noz只需一个..我需要同时处理所有信息以进一步处理它们。
2)事件监控 在事件监视中,可以选择“事件字段”,将为每个事件通知返回。我不确定我是否可以选择CurrentAtTag,Station,IOLPort和CurrentValue ......
答案 0 :(得分:0)
就像您可以订阅服务器的ServerStatus(nodeid" i = 2256")一样,您应该能够订阅与' RfidSensor_Station1相对应的nodeid&# 39 ;.服务器将发送PublishResponse,其数据类型为' RfidSensorType'编码为ExtensionObject。诀窍是解码ExtensionObject。
凯文纠正,因为' RfidSensor_Station1'不是节点类'变量'那么它没有值属性,您无法监视节点的数据更改。如果您使用的是PLC,我可能会将传感器的所有属性组合成一个字符串或字节数组。然后我监视新变量,并解析客户端中的字符串。
或者你可以按照你的描述制作ReadRequest。这样做会很好。