浏览代码

变更电芯参数,将换电车纳入统计项

Eric412V 3 年之前
父节点
当前提交
ba9bf9fc2e

+ 16 - 0
LIB/MIDDLE/CellStateEstimation/Common/BatParam.py

@@ -112,6 +112,22 @@ class BatParam:
             self.BalCurrent=0.015
             self.LookTab_SOC = [0.00, 	2.40, 	6.38, 	10.37, 	14.35, 	18.33, 	22.32, 	26.30, 	30.28, 	35.26, 	40.24, 	45.22, 	50.20, 	54.19, 	58.17, 	60.16, 	65.14, 	70.12, 	75.10, 	80.08, 	84.06, 	88.05, 	92.03, 	96.02, 	100.00]
             self.LookTab_OCV = [2.7151,	3.0298,	3.1935,	3.2009,	3.2167,	3.2393,	3.2561,	3.2703,	3.2843,	3.2871,	3.2874,	3.2868,	3.2896,	3.2917,	3.2967,	3.3128,	3.3283,	3.3286,	3.3287,	3.3288,	3.3289,	3.3296,	3.3302,	3.3314,	3.3429]
+
+            
+            
+            self.CellOvLv1=3.75
+            self.CellOvLv2=3.8
+            self.CellUvLv1=2.3
+            self.CellUvLv2=2.2
+            self.CellVoltDiffLv1=0.6
+            self.CellVoltDiffLv2=1
+            self.PackVoltOvLv1=self.CellOvLv1*self.CellVoltNums/2
+            self.PackVoltOvLv2=self.CellOvLv2*self.CellVoltNums/2
+            self.PackVoltUvLv1=self.CellUvLv1*self.CellVoltNums/2
+            self.PackVoltUvLv2=self.CellUvLv2*self.CellVoltNums/2
+
+            self.PackChgOc=-800
+            self.PackDisOc=800        
         else:
             print('未找到对应电池编号!!!')
             # sys.exit()

+ 6 - 6
LIB/MIDDLE/CellStateEstimation/Common/V1_0_1/BatParam.py

@@ -262,13 +262,13 @@ class BatParam:
                 self.CellUvLv2=2.2
                 self.CellVoltDiffLv1=0.6
                 self.CellVoltDiffLv2=1
-                self.PackVoltOvLv1=self.CellOvLv1*self.CellVoltNums
-                self.PackVoltOvLv2=self.CellOvLv2*self.CellVoltNums
-                self.PackVoltUvLv1=self.CellUvLv1*self.CellVoltNums
-                self.PackVoltUvLv2=self.CellUvLv2*self.CellVoltNums
+                self.PackVoltOvLv1=self.CellOvLv1*self.CellVoltNums/2
+                self.PackVoltOvLv2=self.CellOvLv2*self.CellVoltNums/2
+                self.PackVoltUvLv1=self.CellUvLv1*self.CellVoltNums/2
+                self.PackVoltUvLv2=self.CellUvLv2*self.CellVoltNums/2
 
-                self.PackChgOc=-600
-                self.PackDisOc=600
+                self.PackChgOc=-800
+                self.PackDisOc=800
 
                 self.LeakCurrentLv1=-20
                 self.LeakCurrentLv2=-50

+ 6 - 1
LIB/MIDDLE/SaftyCenter/Common/QX_BatteryParam.py

@@ -123,6 +123,7 @@ class BatteryInfo():
             self.OcvInflexionAbove=3.4
             self.CellVoltNums=384
             self.CellTempNums=64
+            self.OtherTempNums=0
             self.FullChrgSoc=98
             self.PeakSoc=59
             self.PeakVoltLowLmt=3.35
