123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- from LIB.MIDDLE.FaultDiag.FaultWarning.V_1_0_0.CoreAlgo import CBMSBatDiag
- import log
- import pymysql
- from apscheduler.schedulers.blocking import BlockingScheduler
- from sqlalchemy import create_engine
- from sqlalchemy.orm import sessionmaker
- import logging.handlers
- import pandas as pd
- import time, datetime
- import configparser
- from LIB.BACKEND.Beans import packageInfo, batteryStatus
- from LIB.BACKEND.DataAdapter import Dao
- import json
- # import CBMSBatDiagV
- import os
- def diag_cal():
- start = time.time()
- now_time = datetime.datetime.now() #-datetime.timedelta(seconds=3600*24+3600*14.6)
- start_time = now_time-datetime.timedelta(minutes=5)
- # st = start_time.strftime('%Y-%m-%d %H:%M:%S')
- # et = now_time.strftime('%Y-%m-%d %H:%M:%S')
-
- #数据库配置
- host='192.168.0.40'
- port=3306
- db='db_yuanchu'
- user='root'
- password='Qx123456'
- #读取故障结果库中code==110且end_time='0000-00-00 00:00:00'...............................
- db='db_yuanchu'
- mysql = pymysql.connect (host=host, user=user, password=password, port=port, database=db)
- cursor = mysql.cursor()
- param='algo_id,pack_code,threshold,confirm_time,remove_time,param'
- sql = "select %s from %s" %(param,'algo_adjustable_param')
- cursor.execute(sql)
- res = cursor.fetchall()
- df_adjust_param= pd.DataFrame(res,columns=param.split(','))
-
- param='algo_id,is_activate,global_param'
- sql = "select %s from %s" %(param,'algo_list')
- cursor.execute(sql)
- res = cursor.fetchall()
- df_algo_param= pd.DataFrame(res,columns=param.split(','))
-
- param='sn,pack_code'
- sql = "select %s from %s" %(param,'t_device')
- cursor.execute(sql)
- res = cursor.fetchall()
- df_snpk_lst= pd.DataFrame(res,columns=param.split(','))
-
- param='pack_code,param'
- sql = "select %s from %s" %(param,'algo_pack_param')
- cursor.execute(sql)
- res = cursor.fetchall()
- df_pack_param= pd.DataFrame(res,columns=param.split(','))
- cursor.close()
- mysql.close()
-
- Snnums = list(df_snpk_lst['sn'])
- #log信息配置
- mylog=log.Mylog('log_alarm.txt','error')
- mylog.logcfg()
- k = 0
- df_resall=pd.DataFrame()
- for itemsn in Snnums:
- try:
- st = '2022-10-09 00:00:00'
- et = '2022-10-09 00:10:00'
- pkcode = df_snpk_lst[df_snpk_lst['sn'] == itemsn]['pack_code'].iloc[0]
- df_pack_param= df_pack_param[df_pack_param['pack_code']==pkcode]
- pack_param=json.loads(df_pack_param.iloc[0]['param'])
- Cellnum = pack_param['CellVoltTotalCount']
- tempnum = pack_param['CellTempTotalCount']
- sel_columns = [packageInfo.Time, batteryStatus.PackCrnt, batteryStatus.PackVolt,
- batteryStatus.PackSoc, batteryStatus.InsulationRssPos, batteryStatus.InsulationRssNeg, batteryStatus.BMSSta,
- batteryStatus.CellVoltage, batteryStatus.CellTemp, batteryStatus.OtherTempName, batteryStatus.OtherTempValue]
- df_bms = Dao().get_data(sn=itemsn, start_time=st, end_time=et, columns=sel_columns)
- df_bms.rename(columns={"PackVolt":"PackVoltage", "OtherTempValue":"EnmTemp"}, inplace=True)
- print('第' + str(k) + '个电芯的数据长度:' + str(len(df_bms)))
- k += 1
- df_diag_ram=pd.DataFrame(columns=['start_time', 'end_time', 'sn', 'fault_code', 'fault_reason', 'fault_advice', 'fault_location', 'end_flag'])
- df_soh=pd.DataFrame()
- df_sor=pd.DataFrame()
- if not df_bms.empty:
- df_bms.sort_values(by="Time" , inplace=True, ascending=True)
- df_bms.reset_index(drop = True, inplace=True)
- BatDiag=CBMSBatDiag.BatDiag(itemsn, df_bms, tempnum, Cellnum)
- df_res=BatDiag.diag(df_diag_ram, df_soh, df_sor, df_adjust_param, df_pack_param, df_algo_param)
- # df_res.to_csv(r'D:\Work\智锂物联\03项目\05元储\00platform\yc-application\User\LZX\02Test\故障诊断结果.csv', index=False, encoding='GB18030')
- if df_resall.empty:
- df_resall=df_res.copy()
- else:
- df_resall=pd.concat([df_resall,df_res])
-
- end=time.time()
- print(end-start)
-
- except Exception as e:
- print(repr(e))
- mylog.logopt(str(e)+itemsn)
- pass
- if not df_resall.empty:
- df_resall.to_csv(r'D:\Work\智锂物联\03项目\05元储\00platform\yc-application\User\LZX\02Test\FaultWarning\Main\故障诊断结果.csv', index=False, encoding='GB18030')
-
- if __name__ == "__main__":
-
- #log信息配置
- mylog=log.Mylog('log_alarm.txt','error')
- mylog.logcfg()
-
-
- #读取fault_code=C599的当前故障
- df_diag_ram = pd.read_csv(r'D:\Work\智锂物联\03项目\05元储\00platform\yc-application\User\LZX\02Test\FaultWarning\Main\结果.csv' ,encoding='GB18030')
- #定时任务.......................................................................................................................................................................
- diag_cal()
- scheduler = BlockingScheduler()
- scheduler.add_job(diag_cal, 'interval', minutes=3, id='diag_job')
- try:
- scheduler.start()
- except Exception as e:
- scheduler.shutdown()
- print(repr(e))
- mylog.logopt(e)
|