跳到主要内容

well_known_nodes

darra_opcua::well_known_nodes 模块预定义 OPC Foundation 标准节点的 NodeId 字符串常量. 用它代替手写 i=2258 提升代码可读性.

配套

引入

use darra_opcua::well_known_nodes;
// 或用通配符
use darra_opcua::well_known_nodes::*;

常用根节点 (Folder)

常量NodeId含义
ROOT_FOLDERi=84Address Space 根
OBJECTS_FOLDERi=85业务数据根
TYPES_FOLDERi=86类型定义根
VIEWS_FOLDERi=87视图根
OBJECT_TYPES_FOLDERi=88对象类型根
VARIABLE_TYPES_FOLDERi=89变量类型根
DATA_TYPES_FOLDERi=90数据类型根
REFERENCE_TYPES_FOLDERi=91引用类型根

Server 状态

常量NodeId含义
SERVERi=2253Server 自身对象
SERVER_SERVER_ARRAYi=2254ServerArray 字符串数组
SERVER_NAMESPACE_ARRAYi=2255NamespaceArray 字符串数组
SERVER_SERVER_STATUSi=2256Server 状态结构
SERVER_SERVER_STATUS_START_TIMEi=2257Server 启动时间
SERVER_SERVER_STATUS_CURRENT_TIMEi=2258服务端当前时间
SERVER_SERVER_STATUS_STATEi=2259状态 (Running / Failed / ...)
SERVER_SERVER_STATUS_BUILD_INFOi=2260BuildInfo (产品 / 厂商 / 版本)
SERVER_SERVER_STATUS_BUILD_INFO_PRODUCT_NAMEi=2261产品名
SERVER_SERVER_STATUS_BUILD_INFO_MANUFACTURERi=2263厂商名
SERVER_SERVER_STATUS_BUILD_INFO_SOFTWARE_VERSIONi=2264版本
SERVER_SERVER_STATUS_BUILD_INFO_BUILD_NUMBERi=2265BuildNumber
SERVER_SERVER_STATUS_BUILD_INFO_BUILD_DATEi=2266BuildDate
SERVER_SERVER_STATUS_SECONDS_TILL_SHUTDOWNi=2992距关闭剩余秒数
SERVER_SERVER_STATUS_SHUTDOWN_REASONi=2993关闭原因

标准 ReferenceType

常量NodeId
REFERENCESi=31
NON_HIERARCHICAL_REFERENCESi=32
HIERARCHICAL_REFERENCESi=33
HAS_CHILDi=34
ORGANIZESi=35
HAS_EVENT_SOURCEi=36
HAS_MODELLING_RULEi=37
HAS_ENCODINGi=38
HAS_DESCRIPTIONi=39
HAS_TYPE_DEFINITIONi=40
HAS_PROPERTYi=46
HAS_COMPONENTi=47

标准 DataType

常量NodeId
BASE_DATA_TYPEi=24
BOOLEANi=1
SBYTEi=2
BYTEi=3
INT16i=4
UINT16i=5
INT32i=6
UINT32i=7
INT64i=8
UINT64i=9
FLOATi=10
DOUBLEi=11
STRINGi=12
DATE_TIMEi=13
GUIDi=14
BYTE_STRINGi=15
XML_ELEMENTi=16
NODE_ID_TYPEi=17
STATUS_CODEi=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 标准命名空间下的常用节点都在.

下一步