Ver Fonte

优化热失控报警,增加电压跌落后的数据丢失,以及电压无效后的数据丢失

qingfeng há 3 anos atrás
pai
commit
8494fd3d13

+ 38 - 21
LIB/MIDDLE/CellStateEstimation/BatSafetyAlarm/V1_0_1/CBMSSafetyAlarm.py

@@ -64,14 +64,11 @@ class SafetyAlarm:
         packvoltfall=0
 
         if not self.df_ram_alarm.empty:
-            if (time_now-self.df_ram_alarm.loc[0,'time']).total_seconds()<300:
-                safetywarning=self.df_ram_alarm['safetywarning']
-            else:
-                self.df_ram_alarm=pd.DataFrame(columns=['time','sn','safetywarning'])
-                safetywarning=0
+            safetywarning1=self.df_ram_alarm.iloc[-1]['safetywarning1']
+            safetywarning2=self.df_ram_alarm.iloc[-1]['safetywarning2']
         else:
-            self.df_ram_alarm=pd.DataFrame(columns=['time','sn','safetywarning'])
-            safetywarning=0
+            safetywarning1=0
+            safetywarning2=0
 
         if not self.df_bms.empty:
             for i in range(len(self.df_bms)):
@@ -208,7 +205,7 @@ class SafetyAlarm:
                 else:
                     pass
             
-            #热失控故障判断........................................................................................................................
+             #热失控故障判断........................................................................................................................
             df_bms_ram=pd.DataFrame(columns=['time', 'sn', 'packvolt',  'cellvolt', 'celltemp'])
             df_bms_ram.loc[0]=[self.bmstime[0], self.sn, packvolt2, cellvolt2, temp2]
             df_ram_alarm=self.df_ram_alarm
@@ -218,25 +215,45 @@ class SafetyAlarm:
             trw_array=np.array([trwtemp, trwcellvolt, trwpackvolt])
 
             if np.sum(trw_array)>3.5 and np.sum(trw_array>0.5)>1.5:
-                fltcode='C599'
+                fltcode=119
                 df_res.loc[0]=[self.bmstime[len(self.bmstime)-1], end_time, self.sn, fltcode, 5, '电池发生热失控', '联系用户立即远离电池,并通知技术人员介入']
-                return df_res, df_bms_ram, df_ram_alarm
-            elif safetywarning>2.5 and np.sum(trw_array)>1.5 and np.sum(trw_array>0.5)>1.5:
-                fltcode='C599'
+                df_ram_alarm=pd.DataFrame(columns=['sn','time','safetywarning1','safetywarning2'])
+            elif safetywarning1>2.5 and np.sum(trw_array)>1.5 and np.sum(trw_array>0.5)>1.5:
+                fltcode=119
                 df_res.loc[0]=[self.bmstime[len(self.bmstime)-1], end_time, self.sn, fltcode, 5, '电池发生热失控', '联系用户立即远离电池,并通知技术人员介入']
-                return df_res, df_bms_ram, df_ram_alarm
+                df_ram_alarm=pd.DataFrame(columns=['sn','time','safetywarning1','safetywarning2'])
             else:
+                df_res=pd.DataFrame()
+                #更新df_ram_alarm信息
                 if np.sum(trw_array)>1.5 and np.sum(trw_array>0.5)>1.5:
-                    safetywarning=3
-                    df_ram_alarm.loc[0]=[self.bmstime[len(self.bmstime)-1], self.sn, safetywarning]
+                    safetywarning1=3
+                    df_ram_alarm.loc[0]=[self.sn,time2,safetywarning1,safetywarning2]
+                else:
+                    safetywarning1=0
+                    df_ram_alarm=pd.DataFrame(columns=['sn','time','safetywarning1','safetywarning2'])
+                if max(cellvolt2)>5 or min(cellvolt2)<1:
+                    safetywarning2=3
+                    df_ram_alarm.loc[0]=[self.sn,time2,safetywarning1,safetywarning2]
+                elif max(cellvolt2)<4.5 and min(cellvolt2)>2.5:
+                    safetywarning2=0
+                    if safetywarning1==0:
+                        df_ram_alarm=pd.DataFrame(columns=['sn','time','safetywarning1','safetywarning2'])
+                    else:
+                        df_ram_alarm.loc[0]=[self.sn,time2,safetywarning1,safetywarning2]
                 else:
                     pass
