Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/dev' into pro

lmstack 3 gadi atpakaļ
vecāks
revīzija
c64d3f74f8

+ 103 - 103
LIB/MIDDLE/CellStateEstimation/BatSafetyWarning/V1_0_1/CBMSBatInterShort.py

@@ -770,121 +770,121 @@ class BatInterShort():
                     if (self.bmstime[i+1]-self.bmstime[i]).total_seconds()>180 or (self.packcrnt[i]>self.param.Capacity/2 and self.packcrnt[i+1]>self.param.Capacity/2):  #如果充电过程中时间间隔>180s,则舍弃该次充电
                         charging=0
                         continue
-                    # elif min(cellvolt_now)>self.param.CellFullChrgVolt-0.13:   #电压>满充电压-0.13V,即3.37V
-                    #     self._celltemp_weight(i)
-                    #     if i-chrg_start>10 and self.celltemp>20:
-                    #         chrg_end=i+1
-                    #         charging=0
-
-                    #         #计算漏电流值...................................................................
-                    #         if firsttime2==1:
-                    #             dict_baltime={}
-                    #             deltAs_last2=self._cellDeltAs_get(chrg_start,chrg_end,dict_baltime)
-                    #             time_last2=self.bmstime[chrg_end]
-                    #             df_ram_last2.loc[0]=[self.sn,time_last2,deltAs_last2]    #更新RAM信息
-                    #         else:
-                    #             dict_baltime=self._bal_time(dict_bal2)   #获取每个电芯的均衡时间
-                    #             deltAs_now2=self._cellDeltAs_get(chrg_start,chrg_end,dict_baltime)  #获取每个电芯的As差
-                    #             time_now2=self.bmstime[chrg_end]
-                    #             df_ram_last2.loc[0]=[self.sn,time_now2,deltAs_now2]    #更新RAM信息
-
-                    #             list_sub2=deltAs_now2-deltAs_last2
-                    #             list_pud2=-1000/(time_now2-time_last2).total_seconds()
-                    #             leak_current2=list_sub2*list_pud2
-                    #             # leak_current=np.array(leak_current)
-                    #             leak_current2=np.round(leak_current2,3)
-                    #             leak_current2=list(leak_current2)
-
-                    #             df_res.loc[len(df_res)]=[time_last2,time_now2,self.sn,3,str(leak_current2),str(dict_baltime)]  #计算结果存入Dataframe
-                    #             deltAs_last2=deltAs_now2
-                    #             time_last2=time_now2
-                    #             dict_bal2={}
-
-                    #     else:
-                    #         charging=0
-                    #         continue
-                    elif min(cellvolt_now)>self.param.CellFullChrgVolt-0.1:   #电压>满充电压
+                    elif min(cellvolt_now)>self.param.CellFullChrgVolt-0.13:   #电压>满充电压-0.13V,即3.37V
                         self._celltemp_weight(i)
-                        if i-chrg_start>10 and self.celltemp>10:
+                        if i-chrg_start>10 and self.celltemp>20:
                             chrg_end=i+1
                             charging=0
 
                             #计算漏电流值...................................................................
                             if firsttime2==1:
                                 dict_baltime={}
