WellKnownNodes (C)
C SDK 不像 C# 提供 WellKnownNodes 静态类, 但 OPC Foundation 标准节点的 NodeId 字符串永远固定 (ns=0). 推荐项目里自己定义一个宏头, 用宏代替手写字符串提升可读性.
配套
- 命名空间反查见 Namespaces.
- 通过 NodeId 读取数据见 Read / Write.
推荐的项目宏头
/* well_known_nodes.h — 标准 OPC UA 节点 (ns=0) */
#ifndef WELL_KNOWN_NODES_H
#define WELL_KNOWN_NODES_H
/* 根 */
#define WK_ROOT_FOLDER "i=84"
#define WK_OBJECTS_FOLDER "i=85"
#define WK_TYPES_FOLDER "i=86"
#define WK_VIEWS_FOLDER "i=87"
/* Server 自身 */
#define WK_SERVER "i=2253"
/* ServerStatus 结构 */
#define WK_SERVER_STATUS "i=2256"
#define WK_SERVER_STATUS_STATE "i=2259"
#define WK_SERVER_STATUS_CURRENT_TIME "i=2258"
#define WK_SERVER_STATUS_START_TIME "i=2257"
#define WK_SERVER_STATUS_BUILD_INFO "i=2260"
/* Server 字符串数组 */
#define WK_SERVER_ARRAY "i=2254"
#define WK_NAMESPACE_ARRAY "i=2255"
/* 标准 ReferenceType */
#define WK_HAS_COMPONENT "i=47"
#define WK_HAS_PROPERTY "i=46"
#define WK_ORGANIZES "i=35"
#define WK_HAS_TYPE_DEFINITION "i=40"
#define WK_HAS_SUBTYPE "i=45"
#endif /* WELL_KNOWN_NODES_H */
用法对比
/* 不推荐: 硬编码 */
DarraUa_DataValue* dv = DarraUa_Session_ReadNode(
h, "i=2258", DARRA_UA_ATTR_VALUE, &st);
/* 推荐: 用宏 */
#include "well_known_nodes.h"
DarraUa_DataValue* dv = DarraUa_Session_ReadNode(
h, WK_SERVER_STATUS_CURRENT_TIME, DARRA_UA_ATTR_VALUE, &st);
ServerStatus 完整读取示例
const char* nodes[] = {
WK_SERVER_STATUS_STATE,
WK_SERVER_STATUS_CURRENT_TIME,
WK_SERVER_STATUS_START_TIME,
WK_NAMESPACE_ARRAY,
};
DarraUa_DataValue* dvs[4] = { NULL };
DarraUa_Session_ReadNodes(h, nodes, NULL, 4, dvs);
for (int i = 0; i < 4; ++i) {
if (!dvs[i]) continue;
const DarraUa_Variant* v = DarraUa_DataValue_GetValue(dvs[i]);
printf("%-30s -> ", nodes[i]);
/* 按类型格式化 (略, 详见 Variant 章节) */
DarraUa_DataValue_Delete(dvs[i]);
}
完整列表
| 节点 | NodeId | 含义 |
|---|---|---|
| Root | i=84 | Address Space 根 |
| Objects | i=85 | 业务数据根 |
| Types | i=86 | 类型定义根 |
| Views | i=87 | 视图根 |
| Server | i=2253 | Server 自身对象 |
| ServerStatus | i=2256 | Server 状态结构 |
| ServerStatus.State | i=2259 | 状态 (Running / Failed / ...) |
| ServerStatus.CurrentTime | i=2258 | 服务端当前时间 |
| ServerStatus.StartTime | i=2257 | 服务端启动时间 |
| ServerStatus.BuildInfo | i=2260 | 厂商 / 产品 / 版本 |
| ServerArray | i=2254 | 服务端数组 |
| NamespaceArray | i=2255 | 命名空间数组 |
| HasComponent | i=47 | ReferenceType |
| HasProperty | i=46 | ReferenceType |
| Organizes | i=35 | ReferenceType |
| HasTypeDefinition | i=40 | ReferenceType |
| HasSubtype | i=45 | ReferenceType |
完整 OPC UA 标准 NodeId 详见 OPC UA Part 6 附录与 OPC Foundation 提供的 Opc.Ua.NodeIds.csv 表 (跨语言通用).