0

这是一个例子。

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))时,它返回一个System.string[]. 我需要使用一些方法来获取 string[0] 数据。

如何仅通过节点路径读取“Jone”而不采取一些方法来获取“Jone”?


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

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

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

在此处输入图像描述

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

它的Browse Name 可以设置为AxisNameList[u1,1] 来读取数组{1},并且它配置只浏览一个节点,如“AxisNameList”节点。

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

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

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

4

1 回答 1

0

OPC UA 规范第 4 部分

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

读取服务参数

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

ReadValueId 数据类型

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;
};
于 2017-03-29T10:02:56.140 回答