跳到主要内容

报警与条件

概述

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

MethodNodeId入参
Acknowledgei=9111(event_id: &[u8], comment: &str)
Confirmi=9113(event_id, comment)
AddCommenti=9029(event_id, comment)
Enablei=2803
Disablei=2805
ConditionRefreshi=3875(sub_id)
ConditionRefresh2i=12912(sub_id, mi_id)
OneShotShelvei=9211
TimedShelvei=9213(shelving_time_ms)
Unshelvei=9215

API

方法类别读写说明
ua.acknowledge(condition_id, event_id, comment)报警用户已知
ua.confirm(condition_id, event_id, comment)报警现场已处理
ua.add_comment(condition_id, event_id, comment)报警加备注
ua.enable_condition(condition_id)报警启用
ua.disable_condition(condition_id)报警禁用
ua.condition_refresh(sub_id)报警补发激活报警
ua.condition_refresh2(sub_id, mi_id)报警仅指定 MI
ua.one_shot_shelve(shelving_state_id)报警一次性屏蔽
ua.timed_shelve(shelving_state_id, ms)报警限时屏蔽
ua.unshelve(shelving_state_id)报警取消屏蔽

返回 Result<StatusCode>, 失败不 panic, 业务级失败由 StatusCode 表达。

代码示例

use opcua::{DarraOpcUa, StatusCode};

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

let sub = ua.create_subscription(500)?;
let ev = sub.subscribe_events("i=2253")?; // ServerObject

ev.on_event_arrived(move |args| {
let event_id = args.get_field("EventId").as_byte_string()?;
let condition_id = args.get_field("ConditionId").as_string()?;

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

// b. 用户点 "确认"
let rc = ua.acknowledge(&condition_id, &event_id, "操作员已知")?;
if rc != StatusCode::Good { eprintln!("Acknowledge 失败: {:?}", rc); }

// c. 现场处理
ua.confirm(&condition_id, &event_id, "现场已处理")?;

// d. 临时屏蔽 30 秒
ua.timed_shelve(&format!("{}.ShelvingState", condition_id), 30_000.0)?;
Ok(())
})?;

错误处理

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

最佳实践

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

跨语言对照

C#PythonJavaC++RustC
AcknowledgeacknowledgeacknowledgeAcknowledgeacknowledgeDarraUa_Condition_Acknowledge
ConfirmconfirmconfirmConfirmconfirmDarraUa_Condition_Confirm
ConditionRefreshcondition_refreshconditionRefreshConditionRefreshcondition_refreshDarraUa_Condition_Refresh

下一步