Auto_Diag.py 13 KB

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