我是 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/