浏览代码

j将读取结果数据库的操作放在main中

qingfeng 3 年之前
父节点
当前提交
b3c03b3c17

+ 2 - 16
LIB/MIDDLE/CellStateEstimation/InterShort/V1_0_0/CBMSBatInterShort.py

@@ -3,10 +3,9 @@ import numpy as np
 import matplotlib.pyplot as plt
 from pymysql import paramstyle
 from LIB.MIDDLE.CellStateEstimation.Common import BatParam
-from LIB.MIDDLE.CellStateEstimation.Common import DBDownload
 
 class BatInterShort:
-    def __init__(self,sn,celltype,df_bms, host, port, db, user, password, tablename):  #参数初始化
+    def __init__(self,sn,celltype,df_bms,df_soh):  #参数初始化
 
         self.sn=sn
         self.celltype=celltype
@@ -17,12 +16,7 @@ class BatInterShort:
         self.bms_soc=df_bms['SOC[%]']
         self.bmstime= pd.to_datetime(df_bms['时间戳'], format='%Y-%m-%d %H:%M:%S')
 
-        self.host=host
-        self.port=port
-        self.db=db
-        self.user=user
-        self.password=password
-        self.tablename=tablename
+        self.df_soh=df_soh
     
     def intershort(self):
         if self.celltype==1 or self.celltype==2 or self.celltype==3 or self.celltype==4:
@@ -35,12 +29,6 @@ class BatInterShort:
         
         else:
             return pd.DataFrame()
-    
-    #获取预算结果库的结果...............................................................................
-    def getdata(self):  
-        DBManager=DBDownload.DBDownload(self.host, self.port, self.db, self.user, self.password)
-        with DBManager as DBManager:
-            self.df_soh=DBManager.getdata('time_st','time_sp','sn','method','soh','cellsoh', tablename='cellstateestimation_soh', sn=self.sn)
 
     #定义滑动滤波函数....................................................................................
     def _np_move_avg(self,a, n, mode="same"): 
@@ -212,7 +200,6 @@ class BatInterShort:
         df_res=pd.DataFrame(columns=column_name)
         
         if not self.df_bms.empty:
-            self.getdata()  #获取电池包的soh
             if self.df_soh.empty:
                 batsoh=self.df_bms.loc[0,'SOH[%]']
                 capacity=self.param.Capacity*batsoh/100
@@ -348,7 +335,6 @@ class BatInterShort:
         column_name=['time_st', 'time_sp', 'sn', 'method','short_current','baltime']
         df_res=pd.DataFrame(columns=column_name)
         if not self.df_bms.empty:
-            self.getdata()  #获取电池包的soh
             if self.df_soh.empty:
                 batsoh=self.df_bms.loc[0,'SOH[%]']
                 capacity=self.param.Capacity*batsoh/100

+ 22 - 13
LIB/MIDDLE/CellStateEstimation/InterShort/main.py

@@ -8,13 +8,7 @@ import pandas as pd
 from LIB.BACKEND import DBManager, Log
 from sqlalchemy import create_engine
 import time, datetime
-
-host='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com'
-port=3306
-db='qx_cas'
-user='qx_read'
-password='Qx@123456'
-tablename='soh_result'
+from LIB.MIDDLE.CellStateEstimation.Common import DBDownload
 
 dbManager = DBManager.DBManager()
 if __name__ == "__main__":
@@ -31,7 +25,7 @@ if __name__ == "__main__":
     SNnums_L7255=SNdata_L7255['SN号'].tolist()
     SNnums_C7255=SNdata_C7255['SN号'].tolist()
     SNnums_U7255=SNdata_U7255['SN号'].tolist()
-    SNnums= SNnums_L7255 + SNnums_C7255 + SNnums_6040 + SNnums_4840 + SNnums_6060 + SNnums_U7255
+    SNnums= SNnums_6060 + SNnums_L7255 + SNnums_C7255 + SNnums_6040 + SNnums_4840 + SNnums_U7255
     
     now_time=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
     now_time=datetime.datetime.strptime(now_time,'%Y-%m-%d %H:%M:%S')
@@ -60,19 +54,34 @@ if __name__ == "__main__":
                 continue
                 # sys.exit()
             
