标签:#SpringBoot #地铁ISCS #告警分级 #HMI界面联动 #综合监控

摘要:本文严格按照地铁综合监控ISCS行业HMI规范实现:一、二、三级告警全部在界面最下方状态栏闪烁;一级、二级告警同时弹出独立告警子窗体+声光提示;三级仅底部闪烁、无声光无弹窗。完全贴合地铁BAS/FAS/环控真实场景,无外网依赖,可直接用于项目验收。

一、前言

前两篇我们实现了告警判断 + 防抖滤波,本篇按照地铁综合监控 ISCS 标准 HMI 交互逻辑,实现告警与前端界面联动。

地铁真实 HMI 规范(你现场经验版):

  1. 一级、二级、三级告警 → 全部在 HMI 主界面最下方状态栏闪烁
  2. 一级、二级告警 → 额外弹出独立告警子窗体 + 声光提示
  3. 三级预警 → 只底部闪烁,无弹窗、无声光、不打扰操作员

本篇完全按地铁现场标准实现,无任何多余功能。

二、地铁 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 实战干货,所有代码均来自真实项目。

需要源码的读者评论区留言【源码】,关注持续更新。

下一篇:第八篇 —— 告警确认、告警屏蔽、告警静音(地铁运维必备功能)

更多推荐