OPC UA 通过具有路径的节点读取字符串 [] 数据类型

OPC UA Read string[] data type by nodes with path

这是一个例子。

Node Path = "Tool/Manager/Name"

Node data Type = "string" 数据为 "Jone"

当我使用nodesToRead.Add(new NodeId(path, 6));是工作!

但是,如果我将节点数据更改为 string[]{"Jone","Peter","Himari"}

当我使用nodesToRead.Add(new NodeId(path, 6))时,它return一个System.string[]。我需要使用一些方法来获取 string[0] 数据。

如何仅通过节点路径读取 "Jone" 而无需执行某些方法来获取 "Jone"?


这是用Softing(软件)读取我的服务器。它读取一个数组类型。 {AA,NN,CC}

我想知道如何通过设置浏览名称来读取每个元素?

示例:仅通过设置浏览名称读取 "AA"?

enter image description here

因为Siemens OPC Server 可以通过设置Browse Name 读取每个元素。

它的Browse Name可以像AxisNameList[u1,1]这样设置读取数组{1},它的Configuration像"AxisNameList" Node.

只浏览一个节点

如果我发布此路径 "AxisNameList",它将通过请求数组 [0] 数据。

如果我发布此路径 "AxisNameList[u1,1]",它将通过请求数组 [1] 数据。

如果我想实现这个功能,我该如何修改我的OPC UA服务器?

OPC UA 规范第 4 部分

5.10.2 读取服务 读取服务的参数定义如下

Read Service Parameters

nodesToRead[]的类型是ReadValueId, 定义如下

ReadValueId DataType

indexRange是你需要的参数。

因此,OPC UA 支持读取数组的单个元素。 但是不知道你们的SDK支持不支持

这里是我用的sdk中readparameters的数据类型

struct ReadParameters 
{
     double MaxAge;
     OpcUa::TimestampsToReturn TimestampsToReturn;
     std::vector<OpcUa::ReadValueId> AttributesToRead;

     ReadParameters();
};
struct ReadValueId 
{
     OpcUa::NodeId NodeId;
     OpcUa::AttributeId AttributeId;
     std::string IndexRange;
     OpcUa::QualifiedName DataEncoding;
};