Acrel IoT Docs Help

设备重启后的报警复位

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