@@ -132,7 +133,11 @@ class BatteryInfo():
             self.BalCurrent=0.015
             self.LookTab_SOC = [0.00, 	2.40, 	6.38, 	10.37, 	14.35, 	18.33, 	22.32, 	26.30, 	30.28, 	35.26, 	40.24, 	45.22, 	50.20, 	54.19, 	58.17, 	60.16, 	65.14, 	70.12, 	75.10, 	80.08, 	84.06, 	88.05, 	92.03, 	96.02, 	100.00]
             self.LookTab_OCV = [2.7151,	3.0298,	3.1935,	3.2009,	3.2167,	3.2393,	3.2561,	3.2703,	3.2843,	3.2871,	3.2874,	3.2868,	3.2896,	3.2917,	3.2967,	3.3128,	3.3283,	3.3286,	3.3287,	3.3288,	3.3289,	3.3296,	3.3302,	3.3314,	3.3429]
-
+            self.DifVolGap = 3
+            self.CellOVlmt=4
+            self.CellUVlmt=2
+            self.CantChrgVol=2.6
+ 
 
         else:
             print('未找到对应电池编号!!!')

+ 145 - 74
LIB/MIDDLE/SaftyCenter/DataDiag_Static/DataStatistics.py

@@ -10,52 +10,100 @@ from apscheduler.schedulers.blocking import BlockingScheduler
 class DataSta():
     def __init__(self) -> None:
         pass