-                                peaksoc_list=[]
-                                for j in range(1, self.param.CellVoltNums + 1):
-                                    cellvolt = self._singlevolt_get(i,j,2)  #取单体电压j的所有电压值
-                                    cellvolt = list(cellvolt[chrg_start:chrg_end])
-                                    time = list(self.bmstime[chrg_start:chrg_end])
-                                    packcrnt = list(self.packcrnt[chrg_start:chrg_end])
-                                    soc = list(self.bms_soc[chrg_start:chrg_end])
-                                    peaksoc = self._dvdq_peak(time, soc, cellvolt, packcrnt)
-                                    if peaksoc>1:
-                                        peaksoc_list.append(peaksoc)
-                                    else:
-                                        break
-                                if len(peaksoc_list)==self.param.CellVoltNums:
-                                    celldeltsoc=[]
-                                    consum_num=10
-                                    cellsoc1=peaksoc_list[:self.param.CellVoltNums-consum_num]    #切片,将bms耗电的电芯和非耗电的电芯分离开
-                                    cellsocmean1=(sum(cellsoc1)-max(cellsoc1)-min(cellsoc1))/(len(cellsoc1)-2)
-                                    cellsoc2=peaksoc_list[self.param.CellVoltNums-consum_num:]
-                                    cellsocmean2=(sum(cellsoc2)-max(cellsoc2)-min(cellsoc2))/(len(cellsoc2)-2)
-                                    
-                                    for j in range(len(peaksoc_list)):   #计算每个电芯的soc差
-                                        if j<self.param.CellVoltNums-consum_num:
-                                            celldeltsoc.append(peaksoc_list[j]-cellsocmean1)
-                                        else:
-                                            celldeltsoc.append(peaksoc_list[j]-cellsocmean2)
-                                    deltsoc_last2=celldeltsoc
-                                    time_last2=self.bmstime[chrg_end]
-                                    df_ram_last2.loc[0]=[self.sn,time_last2,deltsoc_last2]    #更新RAM信息
+                                deltAs_last2=self._cellDeltAs_get(chrg_start,chrg_end,dict_baltime)
+                                time_last2=self.bmstime[chrg_end]
+                                df_ram_last2.loc[0]=[self.sn,time_last2,deltAs_last2]    #更新RAM信息
                             else:
                                 dict_baltime=self._bal_time(dict_bal2)   #获取每个电芯的均衡时间
-                                peaksoc_list=[]
-                                for j in range(1, self.param.CellVoltNums + 1):
-                                    cellvolt = self._singlevolt_get(i,j,2)  #取单体电压j的所有电压值
-                                    cellvolt = list(cellvolt[chrg_start:chrg_end])
-                                    time = list(self.bmstime[chrg_start:chrg_end])
-                                    packcrnt = list(self.packcrnt[chrg_start:chrg_end])
-                                    soc = list(self.bms_soc[chrg_start:chrg_end])
-                                    peaksoc = self._dvdq_peak(time, soc, cellvolt, packcrnt)
-                                    if peaksoc>1:
-                                        peaksoc_list.append(peaksoc)
-                                    else:
-                                        break
-                                if len(peaksoc_list)==self.param.CellVoltNums:
-                                    celldeltsoc=[]
-                                    consum_num=10
-                                    cellsoc1=peaksoc_list[:self.param.CellVoltNums-consum_num]    #切片,将bms耗电的电芯和非耗电的电芯分离开
-                                    cellsocmean1=(sum(cellsoc1)-max(cellsoc1)-min(cellsoc1))/(len(cellsoc1)-2)
-                                    cellsoc2=peaksoc_list[self.param.CellVoltNums-consum_num:]
-                                    cellsocmean2=(sum(cellsoc2)-max(cellsoc2)-min(cellsoc2))/(len(cellsoc2)-2)
-                                    
-                                    for j in range(len(peaksoc_list)):   #计算每个电芯的soc差
-                                        if j<self.param.CellVoltNums-consum_num:
-                                            celldeltsoc.append(peaksoc_list[j]-cellsocmean1)
-                                        else:
-                                            celldeltsoc.append(peaksoc_list[j]-cellsocmean2)
-                                    deltsoc_now2=celldeltsoc
-                                    time_now2=self.bmstime[chrg_end]
-                                    df_ram_last2.loc[0]=[self.sn,time_now2,deltsoc_now2]    #更新RAM信息
-
-                                    list_sub2=deltsoc_now2-deltsoc_last2
-                                    list_pud2=(0.01*capacity*3600*1000)/(time_now2-time_last2).total_seconds()
-                                    leak_current2=list_sub2*list_pud2
-                                    leak_current2=np.round(leak_current2,3)
-                                    leak_current2=list(leak_current2)
-
-                                    df_res.loc[len(df_res)]=[time_last2,time_now2,self.sn,3,str(leak_current2),str(dict_baltime)]  #计算结果存入Dataframe
-                                    deltsoc_last2=deltsoc_now2
-                                    time_last2=time_now2
-                                    dict_bal2={}
-                        
+                                deltAs_now2=self._cellDeltAs_get(chrg_start,chrg_end,dict_baltime)  #获取每个电芯的As差
+                                time_now2=self.bmstime[chrg_end]
+                                df_ram_last2.loc[0]=[self.sn,time_now2,deltAs_now2]    #更新RAM信息
+
+                                list_sub2=deltAs_now2-deltAs_last2
+                                list_pud2=-1000/(time_now2-time_last2).total_seconds()
+                                leak_current2=list_sub2*list_pud2
+                                # leak_current=np.array(leak_current)
+                                leak_current2=np.round(leak_current2,3)
+                                leak_current2=list(leak_current2)
+
+                                df_res.loc[len(df_res)]=[time_last2,time_now2,self.sn,3,str(leak_current2),str(dict_baltime)]  #计算结果存入Dataframe
+                                deltAs_last2=deltAs_now2
+                                time_last2=time_now2
+                                dict_bal2={}
+
                         else:
                             charging=0
                             continue