-            # sn='MGMCLN750N215H001'
-            # celltype=2
-            start_time='2021-08-02 09:12:26'
-            end_time='2021-09-03 19:12:26'
+            sn='PK50201A000002039'
+            celltype=2
+            start_time='2021-05-02 09:12:26'
+            end_time='2021-06-03 19:12:26'
+            # df_bms= pd.read_csv(r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\98Download\\'+'BMS_'+sn+'.csv',encoding='GB18030')
 
+            #......................................................................读取原始数据库数据..................................................................................
             dbManager = DBManager.DBManager()
             df_data = dbManager.get_data(sn=sn, start_time=start_time, end_time=end_time, data_groups=['bms'])
             df_bms = df_data['bms']
             # df_bms.to_csv(r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\99Result\\''BMS_'+sn+'.csv',encoding='GB18030')
+
+            #.....................................................................读取结果数据库数据.............................................................................
+            host='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com'
+            port=3306
+            db='qx_cas'
+            user='qx_read'
+            password='Qx@123456'
+            tablename='cellstateestimation_soh'
+            DBRead=DBDownload.DBDownload(host, port, db, user, password)
+            with DBRead as DBRead:
+                df_soh=DBRead.getdata('time_st','time_sp','sn','method','soh','cellsoh', tablename=tablename, sn=sn)
             