-    def SaftyWarningSta(df_fltinfo,start_time,end_time):
-        start_time=datetime.datetime.strptime(start_time, '%Y-%m-%d')
-        start_time=start_time+datetime.timedelta(days=1)
-        start_time=start_time.strftime('%Y-%m-%d')
-        SftyPlt_Data_Total=len(df_fltinfo)#总报警数
-        CS_Warning_Total_Finish=df_fltinfo[df_fltinfo['batpos']==1]
-        CS_Warning_Total_Finish_Count=len(CS_Warning_Total_Finish) #平台报警总运维数
-        SftyPlt_Data_day=len(df_fltinfo[df_fltinfo['start_time']>=start_time])#日、周总报警数
-        CS_Warning_day_Finish=CS_Warning_Total_Finish[CS_Warning_Total_Finish['start_time']>=start_time]#日/周运维数
-        CS_Warning_day_Finish_Count=len(CS_Warning_day_Finish)
-        SftyPlt_EmgcyData_day=df_fltinfo[df_fltinfo['start_time']>=start_time] #紧急报警数
-        SftyPlt_EmgcyData_day=SftyPlt_EmgcyData_day[SftyPlt_EmgcyData_day['level']>3]
-        SftyPlt_EmgcyData_day_Count=len(SftyPlt_EmgcyData_day[SftyPlt_EmgcyData_day['level']>3])
-        SftyPlt_EmgcyData_day_Finish=SftyPlt_EmgcyData_day[SftyPlt_EmgcyData_day['batpos']==1]
-        SftyPlt_EmgcyData_day_Finish_Count=len(SftyPlt_EmgcyData_day_Finish)
-        if int(SftyPlt_Data_Total)>0:
-            OprationManageRate=round(float(CS_Warning_day_Finish_Count/SftyPlt_Data_day)*100,2)
+    def SaftyWarningSta(df_fltinfo,start_time,end_time,factory_info):
+        if  '骑享' in factory_info:
+            df_fltinfo=df_fltinfo[~df_fltinfo['product_id'].str.contains('TJMCL')]
+            start_time=start_time+str(' 00:00:00')
+            start_time=datetime.datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S')
+            start_time=start_time+datetime.timedelta(days=1)
+            start_time=start_time.strftime('%Y-%m-%d %H:%M:%S')
+            SftyPlt_Data_Total=len(df_fltinfo)#总报警数
+            CS_Warning_Total_Finish=df_fltinfo[df_fltinfo['batpos']==1]
+            CS_Warning_Total_Finish_Count=len(CS_Warning_Total_Finish) #平台报警总运维数
+            SftyPlt_Data_day=len(df_fltinfo[df_fltinfo['start_time']>=start_time])#日、周总报警数
+            CS_Warning_day_Finish=CS_Warning_Total_Finish[CS_Warning_Total_Finish['start_time']>=start_time]#日/周运维数
+            CS_Warning_day_Finish_Count=len(CS_Warning_day_Finish)
+            SftyPlt_EmgcyData_day=df_fltinfo[df_fltinfo['start_time']>=start_time] #紧急报警数
+            SftyPlt_EmgcyData_day=SftyPlt_EmgcyData_day[SftyPlt_EmgcyData_day['level']>3]
+            SftyPlt_EmgcyData_day_Count=len(SftyPlt_EmgcyData_day)
+            SftyPlt_EmgcyData_day_Finish=SftyPlt_EmgcyData_day[SftyPlt_EmgcyData_day['batpos']==1]
+            SftyPlt_EmgcyData_day_Finish_Count=len(SftyPlt_EmgcyData_day_Finish)
+            if int(SftyPlt_Data_day)>0:
+                OprationManageRate=round(float(CS_Warning_day_Finish_Count/SftyPlt_Data_day)*100,2)
+            else:
+                OprationManageRate=100
+            if int(SftyPlt_EmgcyData_day_Count)>0:
+                OprationManageEmgcyRate=round(float(SftyPlt_EmgcyData_day_Finish_Count/SftyPlt_EmgcyData_day_Count)*100,2)
+            else:
+                OprationManageEmgcyRate=100
+            PK504FltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('PK504')])
+            PK502FltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('PK502')])
+            PK500FltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('PK500')])
+            MGMCLFltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('MGMCL')])
+            MGMLXFltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('MGMLX')])
+            # print('总报警数=',SftyPlt_Data_Total)
+            # print('总完成运维数=',CS_Warning_Total_Finish_Count)
+            # print('周报警数=',SftyPlt_Data_day)
+            # print('周完成运维数=',CS_Warning_day_Finish_Count)
+            # print('周紧急报警数=',SftyPlt_EmgcyData_day)
+            # print('周紧急完成运维数=',SftyPlt_EmgcyData_day_Finish_Count)
+            # print('周运维率=',OprationManageRate)
+            # print('周紧急运维率=',OprationManageEmgcyRate)
+            # print('PK504总报警=',PK504FltData_Count)
+            # print('PK502总报警=',PK502FltData_Count)
+            # print('PK500总报警=',PK500FltData_Count)
+            # print('格林美总报警=',MGMCLFltData_Count)
+            # print('自研总报警=',MGMLXFltData_Count)
+            FltAlarmInfo=DataFrame(columns=['SftyPlt_Data_Total','CS_Warning_Total_Finish_Count','SftyPlt_Data_day','CS_Warning_day_Finish_Count','SftyPlt_EmgcyData_day','SftyPlt_EmgcyData_day_Finish_Count','OprationManageRate','OprationManageEmgcyRate'])
+            Celltype=DataFrame(columns=['PK504','PK502','PK500','MGMCL','MGMLX'])
+            FltAlarmInfo.loc[0]=[SftyPlt_Data_Total,CS_Warning_Total_Finish_Count,SftyPlt_Data_day,CS_Warning_day_Finish_Count,SftyPlt_EmgcyData_day_Count,SftyPlt_EmgcyData_day_Finish_Count,OprationManageRate,OprationManageEmgcyRate]
+            Celltype.loc[0]=[PK504FltData_Count,PK502FltData_Count,PK500FltData_Count,MGMCLFltData_Count,MGMLXFltData_Count]
+        elif '金茂换电' in factory_info:
+            df_fltinfo=df_fltinfo[df_fltinfo['product_id'].str.contains('TJMCL')]
+            start_time=start_time+str(' 00:00:00')
+            start_time=datetime.datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S')
+            start_time=start_time+datetime.timedelta(days=1)
+            start_time=start_time.strftime('%Y-%m-%d %H:%M:%S')
+            SftyPlt_Data_Total=len(df_fltinfo)#总报警数
+            CS_Warning_Total_Finish=df_fltinfo[df_fltinfo['batpos']==1]
+            CS_Warning_Total_Finish_Count=len(CS_Warning_Total_Finish) #平台报警总运维数
+            SftyPlt_Data_day=len(df_fltinfo[df_fltinfo['start_time']>=start_time])#日、周总报警数
+            CS_Warning_day_Finish=CS_Warning_Total_Finish[CS_Warning_Total_Finish['start_time']>=start_time]#日/周运维数
+            CS_Warning_day_Finish_Count=len(CS_Warning_day_Finish)
+            SftyPlt_EmgcyData_day=df_fltinfo[df_fltinfo['start_time']>=start_time] #紧急报警数
+            SftyPlt_EmgcyData_day=SftyPlt_EmgcyData_day[SftyPlt_EmgcyData_day['level']>3]
+            SftyPlt_EmgcyData_day_Count=len(SftyPlt_EmgcyData_day)
+            SftyPlt_EmgcyData_day_Finish=SftyPlt_EmgcyData_day[SftyPlt_EmgcyData_day['batpos']==1]
+            SftyPlt_EmgcyData_day_Finish_Count=len(SftyPlt_EmgcyData_day_Finish)
+            if int(SftyPlt_Data_day)>0:
+                OprationManageRate=round(float(CS_Warning_day_Finish_Count/SftyPlt_Data_day)*100,2)
+            else:
+                OprationManageRate=100
+            if int(SftyPlt_EmgcyData_day_Count)>0:
+                OprationManageEmgcyRate=round(float(SftyPlt_EmgcyData_day_Finish_Count/SftyPlt_EmgcyData_day_Count)*100,2)
+            else:
+                OprationManageEmgcyRate=100
+            TJMCLFltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('TJMCL')])
+            # print('总报警数=',SftyPlt_Data_Total)
+            # print('总完成运维数=',CS_Warning_Total_Finish_Count)
+            # print('周报警数=',SftyPlt_Data_day)
+            # print('周完成运维数=',CS_Warning_day_Finish_Count)
+            # print('周紧急报警数=',SftyPlt_EmgcyData_day)
+            # print('周紧急完成运维数=',SftyPlt_EmgcyData_day_Finish_Count)
+            # print('周运维率=',OprationManageRate)
+            # print('周紧急运维率=',OprationManageEmgcyRate)
+            # print('PK504总报警=',PK504FltData_Count)
+            # print('PK502总报警=',PK502FltData_Count)
+            # print('PK500总报警=',PK500FltData_Count)
+            # print('格林美总报警=',MGMCLFltData_Count)
+            # print('自研总报警=',MGMLXFltData_Count)
+            FltAlarmInfo=DataFrame(columns=['SftyPlt_Data_Total','CS_Warning_Total_Finish_Count','SftyPlt_Data_day','CS_Warning_day_Finish_Count','SftyPlt_EmgcyData_day','SftyPlt_EmgcyData_day_Finish_Count','OprationManageRate','OprationManageEmgcyRate'])
+            Celltype=DataFrame(columns=['TJMCL'])
+            FltAlarmInfo.loc[0]=[SftyPlt_Data_Total,CS_Warning_Total_Finish_Count,SftyPlt_Data_day,CS_Warning_day_Finish_Count,SftyPlt_EmgcyData_day_Count,SftyPlt_EmgcyData_day_Finish_Count,OprationManageRate,OprationManageEmgcyRate]
+            Celltype.loc[0]=[TJMCLFltData_Count]
         else:
