跳到主要内容

TranslateBrowsePaths

TranslateBrowsePathsToNodeIds 服务把 "BrowsePath 字符串"批量解析为 NodeId, 单次 RPC. 比循环 Resolve 快得多.

前置阅读

签名

public IReadOnlyList<TranslateResult> TranslateBrowsePaths(
IReadOnlyList<(string startingNodeId, string browsePath)> paths);

TranslateResult 字段

public sealed class TranslateResult
{
public string NodeId { get; init; } // 解析失败时 null
public StatusCode Status { get; init; }
}

用法

var paths = new[]
{
("i=85" /* Objects */, "/Server/ServerStatus/CurrentTime"),
("i=85", "/Server/ServerStatus/State"),
("ns=2;s=Boiler1", "/Temperature"),
("ns=2;s=Boiler1", "/Pressure"),
};

var results = ua.TranslateBrowsePaths(paths);
foreach (var r in results)
{
if (r.Status == StatusCode.Good)
Console.WriteLine($"OK: {r.NodeId}");
else
Console.WriteLine($"Fail: {r.Status}");
}

BrowsePath 段格式

格式含义
BrowseNamens=0 默认
ns:BrowseName指定 NamespaceIndex
/seg1/seg2/seg3多段, 用 /

例子:

BrowsePath含义
/Serverns=0 下子节点 Server
/2:Boiler1ns=2 下子节点 Boiler1
/Server/2:Boilers/2:Boiler1/2:Temperature多层组合

Resolve 的对比

APIRPC 次数适用
Resolve(path)1 (内部走 TranslateBrowsePaths 单条)偶尔用, 单条路径
TranslateBrowsePaths(paths[])1100+ 路径批量
链式索引器 node[a][b][c]N (每段一次 Browse)探索式

100 个 Tag 的初始化 NodeId 解析, 用 TranslateBrowsePaths 比循环 Resolve 快 10-100 倍.

下一步