-            BatInterShort=CBMSBatInterShort.BatInterShort(sn,celltype,df_bms,host, port, db, user, password, tablename)
+            #...........................................................................计算漏电流............................................................................
+            BatInterShort=CBMSBatInterShort.BatInterShort(sn,celltype,df_bms,df_soh)
             df_res=BatInterShort.intershort()
             df_res.to_csv(r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\99Result\\'+'CBMS_Short_'+sn+'_1.csv',encoding='GB18030')
+            # print('done!!!')
         
         except Exception as e:
             print(repr(e))

+ 7 - 22
LIB/MIDDLE/CellStateEstimation/SOH/V1_0_0/CBMSBatSoh.py

@@ -4,10 +4,9 @@ import datetime
 import bisect
 import matplotlib.pyplot as plt
 from LIB.MIDDLE.CellStateEstimation.Common import BatParam
-from LIB.MIDDLE.CellStateEstimation.Common import DBDownload
 
 class BatSoh:
-    def __init__(self,sn,celltype,df_bms,df_accum, host, port, db, user, password, tablename):  #参数初始化
+    def __init__(self,sn,celltype,df_bms,df_accum,df_soh):  #参数初始化
 
         self.sn=sn
         self.celltype=celltype
@@ -23,12 +22,7 @@ class BatSoh:
         self.df_accum=df_accum
         self.accumtime=pd.to_datetime(df_accum['时间戳'], format='%Y-%m-%d %H:%M:%S')
 
-        self.host=host
-        self.port=port
-        self.db=db
-        self.user=user
-        self.password=password
-        self.tablename=tablename
+        self.df_soh=df_soh
 
     def batsoh(self):
         if self.celltype==1 or self.celltype==2 or self.celltype==3 or self.celltype==4:
@@ -42,12 +36,6 @@ class BatSoh:
         else:
             return pd.DataFrame()
 
-    #获取预算结果库的结果....................................................................................................................
-    def getdata(self):  
-        DBManager=DBDownload.DBDownload(self.host, self.port, self.db, self.user, self.password)
-        with DBManager as DBManager:
-            self.df_soh=DBManager.getdata('time_st','time_sp','sn','method','soh','cellsoh', tablename='cellstateestimation_soh', sn=self.sn)
-    
     #定义滑动滤波函数.........................................................................................................................
     def _np_move_avg(self,a, n, mode="same"):
         return (np.convolve(a, np.ones((n,)) / n, mode=mode))
@@ -83,7 +71,7 @@ class BatSoh:
                 self.tempweight=0.5
                 self.StandardStandingTime=3600
             elif min(celltemp)>=5:
-                self.tempweight=0
+                self.tempweight=0.2
                 self.StandardStandingTime=7200
             else:
                 self.tempweight=0
@@ -91,16 +79,16 @@ class BatSoh:
         else:
             if min(celltemp)>=20:
                 self.tempweight=1
-                self.StandardStandingTime=900
+                self.StandardStandingTime=1200
             elif min(celltemp)>=10:
                 self.tempweight=0.8
-                self.StandardStandingTime=1200
+                self.StandardStandingTime=1800
             elif min(celltemp)>=5:
                 self.tempweight=0.3
-                self.StandardStandingTime=1800
+                self.StandardStandingTime=3600
             else:
                 self.tempweight=0.1
-                self.StandardStandingTime=3600
+                self.StandardStandingTime=7200
 
     #获取SOC差对应的SOH权重值...................................................................................................................
     def _deltsoc_weight(self,deltsoc):   
@@ -234,7 +222,6 @@ class BatSoh:
     #NCM充电数据soh计算.........................................................................................................................
     def _ncmsoh_chrg(self):      
         self._chrgdata()
-        self.getdata()
         ChgStartValid=[]
         ChgEndValid=[]
         tempweightlist=[]
@@ -363,7 +350,6 @@ class BatSoh:
 
         #计算SOH......................................................................................................................
         if standingpoint_sp:
-            self.getdata()  #获取已计算的soh
             column_name=['time_st','time_sp','sn','method','soh','cellsoh']
             df_res=pd.DataFrame(columns=column_name)
 
@@ -599,7 +585,6 @@ class BatSoh:
         
         #开始计算SOH.............................................................................................................................................
         if standingpoint_sp or chrg_end:       
-            self.getdata()  #获取已计算的soh
             column_name=['time_st','time_sp','sn','method','soh','cellsoh','weight']
             df_res=pd.DataFrame(columns=column_name)
         

+ 40 - 25
LIB/MIDDLE/CellStateEstimation/SOH/main.py

@@ -6,27 +6,25 @@ import pandas as pd
 from LIB.BACKEND import DBManager, Log
 from sqlalchemy import create_engine
 import time, datetime
-
-host='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com'
-port=3306
-db='qx_cas'
-user='qx_read'
-password='Qx@123456'
-tablename='soh_result'
+from LIB.MIDDLE.CellStateEstimation.Common import DBDownload
 
 dbManager = DBManager.DBManager()
 if __name__ == "__main__":
-    excelpath=r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\骑享资产梳理-20210621.xlsx'
-    SNdata_6040 = pd.read_excel(excelpath, sheet_name='6040骑享')
-    SNdata_6060 = pd.read_excel(excelpath, sheet_name='6060')
-    SNdata_4840 = pd.read_excel(excelpath, sheet_name='4840骑享')
-    SNdata_7250 = pd.read_excel(excelpath, sheet_name='7250')
-    SNnums_6060=SNdata_6060['SN号']
-    SNnums_6040=SNdata_6040['SN号']
-    SNnums_4840=SNdata_4840['SN号']
-    SNnums_7250=SNdata_7250['SN号']
+    excelpath=r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\sn-20210903.xlsx'
+    SNdata_6060 = pd.read_excel(excelpath, sheet_name='科易6060')
+    SNdata_6040 = pd.read_excel(excelpath, sheet_name='科易6040')
+    SNdata_4840 = pd.read_excel(excelpath, sheet_name='科易4840')
+    SNdata_L7255 = pd.read_excel(excelpath, sheet_name='格林美-力信7255')
+    SNdata_C7255 = pd.read_excel(excelpath, sheet_name='格林美-CATL7255')
+    SNdata_U7255 = pd.read_excel(excelpath, sheet_name='优旦7255')
+    SNnums_6060=SNdata_6060['SN号'].tolist()
+    SNnums_6040=SNdata_6040['SN号'].tolist()
+    SNnums_4840=SNdata_4840['SN号'].tolist()
+    SNnums_L7255=SNdata_L7255['SN号'].tolist()
+    SNnums_C7255=SNdata_C7255['SN号'].tolist()
+    SNnums_U7255=SNdata_U7255['SN号'].tolist()
+    SNnums= SNnums_6060 + SNnums_L7255 + SNnums_C7255 + SNnums_6040 + SNnums_4840 + SNnums_U7255
 
-    SNnums=SNnums_6060.tolist()+SNnums_6040.tolist()+SNnums_4840.tolist()
     now_time=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
     now_time=datetime.datetime.strptime(now_time,'%Y-%m-%d %H:%M:%S')
     start_time=now_time-datetime.timedelta(days=30)
@@ -50,23 +48,40 @@ if __name__ == "__main__":
             elif 'MGMCLN750' in sn: 
                 celltype=4 #CATL 50ah三元电芯
             else:
-                print('未找到对应电池编号!!!')
+                print('未找到对应电池编号!!!\n',sn)
                 # sys.exit()
             
-            # sn='MGMCLN750N215H001'
-            # start_time='2021-08-01 18:52:08'
-            # end_time='2021-08-31 18:52:08'
+            sn='PK504B10100004353'
+            celltype=99
+            start_time='2021-04-01 19:12:26'
+            end_time='2021-06-02 19:12:26'
+            # df_bms= pd.read_csv(r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\98Download\\'+'BMS_'+sn+'.csv',encoding='GB18030')
+            # df_accum= pd.read_csv(r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\98Download\\'+'BMS_accum_'+sn+'.csv',encoding='GB18030')
             
+            #..........................................................................读取原始数据库数据...........................................................................
             dbManager = DBManager.DBManager()
             df_data = dbManager.get_data(sn=sn, start_time=start_time, end_time=end_time, data_groups=['bms','accum'])
             df_bms = df_data['bms']
             df_accum=df_data['accum']
-            # df_bms.to_csv('BMS_'+sn+'.csv')
-            # df_accum.to_csv('BMS_accum_'+sn+'.csv')
+            # df_bms.to_csv(r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\98Download\\'+'BMS_'+sn+'.csv',encoding='GB18030')
+            # df_accum.to_csv(r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\98Download\\'+'BMS_accum_'+sn+'.csv',encoding='GB18030')
+
+            #..........................................................................读取结果数据库数据.........................................................................
+            host='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com'
+            port=3306
+            db='qx_cas'
+            user='qx_read'
+            password='Qx@123456'
+            tablename='soh_result'
+            DBRead=DBDownload.DBDownload(host, port, db, user, password)
+            with DBRead as DBRead:
+                df_soh=DBRead.getdata('time_st','time_sp','sn','method','soh','cellsoh', tablename='cellstateestimation_soh', sn=sn)
 
-            BatSoh=CBMSBatSoh.BatSoh(sn,celltype,df_bms,df_accum,host, port, db, user, password, tablename)
+            #..............................................................................计算soh...................................................................................
+            BatSoh=CBMSBatSoh.BatSoh(sn,celltype,df_bms,df_accum,df_soh)
             df_res=BatSoh.batsoh()
-            df_res.to_csv('BMS_SOH_'+sn+'.csv',encoding='GB18030')
+            df_res.to_csv(r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\99Result\\'+'CBMS_SOH'+sn+'_1.csv',encoding='GB18030')
+            # print('done!!!')
              
         except IndexError as e:
             print(repr(e))

+ 30 - 25
LIB/MIDDLE/CellStateEstimation/Uniform/main.py

@@ -7,29 +7,29 @@ import sys
 import datetime
 import pandas as pd
 from LIB.BACKEND import DBManager, Log
-# from LIB.MIDDLE import SignalMonitor
 from sqlalchemy import create_engine
 from sqlalchemy.orm import sessionmaker
 import time, datetime
 from urllib import parse
+from LIB.MIDDLE.CellStateEstimation.Common import DBDownload
 
 dbManager = DBManager.DBManager()
 if __name__ == "__main__":
-    excelpath=r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\骑享资产梳理-20210621.xlsx'
-    SNdata_6040 = pd.read_excel(excelpath, sheet_name='6040骑享')
-    SNdata_6060 = pd.read_excel(excelpath, sheet_name='6060')
-    SNdata_4840 = pd.read_excel(excelpath, sheet_name='4840骑享')
-    SNdata_7250 = pd.read_excel(excelpath, sheet_name='7250')
-    SNdata_6040 = pd.read_excel('骑享资产梳理-20210621.xlsx', sheet_name='6040骑享')
-    SNdata_6060 = pd.read_excel('骑享资产梳理-20210621.xlsx', sheet_name='6060')
-    SNdata_4840 = pd.read_excel('骑享资产梳理-20210621.xlsx', sheet_name='4840骑享')
-    SNdata_7250 = pd.read_excel('骑享资产梳理-20210621.xlsx', sheet_name='7250')
-    SNnums_6060=SNdata_6060['SN号']
-    SNnums_6040=SNdata_6040['SN号']
-    SNnums_4840=SNdata_4840['SN号']
-    SNnums_7250=SNdata_7250['SN号']
+    excelpath=r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\sn-20210903.xlsx'
+    SNdata_6060 = pd.read_excel(excelpath, sheet_name='科易6060')
+    SNdata_6040 = pd.read_excel(excelpath, sheet_name='科易6040')
+    SNdata_4840 = pd.read_excel(excelpath, sheet_name='科易4840')
+    SNdata_L7255 = pd.read_excel(excelpath, sheet_name='格林美-力信7255')
+    SNdata_C7255 = pd.read_excel(excelpath, sheet_name='格林美-CATL7255')
+    SNdata_U7255 = pd.read_excel(excelpath, sheet_name='优旦7255')
+    SNnums_6060=SNdata_6060['SN号'].tolist()
+    SNnums_6040=SNdata_6040['SN号'].tolist()
+    SNnums_4840=SNdata_4840['SN号'].tolist()
+    SNnums_L7255=SNdata_L7255['SN号'].tolist()
+    SNnums_C7255=SNdata_C7255['SN号'].tolist()
+    SNnums_U7255=SNdata_U7255['SN号'].tolist()
+    SNnums= SNnums_6060 + SNnums_L7255 + SNnums_C7255 + SNnums_6040 + SNnums_4840 + SNnums_U7255
 
-    SNnums=SNnums_6060.tolist()+SNnums_6040.tolist()+SNnums_4840.tolist()+SNnums_7250.tolist()
     now_time=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
     now_time=datetime.datetime.strptime(now_time,'%Y-%m-%d %H:%M:%S')
     start_time=now_time-datetime.timedelta(days=20)
@@ -46,29 +46,34 @@ if __name__ == "__main__":
                 celltype=1 #6040三元电芯
             elif 'PK502' in sn:
                 celltype=2 #4840三元电芯
-            elif 'PK504' in sn:
+            elif 'K504B' in sn:
                 celltype=99    #60ah林磷酸铁锂电芯
             elif 'MGMLXN750' in sn:
                 celltype=3 #力信50ah三元电芯
-            elif 'MGMCLN750' in sn: 
+            elif 'MGMCLN750' or 'UD' in sn: 
                 celltype=4 #CATL 50ah三元电芯
             else:
-                print('未找到对应电池编号!!!')
-                sys.exit()
+                print('SN:{},未找到对应电池类型!!!'.format(sn))
+                continue
+                # sys.exit()
             
-            # sn='PK50001A100000035'
-            # start_time='2021-08-10 9:49:37'
-            # end_time='2021-08-29 19:49:37'
+            # sn='PK504B10100004386'
+            # celltype=99
+            # start_time='2021-6-21 9:49:37'
+            # end_time='2021-6-22 19:49:37'
+            # df_bms= pd.read_csv(r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\98Download\\'+'BMS_'+sn+'.csv',encoding='GB18030')
 
+            #.....................................................................读取原始数据库数据...........................................................................
             dbManager = DBManager.DBManager()
             df_data = dbManager.get_data(sn=sn, start_time=start_time, end_time=end_time, data_groups=['bms'])
             df_bms = df_data['bms']
-            # df_bms.to_csv('BMS_'+sn+'.csv',encoding='GB18030')
+            # df_bms.to_csv(r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\98Download\\'+'BMS_'+sn+'.csv',encoding='GB18030')
 
+            #.........................................................................计算一致性..............................................................................
             BatUniform=CBMSBatUniform.BatUniform(sn,celltype,df_bms)
             df_res=BatUniform.batuniform()
-            df_res.to_csv('CBMS_Uniform_'+sn+'.csv',encoding='GB18030')
-        
+            df_res.to_csv(r'D:\Platform\platform_python\data_analyze_platform\USER\01qixiang\99Result\\'+'CBMS_Uniform'+sn+'_3.csv',encoding='GB18030')
+            # print('done!!!')
         
         except IndexError as e:
             print(repr(e))