-            OprationManageRate=100
-        if int(SftyPlt_EmgcyData_day_Count)>0:
-            OprationManageEmgcyRate=round(float(SftyPlt_EmgcyData_day_Finish_Count/SftyPlt_EmgcyData_day_Count)*100,2)
-        else:
-            OprationManageEmgcyRate=100
-        PK504FltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('PK504')])
-        PK502FltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('PK502')])
-        PK500FltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('PK500')])
-        MGMCLFltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('MGMCL')])
-        MGMLXFltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('MGMLX')])
-        TJMCLFltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('TJMCL')])
-        # print('总报警数=',SftyPlt_Data_Total)
-        # print('总完成运维数=',CS_Warning_Total_Finish_Count)
-        # print('周报警数=',SftyPlt_Data_day)
-        # print('周完成运维数=',CS_Warning_day_Finish_Count)
-        # print('周紧急报警数=',SftyPlt_EmgcyData_day)
-        # print('周紧急完成运维数=',SftyPlt_EmgcyData_day_Finish_Count)
-        # print('周运维率=',OprationManageRate)
-        # print('周紧急运维率=',OprationManageEmgcyRate)
-        # print('PK504总报警=',PK504FltData_Count)
-        # print('PK502总报警=',PK502FltData_Count)
-        # print('PK500总报警=',PK500FltData_Count)
-        # print('格林美总报警=',MGMCLFltData_Count)
-        # print('自研总报警=',MGMLXFltData_Count)
-        FltAlarmInfo=DataFrame(columns=['SftyPlt_Data_Total','CS_Warning_Total_Finish_Count','SftyPlt_Data_day','CS_Warning_day_Finish_Count','SftyPlt_EmgcyData_day','SftyPlt_EmgcyData_day_Finish_Count','OprationManageRate','OprationManageEmgcyRate'])
-        Celltype=DataFrame(columns=['PK504','PK502','PK500','MGMCL','MGMLX','TJMCL'])
-        FltAlarmInfo.loc[0]=[SftyPlt_Data_Total,CS_Warning_Total_Finish_Count,SftyPlt_Data_day,CS_Warning_day_Finish_Count,SftyPlt_EmgcyData_day_Count,SftyPlt_EmgcyData_day_Finish_Count,OprationManageRate,OprationManageEmgcyRate]
-        Celltype.loc[0]=[PK504FltData_Count,PK502FltData_Count,PK500FltData_Count,MGMCLFltData_Count,MGMLXFltData_Count,TJMCLFltData_Count]
+            FltAlarmInfo=DataFrame(columns=['SftyPlt_Data_Total','CS_Warning_Total_Finish_Count','SftyPlt_Data_day','CS_Warning_day_Finish_Count','SftyPlt_EmgcyData_day','SftyPlt_EmgcyData_day_Finish_Count','OprationManageRate','OprationManageEmgcyRate'])
+            Celltype=DataFrame(columns=['None'])
         return FltAlarmInfo,Celltype
     def WeekInfoSta(df_fltinfo,start_time,end_time):
         df_fltinfo=df_fltinfo[df_fltinfo['start_time']>=start_time]
