跳到主要内容

服务端信息

概述

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#PythonJavaC++RustC
ReadServerStatusread_server_statusreadServerStatusReadServerStatusread_server_statusDarraUa_Session_ReadServerStatus
ReadServerStateread_server_statereadServerStateReadServerStateread_server_stateDarraUa_Session_ReadServerState

下一步