TranslateBrowsePaths
TranslateBrowsePathsToNodeIds 服务把 "BrowsePath 字符串"批量解析为 NodeId, 单次 RPC. 比循环 Resolve 快得多.
前置阅读
- 想链式探索建议用 OpcUaNode 索引器.
- 100+ 路径批量初始化必用本 API.
签名
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 段格式
| 格式 | 含义 |
|---|---|
BrowseName | ns=0 默认 |
ns:BrowseName | 指定 NamespaceIndex |
/seg1/seg2/seg3 | 多段, 用 / 分 |
例子:
| BrowsePath | 含义 |
|---|---|
/Server | ns=0 下子节点 Server |
/2:Boiler1 | ns=2 下子节点 Boiler1 |
/Server/2:Boilers/2:Boiler1/2:Temperature | 多层组合 |
与 Resolve 的对比
| API | RPC 次数 | 适用 |
|---|---|---|
Resolve(path) | 1 (内部走 TranslateBrowsePaths 单条) | 偶尔用, 单条路径 |
TranslateBrowsePaths(paths[]) | 1 | 100+ 路径批量 |
链式索引器 node[a][b][c] | N (每段一次 Browse) | 探索式 |
100 个 Tag 的初始化 NodeId 解析, 用 TranslateBrowsePaths 比循环 Resolve 快 10-100 倍.