@@ -94,36 +142,59 @@ class DataSta():
         # print('状态安全分数为',StateSaftyCodeCount)
         # print('---------------------------------------------------------------------------')
         return SatftyCount
-    def AccumInfo(df_last_accum,df_FirstDataTime,end_time):
-        df_last_accum=df_last_accum[~df_last_accum['devcode'].str.contains('TJMCL')]
-        MaxAccumAh=df_last_accum['dsg_ahaccum'].max()
-        TotalAccumAh=df_last_accum['dsg_ahaccum'].sum()
-        PK504_Ah=df_last_accum[df_last_accum['devcode'].str.contains('PK504')]
-        PK504_Ah_Max=(PK504_Ah['dsg_ahaccum'].max())/60
-        PK502_Ah=df_last_accum[df_last_accum['devcode'].str.contains('PK502')]
-        PK502_Ah_Max=(PK502_Ah['dsg_ahaccum'].max())/40
-        PK500_Ah=df_last_accum[df_last_accum['devcode'].str.contains('PK500')]
-        PK500_Ah_Max=(PK500_Ah['dsg_ahaccum'].max())/40
-        MGMCL_Ah=df_last_accum[df_last_accum['devcode'].str.contains('MGMCL')]
-        MGMCL_Ah_Max=(MGMCL_Ah['dsg_ahaccum'].max())/50
-        MGMLX_Ah=df_last_accum[df_last_accum['devcode'].str.contains('MGMLX')]
-        MGMLX_Ah_Max=(MGMLX_Ah['dsg_ahaccum'].max())/50
-        MaxCycle=round(max(PK504_Ah_Max,PK502_Ah_Max,PK500_Ah_Max,MGMCL_Ah_Max,MGMLX_Ah_Max),0)
-        deltatimeMax=0
-        deltatime=DataFrame(columns=['runningdate'])
-        df_FirstDataTime=df_FirstDataTime.dropna(how='any')
-        df_FirstDataTime=df_FirstDataTime.reset_index(drop=False)
-        for i in range(0,len(df_FirstDataTime)):
-            End_time=datetime.datetime.now()
-            df_FirstDataTime.loc[i,'first_data_time']=df_FirstDataTime.loc[i,'first_data_time'].strftime('%Y-%m-%d')
-            df_FirstDataTime.loc[i,'first_data_time']=datetime.datetime.strptime(df_FirstDataTime.loc[i,'first_data_time'],'%Y-%m-%d')
-            deltatime.loc[i,'runningdate']=(End_time-df_FirstDataTime.loc[i,'first_data_time'])
-            deltatime.loc[i,'runningdate']= deltatime.loc[i,'runningdate'].total_seconds()/3600
-        MaxRunningHour=int(deltatime['runningdate'].max())
-        TotalRunHour=int(deltatime['runningdate'].sum())
+    def AccumInfo(df_last_accum,df_FirstDataTime,end_time,factory_info):
+        if '骑享' in factory_info:
+            df_last_accum=df_last_accum[~df_last_accum['devcode'].str.contains('TJMCL')]
+            MaxAccumAh=df_last_accum['dsg_ahaccum'].max()
+            TotalAccumAh=df_last_accum['dsg_ahaccum'].sum()
+            PK504_Ah=df_last_accum[df_last_accum['devcode'].str.contains('PK504')]
+            PK504_Ah_Max=(PK504_Ah['dsg_ahaccum'].max())/60
+            PK502_Ah=df_last_accum[df_last_accum['devcode'].str.contains('PK502')]
+            PK502_Ah_Max=(PK502_Ah['dsg_ahaccum'].max())/40
+            PK500_Ah=df_last_accum[df_last_accum['devcode'].str.contains('PK500')]
+            PK500_Ah_Max=(PK500_Ah['dsg_ahaccum'].max())/40
+            MGMCL_Ah=df_last_accum[df_last_accum['devcode'].str.contains('MGMCL')]
+            MGMCL_Ah_Max=(MGMCL_Ah['dsg_ahaccum'].max())/50
+            MGMLX_Ah=df_last_accum[df_last_accum['devcode'].str.contains('MGMLX')]
+            MGMLX_Ah_Max=(MGMLX_Ah['dsg_ahaccum'].max())/50
+            MaxCycle=round(max(PK504_Ah_Max,PK502_Ah_Max,PK500_Ah_Max,MGMCL_Ah_Max,MGMLX_Ah_Max),0)
+            deltatimeMax=0
+            deltatime=DataFrame(columns=['runningdate'])
+            df_FirstDataTime=df_FirstDataTime[~df_FirstDataTime['sn'].str.contains('TJMCL')]
+            df_FirstDataTime=df_FirstDataTime.dropna(how='any')
+            df_FirstDataTime=df_FirstDataTime.reset_index(drop=False)
+            for i in range(0,len(df_FirstDataTime)):
+                End_time=datetime.datetime.now()
+                df_FirstDataTime.loc[i,'first_data_time']=df_FirstDataTime.loc[i,'first_data_time'].strftime('%Y-%m-%d')
+                df_FirstDataTime.loc[i,'first_data_time']=datetime.datetime.strptime(df_FirstDataTime.loc[i,'first_data_time'],'%Y-%m-%d')
+                deltatime.loc[i,'runningdate']=(End_time-df_FirstDataTime.loc[i,'first_data_time'])
+                deltatime.loc[i,'runningdate']= deltatime.loc[i,'runningdate'].total_seconds()/3600
+            MaxRunningHour=int(deltatime['runningdate'].max())
+            TotalRunHour=int(deltatime['runningdate'].sum())
+        elif '金茂换电' in factory_info:
+            df_last_accum=df_last_accum[df_last_accum['devcode'].str.contains('TJMCL')]
+            df_last_accum=df_last_accum[df_last_accum['dsg_ahaccum']<429496729]
+            MaxAccumAh=df_last_accum['dsg_ahaccum'].max()
+            TotalAccumAh=df_last_accum['dsg_ahaccum'].sum()
+            TJMCL_Ah=df_last_accum[df_last_accum['devcode'].str.contains('TJMCL')]
+            TJMCL_Ah_Max=(TJMCL_Ah['dsg_ahaccum'].max())/(228*2)
+            MaxCycle=round(TJMCL_Ah_Max,0)
+            deltatimeMax=0
+            deltatime=DataFrame(columns=['runningdate'])
+            df_FirstDataTime=df_FirstDataTime[df_FirstDataTime['sn'].str.contains('TJMCL')]
+            df_FirstDataTime=df_FirstDataTime.dropna(how='any')
+            df_FirstDataTime=df_FirstDataTime.reset_index(drop=False)
+            for i in range(0,len(df_FirstDataTime)):
+                End_time=datetime.datetime.now()
+                df_FirstDataTime.loc[i,'first_data_time']=df_FirstDataTime.loc[i,'first_data_time'].strftime('%Y-%m-%d')
+                df_FirstDataTime.loc[i,'first_data_time']=datetime.datetime.strptime(df_FirstDataTime.loc[i,'first_data_time'],'%Y-%m-%d')
+                deltatime.loc[i,'runningdate']=(End_time-df_FirstDataTime.loc[i,'first_data_time'])
+                deltatime.loc[i,'runningdate']= deltatime.loc[i,'runningdate'].total_seconds()/3600
+            MaxRunningHour=int(deltatime['runningdate'].max())
+            TotalRunHour=int(deltatime['runningdate'].sum())
         return MaxAccumAh,TotalAccumAh,MaxCycle,MaxRunningHour,TotalRunHour
 
