跳到主要内容

报警与条件

概述​

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

下一步​