报警
报警由服务端汇聚,SDK 只消费、确认和触发。通道诊断(设备故障上控制器)见 诊断 · 通道诊断。
提示
先读 AlarmCount / Alarms,再按 ID 确认。空列表表示当前没有活动报警,不是失败。
计数
与 State 同一份运行态快照,不额外往返。
| 成员 | 类型 | 类别 | 读写 | 说明 |
|---|---|---|---|---|
AlarmCount | int | 报警 | 只读 | 活动报警总数。未启动 / 不可达为 0 |
CriticalAlarmCount | int | 报警 | 只读 | Critical 报警数 |
if (device.AlarmCount > 0)
Console.WriteLine("活动报警 " + device.AlarmCount + ",其中 Critical " + device.CriticalAlarmCount);
活动报警与历史
| 成员 | 类型 | 类别 | 读写 | 说明 |
|---|---|---|---|---|
Alarms | List<PnSAlarmItem> | 报警 | 只读 | 当前活动报警。空列表 = 无活动报警 |
AlarmHistory | List<PnSAlarmItem> | 报警 | 只读 | 历史(最近 500 条,时间升序) |
AcknowledgeAlarm(string id) | void | 报警 | 写 | 确认一条。ID 取自 Alarms |
AcknowledgeAllAlarms() | int | 报警 | 写 | 确认全部。返回被确认条数(0 = 本来就没有) |
读取失败抛 PnSServiceException:
| 情况 | 错误码 |
|---|---|
| 服务不可达 / 超时 | ServiceUnreachable |
| 服务端非成功响应 | NativeError |
| 确认时该 ID 不存在 | NotFound |
foreach (PnSAlarmItem alarm in device.Alarms)
{
Console.WriteLine(alarm.OccurredAt + " [" + alarm.Severity + "] "
+ alarm.Message + " (" + alarm.Id + " ×" + alarm.Count + ")");
}
if (device.Alarms.Count > 0)
device.AcknowledgeAlarm(device.Alarms[0].Id);
int n = device.AcknowledgeAllAlarms();
PnSAlarmItem
| 成员 | 类型 | 说明 |
|---|---|---|
Id | string | 唯一 ID(类型标识,如 PnS.LinkDown) |
Severity | string | 严重度:Info / Warning / Error / Critical |
Message | string | 事实陈述 |
OccurredAt | DateTime | 最近一次发生时间 |
Count | int | 去重窗口内发生次数(≥ 1) |
Source | string | 来源模块 |
过程报警
设备把一条过程报警发给 IO 控制器。通道诊断请用 DiagStdAdd,不要走本接口。
| 成员 | 类型 | 类别 | 读写 | 说明 |
|---|---|---|---|---|
SendProcessAlarm(ushort slot, ushort subslot, ushort usi, byte[] payload = null) | void | 报警 | 写 | 发送一条过程报警 |
| 参数 | 约束 |
|---|---|
slot / subslot | 0–65534 |
usi | 0 = 无负载信号报警;1–0x7FFF = 厂商特定,负载随帧发出 |
payload | usi == 0 时必须为空;非 0 时上限 1408 字节 |
同一时刻只允许一条在途:上一报警未获控制器确认前再发,服务端拒绝并抛 PnSServiceException。可用 DiagSnapshot.StackAlarmAckPending 观察是否在途。
device.SendProcessAlarm(slot: 0, subslot: 1, usi: 0);
报警类型(只读对照)
控制器侧报警类型编码,便于对照 DiagSnapshot.StackAlarmLastType:
| 值 | 名称 | 说明 |
|---|---|---|
0x0001 | Diagnosis | 诊断报警 |
0x0002 | Process | 过程报警 |
0x0003 | Pull | 拔出 |
0x0004 | Plug | 插上 |
0x0005 | Status | 状态 |
0x0006 | Update | 更新 |
0x0007 | Redundancy | 冗余 |
0x0008 | ControllerProcess | 控制器指定的厂商报警 |
0x8000 | Manufacturer | 厂商特定 |