-    def FltBatPosition(df_last_pos,df_fltinfo):
+    def FltBatPosition(df_last_pos,df_fltinfo,factory_info):
         df_Diag_Ram=df_fltinfo[df_fltinfo['batpos']==0].drop_duplicates(subset=['product_id'],keep=False)
         all_location_info=DataFrame(columns=['factory','product_id','lat','lon'])
         df_last_pos.rename(columns={'devcode':'product_id'},inplace=True)
@@ -137,6 +208,6 @@ class DataSta():
                 pos_la_temp=df_last_pos[df_last_pos['product_id']==(df_Diag_Ram_Pos.loc[i,'product_id'])].reset_index(drop=True)
                 all_location_info.loc[i,'lat']=pos_la_temp.loc[0,'latitude']
                 all_location_info.loc[i,'lon']=pos_la_temp.loc[0,'longitude']
-                all_location_info.loc[i,'factory']='骑享'
+                all_location_info.loc[i,'factory']=factory_info
                 all_location_info.loc[i,'product_id']=df_Diag_Ram_Pos.loc[i,'product_id']
         return all_location_info

+ 11 - 10
LIB/MIDDLE/SaftyCenter/DataDiag_Static/main.py

@@ -40,7 +40,7 @@ def diag_cal():
     DBRead = DBDw.DBDownload(host, port, db, user, password,mode)
     with DBRead as DBRead:
         df_Diag_Ram = DBRead.getdata('start_time','end_time','product_id','code','level','info','advice','Batpos',tablename=tablename2,factory='',sn='',timename='',st='',sp='')
