AC — Alarms & Conditions
Alarms & Conditions (A&C) 定义了 OPC UA 的报警与条件机制. 不仅是 "报警出来了", 还是完整的状态管理 (确认 / 抑制 / 注释 / 升级 / Shelving / 历史记录).
配套阅读
- 快速开始 — 事件订阅 — 最简事件订阅代码
- 基础知识 — 订阅模型 — Subscription / MonitoredItem 概念
- 基础知识 — 历史模型 — ReadEvents 历史
关键概念
- Condition — 持续的"状态条件" (可以处于 enabled / disabled, active / inactive 等状态)
- Alarm — 一种特殊 Condition, 表示需要操作员关注的异常
- Acknowledge — 操作员确认 (查阅了报警)
- Confirm — 操作员确认问题已解决
- Shelving — 暂时屏蔽报警 (定时 / 单次 / 一直)
主要 EventType 继承树
BaseEventType (i=2041)
└── ConditionType
└── AcknowledgeableConditionType
└── AlarmConditionType
├── DiscreteAlarmType ← 离散报警 (开关跳闸)
│ ├── OffNormalAlarmType
│ │ ├── SystemOffNormalAlarmType
│ │ └── TripAlarmType
├── LimitAlarmType ← 限值报警 (温度过高)
│ ├── ExclusiveLimitAlarmType
│ └── NonExclusiveLimitAlarmType
└── DialogConditionType
客户端订阅报警
using var evSub = ua.SubscribeEvents(); // 默认订 Server 节点
evSub.EventArrived += (s, e) =>
{
Console.WriteLine($"[Severity={e.Severity}] {e.SourceName}: {e.Message}");
Console.WriteLine($" EventType = {e.EventType}");
Console.WriteLine($" Time = {e.Time}");
};
Severity (严重度)
OPC UA 严重度 1-1000, 越大越严重:
| Severity | 等级 | 示例 |
|---|---|---|
| 1-200 | Low | 信息 |
| 201-400 | Medium | 警告 |
| 401-600 | MediumHigh | 故障 |
| 601-800 | High | 严重故障 |
| 801-1000 | Critical | 紧急 / 设备停机 |
确认 Acknowledge
如果你的应用是"操作员 HMI", 收到报警后允许操作员确认, 那么调用服务端的 Acknowledge Method:
// 报警 NodeId 在事件 args 里 (ConditionId)
ua.Call(conditionId, methodNodeId: $"{conditionId}.Acknowledge",
new Variant(eventId), new Variant(new LocalizedText("comment")));
ReadEvents 历史
A&C 报警的历史可以拉:
var events = ua.History.ReadEvents("i=2253",
startTime: now.AddDays(-7), endTime: now);
foreach (var e in events) Console.WriteLine($"{e.Time}: {e.Message}");
实战要点
- 报警订阅默认订 Server 节点 (i=2253), 它是默认 EventNotifier
- 如果某个 Object 自己是 EventNotifier (Attribute 12 != 0), 可以单独订该节点
- EventFilter 可以过滤 EventType / Severity / SourceNode (本 SDK 默认全订, 复杂过滤需要扩展)