设备重启后的报警复位
1. 中台的报警状态管理
中台的报警编码按状态管理方式分成两大类:
需要复位
这类报警在平台生成报警记录同时,平台会将设备状态置为报警,例如:电压越限,温度越限等;
无需复位
这类报警在平台只会生成报警记录,不会将设备状态改为报警,例如:断电报警、能耗倒走等。
对于需要复位的报警,平台上会对设备的报警状态进行缓存。例如:
仪表A开始处于正常状态,设备发出UaHIGH1报警后,平台在编码表中找到详细信息:
编码 | 电参量 | 需要复位 |
---|---|---|
UaHIGH1 | Ua | 是 |
此时平台会将仪表A置为报警状态,并且缓存该编码,如下:
"Ua": { "code": "UaHIGH1", "timestamp": 1721283600 }
接下来,设备发出IaHIGH1,报警缓存变成如下:
"Ua": { "code": "UaHIGH1", "timestamp": 1721283600 },
"Ia": { "code": "IaHIGH1", "timestamp": 1721283700 }
然后,设备发出UaRESET,平台会删除Ua报警,此时还存在Ia报警,设备整体仍旧处于报警状态:
"Ia": { "code": "IaHIGH1", "timestamp": 1721283700 }
设备再发出IaRESET,平台就会删除Ia的报警,此时报警状态为空,平台就会将仪表A由报警状态改为在线状态。
所以,设备在上报报警报文后,只要不发出RESET报文,设备就始终处于报警状态。
这就带来一个问题——许多设备不会持久化保存报警状态,于是断电重启后,对于重启前的报警没有记录,也就不会在发出复位命令,导致平台上设备始终处于报警状态无法恢复。
2. 解决方案
设备端可以采用以下2种解决方案:
方案1:重启后自检和全量上报
每次设备重启后,根据报警规则进行一遍检查,其中未出触发的报警就发送一条RESET报文,扔在报警的就再发一次报警报文。
平台收到RESET报文后如果发现设备没有报警,会直接丢弃,不会产生影响;如果是之前处于报警状态的设备,重复收到报警报文只会生成一条记录,也不会对报警状态产生影响。
方案2:持久化管理报警状态
将报警状态进行持久化存储,每次重启后从存储中读出断电前的报警记录。此方案较为复杂,可能对设备整个报警模块的底层架构甚至硬件架构产生影响,如果设备在设计之初未能考虑此方案,通常不推荐采用。
Last modified: 18 四月 2025