123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- # -*- 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()
|