任何人都可以帮我解决OPC UA的以下用例吗?:从OPC UA服务器读取触发的测量结果,其中附加的测量值发生在触发条件发生之前的时间段内。这个预触发周期是可配置的,比方说半秒。这允许查看在感兴趣的触发发生之前发生的事情。
我将如何进行?:一旦触发发生,使结果可用于OPC UA客户端,然后客户端应该在相同的触发器上操作以检索触发发生之前的时间段的先前历史测量值。我希望有一个更聪明的方法,以便客户可以保持无国籍。并且不要求数据稍后到达,以便在将后触发值发送到客户端之前首先发送预触发值。
鉴于数据必须以任何方式缓冲以使其成为可能,这可行吗?:
我在Milo服务器示例中看到,在ExampleNameSpace中,AttributeValueDelegate构造用于动态节点。这似乎允许一次返回一个数据值,包括时间戳。如果我开始返回相对较旧的值,我没有正确的测试工具来查看它是否有效。
另一个问题是这与监控项目和采样间隔有何关系。例如,如果客户要求每秒10个样本的采样率,那么它是否会检查返回的被监视项目是否实际在该范围内?即迟到的旧价值会被丢弃还是被客户拉入?
答案 0 :(得分:0)
无论您采取何种方法,都要求客户了解您在此处所做的事情,所以这是一种可行的方法:
在服务器中创建两个节点,一个保存当前测量值的标量,以及一个保存最后N个测量值的数组。
在客户端中,使用MonitoringMode.Reporting为标量值创建受监视项,并使用MonitoringMode.Sampling为数组值创建受监视项。然后使用SetTriggering服务在标量项和数组项之间创建一个触发链接。
这将导致您可以自由更新服务器中的数组值,而不会将值报告为已更改,但是当您更新标量值并报告更改时,也会报告数组的当前值
作为旁注,我避免依赖AttributeDelegate机制进行新开发。在0.3开始开发之后,它将被弃用并替换为其他东西。