2

我使用 Milo 项目启动了一个 OPC UA 项目,以创建一个 OPC UA 客户端。我对 OPC UA 还是很陌生。现在,我一直在寻找在一个特定节点的数据更改后从多个节点读取值的最佳实践。

信息模型如下所示: RfidSensorType

在我的服务器上,我将拥有这个 RfidSensorType 的几个对象。客户端在 CurrentAtTag 节点上创建订阅以侦听数据更改。

我的问题:当 CurrentAtTag 的值发生更改时,将在我的客户端中调用一个回调函数,其中包含 UaMonitoredItem 和 CurrentAtTag 的 DataValue。在我的应用程序中,我还需要处理(同时)Station、IOLPort 和 CurrentValue 的值,这些值也在那个时候发生了变化。如何从 CurrentAtTag 的回调中访问这些值?

我唯一的解决方案是:在该回调中使用同步读取请求->这是一种合法的方法吗?

我的研究: 1)TriggeringService 我已经看到存在一个TriggerigService,它监控项目只会在一个特定节点更改它的值时发送报告。问题:这将调用几个回调,而只调用一个..我需要同时所有信息来进一步处理它们..

2) 事件监控 在事件监控中,可以选择“事件字段”,每个事件通知都会返回。我不确定是否可以选择 CurrentAtTag、Station、IOLPort 和 CurrentValue...

4

1 回答 1

1

就像您可以订阅服务器的 ServerStatus (nodeid "i=2256") 一样,您应该能够订阅对应于 'RfidSensor_Station1' 的 nodeid。服务器将发送带有“RfidSensorType”类型数据的 PublishResponse,编码为 ExtensionObject。诀窍是解码 ExtensionObject。

正如 Kevin 更正的那样,因为“RfidSensor_Station1”不是节点类“变量”,所以它没有值属性,您无法监视节点的数据更改。如果您使用的是 PLC,我可能会将传感器的所有属性组合成一个字符串或字节数组。然后我监视新变量,并在客户端解析字符串。

或者您可以按照您的描述进行 ReadRequest。那会很好用。

于 2016-10-13T23:54:46.803 回答