-                return pd.DataFrame(), df_bms_ram, df_ram_alarm
-        
+            return df_res, df_bms_ram, df_ram_alarm
+            
         else:
-            if safetywarning>2.5:
-                fltcode='C599'
+            df_ram_alarm=self.df_ram_alarm
+            df_ram_bms=self.df_ram_bms
+            if (safetywarning1>2.5 or safetywarning2>2.5) and (time_now-df_ram_alarm.iloc[-1]['time']).total_seconds()>120:
+                fltcode=119
+                time_now=time_now.strftime('%Y-%m-%d %H:%M:%S')
+                time_now=datetime.datetime.strptime(time_now,'%Y-%m-%d %H:%M:%S')
                 df_res.loc[0]=[time_now, end_time, self.sn, fltcode, 5, '电池发生热失控', '联系用户立即远离电池,并通知技术人员介入']
-                return df_res, self.df_ram_bms, self.df_ram_alarm
+                df_ram_alarm=pd.DataFrame(columns=['sn','time','safetywarning1','safetywarning2'])
             else:
-                return pd.DataFrame(), self.df_ram_bms, self.df_ram_alarm
+                df_res=pd.DataFrame()
+            return df_res, df_ram_bms, df_ram_alarm
+        

+ 5 - 5
LIB/MIDDLE/CellStateEstimation/BatSafetyAlarm/main.py

@@ -12,7 +12,7 @@ from LIB.MIDDLE.CellStateEstimation.Common.V1_0_1 import log
 #...................................电池包电芯安全诊断函数......................................................................................................................
 def diag_cal(sn_list, df_bms_ram, df_alarm_ram):
 
-    # start=time.time()
+    start=time.time()
     now_time=datetime.datetime.now() #-datetime.timedelta(seconds=3600*24+3600*14.6)
     start_time=now_time-datetime.timedelta(seconds=70)
     start_time=start_time.strftime('%Y-%m-%d %H:%M:%S')
@@ -90,8 +90,8 @@ def diag_cal(sn_list, df_bms_ram, df_alarm_ram):
                 with open(r'D:\Platform\platform_python\data_analyze_platform\USER\spf\01qixiang\06BatSafetyAlarm\热失控报警.txt','a') as file:
                     file.write(str(tuple(df_diag_ram_sn.iloc[-1]))+'\n')
 
-        # end=time.time()
-        # print(end-start)
+        end=time.time()
+        print(end-start)
     
     return df_bms_ram,df_alarm_ram
 #...................................................主进程...........................................................................................................
@@ -143,8 +143,8 @@ if __name__ == "__main__":
     #参数初始化
     df_bms_ram1=pd.DataFrame(columns=['time', 'sn', 'packvolt', 'cellvolt', 'celltemp'])
     df_bms_ram2=pd.DataFrame(columns=['time', 'sn', 'packvolt', 'cellvolt', 'celltemp'])
-    df_alarm_ram1=pd.DataFrame(columns=['time','sn','safetywarning'])
-    df_alarm_ram2=pd.DataFrame(columns=['time','sn','safetywarning'])
+    df_alarm_ram1=pd.DataFrame(columns=['sn','time','safetywarning1','safetywarning2'])
+    df_alarm_ram2=pd.DataFrame(columns=['sn','time','safetywarning1','safetywarning2'])
 
     mainprocess()
     #定时任务.......................................................................................................................................................................