|
@@ -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:]
|