如何阅读订阅需求的值?

时间:2016-08-23 11:42:59

标签: c# subscription opc-ua

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

确定。但是我想稍微反转它 - 不要为变量设置静态值,不要依赖这个手动刷新周期,但每当要读取变量(订阅需求)时,动态计算值并返回它给客户。

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

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

1 个答案:

答案 0 :(得分:0)

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

客户可以通过 - interval = 0和队列的一些实际大小来请求连续报告。