我使用的是eclipsemilo的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),但不是类型。
2条答案
按热度按时间bfrts1fy1#
这不是一个解决方案,但是也许值得检查identifiers类。此类包含opc ua数据类型,并基于数据类型的id值创建nodeid。您可以编写一个类来反转此过程,并根据id值查找数据类型。
可能有更好的解决方案,但我使用EclipseMilo的时间不长,所以目前我还不知道。
eeq64g8w2#
opc ua中的数据类型由nodeid标识,所以您看到的是正常的。
如果需要帮助将数据类型解析为“backing”类,可以查看
DataTypeTree
协助课程:https://github.com/eclipse/milo/blob/master/opc-ua-sdk/sdk-core/src/main/java/org/eclipse/milo/opcua/sdk/core/datatypetree.java
https://github.com/eclipse/milo/blob/master/opc-ua-sdk/integration-tests/src/test/java/org/eclipse/milo/opcua/sdk/core/datatypetreetest.java