123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- import numpy as np
- import pandas as pd
- import matplotlib.pyplot as plt
- from math import pi
- import math
- from matplotlib.font_manager import FontProperties
- ChineseFont1 = FontProperties(fname = 'C:\\Windows\\Fonts\\simsun.ttc')
- from DiagnosisLib import DiagnosisLib
- myDiagnosisLib = DiagnosisLib()
- ###############################################################################
- # 1、提取原始振动加速度数据并确定参数
- '''
- # Acc = pd.read_csv('中国风电合肥莲花山风电_14#风机_主轴前轴承水平1H_128k 加速度波形(0.1-10000)_25600HZ_加速度_1100RPM_20181203014901.txt')
- with open("中国风电合肥莲花山风电_14#风机_主轴前轴承水平1H_128k 加速度波形(0.1-10000)_25600HZ_加速度_1100RPM_20181203014901.txt", "r") as file: #使用绝对路径 开文件
- Acc = file.read()
- Acc = np.fromstring(Acc, dtype=float, sep=' ') # 原始振动加速度时域波形
- '''
- Acc = pd.read_csv('国能山东--长清风电场_A1_齿轮箱中间轴轴向5A_25600_0.0_20240513031500.csv', header=None)
- Acc = Acc.values
- Acc = Acc.reshape(-1) # 转化为一维数组
- # 原始数据参数
- fspd = 10
- ShaftSpd = fspd
- fs_acc = 25600
- fmax_acc = 10000
- t_acc = np.arange(0, 1/fs_acc*len(Acc), 1/fs_acc)
- ###############################################################################
- # 2、计算振动加速度、振动速度、振动加速度包络三种频谱
- # 2.1、计算振动加速度频谱
- [fAcc, AccSpec] = myDiagnosisLib.Spectrum(Acc,fs_acc)
- # 2.2、计算振动速度频谱
- fCut = 0.1
- fMax = 10000
- VelSpec = myDiagnosisLib.FreqIntegration(AccSpec, fMax, fCut)
- # 2.3、计算加速度包络频谱
- # (1)振动加速度波形做带通滤波(50-1000Hz)
- lowcut = 500
- highcut = 10000
- fs = fs_acc
- order = 6
- Acc_Band = myDiagnosisLib.BandPassButter(Acc, lowcut, highcut, fs, order)
- # (2)带通滤波后的波形做包络(带通范围50-1000Hz)
- DownSampleRate = 8 # 降采样为1/8
- gE_10 = myDiagnosisLib.EnvLopInTime(Acc_Band, DownSampleRate, Method = "SKF") # 加速度包络时域波形
- t_gE_10 =t_acc[::DownSampleRate]
- # (3)对包络波形做频谱(分析频率范围0-100Hz)
- fmax_gE_10 = 1000 # 包络频谱的最大分析频率
- fs_gE_10 = 2.56*fmax_gE_10
- [fAcc_gE, gESpec_10] = myDiagnosisLib.Spectrum(gE_10,fs_gE_10)
- ###############################################################################
- fRangeMode = "百分比"
- fRange = 0.05
- ###############################################################################
- # 诊断跟设备旋转频率相关的故障,即:平衡,对中,松动
- fTarget = ShaftSpd
- numHarmonics = 4
- fmax_vel = 1000
- Detection = "有效值"
- Vel_RunningSpd_HM = []
- Vel_RunningSpd_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- # Vel_RunningSpd_HM,生成转频的1X-5X的倍频值
- # VelSpec,振动速度频谱
- # fmax_vel,最大分析频率
- # fTarget,目标频率为转频
- Vel_alert_mmsRMS = 4 # 速度总值预警阈值 (mm/s 有效值)
- Vel_danger_mmsRMS = 7 # 速度总值报警阈值 (mm/s 有效值)
- defectType = 'Unbalance'
- [UnbalanceDetection, UnbalanceSev] = myDiagnosisLib.RunningSpd_Fault_Diag(Vel_RunningSpd_HM, \
- Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
- print ('Unbalance', UnbalanceDetection, UnbalanceSev)
- defectType = 'Misalignment'
- [MisalignmentDetction, MisalignmentSev] = myDiagnosisLib.RunningSpd_Fault_Diag(Vel_RunningSpd_HM, \
- Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
- print ('Misalignment', MisalignmentDetction, MisalignmentSev)
- defectType = 'Looseness'
- [LoosenessDetection, LoosenessSev] = myDiagnosisLib.RunningSpd_Fault_Diag(Vel_RunningSpd_HM, \
- Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
- print ('Looseness',LoosenessDetection, LoosenessSev)
- ###############################################################################
- #3、诊断轴承相关的故障,即:外圈,内圈,滚动体,保持架
- # 3.1、外圈故障诊断
- BPFO = 4.63
- fbr_BPFO = ShaftSpd*BPFO
- fTarget = fbr_BPFO
- numHarmonics = 4
- Detection = "有效值"
- Vel_Bearing_Defect_HM = []
- Vel_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- fmax_gE_10 = 1000
- Detection = "峰值"
- gE_Bearing_Defect_HM = []
- gE_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- Vel_alert_mmsRMS = 4 # 速度总值预警阈值 (mm/s 有效值)
- Vel_danger_mmsRMS = 7 # 速度总值报警阈值 (mm/s 有效值)
- gE_alert = 3 # 包络总值预警阈值(gE)
- gE_danger = 10 # 包络总值报警阈值(gE)
- defectType = 'BPFO'
- #defectType = 'BPFI'
- [BrDefDetection, BrDefSev] = myDiagnosisLib.Bearing_Fault_Diag(gE_Bearing_Defect_HM, Vel_Bearing_Defect_HM, \
- Vel_RunningSpd_HM, gE_alert, gE_danger, Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
- print ('BPFO', BrDefDetection, BrDefSev)
- # 3.2、内圈故障诊断
- BPFI = 6.32
- fbr_BPFI = ShaftSpd*BPFI
- fTarget = fbr_BPFI
- Detection = "有效值"
- Vel_Bearing_Defect_HM = []
- Vel_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- fmax_gE_10 = 1000
- Detection = "峰值"
- gE_Bearing_Defect_HM = []
- gE_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- defectType = 'BPFI'
- [BrDefDetection, BrDefSev] = myDiagnosisLib.Bearing_Fault_Diag(gE_Bearing_Defect_HM, Vel_Bearing_Defect_HM, \
- Vel_RunningSpd_HM, gE_alert, gE_danger, Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
- print ('BPFI', BrDefDetection, BrDefSev)
- # 3.3、滚动体故障诊断
- BSF = 1.78
- fbr_BSF = ShaftSpd*BSF
- fTarget = fbr_BSF
- Detection = "有效值"
- Vel_Bearing_Defect_HM = []
- Vel_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- fmax_gE_10 = 1000
- Detection = "峰值"
- gE_Bearing_Defect_HM = []
- gE_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- defectType = 'BSF'
- [BrDefDetection, BrDefSev] = myDiagnosisLib.Bearing_Fault_Diag(gE_Bearing_Defect_HM, Vel_Bearing_Defect_HM, \
- Vel_RunningSpd_HM, gE_alert, gE_danger, Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
- print ('BSF', BrDefDetection, BrDefSev)
- # 3.4、保持架故障诊断
- FTF = 0.38
- fbr_FTF = ShaftSpd*FTF
- fTarget = fbr_FTF
- fmax_gE_10 = 1000
- Detection = "峰值"
- gE_Bearing_Defect_HM = []
- gE_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- defectType = 'FTF'
- [BrDefDetection, BrDefSev] = myDiagnosisLib.Bearing_Fault_Diag(gE_Bearing_Defect_HM, Vel_Bearing_Defect_HM, \
- Vel_RunningSpd_HM, gE_alert, gE_danger, Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
- print ('FTF', BrDefDetection, BrDefSev)
- ###############################################################################
- # 4、诊断齿轮相关的故障(齿轮磨损和齿轮断齿)
- numTeeth = 21 # 齿轮齿数
- GMF = ShaftSpd*numTeeth
- fTarget = GMF
- numHarmonics = 2
- Detection = "有效值"
- Vel_GMF_HM = []
- Vel_GMF_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- Detection = "峰值"
- Acc_GMF_HM = []
- Acc_GMF_HM = myDiagnosisLib.FixedFreqFeature(AccSpec, fmax_acc, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- Detection = "峰值"
- gE_GMF_HM = []
- gE_GMF_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- fTarget = ShaftSpd
- numHarmonics = 4
- Detection = "峰值"
- gE_GTIF_HM = []
- gE_GTIF_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- Acc_GMF_alert_gPk = 0.3 # 齿轮缺陷加速度预警阈值 (g 峰值)
- Acc_GMF_danger_gPk = 0.5 # 齿轮缺陷加速度报警阈值 (g 峰值)
- Vel_GMF_alert_mmsRMS = 4.0 # 速度总值预警阈值 (mm/s 有效值)
- Vel_GMF_danger_mmsRMS = 7.0 # 速度总值报警阈值 (mm/s 有效值)
- gE_GMF_alert_gE = 3.0 # 齿轮磨损缺陷加速度包络预警阈值 (gE 峰值)
- gE_GMF_danger_gE = 10.0 # 齿轮磨损缺陷加速度包络报警阈值 (gE 峰值)
- gE_GTIF_alert_gE = 3.0 # 齿轮断齿缺陷加速度包络预警阈值 (gE 峰值)
- gE_GTIF_danger_gE = 10.0 # 齿轮断齿缺陷加速度包络报警阈值 (gE 峰值)
- [GearToothWearDetection, GearToothWearSev, GearToothCrackBrokenDetection, GearToothCrackBrokenSev] = \
- myDiagnosisLib.Gear_Fault_Diag(Acc_GMF_HM, Vel_GMF_HM, gE_GMF_HM, gE_GTIF_HM, Acc_GMF_alert_gPk, \
- Acc_GMF_danger_gPk, Vel_GMF_alert_mmsRMS, Vel_GMF_danger_mmsRMS, gE_GMF_alert_gE,
- gE_GMF_danger_gE, \
- gE_GTIF_alert_gE, gE_GTIF_danger_gE)
- print('齿轮磨损', GearToothWearDetection, GearToothWearSev, '齿轮断齿', GearToothCrackBrokenDetection, \
- GearToothCrackBrokenSev)
- ###############################################################################
- # 5、诊断电机转子条故障
- numRotorBar = 44 # 电机转子条数
- RBPF = ShaftSpd*numRotorBar # 电机转子条通过频率
- fTarget = RBPF
- numHarmonics = 0
- Detection = "有效值"
- Vel_RBPF_HM = []
- Vel_RBPF_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- Detection = "峰值"
- Acc_RBPF_HM = []
- Acc_RBPF_HM = myDiagnosisLib.FixedFreqFeature(AccSpec, fmax_acc, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- Vel_RBPF_alert_mmsRMS = 4.0
- Vel_RBPF_danger_mmsRMS = 7.0
- Acc_RBPF_alert_gPk = 2.5
- Acc_RBPF_danger_gPk = 3.75
- [CrackedRotorbarDetection, CrackedRotorbarSev] = \
- myDiagnosisLib.Cracked_Rotorbar_Diag(Vel_RBPF_HM, Acc_RBPF_HM, Vel_RBPF_alert_mmsRMS, \
- Vel_RBPF_danger_mmsRMS, Acc_RBPF_alert_gPk, Acc_RBPF_danger_gPk)
- print('电机转子条故障',CrackedRotorbarDetection, CrackedRotorbarSev)
- ###############################################################################
- # 6、诊断电机气隙不均匀故障
- LF = 50
- fTarget = 2*LF
- numHarmonics = 0
- Detection = "有效值"
- Vel_2XLF_HM = []
- Vel_2XLF_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- numHarmonics = 4
- Detection = "峰值"
- gE_2XLF_HM = []
- gE_2XLF_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- Vel_2XLF_alert_mmsRMS = 4.0
- Vel_2XLF_danger_mmsRMS = 7.0
- gE_2XLF_alert_gE = 3
- gE_2XLF_danger_gE = 10
- [VariableAirgapDetection, VariableAirgapSev] = \
- myDiagnosisLib.Variable_AirGap_Diag(Vel_2XLF_HM, gE_2XLF_HM, \
- Vel_2XLF_alert_mmsRMS, Vel_2XLF_danger_mmsRMS, gE_2XLF_alert_gE, gE_2XLF_danger_gE)
- print('电机气隙不均匀故障',VariableAirgapDetection, VariableAirgapSev)
- ###############################################################################
- # 7、诊断离心泵叶片故障
- numVane = 13
- VPF = ShaftSpd*numVane
- fTarget = VPF
- numHarmonics = 1
- Detection = "有效值"
- Vel_VPF_HM = []
- Vel_VPF_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
- fRangeMode, Detection, numHarmonics)
- Vel_VPF_alert_mmsRMS = 4.0
- Vel_VPF_danger_mmsRMS = 7.0
- [VaneWearDamageDetection, VaneWearDamageSev] = \
- myDiagnosisLib.Vane_WearDamage_Diag(Vel_VPF_HM, Vel_VPF_alert_mmsRMS, \
- Vel_VPF_danger_mmsRMS)
- print('离心泵叶片故障',VaneWearDamageDetection, VaneWearDamageSev)
|