跳到主要内容

报警

报警由服务端汇聚,SDK 只消费、确认和触发。通道诊断(设备故障上控制器)见 诊断 · 通道诊断

提示

先读 AlarmCount / Alarms,再按 ID 确认。空列表表示当前没有活动报警,不是失败。

计数

State 同一份运行态快照,不额外往返。

成员类型类别读写说明
AlarmCountint报警只读活动报警总数。未启动 / 不可达为 0
CriticalAlarmCountint报警只读Critical 报警数
if (device.AlarmCount > 0)
Console.WriteLine("活动报警 " + device.AlarmCount + ",其中 Critical " + device.CriticalAlarmCount);

活动报警与历史

成员类型类别读写说明
AlarmsList<PnSAlarmItem>报警只读当前活动报警。空列表 = 无活动报警
AlarmHistoryList<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

成员类型说明
Idstring唯一 ID(类型标识,如 PnS.LinkDown
Severitystring严重度:Info / Warning / Error / Critical
Messagestring事实陈述
OccurredAtDateTime最近一次发生时间
Countint去重窗口内发生次数(≥ 1)
Sourcestring来源模块

过程报警

设备把一条过程报警发给 IO 控制器。通道诊断请用 DiagStdAdd,不要走本接口。

成员类型类别读写说明
SendProcessAlarm(ushort slot, ushort subslot, ushort usi, byte[] payload = null)void报警发送一条过程报警
参数约束
slot / subslot0–65534
usi0 = 无负载信号报警;1–0x7FFF = 厂商特定,负载随帧发出
payloadusi == 0 时必须为空;非 0 时上限 1408 字节

同一时刻只允许一条在途:上一报警未获控制器确认前再发,服务端拒绝并抛 PnSServiceException。可用 DiagSnapshot.StackAlarmAckPending 观察是否在途。

device.SendProcessAlarm(slot: 0, subslot: 1, usi: 0);

报警类型(只读对照)

控制器侧报警类型编码,便于对照 DiagSnapshot.StackAlarmLastType

名称说明
0x0001Diagnosis诊断报警
0x0002Process过程报警
0x0003Pull拔出
0x0004Plug插上
0x0005Status状态
0x0006Update更新
0x0007Redundancy冗余
0x0008ControllerProcess控制器指定的厂商报警
0x8000Manufacturer厂商特定