SpringBoot工控告警分级推送实战:地铁ISCS/HMI状态栏闪烁+子窗体弹窗(第七篇)
·
标签:#SpringBoot #地铁ISCS #告警分级 #HMI界面联动 #综合监控
摘要:本文严格按照地铁综合监控ISCS行业HMI规范实现:一、二、三级告警全部在界面最下方状态栏闪烁;一级、二级告警同时弹出独立告警子窗体+声光提示;三级仅底部闪烁、无声光无弹窗。完全贴合地铁BAS/FAS/环控真实场景,无外网依赖,可直接用于项目验收。
一、前言
前两篇我们实现了告警判断 + 防抖滤波,本篇按照地铁综合监控 ISCS 标准 HMI 交互逻辑,实现告警与前端界面联动。
地铁真实 HMI 规范(你现场经验版):
- 一级、二级、三级告警 → 全部在 HMI 主界面最下方状态栏闪烁
- 一级、二级告警 → 额外弹出独立告警子窗体 + 声光提示
- 三级预警 → 只底部闪烁,无弹窗、无声光、不打扰操作员
本篇完全按地铁现场标准实现,无任何多余功能。
二、地铁 ISCS 告警分级 HMI 规则
一级告警(紧急)
底部状态栏闪烁 + 弹出告警子窗体 + 声光报警
二级告警(重要)
底部状态栏闪烁 + 弹出告警子窗体 + 声光提示
三级告警(预警/提示)
底部状态栏闪烁(仅此一项)
无弹窗、无声光、不影响操作
三、告警规则实体(地铁标准字段)
import lombok.Data;
@Data
public class AlarmRule {
// 点位信息
private String pointId;
private String deviceId;
private String pointName;
private String systemType;
// 告警类型
private Integer alarmType;
// 阈值参数
private Double maxValue;
private Double minValue;
private Double changeThreshold;
// 防抖次数
private int filterCount = 3;
private int recoverFilterCount = 3;
// 告警等级 1 一级 2 二级 3 三级
private Integer alarmLevel;
}
四、HMI 推送 DTO(前端界面专用)
import lombok.Data;
@Data
public class AlarmHmiDTO {
// 告警基本信息
private String pointName;
private String systemType;
private Double value;
private String alarmDesc;
private Long ts;
// 告警等级
private Integer alarmLevel;
}
五、地铁 HMI 告警推送核心代码
import org.springframework.stereotype.Service;
@Service
public class AlarmHmiPushService {
/**
* 地铁 ISCS 标准告警推送入口
* 1、2、3 级 → 全部底部闪烁
* 1、2 级 → 额外弹窗 + 声光
* 3 级 → 仅闪烁
*/
public void pushAlarmToHmi(AlarmHmiDTO hmiDTO) {
if (hmiDTO == null) {
return;
}
// ==============================================
// 统一动作:所有等级告警 → HMI 底部状态栏闪烁
// ==============================================
pushToStatusBar(hmiDTO);
// ==============================================
// 一级、二级 → 弹出告警子窗体 + 声光
// ==============================================
if (hmiDTO.getAlarmLevel() == 1 || hmiDTO.getAlarmLevel() == 2) {
pushToPopupWindow(hmiDTO);
}
}
/**
* 推送到底部状态栏(所有告警都执行)
*/
private void pushToStatusBar(AlarmHmiDTO dto) {
// WebSocket 推送 HMI 底部状态栏闪烁
WebSocketUtil.sendToHmi("ALARM_STATUS_BAR", dto);
}
/**
* 推送到弹窗子窗体 + 声光(仅 1、2 级)
*/
private void pushToPopupWindow(AlarmHmiDTO dto) {
// WebSocket 推送 → 弹出独立告警子窗体 + 声光
WebSocketUtil.sendToHmi("ALARM_POPUP_WINDOW", dto);
}
}
六、业务层调用(完整链路)
// 1. 获取实时采集数据
CollectDataDTO data = collectService.getRealTimeData();
// 2. 获取点位告警规则
AlarmRule rule = alarmRuleService.getRuleByPointId(data.getPointId());
// 3. 防抖告警校验
boolean isAlarm = alarmEngine.checkWithFilter(data, rule);
if (isAlarm) {
// 封装 HMI 推送对象
AlarmHmiDTO hmiDTO = new AlarmHmiDTO();
hmiDTO.setPointName(rule.getPointName());
hmiDTO.setSystemType(rule.getSystemType());
hmiDTO.setValue(data.getValue());
hmiDTO.setAlarmLevel(rule.getAlarmLevel());
// 推送到地铁 HMI 界面
alarmHmiPushService.pushAlarmToHmi(hmiDTO);
// 告警历史存入 TDengine
tdEngineService.insertAlarmRecord(data, rule);
}
七、地铁 HMI 界面行为说明(现场标准)
所有告警(1、2、3 级)
- HMI 主界面最下方状态栏统一闪烁显示
一级、二级告警
- 弹出独立告警子窗体
- 伴随声光提示
- 需要人工确认关闭
三级预警
- 仅状态栏闪烁
- 无弹窗、无声光
- 不影响操作员监控
八、地铁项目规范要点(8 年轨交经验)
- 地铁综合监控为内网封闭系统,无微信、公网推送。
- 告警展示严格遵循 HMI 标准:全部底部闪烁,高等级弹窗。
- 声光报警仅用于一级、二级,三级不允许声音提示。
- 所有告警必须入库,支持历史查询、SOE 追忆、报表统计。
九、总结
本篇完全按照地铁 ISCS 综合监控真实 HMI 规范实现:
- 一、二、三级告警 → 全部在界面最下方状态栏闪烁
- 一、二级告警 → 弹出独立告警子窗体 + 声光
- 三级预警 → 仅闪烁、无声光无弹窗
代码可直接用于地铁 BAS/FAS/环控项目开发与验收。
本专栏基于 8 年轨道交通现场开发经验,持续更新地铁 ISCS/SCADA 实战干货,所有代码均来自真实项目。
需要源码的读者评论区留言【源码】,关注持续更新。
下一篇:第八篇 —— 告警确认、告警屏蔽、告警静音(地铁运维必备功能)
更多推荐

所有评论(0)