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)