main.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. from LIB.MIDDLE.FaultDiag.FaultWarning.V_1_0_0.CoreAlgo import CBMSBatDiag
  2. import log
  3. import pymysql
  4. from apscheduler.schedulers.blocking import BlockingScheduler
  5. from sqlalchemy import create_engine
  6. from sqlalchemy.orm import sessionmaker
  7. import logging.handlers
  8. import pandas as pd
  9. import time, datetime
  10. import configparser
  11. from LIB.BACKEND.Beans import packageInfo, batteryStatus
  12. from LIB.BACKEND.DataAdapter import Dao
  13. import json
  14. # import CBMSBatDiagV
  15. import os
  16. def diag_cal():
  17. start = time.time()
  18. now_time = datetime.datetime.now() #-datetime.timedelta(seconds=3600*24+3600*14.6)
  19. start_time = now_time-datetime.timedelta(minutes=5)
  20. # st = start_time.strftime('%Y-%m-%d %H:%M:%S')
  21. # et = now_time.strftime('%Y-%m-%d %H:%M:%S')
  22. #数据库配置
  23. host='192.168.0.40'
  24. port=3306
  25. db='db_yuanchu'
  26. user='root'
  27. password='Qx123456'
  28. #读取故障结果库中code==110且end_time='0000-00-00 00:00:00'...............................
  29. db='db_yuanchu'
  30. mysql = pymysql.connect (host=host, user=user, password=password, port=port, database=db)
  31. cursor = mysql.cursor()
  32. param='algo_id,pack_code,threshold,confirm_time,remove_time,param'
  33. sql = "select %s from %s" %(param,'algo_adjustable_param')
  34. cursor.execute(sql)
  35. res = cursor.fetchall()
  36. df_adjust_param= pd.DataFrame(res,columns=param.split(','))
  37. param='algo_id,is_activate,global_param'
  38. sql = "select %s from %s" %(param,'algo_list')
  39. cursor.execute(sql)
  40. res = cursor.fetchall()
  41. df_algo_param= pd.DataFrame(res,columns=param.split(','))
  42. param='sn,pack_code'
  43. sql = "select %s from %s" %(param,'t_device')
  44. cursor.execute(sql)
  45. res = cursor.fetchall()
  46. df_snpk_lst= pd.DataFrame(res,columns=param.split(','))
  47. param='pack_code,param'
  48. sql = "select %s from %s" %(param,'algo_pack_param')
  49. cursor.execute(sql)
  50. res = cursor.fetchall()
  51. df_pack_param= pd.DataFrame(res,columns=param.split(','))
  52. cursor.close()
  53. mysql.close()
  54. Snnums = list(df_snpk_lst['sn'])
  55. #log信息配置
  56. mylog=log.Mylog('log_alarm.txt','error')
  57. mylog.logcfg()
  58. k = 0
  59. df_resall=pd.DataFrame()
  60. for itemsn in Snnums:
  61. try:
  62. st = '2022-10-09 00:00:00'
  63. et = '2022-10-09 00:10:00'
  64. pkcode = df_snpk_lst[df_snpk_lst['sn'] == itemsn]['pack_code'].iloc[0]
  65. df_pack_param= df_pack_param[df_pack_param['pack_code']==pkcode]
  66. pack_param=json.loads(df_pack_param.iloc[0]['param'])
  67. Cellnum = pack_param['CellVoltTotalCount']
  68. tempnum = pack_param['CellTempTotalCount']
  69. sel_columns = [packageInfo.Time, batteryStatus.PackCrnt, batteryStatus.PackVolt,
  70. batteryStatus.PackSoc, batteryStatus.InsulationRssPos, batteryStatus.InsulationRssNeg, batteryStatus.BMSSta,
  71. batteryStatus.CellVoltage, batteryStatus.CellTemp, batteryStatus.OtherTempName, batteryStatus.OtherTempValue]
  72. df_bms = Dao().get_data(sn=itemsn, start_time=st, end_time=et, columns=sel_columns)
  73. df_bms.rename(columns={"PackVolt":"PackVoltage", "OtherTempValue":"EnmTemp"}, inplace=True)
  74. print('第' + str(k) + '个电芯的数据长度:' + str(len(df_bms)))
  75. k += 1
  76. df_diag_ram=pd.DataFrame(columns=['start_time', 'end_time', 'sn', 'fault_code', 'fault_reason', 'fault_advice', 'fault_location', 'end_flag'])
  77. df_soh=pd.DataFrame()
  78. df_sor=pd.DataFrame()
  79. if not df_bms.empty:
  80. df_bms.sort_values(by="Time" , inplace=True, ascending=True)
  81. df_bms.reset_index(drop = True, inplace=True)
  82. BatDiag=CBMSBatDiag.BatDiag(itemsn, df_bms, tempnum, Cellnum)
  83. df_res=BatDiag.diag(df_diag_ram, df_soh, df_sor, df_adjust_param, df_pack_param, df_algo_param)
  84. # df_res.to_csv(r'D:\Work\智锂物联\03项目\05元储\00platform\yc-application\User\LZX\02Test\故障诊断结果.csv', index=False, encoding='GB18030')
  85. if df_resall.empty:
  86. df_resall=df_res.copy()
  87. else:
  88. df_resall=pd.concat([df_resall,df_res])
  89. end=time.time()
  90. print(end-start)
  91. except Exception as e:
  92. print(repr(e))
  93. mylog.logopt(str(e)+itemsn)
  94. pass
  95. if not df_resall.empty:
  96. df_resall.to_csv(r'D:\Work\智锂物联\03项目\05元储\00platform\yc-application\User\LZX\02Test\FaultWarning\Main\故障诊断结果.csv', index=False, encoding='GB18030')
  97. if __name__ == "__main__":
  98. #log信息配置
  99. mylog=log.Mylog('log_alarm.txt','error')
  100. mylog.logcfg()
  101. #读取fault_code=C599的当前故障
  102. df_diag_ram = pd.read_csv(r'D:\Work\智锂物联\03项目\05元储\00platform\yc-application\User\LZX\02Test\FaultWarning\Main\结果.csv' ,encoding='GB18030')
  103. #定时任务.......................................................................................................................................................................
  104. diag_cal()
  105. scheduler = BlockingScheduler()
  106. scheduler.add_job(diag_cal, 'interval', minutes=3, id='diag_job')
  107. try:
  108. scheduler.start()
  109. except Exception as e:
  110. scheduler.shutdown()
  111. print(repr(e))
  112. mylog.logopt(e)