跳到主要内容

服务端信息

概述

OPC UA 标准节点 i=2256 (Server.ServerStatus) 暴露服务端运行时信息。SDK 把 11 个子节点 (i=2257..i=2266 + i=2992 + i=2993) 一次装配为强类型 ServerStatus

对应规范段: Part 5 §6.3。

API

方法类别读写说明
ua.read_server_status()诊断返回 Result<ServerStatus, OpcUaError>
ua.read_server_state()诊断返回 Result<ServerState, OpcUaError>
ua.read_current_time()诊断返回 Result<Option<DateTime<Utc>>, OpcUaError>

相关结构:

pub struct ServerStatus {
pub start_time: DateTime<Utc>, // 启动 UTC
pub current_time: DateTime<Utc>, // 当前 UTC
pub state: ServerState, // 当前状态
pub build_info: BuildInfo, // 产品/版本
pub seconds_till_shutdown: u32, // 距关停秒数
pub shutdown_reason: String, // 关停原因
}

pub enum ServerState {
Running = 0, // 正常
Failed = 1, // 致命故障
NoConfiguration = 2, // 缺配置
Suspended = 3, // 被运维挂起
Shutdown = 4, // 关停中
Test = 5, // 测试模式
CommunicationFault = 6, // 链路故障
Unknown = 7, // SDK 兜底
}

代码示例

use opcua::{DarraOpcUa, ServerState};
use chrono::Utc;

let ua = DarraOpcUa::new("opc.tcp://localhost:4840")?;
ua.connect()?;

// 1) 一次性
let status = ua.read_server_status()?;
println!("Start = {}", status.start_time);
println!("Now = {}", status.current_time);
println!("State = {:?}", status.state);
println!("Build = {} {}",
status.build_info.product_name,
status.build_info.software_version);

if status.state != ServerState::Running {
println!("⚠ 非 Running, 倒计时 {}s", status.seconds_till_shutdown);
}

// 2) 轻量心跳
if matches!(ua.read_server_state()?, ServerState::Running) {
println!("在线");
}

// 3) 时钟漂移
if let Some(server_now) = ua.read_current_time()? {
let drift = (Utc::now() - server_now).num_milliseconds();
println!("时钟差 = {} ms", drift);
}

跨语言对照

C#PythonJavaC++RustC
ReadServerStatusread_server_statusreadServerStatusReadServerStatusread_server_statusDarraUa_Session_ReadServerStatus
ReadServerStateread_server_statereadServerStateReadServerStateread_server_stateDarraUa_Session_ReadServerState

下一步