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

时间:2017-11-29 15:34:55

标签: opc-ua milo

我是OPC-UA的新手并且遇到了eclipse milo项目。项目似乎很有趣,但很少有开发人员的帮助。我正在尝试浏览代码以弄清楚如何使用历史数据实现Node。 Project有其他示例供参考但缺少历史服务示例。我尝试修改ExampleNameSpace.java中提供的示例以在UaVariableNode上启用历史记录,但在Prosys OPC UA Client中,它不会启用"显示历史记录"节点的菜单。这是我试过的

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的人可以共享示例,那将非常有用。

更新:抱歉,我应该包含我实施的其他部分。在阅读了其他{​​{3}}之后,我在命名空间中实现了historyRead函数,它将负责从数据存储中提取历史记录。我现在的麻烦是指示Node有历史能力的OPC客户端。测试是让prosys OPC客户端启用"历史"节点的菜单。我可能在这里遗漏了一些东西。

1 个答案:

答案 0 :(得分:0)

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

设置Historizing属性只是冰山一角。您的Namespace还必须覆盖historyRead中定义的historyUpdate(以及AttributeHistoryManagerHistorizing中定义的方法并提供实施。如果您不熟悉UA历史记录的工作方式,这将是不可能的,这在规范的第11部分中都已定义。

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

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

历史记录不太可能作为SDK的一部分实现,只需翻转一个开关即可开始工作。它相当复杂,服务的有效实施可能会与您正在使用的任何后备存储耦合。