OPC UA 如何从服务器读取数据类型
OPC UA How to read a datatype from the server
我似乎想不通:
在写入标签之前,我需要知道它期望的数据类型(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 转换为我可以使用的东西。
如有任何帮助,我们将不胜感激。
谢谢
正在从 DataType 属性读取 returns OPC UA 类型的 NodeID。它可以是 OPC UA 规范中定义的 "standard" 类型之一,或者特定于服务器的类型。标准类型驻留在命名空间 0 中,这是您的情况(因为显示的节点 ID 中没有 "ns=..." 部分),"i=6" 代表 Int32。
有很多类型都有预定义的节点ID,你需要查阅OPC UA规范,或者stacks/SDKs附带的节点集文件(例如Opc.Ua.NodeSet.xml),以了解明白他们的意思。
该值为引用数据类型节点的 NodeId。您可以将该值与已知的 NodeId 值(.NET 中的 DataTypeIds 或其他东西,现在不确定)进行比较,或者您需要从地址 space.
中找到数据类型节点
在最近的版本中,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();
}
});
我似乎想不通:
在写入标签之前,我需要知道它期望的数据类型(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 转换为我可以使用的东西。
如有任何帮助,我们将不胜感激。
谢谢
正在从 DataType 属性读取 returns OPC UA 类型的 NodeID。它可以是 OPC UA 规范中定义的 "standard" 类型之一,或者特定于服务器的类型。标准类型驻留在命名空间 0 中,这是您的情况(因为显示的节点 ID 中没有 "ns=..." 部分),"i=6" 代表 Int32。
有很多类型都有预定义的节点ID,你需要查阅OPC UA规范,或者stacks/SDKs附带的节点集文件(例如Opc.Ua.NodeSet.xml),以了解明白他们的意思。
该值为引用数据类型节点的 NodeId。您可以将该值与已知的 NodeId 值(.NET 中的 DataTypeIds 或其他东西,现在不确定)进行比较,或者您需要从地址 space.
中找到数据类型节点在最近的版本中,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();
}
});