SpringBoot地铁ISCS实战第九篇:TDengine时序存储实现SOE故障追忆
标签:#SpringBoot #地铁ISCS #SOE故障追忆 #TDengine #综合监控
摘要:SOE事件顺序记录最早应用于电力监控领域,目前地铁综合监控全线所有子系统(BAS环控、FAS火灾、给排水、动照、供电)均强制要求毫秒级SOE追忆。本文基于TDengine时序数据库搭建通用SOE存储架构,一套代码适配地铁全部子系统,打通采集、告警完整业务链路,满足业主、监理验收标准。
一、前言
前八篇我们完成了数据采集、告警阈值判断、防抖滤波、HMI分级展示、告警确认与检修屏蔽,构建起完整告警业务体系。
很多人认知里SOE只属于电力行业,但结合8年轨交落地经验说明:
- SOE最早诞生于电网变电站监控,用于继电保护故障时序分析;
- 现阶段地铁ISCS规范明确要求:全线所有接入子系统统一部署SOE事件记录;
- BAS风机、给排水水泵、FAS烟感、动照开关、供电保护,任何变位、越限故障都要毫秒级时序留存;
- 多条设备连锁故障时,依靠SOE精准区分故障发生先后,定位根因,是项目验收硬性核查项。
本篇搭建通用型SOE存储方案,不区分子系统,一套结构兼容地铁全部设备点位。
二、全子系统通用SOE设计思路
1、适用所有地铁子系统
- 供电专业:进线开关、保护装置、电流电压越限(传统电力SOE场景)
- BAS环控:风机、风阀、温湿度模拟量点位
- FAS火灾:烟感、温感、消防联动设备变位
- 给排水:水泵、液位、阀门状态变化
- 动照:照明回路、配电箱开关状态
2、统一设计标准,消除子系统差异
所有子系统共用一套SOE实体、一张TDengine超级表,依靠systemType标签区分来源,查询、存储逻辑完全复用,不用针对每个子系统单独开发。
三、地铁SOE行业统一规范
- 时间精度:毫秒级,同一秒内多条事件严格区分触发先后;
- 触发条件:模拟量越限、开关量变位、设备离线、联动动作全部生成SOE;
- 存储周期:历史数据至少保存1年,支持导出报表、事故复盘;
- 界面配套:HMI独立SOE追忆子窗口,可按线路、车站、子系统过滤检索。
四、通用SOE事件实体类(全子系统兼容)
import lombok.Data;
@Data
public class SoeRecordDTO {
// 毫秒级精准时间戳
private Long ts;
// 点位唯一ID
private String pointId;
// 设备ID
private String deviceId;
// 点位中文名称
private String pointName;
// 所属子系统 BAS/FAS/给排水/动照/POWER供电
private String systemType;
// 当前数值/开关状态值
private Double value;
// 事件类型 1模拟量越限 2开关量变位 3设备离线 4联动动作
private Integer eventType;
// 事件详细描述
private String eventDesc;
// 线路标签,多线路平台隔离使用
private String lineTag;
// 车站标签
private String stationTag;
}
五、TDengine 通用 SOE 超级表建表语句
依靠 tag 区分子系统、线路、车站,全专业共用一张表,性能无损耗
CREATE STABLE IF NOT EXISTS soe_event_record (
ts TIMESTAMP,
point_value DOUBLE,
event_type TINYINT,
event_desc VARCHAR(256)
) TAGS (
device_id BINARY(32),
point_id BINARY(64),
system_type BINARY(32),
line_tag BINARY(20),
station_tag BINARY(32)
);
六、SOE 事件生成工具类
自动携带子系统标识,电力、环控、火灾设备通用
import org.springframework.stereotype.Component;
@Component
public class SoeRecordUtil {
/**
* 通用SOE事件构建,全子系统复用
*/
public SoeRecordDTO buildSoeEvent(CollectDataDTO data, AlarmRule rule, Integer eventType, String desc) {
SoeRecordDTO soe = new SoeRecordDTO();
soe.setTs(System.currentTimeMillis());
soe.setPointId(data.getPointId());
soe.setDeviceId(data.getDeviceId());
soe.setPointName(rule.getPointName());
// 自动携带子系统,区分电力/BAS/FAS等
soe.setSystemType(rule.getSystemType());
soe.setValue(data.getValue());
soe.setEventType(eventType);
soe.setEventDesc(desc);
// 项目运行时从设备配置读取线路、车站
soe.setLineTag("Line1");
soe.setStationTag("XX车站");
return soe;
}
}
七、业务完整调用链路
告警、开关变位两处入口均可生成 SOE,适配所有子系统设备
// 1.采集实时点位数据(供电/BAS/FAS通用DTO)
CollectDataDTO data = collectService.getRealTimeData();
// 2.查询对应点位告警规则
AlarmRule rule = alarmRuleService.getRuleByPointId(data.getPointId());
// 3.防抖、状态机校验告警
boolean realAlarm = alarmStateEngine.checkAlarmState(data, rule);
if (realAlarm) {
// HMI推送:全子系统统一底部闪烁,一二级弹窗声光
alarmHmiPushService.pushAlarmToHmi(buildHmiDTO(data, rule));
// 写入告警历史表,用于实时故障展示
tdEngineAlarmService.insertAlarmRecord(data, rule);
// 生成SOE时序记录,电力、环控、火灾设备通用
SoeRecordDTO soe = soeRecordUtil.buildSoeEvent(data, rule, 1, "点位数值越限触发故障");
tdEngineSoeService.insertSoeRecord(soe);
}
八、SOE 故障追忆通用查询接口
支持筛选任意子系统,电力、环控分开查询或合并查询均可
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class SoeQueryService {
/**
* 全子系统通用SOE追忆查询
* @param startTime 起始毫秒时间戳
* @param endTime 结束毫秒时间戳
* @param line 线路过滤
* @param station 车站过滤
* @param systemType 子系统过滤:POWER/BAS/FAS/给排水/动照,传空查询全部
* @return 按时间升序排列,还原故障真实时序
*/
public List<SoeRecordDTO> querySoeRecord(Long startTime, Long endTime, String line, String station, String systemType) {
StringBuilder sqlSb = new StringBuilder();
sqlSb.append("SELECT ts,point_value,event_type,event_desc FROM soe_event_record WHERE ts >= ? AND ts <= ? ");
// 子系统过滤条件
if(systemType != null && !systemType.isEmpty()){
sqlSb.append(" AND system_type = ? ");
}
sqlSb.append(" AND line_tag LIKE ? AND station_tag LIKE ? ORDER BY ts ASC");
String sql = sqlSb.toString();
return tdEngineMapper.selectSoeList(sql, startTime, endTime, systemType, line, station);
}
}
九、地铁现场落地关键经验(8 年轨交项目总结)
SOE 起源电力,但地铁全子系统强制落地
早期仅供电专业配置 SOE,现在新线 ISCS 招标规范要求 BAS、FAS 等所有接入系统统一实现事件顺序记录,方案完全通用。
一套存储结构兼容全部专业,降低开发维护成本
无需为电力、环控分别建表、写两套逻辑,依靠 systemType 标签隔离,查询时按需筛选。
开关变位和越限全部留存 SOE
不止故障告警,风机启停、消防设备动作、照明回路分合闸都要记录时序,方便事后联动逻辑复盘。
HMI 增加子系统筛选框
SOE 追忆窗口支持单独查看电力保护事件、单独查看环控设备事件,满足不同专业运维人员使用需求。
时序排序是核心验收点
无论哪个子系统事件,查询结果必须严格按时间戳升序,乱序会导致事故分析失效,验收不予通过。
十、本篇总结
本文实现全子系统通用 SOE 故障追忆方案,虽然 SOE 技术最早应用在电力监控场景,但可以无缝适配地铁 BAS、FAS、给排水、动照等所有子系统。
基于 TDengine 时序库统一存储毫秒级事件,和前面采集、告警、HMI 展示完整打通,代码完全符合地铁综合监控项目交付标准,可用于线路开发、自动化专业毕设。
专栏源码关注引导
本人拥有 8 年地铁综合监控一线开发经验,本专栏完整连载工控采集、时序存储、告警全套 ISCS 落地源码,适配自动化毕设、地铁项目二次开发。
需要完整可运行工程源码的朋友评论区留言【源码】,点关注持续更新全系列实战教程。
更多推荐



所有评论(0)