Auto_Diag.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. from math import pi
  5. import math
  6. from matplotlib.font_manager import FontProperties
  7. ChineseFont1 = FontProperties(fname = 'C:\\Windows\\Fonts\\simsun.ttc')
  8. from DiagnosisLib import DiagnosisLib
  9. myDiagnosisLib = DiagnosisLib()
  10. ###############################################################################
  11. # 1、提取原始振动加速度数据并确定参数
  12. '''
  13. # Acc = pd.read_csv('中国风电合肥莲花山风电_14#风机_主轴前轴承水平1H_128k 加速度波形(0.1-10000)_25600HZ_加速度_1100RPM_20181203014901.txt')
  14. with open("中国风电合肥莲花山风电_14#风机_主轴前轴承水平1H_128k 加速度波形(0.1-10000)_25600HZ_加速度_1100RPM_20181203014901.txt", "r") as file: #使用绝对路径 开文件
  15. Acc = file.read()
  16. Acc = np.fromstring(Acc, dtype=float, sep=' ') # 原始振动加速度时域波形
  17. '''
  18. Acc = pd.read_csv('国能山东--长清风电场_A1_齿轮箱中间轴轴向5A_25600_0.0_20240513031500.csv', header=None)
  19. Acc = Acc.values
  20. Acc = Acc.reshape(-1) # 转化为一维数组
  21. # 原始数据参数
  22. fspd = 10
  23. ShaftSpd = fspd
  24. fs_acc = 25600
  25. fmax_acc = 10000
  26. t_acc = np.arange(0, 1/fs_acc*len(Acc), 1/fs_acc)
  27. ###############################################################################
  28. # 2、计算振动加速度、振动速度、振动加速度包络三种频谱
  29. # 2.1、计算振动加速度频谱
  30. [fAcc, AccSpec] = myDiagnosisLib.Spectrum(Acc,fs_acc)
  31. # 2.2、计算振动速度频谱
  32. fCut = 0.1
  33. fMax = 10000
  34. VelSpec = myDiagnosisLib.FreqIntegration(AccSpec, fMax, fCut)
  35. # 2.3、计算加速度包络频谱
  36. # (1)振动加速度波形做带通滤波(50-1000Hz)
  37. lowcut = 500
  38. highcut = 10000
  39. fs = fs_acc
  40. order = 6
  41. Acc_Band = myDiagnosisLib.BandPassButter(Acc, lowcut, highcut, fs, order)
  42. # (2)带通滤波后的波形做包络(带通范围50-1000Hz)
  43. DownSampleRate = 8 # 降采样为1/8
  44. gE_10 = myDiagnosisLib.EnvLopInTime(Acc_Band, DownSampleRate, Method = "SKF") # 加速度包络时域波形
  45. t_gE_10 =t_acc[::DownSampleRate]
  46. # (3)对包络波形做频谱(分析频率范围0-100Hz)
  47. fmax_gE_10 = 1000 # 包络频谱的最大分析频率
  48. fs_gE_10 = 2.56*fmax_gE_10
  49. [fAcc_gE, gESpec_10] = myDiagnosisLib.Spectrum(gE_10,fs_gE_10)
  50. ###############################################################################
  51. fRangeMode = "百分比"
  52. fRange = 0.05
  53. ###############################################################################
  54. # 诊断跟设备旋转频率相关的故障,即:平衡,对中,松动
  55. fTarget = ShaftSpd
  56. numHarmonics = 4
  57. fmax_vel = 1000
  58. Detection = "有效值"
  59. Vel_RunningSpd_HM = []
  60. Vel_RunningSpd_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
  61. fRangeMode, Detection, numHarmonics)
  62. # Vel_RunningSpd_HM,生成转频的1X-5X的倍频值
  63. # VelSpec,振动速度频谱
  64. # fmax_vel,最大分析频率
  65. # fTarget,目标频率为转频
  66. Vel_alert_mmsRMS = 4 # 速度总值预警阈值 (mm/s 有效值)
  67. Vel_danger_mmsRMS = 7 # 速度总值报警阈值 (mm/s 有效值)
  68. defectType = 'Unbalance'
  69. [UnbalanceDetection, UnbalanceSev] = myDiagnosisLib.RunningSpd_Fault_Diag(Vel_RunningSpd_HM, \
  70. Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
  71. print ('Unbalance', UnbalanceDetection, UnbalanceSev)
  72. defectType = 'Misalignment'
  73. [MisalignmentDetction, MisalignmentSev] = myDiagnosisLib.RunningSpd_Fault_Diag(Vel_RunningSpd_HM, \
  74. Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
  75. print ('Misalignment', MisalignmentDetction, MisalignmentSev)
  76. defectType = 'Looseness'
  77. [LoosenessDetection, LoosenessSev] = myDiagnosisLib.RunningSpd_Fault_Diag(Vel_RunningSpd_HM, \
  78. Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
  79. print ('Looseness',LoosenessDetection, LoosenessSev)
  80. ###############################################################################
  81. #3、诊断轴承相关的故障,即:外圈,内圈,滚动体,保持架
  82. # 3.1、外圈故障诊断
  83. BPFO = 4.63
  84. fbr_BPFO = ShaftSpd*BPFO
  85. fTarget = fbr_BPFO
  86. numHarmonics = 4
  87. Detection = "有效值"
  88. Vel_Bearing_Defect_HM = []
  89. Vel_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
  90. fRangeMode, Detection, numHarmonics)
  91. fmax_gE_10 = 1000
  92. Detection = "峰值"
  93. gE_Bearing_Defect_HM = []
  94. gE_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
  95. fRangeMode, Detection, numHarmonics)
  96. Vel_alert_mmsRMS = 4 # 速度总值预警阈值 (mm/s 有效值)
  97. Vel_danger_mmsRMS = 7 # 速度总值报警阈值 (mm/s 有效值)
  98. gE_alert = 3 # 包络总值预警阈值(gE)
  99. gE_danger = 10 # 包络总值报警阈值(gE)
  100. defectType = 'BPFO'
  101. #defectType = 'BPFI'
  102. [BrDefDetection, BrDefSev] = myDiagnosisLib.Bearing_Fault_Diag(gE_Bearing_Defect_HM, Vel_Bearing_Defect_HM, \
  103. Vel_RunningSpd_HM, gE_alert, gE_danger, Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
  104. print ('BPFO', BrDefDetection, BrDefSev)
  105. # 3.2、内圈故障诊断
  106. BPFI = 6.32
  107. fbr_BPFI = ShaftSpd*BPFI
  108. fTarget = fbr_BPFI
  109. Detection = "有效值"
  110. Vel_Bearing_Defect_HM = []
  111. Vel_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
  112. fRangeMode, Detection, numHarmonics)
  113. fmax_gE_10 = 1000
  114. Detection = "峰值"
  115. gE_Bearing_Defect_HM = []
  116. gE_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
  117. fRangeMode, Detection, numHarmonics)
  118. defectType = 'BPFI'
  119. [BrDefDetection, BrDefSev] = myDiagnosisLib.Bearing_Fault_Diag(gE_Bearing_Defect_HM, Vel_Bearing_Defect_HM, \
  120. Vel_RunningSpd_HM, gE_alert, gE_danger, Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
  121. print ('BPFI', BrDefDetection, BrDefSev)
  122. # 3.3、滚动体故障诊断
  123. BSF = 1.78
  124. fbr_BSF = ShaftSpd*BSF
  125. fTarget = fbr_BSF
  126. Detection = "有效值"
  127. Vel_Bearing_Defect_HM = []
  128. Vel_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
  129. fRangeMode, Detection, numHarmonics)
  130. fmax_gE_10 = 1000
  131. Detection = "峰值"
  132. gE_Bearing_Defect_HM = []
  133. gE_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
  134. fRangeMode, Detection, numHarmonics)
  135. defectType = 'BSF'
  136. [BrDefDetection, BrDefSev] = myDiagnosisLib.Bearing_Fault_Diag(gE_Bearing_Defect_HM, Vel_Bearing_Defect_HM, \
  137. Vel_RunningSpd_HM, gE_alert, gE_danger, Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
  138. print ('BSF', BrDefDetection, BrDefSev)
  139. # 3.4、保持架故障诊断
  140. FTF = 0.38
  141. fbr_FTF = ShaftSpd*FTF
  142. fTarget = fbr_FTF
  143. fmax_gE_10 = 1000
  144. Detection = "峰值"
  145. gE_Bearing_Defect_HM = []
  146. gE_Bearing_Defect_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
  147. fRangeMode, Detection, numHarmonics)
  148. defectType = 'FTF'
  149. [BrDefDetection, BrDefSev] = myDiagnosisLib.Bearing_Fault_Diag(gE_Bearing_Defect_HM, Vel_Bearing_Defect_HM, \
  150. Vel_RunningSpd_HM, gE_alert, gE_danger, Vel_alert_mmsRMS, Vel_danger_mmsRMS, defectType)
  151. print ('FTF', BrDefDetection, BrDefSev)
  152. ###############################################################################
  153. # 4、诊断齿轮相关的故障(齿轮磨损和齿轮断齿)
  154. numTeeth = 21 # 齿轮齿数
  155. GMF = ShaftSpd*numTeeth
  156. fTarget = GMF
  157. numHarmonics = 2
  158. Detection = "有效值"
  159. Vel_GMF_HM = []
  160. Vel_GMF_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
  161. fRangeMode, Detection, numHarmonics)
  162. Detection = "峰值"
  163. Acc_GMF_HM = []
  164. Acc_GMF_HM = myDiagnosisLib.FixedFreqFeature(AccSpec, fmax_acc, fTarget, fRange, \
  165. fRangeMode, Detection, numHarmonics)
  166. Detection = "峰值"
  167. gE_GMF_HM = []
  168. gE_GMF_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
  169. fRangeMode, Detection, numHarmonics)
  170. fTarget = ShaftSpd
  171. numHarmonics = 4
  172. Detection = "峰值"
  173. gE_GTIF_HM = []
  174. gE_GTIF_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
  175. fRangeMode, Detection, numHarmonics)
  176. Acc_GMF_alert_gPk = 0.3 # 齿轮缺陷加速度预警阈值 (g 峰值)
  177. Acc_GMF_danger_gPk = 0.5 # 齿轮缺陷加速度报警阈值 (g 峰值)
  178. Vel_GMF_alert_mmsRMS = 4.0 # 速度总值预警阈值 (mm/s 有效值)
  179. Vel_GMF_danger_mmsRMS = 7.0 # 速度总值报警阈值 (mm/s 有效值)
  180. gE_GMF_alert_gE = 3.0 # 齿轮磨损缺陷加速度包络预警阈值 (gE 峰值)
  181. gE_GMF_danger_gE = 10.0 # 齿轮磨损缺陷加速度包络报警阈值 (gE 峰值)
  182. gE_GTIF_alert_gE = 3.0 # 齿轮断齿缺陷加速度包络预警阈值 (gE 峰值)
  183. gE_GTIF_danger_gE = 10.0 # 齿轮断齿缺陷加速度包络报警阈值 (gE 峰值)
  184. [GearToothWearDetection, GearToothWearSev, GearToothCrackBrokenDetection, GearToothCrackBrokenSev] = \
  185. myDiagnosisLib.Gear_Fault_Diag(Acc_GMF_HM, Vel_GMF_HM, gE_GMF_HM, gE_GTIF_HM, Acc_GMF_alert_gPk, \
  186. Acc_GMF_danger_gPk, Vel_GMF_alert_mmsRMS, Vel_GMF_danger_mmsRMS, gE_GMF_alert_gE,
  187. gE_GMF_danger_gE, \
  188. gE_GTIF_alert_gE, gE_GTIF_danger_gE)
  189. print('齿轮磨损', GearToothWearDetection, GearToothWearSev, '齿轮断齿', GearToothCrackBrokenDetection, \
  190. GearToothCrackBrokenSev)
  191. ###############################################################################
  192. # 5、诊断电机转子条故障
  193. numRotorBar = 44 # 电机转子条数
  194. RBPF = ShaftSpd*numRotorBar # 电机转子条通过频率
  195. fTarget = RBPF
  196. numHarmonics = 0
  197. Detection = "有效值"
  198. Vel_RBPF_HM = []
  199. Vel_RBPF_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
  200. fRangeMode, Detection, numHarmonics)
  201. Detection = "峰值"
  202. Acc_RBPF_HM = []
  203. Acc_RBPF_HM = myDiagnosisLib.FixedFreqFeature(AccSpec, fmax_acc, fTarget, fRange, \
  204. fRangeMode, Detection, numHarmonics)
  205. Vel_RBPF_alert_mmsRMS = 4.0
  206. Vel_RBPF_danger_mmsRMS = 7.0
  207. Acc_RBPF_alert_gPk = 2.5
  208. Acc_RBPF_danger_gPk = 3.75
  209. [CrackedRotorbarDetection, CrackedRotorbarSev] = \
  210. myDiagnosisLib.Cracked_Rotorbar_Diag(Vel_RBPF_HM, Acc_RBPF_HM, Vel_RBPF_alert_mmsRMS, \
  211. Vel_RBPF_danger_mmsRMS, Acc_RBPF_alert_gPk, Acc_RBPF_danger_gPk)
  212. print('电机转子条故障',CrackedRotorbarDetection, CrackedRotorbarSev)
  213. ###############################################################################
  214. # 6、诊断电机气隙不均匀故障
  215. LF = 50
  216. fTarget = 2*LF
  217. numHarmonics = 0
  218. Detection = "有效值"
  219. Vel_2XLF_HM = []
  220. Vel_2XLF_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
  221. fRangeMode, Detection, numHarmonics)
  222. numHarmonics = 4
  223. Detection = "峰值"
  224. gE_2XLF_HM = []
  225. gE_2XLF_HM = myDiagnosisLib.FixedFreqFeature(gESpec_10, fmax_gE_10, fTarget, fRange, \
  226. fRangeMode, Detection, numHarmonics)
  227. Vel_2XLF_alert_mmsRMS = 4.0
  228. Vel_2XLF_danger_mmsRMS = 7.0
  229. gE_2XLF_alert_gE = 3
  230. gE_2XLF_danger_gE = 10
  231. [VariableAirgapDetection, VariableAirgapSev] = \
  232. myDiagnosisLib.Variable_AirGap_Diag(Vel_2XLF_HM, gE_2XLF_HM, \
  233. Vel_2XLF_alert_mmsRMS, Vel_2XLF_danger_mmsRMS, gE_2XLF_alert_gE, gE_2XLF_danger_gE)
  234. print('电机气隙不均匀故障',VariableAirgapDetection, VariableAirgapSev)
  235. ###############################################################################
  236. # 7、诊断离心泵叶片故障
  237. numVane = 13
  238. VPF = ShaftSpd*numVane
  239. fTarget = VPF
  240. numHarmonics = 1
  241. Detection = "有效值"
  242. Vel_VPF_HM = []
  243. Vel_VPF_HM = myDiagnosisLib.FixedFreqFeature(VelSpec, fmax_vel, fTarget, fRange, \
  244. fRangeMode, Detection, numHarmonics)
  245. Vel_VPF_alert_mmsRMS = 4.0
  246. Vel_VPF_danger_mmsRMS = 7.0
  247. [VaneWearDamageDetection, VaneWearDamageSev] = \
  248. myDiagnosisLib.Vane_WearDamage_Diag(Vel_VPF_HM, Vel_VPF_alert_mmsRMS, \
  249. Vel_VPF_danger_mmsRMS)
  250. print('离心泵叶片故障',VaneWearDamageDetection, VaneWearDamageSev)