跳到主要内容

WellKnownNodes

darra::opcua::WellKnownNodes 是命名空间下一组 inline constexpr const char* 常量, 预定义 OPC Foundation 标准节点的 NodeId 字符串. 用它代替手写 "i=2258" 提升代码可读性 + 避免拼错.

配套

头文件

#include <darra/opcua/well_known_nodes.hpp>
using namespace darra::opcua;

常用根节点

常量NodeId含义
WellKnownNodes::RootFolder"i=84"Address Space 根
WellKnownNodes::ObjectsFolder"i=85"业务数据根
WellKnownNodes::TypesFolder"i=86"类型定义根
WellKnownNodes::ViewsFolder"i=87"视图根
WellKnownNodes::Server"i=2253"Server 自身对象

Server 状态

常量NodeId含义
Server_ServerStatus"i=2256"Server 状态结构
Server_ServerStatus_State"i=2259"状态 (Running / Failed / ...)
Server_ServerStatus_CurrentTime"i=2258"服务端当前时间
Server_ServerStatus_StartTime"i=2257"服务端启动时间
Server_ServerStatus_BuildInfo"i=2260"BuildInfo
Server_ServerArray"i=2254"ServerArray
Server_NamespaceArray"i=2255"NamespaceArray

标准 ReferenceType

常量NodeId
HasComponent"i=47"
HasProperty"i=46"
Organizes"i=35"
HasTypeDefinition"i=40"
HasSubtype"i=45"

用法

// 不推荐: 硬编码
auto dv = s.Read("i=2258");

// 推荐: 用常量
auto dv = s.Read(WellKnownNodes::Server_ServerStatus_CurrentTime);

通过 s.Nodes() 索引器:

auto t = s.Nodes()[WellKnownNodes::Server_ServerStatus_CurrentTime].Value();
// 或
auto t = s.Nodes().Server().Value();

ServerStatus 完整读取

std::vector<std::string> ids = {
WellKnownNodes::Server_ServerStatus_State,
WellKnownNodes::Server_ServerStatus_CurrentTime,
WellKnownNodes::Server_ServerStatus_StartTime,
WellKnownNodes::Server_NamespaceArray,
};
auto dvs = s.ReadMany(ids);

for (size_t i = 0; i < ids.size(); ++i) {
std::cout << ids[i] << " = " << dvs[i].Value().AsString() << "\n";
}

完整列表

代码里查 darra/opcua/well_known_nodes.hpp 头文件有 30+ 常量, OPC Foundation 标准命名空间下的节点都在.

下一步