繁体   English   中英

将预触发值从OPC UA服务器发布到OPC UA客户端

[英]Publish pre-trigger values from an OPC UA server to a OPC UA client

谁能为我提供以下OPC UA用例的帮助吗?:从OPC UA服务器读取触发的测量值,以及触发条件发生之前一段时间内发生的其他测量值。 该预触发时间段是可配置的,例如半秒。 这样一来,您就可以查看发生兴趣触发之前发生的情况。

我将如何处理?:触发一发生,将结果提供给OPC UA客户端,然后客户端应作用于相同的触发,以检索触发发生之前一段时间的先前历史测量值。 我希望有一种更聪明的方法,以便客户端可以保持无状态。 并且不要求数据稍晚到达,以便在将触发后值发送到客户端之前先发送触发前值。

鉴于必须以任何方式缓冲数据以使之成为可能,这行得通吗?:

  • 我的OPC UA服务器中的后端测量数据提供者可以开始将数据值从早于半秒(已配置的预触发周期)开始的数据返回给客户端。 即不返回当前测量值,而是从预触发值开始。

我在Milo服务器示例中看到,在ExampleNameSpace中,AttributeValueDelegate构造用于动态节点。 这似乎允许一次返回一个包括时间戳在内的数据值。 我没有适当的测试工具来查看如果我开始返回相对旧的值是否可行。

另一件事是这与受监控的项目和采样间隔之间的关系。 例如,如果客户将请求每秒10个样本的采样率,那么它将检查返回的监视项目是否确实在该范围内吗? 就是说,较晚到达的旧值会被丢弃还是由客户提取?

无论您采用哪种方法,都将要求客户知道您在这里所做的事情,因此这是一种可行的方法:

在服务器中创建两个节点,一个保存当前测量值的标量,一个保存最后N个测量值的数组。

在客户端中,使用MonitoringMode.Reporting为标量值创建一个监视项,并使用MonitoringMode.Sampling为数组值创建一个监视项。 然后使用SetTriggering服务在标量项和数组项之间创建触发链接。

这将导致您可以自由更新服务器中的数组值,而不会将该值报告为已更改,但是当您更新标量值并报告更改时,也会同时报告该数组的当前值。

作为附带说明,我将避免依赖AttributeDelegate机制进行新开发。 一旦在0.3上开始开发,它将被弃用并替换为其他内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM