Browse Source

更新import路径

qingfeng 3 years ago
parent
commit
ca3b2cd3a9

+ 27 - 23
LIB/MIDDLE/CellStateEstimation/SOH/V1_0_0/CBMSBatSoh.py

@@ -17,6 +17,7 @@ class BatSoh:
         self.packvolt=df_bms['总电压[V]']
         self.bms_soc=df_bms['SOC[%]']
         self.bms_soh=df_bms['SOH[%]']
+        self.bmsstat=df_bms['充电状态']
         self.bmstime= pd.to_datetime(df_bms['时间戳'], format='%Y-%m-%d %H:%M:%S')
 
         self.df_accum=df_accum
@@ -41,15 +42,18 @@ class BatSoh:
         else:
             return pd.DataFrame()
 
-    def getdata(self):  #获取预算结果库的结果
+    #获取预算结果库的结果....................................................................................................................
+    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='soh_result', sn=self.sn)
     
-    def _np_move_avg(self,a, n, mode="same"): #定义滑动滤波函数
+    #定义滑动滤波函数.........................................................................................................................
+    def _np_move_avg(self,a, n, mode="same"):
         return (np.convolve(a, np.ones((n,)) / n, mode=mode))
 
-    def _chrgdata(self):    #筛选充电数据
+    #筛选充电数据..............................................................................................................................
+    def _chrgdata(self):    
         self.ChgStart=[]
         self.ChgEnd=[]
         if len(self.packvolt)>100:
@@ -63,7 +67,8 @@ class BatSoh:
                 elif i == (len(self.bmstime) - 4) and self.bmsstat[len(self.bmsstat)-1] == 2 and self.bmsstat[len(self.bmsstat)-2] == 2:
                     self.ChgEnd.append(len(self.bmstime)-2)
     
-    def _celltemp_weight(self,num):   #寻找当前行数据的最小温度值
+    #寻找当前行数据的最小温度值.................................................................................................................
+    def _celltemp_weight(self,num):   
         celltemp = []
         for j in range(1, self.param.CellTempNums+1):
             s = str(j)
@@ -96,7 +101,8 @@ class BatSoh:
                 self.tempweight=0.1
                 self.StandardStandingTime=3600
 
-    def _deltsoc_weight(self,deltsoc):   #获取SOC差对应的SOH权重值
+    #获取SOC差对应的SOH权重值...................................................................................................................
+    def _deltsoc_weight(self,deltsoc):   
         if deltsoc>60:   
             deltsoc_weight=1
         elif deltsoc>50:
@@ -111,14 +117,16 @@ class BatSoh:
             deltsoc_weight=0
         return deltsoc_weight
 
-    def _cellvolt_get(self,num): #获取当前行所有电压数据
+    #获取当前行所有电压数据......................................................................................................................
+    def _cellvolt_get(self,num): 
         cellvolt=[]
         for j in range(1, self.param.CellVoltNums+1): 
             s = str(j)
             cellvolt.append(self.df_bms.loc[num,'单体电压' + s]/1000)
         return cellvolt
     
-    def _dvdq_soh(self, chrg_st, chrg_end,cellvolt):    #dvdq方法计算soh
+    #dvdq方法计算soh...........................................................................................................................
+    def _dvdq_soh(self, chrg_st, chrg_end,cellvolt):    
         Ah = 0  #参数赋初始值
         Volt = cellvolt[chrg_st]
         DV_Volt=[]
@@ -219,7 +227,8 @@ class BatSoh:
         else:
             return 0
                 
-    def _ncmsoh_chrg(self):     #NCM充电数据soh计算 
+    #NCM充电数据soh计算.........................................................................................................................
+    def _ncmsoh_chrg(self):      
         self._chrgdata()
         self.getdata()
         ChgStartValid=[]
@@ -282,6 +291,7 @@ class BatSoh:
             return df_res
         return pd.DataFrame()
 
+    #两点法计算三元SOH.........................................................................................................................
     def _ncmsoh_twopoint(self):
         standingpoint_st=[]
         standingpoint_sp=[]
@@ -345,6 +355,7 @@ class BatSoh:
                 standingtime=0
                 continue
 
+        #计算SOH......................................................................................................................
         if standingpoint_sp:
             self.getdata()  #获取已计算的soh
             column_name=['time_st','time_sp','sn','method','soh','cellsoh']
@@ -450,6 +461,7 @@ class BatSoh:
                 return df_res
         return pd.DataFrame()
 
+    #两点法和DVDQ法计算磷酸铁锂电池SOH..................................................................................................................
     def _lfpsoh(self):
         standingpoint_st=[]
         standingpoint_sp=[]
@@ -464,7 +476,7 @@ class BatSoh:
 
         for i in range(3,len(self.df_bms)-3):
 
-            #获取两点法法所需数据-开始
+            #获取两点法法所需数据-开始.................................................................................................................
             if abs(self.packcrnt[i]) < 0.2:     #判断非平台区静置状态
                 delttime=(self.bmstime[i]-self.bmstime[i-1]).total_seconds()
                 standingtime=standingtime+delttime
@@ -521,9 +533,8 @@ class BatSoh:
             else:
                 standingtime=0
                 pass
-            #获取两点法所需数据-结束
 
-            #获取DVDQ算法所需数据——开始
+            #获取DVDQ算法所需数据——开始.............................................................................................................
             if i==3 and self.packcrnt[1]<=-1 and self.packcrnt[2]<=-1 and self.packcrnt[3]<=-1:
                 self._celltemp_weight(i)
                 chrg_start.append(i)
@@ -583,14 +594,15 @@ class BatSoh:
                         continue   
             else:
                 pass
-            #获取DVDQ算法所需数据——结束
         
-        if standingpoint_sp or chrg_end:       #开始计算SOH
+        #开始计算SOH.............................................................................................................................................
+        if standingpoint_sp or chrg_end:       
             self.getdata()  #获取已计算的soh
             column_name=['time_st','time_sp','sn','method','soh','cellsoh']
             df_res=pd.DataFrame(columns=column_name)
         
-            if standingpoint_sp:    #两点法计算SOH
+            #两点法计算SOH........................................................................................................................................
+            if standingpoint_sp:    
                 for i in range(len(standingpoint_sp)):  #判断为满充点或者下拐点
                     if self.packcrnt[standingpoint_sp[i]]<=-1:
                         cellocv_st=self._cellvolt_get(standingpoint_st[i])    
@@ -682,6 +694,7 @@ class BatSoh:
             else:
                 pass
 
+            #DVDQ法计算SOH.......................................................................................................................................
             if chrg_end:
                 for i in range(len(chrg_end)):
                     cellvolt_max = self.df_bms['单体电压' + str(cellmaxvolt_number2[i]+1)] / 1000     #获取最大电压
@@ -724,12 +737,3 @@ class BatSoh:
         return pd.DataFrame()
 
 
-
-
-
-
-
-
-            
-                
-

+ 12 - 11
LIB/MIDDLE/CellStateEstimation/SOH/main.py

@@ -1,16 +1,11 @@
 import CBMSBatSoh
 import log
 #coding=utf-8
-import os
-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
 
 host='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com'
 port=3306
@@ -21,16 +16,17 @@ tablename='soh_result'
 
 dbManager = DBManager.DBManager()
 if __name__ == "__main__":
-    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')
+    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号']
 
-    SNnums=SNnums_6040.tolist()+SNnums_6060.tolist()+SNnums_4840.tolist()
+    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)
@@ -55,7 +51,12 @@ if __name__ == "__main__":
                 celltype=4 #CATL 50ah三元电芯
             else:
                 print('未找到对应电池编号!!!')
-                sys.exit()
+                # sys.exit()
+            
+            # sn='MGMCLN750N215H001'
+            # start_time='2021-08-01 18:52:08'
+            # end_time='2021-08-31 18:52:08'
+            
             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']

+ 12 - 7
LIB/MIDDLE/CellStateEstimation/Uniform/V1_0_0/CBMSBatUniform.py

@@ -21,7 +21,7 @@ class BatUniform:
         if self.celltype==1 or self.celltype==2 or self.celltype==3 or self.celltype==4:
             df_res=self._ncm_uniform()
             return df_res
-            
+                     
         elif self.celltype==99:
             df_res=self._lfp_uniform()
             return df_res
@@ -29,10 +29,12 @@ class BatUniform:
         else:
             return pd.DataFrame()
     
-    def _np_move_avg(self,a, n, mode="same"): #定义滑动滤波函数
+    #定义滑动滤波函数........................................................................................................................................
+    def _np_move_avg(self,a, n, mode="same"): 
         return (np.convolve(a, np.ones((n,)) / n, mode=mode))
     
-    def _celltemp_weight(self,num):   #寻找当前行数据的最小温度值
+    #寻找当前行数据的最小温度值................................................................................................................................
+    def _celltemp_weight(self,num):   
         celltemp = []
         for j in range(1, self.param.CellTempNums+1):
             s = str(j)
@@ -65,14 +67,16 @@ class BatUniform:
                 self.tempweight=0.2
                 self.StandardStandingTime=3600
 
-    def _cellvolt_get(self,num): #获取当前行所有电压数据
+    #获取当前行所有电压数据............................................................................................................................
+    def _cellvolt_get(self,num):
         cellvolt=[]
         for j in range(1, self.param.CellVoltNums+1): 
             s = str(j)
             cellvolt.append(self.df_bms.loc[num,'单体电压' + s]/1000)
         return(cellvolt)
 
-    def _dvdq_peak(self, time, soc, cellvolt, packcrnt):    #寻找DVDQ的峰值点,并返回
+    #寻找DVDQ的峰值点,并返回..........................................................................................................................
+    def _dvdq_peak(self, time, soc, cellvolt, packcrnt):    
         cellvolt1 = self._np_move_avg(cellvolt, 5, mode="same")
         Soc = 0
         Ah = 0
@@ -154,6 +158,7 @@ class BatUniform:
         else:
             return 0
  
+    #三元电池一致性计算.................................................................................................................................
     def _ncm_uniform(self):
         column_name=['time','sn','cellsoc_diff','cellvolt_diff','cellmin_num','cellmax_num']
         df_res=pd.DataFrame(columns=column_name)
@@ -223,6 +228,7 @@ class BatUniform:
         else:
             return df_res
 
+    #磷酸铁锂电池一致性计算.........................................................................................................................
     def _lfp_uniform(self):
         column_name=['time','sn','cellsoc_diff','cellvolt_diff','cellmin_num','cellmax_num']
         df_res=pd.DataFrame(columns=column_name)
@@ -273,7 +279,7 @@ class BatUniform:
                 standingtime=0
                 pass   
 
-            #获取DVDQ算法所需数据——开始
+            #获取DVDQ算法所需数据——开始............................................................................................................
             if i==3 and self.packcrnt[1]<=-1 and self.packcrnt[2]<=-1 and self.packcrnt[3]<=-1:
                 chrg_start.append(i)
                 charging=1
@@ -325,7 +331,6 @@ class BatUniform:
                         continue   
             else:
                 pass
-            #获取DVDQ算法所需数据——结束
 
         if chrg_end:    #DVDQ方法计算soc差
             peaksoc_list=[]

+ 7 - 2
LIB/MIDDLE/CellStateEstimation/Uniform/main.py

@@ -15,6 +15,11 @@ from urllib import parse
 
 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骑享')
@@ -24,10 +29,10 @@ if __name__ == "__main__":
     SNnums_4840=SNdata_4840['SN号']
     SNnums_7250=SNdata_7250['SN号']
 
-    SNnums=SNnums_6040.tolist()+SNnums_6060.tolist()+SNnums_4840.tolist()+SNnums_7250.tolist()
+    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=5)
+    start_time=now_time-datetime.timedelta(days=20)
     end_time=str(now_time)
     start_time=str(start_time)