-    df_Diag_Ram=df_Diag_Ram.dropna(how='any')
+    df_Diag_Ram=df_Diag_Ram.dropna(axis=1,how='any')
     df_Diag_Ram=df_Diag_Ram.reset_index(drop=True)
     
     for sn in SNnums:#SN遍历
@@ -53,7 +53,7 @@ def diag_cal():
             celltype=99    #60ah林磷酸铁锂电芯
         elif 'MGMLXN750' in sn:
             celltype=3 #力信50ah三元电芯
-        elif 'MGMCLN750' or 'UD' in sn: 
+        elif ('MGMCLN750' or 'UD') in sn: 
             celltype=4 #CATL 50ah三元电芯
         elif 'TJMCL'in sn:
             celltype=100 #CATL 50ah三元电芯
@@ -66,7 +66,9 @@ def diag_cal():
         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=df_bms.dropna(how='any')
+        df_bms=df_bms.dropna(subset=['总电流[A]'])
+        df_bms=df_bms.reset_index(drop=True)
+        print(df_bms)
         #读取结果数据库数据........................................................................................................................................................
         host='rm-bp10j10qy42bzy0q77o.mysql.rds.aliyuncs.com'
         port=3306
@@ -115,7 +117,7 @@ def diag_cal():
             df_Diag_Batdiag_update_xq2=DataFrame(columns=['start_time','end_time','product_id','code','level','info','advice','Batpos'])
             df_Diag_Batdiag_update=DataFrame(columns=['start_time','end_time','product_id','code','level','info','advice','Batpos'])
         df_Diag_Ram_add,df_Diag_Ram_Update=DiagDataMerge.DetaMerge(df_Diag_Ram_sn,df_Diag_Batdiag_update,df_OprtnSta,df_Diag_Ram_sn_else)
