# -*- coding: UTF-8 -*- import pandas as pd import numpy as np import time from sqlalchemy import create_engine import os import configparser import pymysql import datetime from LIB.BACKEND import DBManager#,Log import log import chrg_cal_alarm def diag_cal(): global df_diag_alarm # 环境变量配置(通过环境变量确定当前程序运行在开发、测试、生产环境) env_dist = os.environ cur_env = env_dist.get("CURENV", 'dev') # 默认为开发环境 # 读取配置文件 (该部分请不要修改) cf = configparser.ConfigParser() if cur_env == 'dev': cf.read("config-dev.ini") elif cur_env == 'test': cf.read("config-test.ini") elif cur_env == 'pro': cf.read("config-pro.ini") # 解析配置文件 (该部分请按照实际需求修改) host1 = cf.get("Mysql-1", 'host') port1 = int(cf.get("Mysql-1", 'port')) db1 = cf.get("Mysql-1", 'db') user1 = cf.get("Mysql-1", 'user') password1 = cf.get("Mysql-1", 'password') host2 = cf.get("Mysql-2", 'host') port2 = int(cf.get("Mysql-2", 'port')) db2 = cf.get("Mysql-2", 'db') user2 = cf.get("Mysql-2", 'user') password2 = cf.get("Mysql-2", 'password') # 日志配置(按照该配置,每次运行时可自动生成运行日期的文件夹, 会在与main.py同级的, 该部分可按照实际需求修改) host1='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com' port1=3306 user1='hz_dev' password1='Qx@123456' param1 = 'pack_code, param'#'pack_code,param'#OCV-SOC曲线参数表 param2 = 'vin, pack_model_code, pack_capacity, module_model_code, sn' db1 ='hz_dev' mysql1 = pymysql.connect (host=host1, user=user1, password=password1, port=port1, database=db1) cursor1 = mysql1.cursor() sql1 = "select %s from %s" %(param1, 'algo_pack_param')#'algo_pack_param' cursor1.execute(sql1) res1 = cursor1.fetchall() df_pack_param= pd.DataFrame(res1,columns=param1.split(','))#电池类型中电池OCV-SOC曲线 np_clms_ocv_lst = df_pack_param.columns#OCV-SOC曲线参数表格中列名 mysql2 = pymysql.connect (host=host1, user=user1, password=password1, port=port1, database=db1) cursor2 = mysql2.cursor() sql2 = "select %s from %s" %(param2, 'vin_pack_cell_info')#'algo_pack_param' cursor2.execute(sql2) res2 = cursor2.fetchall() df_vinmd_code= pd.DataFrame(res2,columns=param2.split(','))#电池的VIN与code对应关系表 # 原始数据时间设置 mylog=log.Mylog('log_diag.txt','error') mylog.logcfg() # df_ori_result = pd.read_csv(r'C:\Users\zldc\project\User\lzx\hz-application-algo\USER\lzx\状态统计\10万辆车\chrgtable\充电表单V3.csv',encoding='GB18030')#读取项目sn号 path = r'C:\Users\zldc\project\User\lzx\hz-application-algo\USER\lzx\状态统计\10万辆车\chrgtable' def get_file(): #创建一个空列表 files =os.listdir(path) files.sort() #排序 file_list= [] for file in files: if not os.path.isdir(path +file): #判断该文件是否是一个文件夹 f_name = str(file) # print(f_name) tr = '\\' #多增加一个斜杠 filename = path + tr + f_name file_list.append(filename) return file_list file_list_chrg = get_file() df_ori_result = pd.DataFrame() for file in file_list_chrg: df_data_temp = pd.read_csv(file, encoding='GB18030') df_ori_result = df_ori_result.append(df_data_temp) df_ori_result.reset_index(drop = True, inplace = True) df_sn_nums = np.unique(df_ori_result['vin']) chrg_soc_st = 65 chrg_soc_sp = 50 chek_delta_time = 90 time_st = time.time() k = 0 # 遍历资产列表,获取数据和参数,输入算法中 for item_vin in df_sn_nums[k:]:#df_all_sn['VIN']:#range(0, df_all_sn.index[-1]):df_all_sn['VIN'][0:1]df_sn_nums['vin'][k:] start = time.time() print('第' + str(k) + '个电池') k += 1 try:# 解析得到厂家、sn、协议类型、电芯参数等输入数据 #------读 df_diag_rlt = df_diag_alarm.loc[(df_diag_alarm['vin'] == item_vin) & (df_diag_alarm['end_flag'] == 0)]#筛选报警未结束的充电异常 df_chrg_data = df_ori_result.loc[df_ori_result['vin'] == item_vin]#放电数据筛选 df_chrg_data.reset_index(drop = True, inplace = True) # 调用核心算法 df_diag_alarm_temp = chrg_cal_alarm.chrg_alarm(df_diag_rlt, df_chrg_data, chrg_soc_st, chrg_soc_sp, chek_delta_time) df_diag_alarm_add = df_diag_alarm_temp.chrg_outler_alarm() if len(df_diag_alarm_add) > 0: df_diag_alarm = df_diag_alarm.append(df_diag_alarm_add) df_diag_alarm.reset_index(drop = True, inplace = True) df_diag_alarm.to_csv(r'C:\Users\zldc\project\User\lzx\hz-application-algo\USER\lzx\chrg_alarm\充电异常报警.csv',index=False,encoding='GB18030') end=time.time() print(end-start) except Exception as e: print(repr(e)) mylog.logopt(str(e) + item_vin) pass time_sp = time.time() print('代码总时长:' + str(time_sp - time_st)) #...............................................主函数起定时作用....................................................................................................................... if __name__ == "__main__": #log信息配置 mylog=log.Mylog('log_alarm.txt','error') mylog.logcfg() #读取fault_code=C599的当前故障 df_diag_alarm = pd.read_csv(r'C:\Users\zldc\project\User\lzx\hz-application-algo\USER\lzx\chrg_alarm\充电异常报警.csv' ,encoding='GB18030') #定时任务....................................................................................................................................................................... diag_cal()