0

任何人都可以帮助我解决以下 OPC UA 用例吗?:从 OPC UA 服务器读取触发测量值,其中包含在触发条件发生之前的时间段内发生的附加测量值。这个预触发周期是可配置的,比方说半秒。这允许查看在感兴趣的触发发生之前发生的事情。

我该怎么做?:一旦触发发生,就可以将结果提供给 OPC UA 客户端,然后客户端应该对同一个触发进行操作,以检索触发发生之前时期的先前历史测量值。我希望有一个更聪明的方法,让客户端可以保持无状态。并且不要求数据稍后到达,以便在将触发后值发送到客户端之前先发送前触发值。

鉴于无论如何都必须缓冲数据才能使这成为可能,这可以工作吗?:

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

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

另一件事是这与监控项目和采样间隔的关系。例如,如果客户端请求每秒 10 个样本的采样率,它会检查返回的监控项是否实际上在该范围内?即较晚到达的旧值会被丢弃还是被客户端拉入?

4

1 回答 1

0

无论您采用哪种方法,都需要客户了解您在此处所做的事情,因此这是一种可能有效的方法:

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

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

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

作为旁注,我会避免依赖 AttributeDelegate 机制进行新开发。一旦 0.3 开始开发,它将被弃用并被其他东西取代。

于 2017-12-16T17:13:06.943 回答