跳到主要内容

WellKnownNodes (C)

C SDK 不像 C# 提供 WellKnownNodes 静态类, 但 OPC Foundation 标准节点的 NodeId 字符串永远固定 (ns=0). 推荐项目里自己定义一个宏头, 用宏代替手写字符串提升可读性.

配套

推荐的项目宏头

/* 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含义
Rooti=84Address Space 根
Objectsi=85业务数据根
Typesi=86类型定义根
Viewsi=87视图根
Serveri=2253Server 自身对象
ServerStatusi=2256Server 状态结构
ServerStatus.Statei=2259状态 (Running / Failed / ...)
ServerStatus.CurrentTimei=2258服务端当前时间
ServerStatus.StartTimei=2257服务端启动时间
ServerStatus.BuildInfoi=2260厂商 / 产品 / 版本
ServerArrayi=2254服务端数组
NamespaceArrayi=2255命名空间数组
HasComponenti=47ReferenceType
HasPropertyi=46ReferenceType
Organizesi=35ReferenceType
HasTypeDefinitioni=40ReferenceType
HasSubtypei=45ReferenceType

完整 OPC UA 标准 NodeId 详见 OPC UA Part 6 附录与 OPC Foundation 提供的 Opc.Ua.NodeIds.csv 表 (跨语言通用).

下一步