well_known_nodes
darra_opcua::well_known_nodes 模块预定义 OPC Foundation 标准节点的 NodeId 字符串常量.
用它代替手写 i=2258 提升代码可读性.
配套
- 命名空间反查见 Namespaces.
- 通过 NodeId 读取数据见 Read / Write.
引入
use darra_opcua::well_known_nodes;
// 或用通配符
use darra_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 darra_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 darra_opcua::well_known_nodes;
// 不推荐: 硬编码
let dv = s.read("i=2258")?;
// 推荐: 用常量
let dv = s.read(well_known_nodes::SERVER_SERVER_STATUS_CURRENT_TIME)?;
ServerStatus 完整读取
use darra_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());
}
完整列表
代码里查 darra_opcua::well_known_nodes 模块的源文件 (cargo doc 也能看到).
OPC Foundation 标准命名空间下的常用节点都在.