AI+IoT工业预测性维护:振动分析+声学诊断+故障预测
AIIoT工业预测性维护振动分析声学诊断故障预测引言工业设备的非计划停机每年造成全球制造业损失超过5000亿美元。传统维护方式要么坏了再修被动维护要么定时更换预防性维护前者代价高昂后者浪费资源。预测性维护Predictive Maintenance通过传感器实时采集设备振动、温度、声学等数据AI模型分析设备健康状态预测故障发生时间实现该修才修的精准维护。系统架构设计┌─────────────────────────────────────────────────────┐ │ 预测性维护云平台 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 设备健康 │ │ 故障预测 │ │ 工单管理 │ │ │ │ 状态看板 │ │ RUL预测 │ │ 维修调度 │ │ │ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────┬───────────────────────────────────┘ │ MQTT/OPC-UA ┌─────────────────┴───────────────────────────────────┐ │ 边缘计算网关 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 数据采集 │ │ 特征提取 │ │ 异常检测 │ │ │ │ 振动/声学│ │ FFT/MFCC │ │ 实时推理 │ │ │ └──────────┘ └──────────┘ └──────────┘ │ └──┬────────┬────────┬────────────────────────────────┘ │ │ │ ┌──┴──┐ ┌──┴──┐ ┌───┴──┐ │振动传感│ │声学传感│ │温度传感│ │MEMS │ │麦克风│ │红外 │ └─────┘ └─────┘ └──────┘硬件BOM单台设备监测组件型号单价(元)数量说明振动传感器ADXL345 MEMS252三轴加速度声学传感器ICS-43434 I2S201声学特征温度传感器MLX90614红外351非接触测温电流传感器ACS712151电机电流边缘网关ESP32-S3301数据采集上传4G模块SIM76001201数据上传防水壳IP65301工业环境总计~300AI算法详解1. 振动信号分析importnumpyasnpfromscipyimportsignalfromscipy.fftimportfft,fftfreqclassVibrationAnalyzer:振动信号分析def__init__(self,sample_rate10000):self.sample_ratesample_ratedefanalyze(self,vibration_data):完整振动分析# 时域特征time_featuresself._time_domain_features(vibration_data)# 频域特征freq_featuresself._frequency_domain_features(vibration_data)# 包络分析envelope_featuresself._envelope_analysis(vibration_data)return{time_domain:time_features,frequency_domain:freq_features,envelope:envelope_features,health_indicators:self._compute_health_indicators(time_features,freq_features)}def_time_domain_features(self,data):时域特征提取return{rms:float(np.sqrt(np.mean(data**2))),peak:float(np.max(np.abs(data))),crest_factor:float(np.max(np.abs(data))/np.sqrt(np.mean(data**2))),kurtosis:float(self._kurtosis(data)),skewness:float(self._skewness(data)),peak_to_peak:float(np.ptp(data)),variance:float(np.var(data)),shape_factor:float(np.sqrt(np.mean(data**2))/np.mean(np.abs(data)))}def_frequency_domain_features(self,data):频域特征提取nlen(data)yffft(data)xffftfreq(n,1/self.sample_rate)# 只取正频率positive_maskxf0freqsxf[positive_mask]magnitudesnp.abs(yf[positive_mask])*2/n# 主频率dominant_idxnp.argmax(magnitudes)# 频谱质心spectral_centroidnp.sum(freqs*magnitudes)/np.sum(magnitudes)# 频谱能量分布total_energynp.sum(magnitudes**2)# 分频段能量bands{low:(0,100),mid:(100,1000),high:(1000,5000)}band_energies{}forname,(f_low,f_high)inbands.items():mask(freqsf_low)(freqsf_high)band_energies[name]float(np.sum(magnitudes[mask]**2)/total_energy)return{dominant_frequency:float(freqs[dominant_idx]),dominant_magnitude:float(magnitudes[dominant_idx]),spectral_centroid:float(spectral_centroid),spectral_spread:float(np.sqrt(np.sum((freqs-spectral_centroid)**2*magnitudes**2)/total_energy)),band_energies:band_energies,total_energy:float(total_energy)}def_envelope_analysis(self,data):包络分析检测轴承故障# 带通滤波sossignal.butter(4,[1000,4000],bandpass,fsself.sample_rate,outputsos)filteredsignal.sosfilt(sos,data)# 希尔伯特变换求包络analyticsignal.hilbert(filtered)envelopenp.abs(analytic)# 包络频谱nlen(envelope)effft(envelope-np.mean(envelope))ef_freqfftfreq(n,1/self.sample_rate)positive_maskef_freq0envelope_freqsef_freq[positive_mask]envelope_magsnp.abs(ef[positive_mask])*2/n# 检测特征频率轴承故障频率bpfo_idxnp.argmax(envelope_mags)return{envelope_rms:float(np.sqrt(np.mean(envelope**2))),envelope_peak_freq:float(envelope_freqs[bpfo_idx]),envelope_peak_magnitude:float(envelope_mags[bpfo_idx])}def_kurtosis(self,data):峰度nlen(data)meannp.mean(data)stdnp.std(data)ifstd0:return0returnnp.sum(((data-mean)/std)**4)/n-3def_skewness(self,data):偏度nlen(data)meannp.mean(data)stdnp.std(data)ifstd0:return0returnnp.sum(((data-mean)/std)**3)/ndef_compute_health_indicators(self,time_feat,freq_feat):计算健康指标indicators{}# 峰度指标轴承故障敏感iftime_feat[kurtosis]4:indicators[bearing_condition]WARNINGeliftime_feat[kurtosis]8:indicators[bearing_condition]CRITICALelse:indicators[bearing_condition]NORMAL# 波峰因子iftime_feat[crest_factor]5:indicators[impact_detected]Trueelse:indicators[impact_detected]False# 频谱能量分布iffreq_feat[band_energies][high]0.3:indicators[high_freq_noise]HIGHreturnindicators2. 故障分类模型importtorchimporttorch.nnasnnclassFaultClassifier1DCNN(nn.Module):1D-CNN故障分类FAULT_TYPES[normal,# 正常bearing_inner,# 轴承内圈故障bearing_outer,# 轴承外圈故障bearing_ball,# 滚动体故障misalignment,# 不对中imbalance,# 不平衡looseness,# 松动gear_wear,# 齿轮磨损motor_fault# 电机故障]def__init__(self,input_length1024,n_classes9):super().__init__()self.featuresnn.Sequential(nn.Conv1d(1,32,kernel_size7,stride2,padding3),nn.BatchNorm1d(32),nn.ReLU(),nn.MaxPool1d(2),nn.Conv1d(32,64,kernel_size5,stride2,padding2),nn.BatchNorm1d(64),nn.ReLU(),nn.MaxPool1d(2),nn.Conv1d(64,128,kernel_size3,stride1,padding1),nn.BatchNorm1d(128),nn.ReLU(),nn.AdaptiveAvgPool1d(1))self.classifiernn.Sequential(nn.Linear(128,64),nn.ReLU(),nn.Dropout(0.5),nn.Linear(64,n_classes))defforward(self,x):# x: (batch, 1, input_length)xself.features(x)xx.squeeze(-1)returnself.classifier(x)classFaultDiagnosisSystem:故障诊断系统def__init__(self,model_pathNone):self.modelFaultClassifier1DCNN()ifmodel_path:self.model.load_state_dict(torch.load(model_path,map_locationcpu))self.model.eval()self.vibration_analyzerVibrationAnalyzer()self.diagnosis_history[]defdiagnose(self,vibration_data):综合诊断# 信号分析analysisself.vibration_analyzer.analyze(vibration_data)# CNN分类input_tensortorch.FloatTensor(vibration_data).unsqueeze(0).unsqueeze(0)withtorch.no_grad():outputself.model(input_tensor)probstorch.softmax(output,dim1)[0]pred_idxprobs.argmax().item()fault_typeself.FAULT_TYPES[pred_idx]confidenceprobs[pred_idx].item()# 综合诊断结果diagnosis{fault_type:fault_type,confidence:confidence,all_probabilities:{ft:probs[i].item()fori,ftinenumerate(self.FAULT_TYPES)},analysis:analysis,recommendation:self._get_recommendation(fault_type,confidence),severity:self._assess_severity(fault_type,confidence,analysis)}self.diagnosis_history.append(diagnosis)returndiagnosisdef_get_recommendation(self,fault_type,confidence):维修建议recommendations{normal:设备状态正常继续监测,bearing_inner:检查轴承内圈计划更换轴承,bearing_outer:检查轴承外圈计划更换轴承,bearing_ball:检查滚动体计划更换轴承,misalignment:重新对中电机和负载,imbalance:校正转子动平衡,looseness:检查并紧固地脚螺栓,gear_wear:检查齿轮磨损计划更换,motor_fault:检查电机绝缘和绕组}baserecommendations.get(fault_type,请专业人员检查)ifconfidence0.9:returnf【紧急】{base}elifconfidence0.7:returnf【计划】{base}else:returnf【关注】{base}def_assess_severity(self,fault_type,confidence,analysis):严重程度评估iffault_typenormal:returnNORMAL# 基于置信度和振动指标kurtosisanalysis[time_domain][kurtosis]ifconfidence0.9andkurtosis8:returnCRITICALelifconfidence0.7orkurtosis4:returnWARNINGelse:returnADVISORY3. 剩余寿命预测RULimportnumpyasnpfromcollectionsimportdequeclassRULPredictor:剩余使用寿命预测def__init__(self,failure_threshold100):self.failure_thresholdfailure_threshold self.health_index_historydeque(maxlen10000)defupdate(self,health_index,timestamp):更新健康指数self.health_index_history.append({value:health_index,timestamp:timestamp})defpredict_rul(self):预测剩余使用寿命iflen(self.health_index_history)100:returnNonehistorylist(self.health_index_history)values[h[value]forhinhistory]timestamps[h[timestamp]forhinhistory]# 线性回归预测趋势xnp.arange(len(values))coeffsnp.polyfit(x,values,1)slopecoeffs[0]interceptcoeffs[1]ifslope0:return{rul_hours:float(inf),trend:stable,confidence:0.5}# 预测到达阈值的时间currentvalues[-1]remaining_steps(self.failure_threshold-current)/slope# 转换为小时假设每步1小时rul_hoursmax(0,remaining_steps)# 置信度基于拟合误差predictednp.polyval(coeffs,x)residualsvalues-predicted rmsenp.sqrt(np.mean(residuals**2))confidencemax(0,min(1,1-rmse/(self.failure_threshold*0.1)))# 趋势判断recent_slopenp.polyfit(x[-50:],values[-50:],1)[0]iflen(values)50elseslopeifrecent_slopeslope*1.5:trendacceleratingelifrecent_slopeslope*0.5:trenddeceleratingelse:trendlinearreturn{rul_hours:round(rul_hours,1),rul_days:round(rul_hours/24,1),current_health:current,failure_threshold:self.failure_threshold,degradation_rate:slope,trend:trend,confidence:round(confidence,2)}部署实战传感器安装位置电机-泵组监测示意 ┌─────────┐ │ 电机 │ │ ⊙ 前轴承 │ ← 振动传感器X/Y/Z │ ⊙ 后轴承 │ ← 振动传感器X/Y/Z └────┬────┘ │ 联轴器 ┌────┴────┐ │ 泵 │ │ ⊙ 轴承 │ ← 振动传感器 └─────────┘ 声学传感器 → 设备侧面1m处 ️ 温度传感器 → 轴承座 安装要点 - 传感器安装在刚性结构上避免柔性表面 - 振动传感器用螺栓固定不用磁吸 - 声学传感器远离噪音源 - 采样率≥10kHz轴承故障检测成本与ROI项目被动维护预防维护预测维护设备投入00300元/台非计划停机50万/年20万/年5万/年备件浪费5万/年15万/年8万/年人工成本30万/年25万/年20万/年总计85万/年60万/年33万/年监测100台设备投入3万元年节省52万元。未来展望数字孪生设备虚拟模型实时映射自适应模型在线学习适应设备变化供应链联动故障预测自动触发备件采购AR辅助维修增强现实指导维修操作知识图谱故障案例库维修知识库总结300元/台的传感器投入可以将非计划停机减少90%。振动分析声学诊断AI故障分类的组合方案是工业4.0时代设备管理的标准配置。