设备预测维护¶
项目背景与目标¶
工业设备故障停机带来巨大损失:单条产线停机每小时损失可达数十万元,突发故障还可能引发安全事故。传统维护模式(事后维修 + 定期保养)存在"维修过度"与"维修不足"并存的问题。预测性维护(Predictive Maintenance, PdM)通过传感器数据分析,在故障发生前预警并安排维护,最大化设备可用性同时降低维护成本。
本项目目标是构建一个设备预测维护 Agent,通过传感器数据采集、异常检测、故障预测、维护建议,实现从"坏了修"到"预测防"的转变。
需求分析¶
核心能力: 1. 数据采集:振动、温度、压力、电流、声学等多维传感器数据 2. 异常检测:实时识别偏离正常状态的设备 3. 故障预测:预测剩余使用寿命(RUL)与故障时间窗口 4. 故障诊断:定位故障类型与部位 5. 维护建议:维护时机、内容、备件准备 6. 健康评估:设备健康度评分与趋势
设备类型:旋转机械(电机、泵、风机)、静止设备(换热器、反应釜)、移动设备(AGV、叉车)。
技术选型说明¶
| 模块 | 技术方案 | 选型理由 |
|---|---|---|
| 数据采集 | MQTT + 时序数据库 | 高频传感器数据接入 |
| 异常检测 | Isolation Forest + Autoencoder | 无监督异常检测 |
| 故障预测 | LSTM + Survival Analysis | 时序预测与寿命估计 |
| 故障诊断 | 1D-CNN + 规则 | 振动信号诊断 |
| Agent 框架 | LangGraph | 维护决策流程 |
| LLM | Qwen-Max | 诊断报告与建议 |
| 后端 | FastAPI + Flink | 实时流处理 |
| 数据库 | TimescaleDB + InfluxDB | 时序数据 |
架构设计¶
flowchart TD
SENSOR[传感器] --> EDGE[边缘网关]
EDGE --> MQTT[(MQTT)]
MQTT --> STREAM[Flink 流处理]
STREAM --> TDB[(时序数据库)]
STREAM --> ANOM[异常检测]
ANOM --> AGENT[预测维护 Agent]
AGENT --> RUL[寿命预测]
AGENT --> DIAG[故障诊断]
RUL --> LSTM[LSTM 模型]
DIAG --> CNN[1D-CNN]
AGENT --> HEALTH[健康评分]
AGENT --> MAINT[维护建议]
MAINT --> LLM[LLM 生成]
AGENT --> ALERT[告警推送]
TDB --> TRAIN[模型训练]
HIST[历史故障] --> TRAIN
关键模块实现思路¶
模块1:传感器数据采集与特征工程¶
高频传感器(振动采样可达 kHz)数据量大,需在边缘做特征提取降低传输量。时域特征(均值、方差、峰值、峭度)、频域特征(FFT 频谱、功率谱密度)、时频域特征(小波包能量)多维刻画设备状态。
def extract_features(vibration_signal):
time_feat = {
"rms": np.sqrt(np.mean(signal**2)),
"kurtosis": scipy.stats.kurtosis(signal),
"crest_factor": np.max(signal) / rms(signal)
}
freq_feat = fft_features(signal)
return {**time_feat, **freq_feat}
特征工程是 PdM 成功关键,需结合设备机理知识选择有效特征。
模块2:异常检测¶
无监督异常检测适用于缺乏故障标注的场景。双模型策略: - Isolation Forest:基于特征向量检测异常样本 - Autoencoder:重建误差超阈值判定异常,捕捉细微异常
def detect_anomaly(features, if_model, ae_model):
if_score = if_model.decision_function(features)
ae_recon = ae_model.predict(features)
ae_error = np.mean((features - ae_recon)**2)
return if_score < -0.5 or ae_error > threshold
双模型交叉验证降低误报,异常触发后进入故障预测与诊断。
模块3:故障预测与 RUL 估计¶
故障预测两类方法: - LSTM 时序预测:基于退化趋势预测未来状态,达到故障阈值的时间即 RUL - 生存分析:基于设备运行时长、工况、历史故障估计剩余寿命分布
def predict_rul(history_features, threshold):
# LSTM 预测未来特征轨迹
future = lstm_model.predict(history_features, horizon=100)
# 找到首次超过故障阈值的时间点
for t, val in enumerate(future):
if val > threshold:
return t # 剩余寿命
return horizon # 预测期内无故障
RUL 输出点估计 + 置信区间,维护决策考虑不确定性。
模块4:故障诊断¶
故障类型诊断需结合机理与数据。旋转机械常见故障(不平衡、不对中、轴承故障、齿轮磨损)有特征频谱:轴承外圈故障频率 = BPFO,可用包络解调识别。1D-CNN 直接从原始振动信号学习故障模式,结合规则做机理校验。
def diagnose_fault(vibration_signal, rotating_speed):
spectrum = fft(vibration_signal)
faults = []
if has_peak_at(spectrum, bpfo_frequency(rotating_speed)):
faults.append({"type": "轴承外圈故障", "confidence": 0.85})
if has_peak_at(spectrum, 1 * rotating_speed):
faults.append({"type": "不平衡", "confidence": 0.9})
return faults
模块5:维护建议生成¶
LLM 综合异常检测、RUL、故障诊断结果生成维护建议:维护时机(立即/计划窗口)、维护内容(更换部件/调整/检查)、备件准备、人员安排、风险评估。
MAINTENANCE_PROMPT = """设备维护建议生成:
设备:{equipment}
当前状态:{health_score}
异常:{anomalies}
故障预测:{diagnosis}
RUL:{rul}
要求:给出维护时机、内容、备件、人员建议"""
核心流程详解¶
实时监控流程: 1. 传感器数据高频采集 → 边缘特征提取 2. Flink 流处理 → 异常检测实时运行 3. 异常触发 → 故障诊断与 RUL 预测 4. Agent 生成维护建议 → 推送维护团队 5. 健康看板实时更新
维护决策流程: 1. RUL < 警告阈值 → 生成维护工单 2. 评估维护窗口:结合生产计划选最优时机 3. 备件库存检查 → 缺件则提前采购 4. 维护执行 → 记录维护内容与发现 5. 维护后状态评估 → 验证效果 → 模型更新
部署与优化建议¶
- 边缘计算:高频数据处理在边缘,降低带宽与延迟
- 机理融合:纯数据驱动模型结合设备机理知识,提升可解释性
- 标注积累:每次故障与维护记录回流为标注数据
- 工况分群:不同工况下设备状态基准不同,需分群建模
- 告警分级:避免告警风暴,按紧急度分级推送
- 备件联动:维护建议联动备件库存系统,自动触发采购
常见问题与解决方案¶
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 误报多 | 工况变化误判异常 | 工况分群 + 自适应阈值 |
| 故障样本少 | 设备可靠性高 | 数据增强 + 迁移学习 |
| RUL 不准 | 退化规律复杂 | 多模型集成 + 置信区间 |
| 传感器故障 | 数据失真 | 数据质量校验 + 冗余传感器 |
扩展方向¶
- 数字孪生:设备虚拟镜像仿真维护方案
- AR 辅助维护:增强现实指导现场维修
- 备件预测:基于 RUL 预测备件需求
- 能效优化:维护决策兼顾能耗优化