跳到主要内容

报警与条件

概述

OPC UA Part 9 在 ConditionType / AlarmConditionType 上定义了固定 NodeId 的标准 Method。SDK 封装为形参清晰的 Java 方法。

MethodNodeId入参
Acknowledgei=9111(eventId: byte[], comment: String)
Confirmi=9113(eventId, comment)
AddCommenti=9029(eventId, comment)
Enablei=2803
Disablei=2805
ConditionRefreshi=3875(subscriptionId)
ConditionRefresh2i=12912(subscriptionId, monitoredItemId)
OneShotShelvei=9211
TimedShelvei=9213(shelvingTimeMs)
Unshelvei=9215

API

方法类别读写说明
ua.acknowledge(conditionId, eventId, comment)报警用户已知
ua.confirm(conditionId, eventId, comment)报警现场已处理
ua.addComment(conditionId, eventId, comment)报警加备注
ua.enableCondition(conditionId)报警启用
ua.disableCondition(conditionId)报警禁用
ua.conditionRefresh(subId)报警补发激活报警
ua.conditionRefresh2(subId, miId)报警仅指定 MI
ua.oneShotShelve(shelvingStateId)报警一次性屏蔽
ua.timedShelve(shelvingStateId, ms)报警限时屏蔽
ua.unshelve(shelvingStateId)报警取消屏蔽

返回 StatusCode, 失败不抛异常。

代码示例

import com.darra.opcua.*;

try (DarraOpcUa ua = new DarraOpcUa("opc.tcp://server:4840")) {
ua.connect();

OpcUaSubscription sub = ua.createSubscription(500);
OpcUaEventSubscription ev = sub.subscribeEvents("i=2253");

ev.addEventArrivedListener(args -> {
byte[] eventId = args.getField("EventId").asByteString();
String conditionId = args.getField("ConditionId").asString();

// a. 让服务端补发当前激活报警
ua.conditionRefresh(sub.getSubscriptionId());

// b. 用户点 "确认"
StatusCode rc = ua.acknowledge(conditionId, eventId, "操作员已知");
if (rc != StatusCode.Good)
JOptionPane.showMessageDialog(null, "Acknowledge 失败: " + rc);

// c. 现场处理
ua.confirm(conditionId, eventId, "现场已处理");

// d. 临时屏蔽 30 秒
ua.timedShelve(conditionId + ".ShelvingState", 30_000.0);
});
}

错误处理

StatusCode含义
Good成功
BadEventIdUnknownEventId 不匹配
BadConditionAlreadyEnabled已启用
BadConditionAlreadyShelved已屏蔽

最佳实践

  • 首次订阅后必调 conditionRefresh
  • acknowledge 后再 confirm, 两步
  • TimedShelve 单位 ms, 不是秒
  • 不要在监听器里同步 ack, 推队列后台处理

跨语言对照

C#PythonJavaC++RustC
AcknowledgeacknowledgeacknowledgeAcknowledgeacknowledgeDarraUa_Condition_Acknowledge
ConfirmconfirmconfirmConfirmconfirmDarraUa_Condition_Confirm
ConditionRefreshcondition_refreshconditionRefreshConditionRefreshcondition_refreshDarraUa_Condition_Refresh

下一步