1

我是 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 可以分享示例,那将非常有帮助。

更新:对不起,我应该包括我实施的其他部分。在阅读了其他堆栈溢出帖子之后,我在命名空间中实现了 historyRead 函数,该函数将负责从数据存储中提取历史记录。我现在的麻烦是指示 OPC 客户端 Node 具有历史功能。测试是让prosys OPC客户端为节点启用“历史”菜单。我可能在这里遗漏了一些东西。

4

1 回答 1

1

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

设置Historizing属性只是冰山一角。您Namespace还必须重写historyReadhistoryUpdate如果您想支持它)中定义的方法AttributeHistoryManager并提供实现。如果您不熟悉 UA 历史的工作原理,这将是不可能的,这一切都在规范的第 11 部分中定义。

您还必须负责实际存储具有Historizing属性集的任何节点的历史记录,以便您实现的服务实际上有一些数据可以查询。

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

历史不太可能作为 SDK 的一部分以这样一种方式实现,即您只需轻按一个开关,它就会开始工作。它相当复杂,并且服务的有效实现很可能与您正在使用的任何后备存储耦合。

于 2017-11-29T18:13:17.763 回答