我似乎无法想出这个:
在写入标记之前,我需要知道它期望的数据类型(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转换为我可以使用的东西。
非常感谢任何帮助。
由于
答案 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();
}
});