0

我正在使用 OPC-UA .Net 堆栈学习 OPC-UA。订阅和发送数据的示例是在服务器端以 1 秒的刷新周期显式创建的——即每秒更新变量的值,其余的(通知客户端)由 OPC-UA 堆栈处理。由于循环是手工制作的,这意味着即使根本没有订阅它也可以工作。

好的。但是我想稍微反转一下——不要给变量设置静态值,不要依赖这个手动刷新周期,而是每当变量即将被读取(订阅需求)时,动态计算值并返回它给客户。

OnReadValue在变量上添加了处理程序,当客户端订阅该值时,它被触发,该值被计算并返回。几乎正是我所希望的 - 问题是它只完成一次

我猜由于客户端每隔一段时间请求更新,因此在服务器上会有一些循环以这样的时间间隔进行。如何告诉服务器再次读取变量(以触发处理程序)?

4

1 回答 1

0

在阅读了提供的 OPC UA-.Net 堆栈的源代码后,我现在可以看到我错过了数据传输的组织方式。报告间隔不是为了“给我尽可能多的数据”,而是相反的“给我尽可能少的数据”。这是因为服务器是更改事件驱动的,而不是时间驱动的(或请求驱动的)——也就是说,变量值的任何变化都会被注意到,并且可以很高兴地排队等待报告,但间隔的作用是刹车 - 如果更改时间小于间隔,则不会将任何内容添加到队列中(因此不会报告)。

客户端可以请求连续报告——interval=0 和一些相当大的队列大小。

于 2016-08-29T11:38:36.187 回答