OPC UA如何从服务器读取数据类型

时间:2016-10-26 10:33:06

标签: opc opc-ua

我似乎无法想出这个:

在写入标记之前,我需要知道它期望的数据类型(mywrite函数接收的值总是一个字符串)。

我意识到你必须从服务器读取数据类型,这是我的代码,但我对如何使用返回的信息感到茫然:

var nodesToRead = BuildReadValueIdCollection(node.DisplayName, Attributes.DataType);

                    DataValueCollection readResults;
                    DiagnosticInfoCollection diag;
                    _session.Read(
                        requestHeader: null,
                        maxAge: 0,
                        timestampsToReturn: TimestampsToReturn.Neither,
                        nodesToRead: nodesToRead,
                        results: out readResults,
                        diagnosticInfos: out diag);
                    var val = readResults[0];

如何使用 val 来确定数据类型是什么?

我是否使用 Val.Value Val.WrappedValue Val.WrappedValue.Value (不管有什么区别? )

我用来测试的代码已返回 Val = "i=6".....

这指的是什么?

什么数据类型" 6"和

如何将val转换为我可以使用的东西。

非常感谢任何帮助。

由于

3 个答案:

答案 0 :(得分:3)

从DataType属性读取返回OPC UA类型的NodeID。它可以是OPC UA规范中定义的“标准”类型之一,也可以是服务器特有的类型。标准类型驻留在命名空间0中,这是您的情况(因为显示的节点ID中没有“ns = ...”部分),并且“i = 6”代表Int32。

有许多类型具有预定义的节点ID,您需要查阅OPC UA规范,或堆栈/ SDK附带的节点集文件(例如Opc.Ua.NodeSet.xml),以确定他们的意思是。

答案 1 :(得分:1)

该值是指向数据类型节点的NodeId。您可以将该值与已知的NodeId值进行比较(.NET中的DataTypeIds或其他内容,不确定此情况)或者您需要从地址空间中找到数据类型节点。

答案 2 :(得分:0)

在最近的版本中,node-opcua客户端已经使用实用程序函数ClientSession#getBuiltInDataType进行了扩展,为您执行此操作。

var nodeId = coerceNodeId("ns=411;s=Scalar_Simulation_Int64");
session.getBuiltInDataType(nodeId,function(err,dataType){
     if(!err){
       console.log("Use data Type",dataType," to write into UAVariable", nodeId.toString();
    }
});