跳到主要内容

TranslateBrowsePaths

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

前置阅读
  • 想链式探索建议用 Node 索引器.
  • 100+ 路径批量初始化必用本 API.

签名

std::vector<TranslateResult> TranslateBrowsePaths(
std::vector<std::pair<std::string, std::string>> const& paths);

每项 (starting_node_id, browse_path).

TranslateResult 结构

struct TranslateResult {
std::string node_id; // 解析失败时为空
Status status = Status::Bad;
};

用法

std::vector<std::pair<std::string, std::string>> paths = {
{ "i=85" /* Objects */, "/Server/ServerStatus/CurrentTime" },
{ "i=85", "/Server/ServerStatus/State" },
{ "ns=2;s=Boiler1", "/Temperature" },
{ "ns=2;s=Boiler1", "/Pressure" },
};

auto results = s.TranslateBrowsePaths(paths);
for (auto const& r : results) {
if (r.status == Status::Good) {
std::cout << "OK: " << r.node_id << "\n";
} else {
std::cout << "Fail: 0x" << std::hex << static_cast<uint32_t>(r.status) << "\n";
}
}

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 次数适用
s.Resolve(path)1 (内部走 TranslateBrowsePaths 单条)偶尔用, 单条路径
s.TranslateBrowsePaths(paths[])1100+ 路径批量
链式索引器 node["a"]["b"]["c"]N (每段一次 Browse)探索式

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

下一步