首页 > 解决方案 > 如何获取 UaNode 的 DataType?

问题描述

我正在使用 eclipse-milo 的 jars,版本 0.5.3。

我想读取特定节点,并将它们的值存储在数据库中。我打算动态构造数据库列,同时考虑到数据类型。例如:Float (Identifiers.Float) 类型的节点将是数据库中的 FLOAT。

我可以连接到 OPCUA 服务器,检索地址空间并读取节点值。

UaNode node = uaClient.getAddressSpace().getNode(nodeId);
DataValue dataValue = node.readAttribute(AttributeId.Value);
Object value = dataValue.getValue().getValue();

如何读取给定节点的值的类型?在上面的例子中,节点的数据类型。我尝试了以下方法:

Optional<ExpandedNodeId> dataType = dataValue.getValue().getDataType();        
if (dataType.isPresent()) {
    ExpandedNodeId nodeDataType = dataType.get();
    nodeDataType.getIdentifier();
}

接收到数据类型的标识符(ns=0;i=10),但不是类型。

标签: javaopc-uamilo

解决方案


这不是一个解决方案,但是也许值得检查 Identifiers 类。此类包含 OPC UA 数据类型,并根据数据类型的 id 值创建 NodeId。您可以编写一个反转此过程并根据 id 值查找数据类型的类。

可能有更好的解决方案,但我已经很久没有使用 Eclipse Milo,所以目前我不知道。


推荐阅读