well_known_nodes
opcua::well_known_nodes 模块预定义 OPC Foundation 标准节点的 NodeId 字符串常量.
用它代替手写 i=2258 提升代码可读性.
配套
- 命名空间反查见 Namespaces.
- 通过 NodeId 读取数据见 Read / Write.
引入
use opcua::well_known_nodes;
// 或用通配符
use opcua::well_known_nodes::*;
常用根节点 (Folder)
| 常量 | NodeId | 含义 |
|---|---|---|
| ROOT_FOLDER | i=84 | Address Space 根 |
| OBJECTS_FOLDER | i=85 | 业务数据根 |
| TYPES_FOLDER | i=86 | 类型定义根 |
| VIEWS_FOLDER | i=87 | 视图根 |
| OBJECT_TYPES_FOLDER | i=88 | 对象类型根 |
| VARIABLE_TYPES_FOLDER | i=89 | 变量类型根 |
| DATA_TYPES_FOLDER | i=90 | 数据类型根 |
| REFERENCE_TYPES_FOLDER | i=91 | 引用类型根 |
Server 状态
| 常量 | NodeId | 含义 |
|---|---|---|
| SERVER | i=2253 | Server 自身对象 |
| SERVER_SERVER_ARRAY | i=2254 | ServerArray 字符串数组 |
| SERVER_NAMESPACE_ARRAY | i=2255 | NamespaceArray 字符串数组 |
| SERVER_SERVER_STATUS | i=2256 | Server 状态结构 |
| SERVER_SERVER_STATUS_START_TIME | i=2257 | Server 启动时间 |
| SERVER_SERVER_STATUS_CURRENT_TIME | i=2258 | 服务端当前时间 |
| SERVER_SERVER_STATUS_STATE | i=2259 | 状态 (Running / Failed / ...) |
| SERVER_SERVER_STATUS_BUILD_INFO | i=2260 | BuildInfo (产品 / 厂商 / 版本) |
| SERVER_SERVER_STATUS_BUILD_INFO_PRODUCT_NAME | i=2261 | 产品名 |
| SERVER_SERVER_STATUS_BUILD_INFO_MANUFACTURER | i=2263 | 厂商名 |
| SERVER_SERVER_STATUS_BUILD_INFO_SOFTWARE_VERSION | i=2264 | 版本 |
| SERVER_SERVER_STATUS_BUILD_INFO_BUILD_NUMBER | i=2265 | BuildNumber |
| SERVER_SERVER_STATUS_BUILD_INFO_BUILD_DATE | i=2266 | BuildDate |
| SERVER_SERVER_STATUS_SECONDS_TILL_SHUTDOWN | i=2992 | 距关闭剩余秒数 |
| SERVER_SERVER_STATUS_SHUTDOWN_REASON | i=2993 | 关闭原因 |
标准 ReferenceType
| 常量 | NodeId |
|---|---|
| REFERENCES | i=31 |
| NON_HIERARCHICAL_REFERENCES | i=32 |
| HIERARCHICAL_REFERENCES | i=33 |
| HAS_CHILD | i=34 |
| ORGANIZES | i=35 |
| HAS_EVENT_SOURCE | i=36 |
| HAS_MODELLING_RULE | i=37 |
| HAS_ENCODING | i=38 |
| HAS_DESCRIPTION | i=39 |
| HAS_TYPE_DEFINITION | i=40 |
| HAS_PROPERTY | i=46 |
| HAS_COMPONENT | i=47 |
标准 DataType
| 常量 | NodeId |
|---|---|
| BASE_DATA_TYPE | i=24 |
| BOOLEAN | i=1 |
| SBYTE | i=2 |
| BYTE | i=3 |
| INT16 | i=4 |
| UINT16 | i=5 |
| INT32 | i=6 |
| UINT32 | i=7 |
| INT64 | i=8 |
| UINT64 | i=9 |
| FLOAT | i=10 |
| DOUBLE | i=11 |
| STRING | i=12 |
| DATE_TIME | i=13 |
| GUID | i=14 |
| BYTE_STRING | i=15 |
| XML_ELEMENT | i=16 |
| NODE_ID_TYPE | i=17 |
| STATUS_CODE | i=19 |
命名空间常量
use opcua::well_known_nodes::well_known_namespaces;
well_known_namespaces::OPC_FOUNDATION; // "http://opcfoundation.org/UA/" (ns=0)
well_known_namespaces::DI; // "http://opcfoundation.org/UA/DI/"
用法
use opcua::well_known_nodes;
// 不推荐: 硬编码
let dv = s.read("i=2258")?;
// 推荐: 用常量
let dv = s.read(well_known_nodes::SERVER_SERVER_STATUS_CURRENT_TIME)?;
ServerStatus 完整读取
use opcua::{well_known_nodes, AttributeId};
let nodes = [
well_known_nodes::SERVER_SERVER_STATUS_STATE,
well_known_nodes::SERVER_SERVER_STATUS_CURRENT_TIME,
well_known_nodes::SERVER_SERVER_STATUS_START_TIME,
well_known_nodes::SERVER_NAMESPACE_ARRAY,
];
let values = s.read_many(&nodes, AttributeId::Value)?;
if let Some(Some(state)) = values.first() {
println!("State = {:?}", state.variant());
}
if let Some(Some(curr)) = values.get(1) {
println!("CurrentTime = {:?}", curr.source_timestamp());
}
if let Some(Some(start)) = values.get(2) {
println!("StartTime = {:?}", start.source_timestamp());
}
if let Some(Some(ns)) = values.get(3) {
println!("Namespaces = {:?}", ns.variant());
}
完整列表
代码里查 opcua::well_known_nodes 模块的源文件 (cargo doc 也能看到).
OPC Foundation 标准命名空间下的常用节点都在.