-    task_on=0
+    task_on=0        
 #.................................统计程序...............................
 def DaTa_Sta_Week_Task():
     task_on=1
@@ -141,7 +143,7 @@ def DaTa_Sta_Week_Task():
         start_time_week=end_time-datetime.timedelta(days=7)
         start_time_week=start_time_week.strftime('%Y-%m-%d')
         end_time=end_time.strftime('%Y-%m-%d')
-        FltAlarmInfo,Celltype=DataSta.SaftyWarningSta(df_fltinfo,start_time_week,end_time)
+        FltAlarmInfo,Celltype=DataSta.SaftyWarningSta(df_fltinfo,start_time_week,end_time,factory_info[j])
         FaultLvlCount=DataSta.WeekInfoSta(df_fltinfo,start_time_week,end_time)
         for i in range(1,6):
             if not FaultLvlCount[FaultLvlCount['level']==i]['product_id'].empty:
@@ -204,10 +206,10 @@ def DaTa_Sta_Minutes_Task():
         DBRead=DBDw.DBDownload(host, port, db, user, password,mode)
         with DBRead as DBRead:
             df_fltinfo=DBRead.getdata('product_id','level','code','start_time','batpos',tablename=tablename1,factory=factory_info[j],sn='',timename='',st='',sp='')#dbdownload经过了改编
-        FltAlarmInfo,Celltype=DataSta.SaftyWarningSta(df_fltinfo,start_time,end_time)
+        FltAlarmInfo,Celltype=DataSta.SaftyWarningSta(df_fltinfo,start_time,end_time,factory_info[j])
         SatftyCount=DataSta.SftyWrngClsfy(df_fltinfo)
-        MaxAccumAh,TotalAccumAh,MaxCycle,MaxRunningHour,TotalRunHour=DataSta.AccumInfo(df_last_accum,df_FirstDataTime,end_time)
-        all_location_info=DataSta.FltBatPosition(df_last_pos,df_fltinfo)
+        MaxAccumAh,TotalAccumAh,MaxCycle,MaxRunningHour,TotalRunHour=DataSta.AccumInfo(df_last_accum,df_FirstDataTime,end_time,factory_info[j])
+        all_location_info=DataSta.FltBatPosition(df_last_pos,df_fltinfo,factory_info[j])
 
        
         all_statistic_info.loc[j,'factory']=factory_info[j]
@@ -246,6 +248,7 @@ def DaTa_Sta_Minutes_Task():
         #print(end-start)
         task_on=0
     print(all_statistic_info)
+    all_statistic_info.to_excel('all_statistic_info.xlsx')
 
 
 #...............................................主函数.......................................................................................................................
@@ -284,8 +287,6 @@ if __name__ == "__main__":
     DBRead = DBDw.DBDownload(host, port, db, user, password,mode)
     with DBRead as DBRead:
         df_Diag_Ram = DBRead.getdata('start_time','end_time','product_id','code','level','info','advice','Batpos','factory',tablename=tablename2,factory='',sn='',timename='',st='',sp='')
-    df_Diag_Ram=df_Diag_Ram.dropna(how='any')
-    df_Diag_Ram=df_Diag_Ram.reset_index(drop=True)
     # result=pd.read_csv(r'D:\Work\Code_write\data_analyze_platform\USER\01Screen_Problem\result.csv',encoding='gbk')
 
     #定时任务.......................................................................................................................................................................