opc-ua - 使用 eclipse milo 构建用于历史数据访问的 OPC UA 服务器

标签 opc-ua milo

我是 OPC-UA 新手,遇到了 eclipse milo 项目。项目看起来很有趣,但开发人员的帮助很少。我正在尝试浏览代码以找出如何使用历史数据实现 Node。项目有其他示例可供引用,但缺少历史服务示例。我尝试修改ExampleNameSpace.java中提供的示例以启用UaVariableNode上的历史记录,但在Prosys OPC UA客户端中,它没有为节点启用“显示历史记录”菜单。这是我尝试过的

UaVariableNode node = new UaVariableNode.UaVariableNodeBuilder(server.getNodeMap())
            .setNodeId(new NodeId(namespaceIndex, "HelloWorld/Dynamic/" + name))
            .setAccessLevel(ubyte(AccessLevel.getMask(AccessLevel.READ_WRITE)))
            .setBrowseName(new QualifiedName(namespaceIndex, name))
            .setDisplayName(LocalizedText.english(name))
            .setDataType(typeId)
            .setTypeDefinition(Identifiers.BaseDataVariableType)
            **.setHistorizing(true)**
            .build();

如果使用milo实现historyService的人可以分享示例,那将会非常有帮助。

更新:抱歉,我应该包含我实现的其他部分。看完其他stack overflow post ,我在命名空间中实现了historyRead函数,它将负责从数据存储中提取历史读取。我现在的麻烦是向 OPC 客户端指示 Node 具有历史记录功能。测试是让prosys OPC客户端为Node启用“History”菜单。我可能在这里遗漏了一些东西。

最佳答案

Milo Server SDK 不会为您实现历史服务。

设置历史化属性只是冰山一角。您的 Namespace 还必须覆盖 AttributeHistoryManager 中定义的 historyRead(如果您想支持的话,还需要覆盖 historyUpdate)方法并提供实现方案。如果您不熟悉 UA 历史记录的工作原理,这是不可能的,这在规范的第 11 部分中都有定义。

您还必须负责实际存储任何设置了历史化属性的节点的历史记录,以便您实现的服务实际上拥有一些数据去查询一下。

FWIW,开发人员文档正在开发中,应该会在接下来的几个版本中得到大幅改进。

历史记录不太可能作为 SDK 的一部分实现,只需轻按一下开关,它就会开始工作。它相当复杂,并且服务的有效实现可能会耦合到您正在使用的任何后备存储。

关于opc-ua - 使用 eclipse milo 构建用于历史数据访问的 OPC UA 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47556432/

相关文章:

opc - OPC UA 是从许多 Scada 系统获取数据的最佳方式吗?

opc-ua - 使用 Eclipse Milo 了解 OPC-UA 安全性

opc-ua - Eclipse Milo,OPC-UA : where to start?

java - 如何可靠地写入 OPC UA 服务器?

java - eclipse 米洛 : Does method support argument array?

java - 如何在客户端的 Eclipse Milo 中处理断开连接/重新连接?

node.js - 如何使用node-opcua订阅优先级?

hadoop - Apache Nifi 和 OPC 集成问题(GetValue 处理器)