服务端信息
概述
OPC UA 标准节点 i=2256 (Server.ServerStatus) 暴露服务端运行时信息。SDK 把 11 个子节点 (i=2257..i=2266 + i=2992 + i=2993) 一次装配为强类型 ServerStatus。
对应规范段: Part 5 §6.3。
API
| 方法 | 类别 | 读写 | 说明 |
|---|---|---|---|
| ua.readServerStatus() | 诊断 | 读 | 返回完整 ServerStatus |
| ua.readServerState() | 诊断 | 读 | 返回 ServerState 枚举 |
| ua.readCurrentTime() | 诊断 | 读 | 返回 Instant (UTC) |
相关结构:
public class ServerStatus {
public Instant startTime; // 启动 UTC
public Instant currentTime; // 当前 UTC
public ServerState state; // 当前状态
public BuildInfo buildInfo; // 产品/版本信息
public int secondsTillShutdown; // 距关停秒数
public String shutdownReason; // 关停原因
}
public enum ServerState {
RUNNING, // 正常
FAILED, // 致命故障
NO_CONFIGURATION, // 缺配置
SUSPENDED, // 被运维挂起
SHUTDOWN, // 关停中
TEST, // 测试模式
COMMUNICATION_FAULT, // 链路故障
UNKNOWN // SDK 兜底
}
代码示例
import com.darra.opcua.*;
import java.time.Duration;
import java.time.Instant;
try (DarraOpcUa ua = new DarraOpcUa("opc.tcp://localhost:4840")) {
ua.connect();
// 1) 一次性
ServerStatus status = ua.readServerStatus();
System.out.println("Start = " + status.startTime);
System.out.println("Now = " + status.currentTime);
System.out.println("State = " + status.state);
System.out.println("Build = " + status.buildInfo);
if (status.state != ServerState.RUNNING)
System.out.println("⚠ 服务端非 Running, 倒计时 " + status.secondsTillShutdown + "s");
// 2) 轻量心跳
if (ua.readServerState() == ServerState.RUNNING)
statusLabel.setText("在线");
// 3) 时钟漂移
Instant serverNow = ua.readCurrentTime();
if (serverNow != null) {
long driftMs = Duration.between(serverNow, Instant.now()).toMillis();
System.out.printf("时钟差 = %d ms%n", driftMs);
}
}
跨语言对照
| C# | Python | Java | C++ | Rust | C |
|---|---|---|---|---|---|
| ReadServerStatus | read_server_status | readServerStatus | ReadServerStatus | read_server_status | DarraUa_Session_ReadServerStatus |
| ReadServerState | read_server_state | readServerState | ReadServerState | read_server_state | DarraUa_Session_ReadServerState |