+                    # elif min(cellvolt_now)>self.param.CellFullChrgVolt-0.1:   #电压>满充电压
+                    #     self._celltemp_weight(i)
+                    #     if i-chrg_start>10 and self.celltemp>10:
+                    #         chrg_end=i+1
+                    #         charging=0
+
+                    #         #计算漏电流值...................................................................
+                    #         if firsttime2==1:
+                    #             dict_baltime={}
+                    #             peaksoc_list=[]
+                    #             for j in range(1, self.param.CellVoltNums + 1):
+                    #                 cellvolt = self._singlevolt_get(i,j,2)  #取单体电压j的所有电压值
+                    #                 cellvolt = list(cellvolt[chrg_start:chrg_end])
+                    #                 time = list(self.bmstime[chrg_start:chrg_end])
+                    #                 packcrnt = list(self.packcrnt[chrg_start:chrg_end])
+                    #                 soc = list(self.bms_soc[chrg_start:chrg_end])
+                    #                 peaksoc = self._dvdq_peak(time, soc, cellvolt, packcrnt)
+                    #                 if peaksoc>1:
+                    #                     peaksoc_list.append(peaksoc)
+                    #                 else:
+                    #                     break
+                    #             if len(peaksoc_list)==self.param.CellVoltNums:
+                    #                 celldeltsoc=[]
+                    #                 consum_num=10
+                    #                 cellsoc1=peaksoc_list[:self.param.CellVoltNums-consum_num]    #切片,将bms耗电的电芯和非耗电的电芯分离开
+                    #                 cellsocmean1=(sum(cellsoc1)-max(cellsoc1)-min(cellsoc1))/(len(cellsoc1)-2)
+                    #                 cellsoc2=peaksoc_list[self.param.CellVoltNums-consum_num:]
+                    #                 cellsocmean2=(sum(cellsoc2)-max(cellsoc2)-min(cellsoc2))/(len(cellsoc2)-2)
+                                    
+                    #                 for j in range(len(peaksoc_list)):   #计算每个电芯的soc差
+                    #                     if j<self.param.CellVoltNums-consum_num:
+                    #                         celldeltsoc.append(peaksoc_list[j]-cellsocmean1)
+                    #                     else:
+                    #                         celldeltsoc.append(peaksoc_list[j]-cellsocmean2)
+                    #                 deltsoc_last2=celldeltsoc
+                    #                 time_last2=self.bmstime[chrg_end]
+                    #                 df_ram_last2.loc[0]=[self.sn,time_last2,deltsoc_last2]    #更新RAM信息
+                    #         else:
+                    #             dict_baltime=self._bal_time(dict_bal2)   #获取每个电芯的均衡时间
+                    #             peaksoc_list=[]
+                    #             for j in range(1, self.param.CellVoltNums + 1):
+                    #                 cellvolt = self._singlevolt_get(i,j,2)  #取单体电压j的所有电压值
+                    #                 cellvolt = list(cellvolt[chrg_start:chrg_end])
+                    #                 time = list(self.bmstime[chrg_start:chrg_end])
+                    #                 packcrnt = list(self.packcrnt[chrg_start:chrg_end])
+                    #                 soc = list(self.bms_soc[chrg_start:chrg_end])
+                    #                 peaksoc = self._dvdq_peak(time, soc, cellvolt, packcrnt)
+                    #                 if peaksoc>1:
+                    #                     peaksoc_list.append(peaksoc)
+                    #                 else:
+                    #                     break
+                    #             if len(peaksoc_list)==self.param.CellVoltNums:
+                    #                 celldeltsoc=[]
+                    #                 consum_num=10
+                    #                 cellsoc1=peaksoc_list[:self.param.CellVoltNums-consum_num]    #切片,将bms耗电的电芯和非耗电的电芯分离开
+                    #                 cellsocmean1=(sum(cellsoc1)-max(cellsoc1)-min(cellsoc1))/(len(cellsoc1)-2)
+                    #                 cellsoc2=peaksoc_list[self.param.CellVoltNums-consum_num:]
+                    #                 cellsocmean2=(sum(cellsoc2)-max(cellsoc2)-min(cellsoc2))/(len(cellsoc2)-2)
+                                    
+                    #                 for j in range(len(peaksoc_list)):   #计算每个电芯的soc差
+                    #                     if j<self.param.CellVoltNums-consum_num:
+                    #                         celldeltsoc.append(peaksoc_list[j]-cellsocmean1)
+                    #                     else:
+                    #                         celldeltsoc.append(peaksoc_list[j]-cellsocmean2)
+                    #                 deltsoc_now2=celldeltsoc
+                    #                 time_now2=self.bmstime[chrg_end]
+                    #                 df_ram_last2.loc[0]=[self.sn,time_now2,deltsoc_now2]    #更新RAM信息
+
+                    #                 list_sub2=deltsoc_now2-deltsoc_last2
+                    #                 list_pud2=(0.01*capacity*3600*1000)/(time_now2-time_last2).total_seconds()
+                    #                 leak_current2=list_sub2*list_pud2
+                    #                 leak_current2=np.round(leak_current2,3)
+                    #                 leak_current2=list(leak_current2)
+
+                    #                 df_res.loc[len(df_res)]=[time_last2,time_now2,self.sn,3,str(leak_current2),str(dict_baltime)]  #计算结果存入Dataframe
+                    #                 deltsoc_last2=deltsoc_now2
+                    #                 time_last2=time_now2
+                    #                 dict_bal2={}
+                        
+                    #     else:
+                    #         charging=0
+                    #         continue
 
                     elif i==len(self.df_bms)-2:  #数据中断后仍在充电,将前段充电数据写入RAM
                         df_ram_lfp=self.df_bms.iloc[chrg_start:]

+ 1 - 1
LIB/MIDDLE/CellStateEstimation/BatSafetyWarning/main.py

@@ -85,7 +85,7 @@ def saftywarning_cal():
         DBRead=DBDownload.DBDownload(host, port, db, user, password,mode)
         with DBRead as DBRead:
             df_soh=DBRead.getdata('time_st,sn,soh,cellsoh', tablename='cellstateestimation_soh', sn=sn, timename='time_sp', st=start_time, sp=end_time)
-            df_uniform=DBRead.getdata('time,sn,cellsoc_diff,cellvolt_diff,cellmin_num,cellmax_num', tablename='cellstateestimation_uniform_socvoltdiff', sn=sn, timename='time', st=start_time1, sp=end_time)
+            df_uniform=DBRead.getdata('time,sn,cellsoc_diff,cellvolt_diff,cellmin_num,cellmax_num,cellvolt_rank', tablename='cellstateestimation_uniform_socvoltdiff', sn=sn, timename='time', st=start_time1, sp=end_time)
             df_uniform.loc[0,'cellvolt_rank']=str([1]*20)
             df_voltsigma=pd.DataFrame()
         if not df_bms.empty: