Nodes 节点 (C)
C SDK 没有 C# 的 NodeCollection / OpcUaNode Lazy Load 包装类, 所有节点访问都是直接对 NodeId 字符串调 API.
子页跳转
- C#
ua.Nodes索引器在 C 中如何模拟请参考 NodeCollection. - C#
OpcUaNode单节点包装在 C 中如何模拟请参考 OpcUaNode. - 单层浏览请参考 Browse.
- 续翻分页请参考 BrowseNext.
- 完整遍历的封装模板请参考 Browse 自动分页.
- 路径批量解析请参考 TranslateBrowsePaths.
- 高频访问加速请参考 RegisterNodes.
三种访问节点的方式
/* 方式 1: 直接 NodeId 字符串 (最直白, 最省 RPC) */
DarraUa_Status st = 0;
DarraUa_DataValue* dv = DarraUa_Session_ReadNode(
h, "ns=2;s=Temperature", DARRA_UA_ATTR_VALUE, &st);
/* 方式 2: 浏览拿子 NodeId 后再读 (探索式) */
DarraUa_BrowseResult* br = NULL;
DarraUa_Session_BrowseNode(h, "i=85", DARRA_UA_NODE_CLASS_UNSPECIFIED, &br);
/* 找到 BrowseName 匹配的子, 取其 NodeId 字符串再 Read */
/* 方式 3: 路径解析 (一次 RPC 翻多段) */
char buf[128];
DarraUa_Session_ResolveBrowsePath(
h, "i=85", "/Server/ServerStatus/CurrentTime", buf, sizeof(buf));
/* buf 现在是 "i=2258", 用它 Read */
三种方式底层都走相同 RPC, 选你觉得最自然的就行.
选择指南
| 场景 | 推荐 |
|---|---|
| 已知精确 NodeId (生产代码) | 方式 1 字符串 |
| 标准 ns=0 节点 | 方式 1 + WellKnownNodes 宏 |
| 浏览树 / 一次性脚本 | 方式 2 BrowseNode |
| 100+ 路径批量初始化 | TranslateBrowsePaths |
| 长期运行高频访问 | RegisterNodes 加速 |