跳到主要内容

AC — Alarms & Conditions

Alarms & Conditions (A&C) 定义了 OPC UA 的报警与条件机制. 不仅是 "报警出来了", 还是完整的状态管理 (确认 / 抑制 / 注释 / 升级 / Shelving / 历史记录).

配套阅读

关键概念

  • 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-200Low信息
201-400Medium警告
401-600MediumHigh故障
601-800High严重故障
801-1000Critical紧急 / 设备停机

确认 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 默认全订, 复杂过滤需要扩展)

相关链接