【问题标题】:OPC UA Read string[] data type by nodes with pathOPC UA Read string[] data type by nodes with path
【发布时间】:2017-03-29 08:54:01
【问题描述】:

这是一个例子。

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(软件)来读取我的服务器的。它读取一个数组类型。 {AA,NN,CC}

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

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

enter image description here

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

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

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

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

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

【问题讨论】:

    标签: java c# client opc opc-ua


    【解决方案1】:

    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;
    };
    

    【讨论】:

    • 我去使用节点路径获取数组数据,没有使用一些方法。
    • 因为我在使用西门子数控机床的时候。它可以像 /Channel/MachineAxis/measPos2[u1,1] 读取位置。
    • 但是当我看到它时节点列表。它只是节点路径为 /Channel/MachineAxis/measPos2
    • 我使用这样的路径“Tool/Manager/Name[0]”,它显示 BadNodeIdUnknown。
    • 我的 OPC UA SDK 是 C# 版本。
    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 2021-03-26
    • 2023-02-09
    • 2017-06-14
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2021-01-07
    相关资源
    最近更新 更多