123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- from math import radians, cos, sin, asin, sqrt
- import pandas as pd
- import numpy as np
- from datetime import datetime
- from datetime import timedelta
- from GpsRank import *
- from ProcessDfBms import *
- from ProcessDfGps import *
- from LIB.BACKEND import DBManager
- import DBManager
- def GetDistInfo(input_sn,input_starttime,input_endtime):
-
- dbManager = DBManager.DBManager()
- data_raw = dbManager.get_data(sn=input_sn, start_time=input_starttime,
- end_time=input_endtime)
-
- df_bms_raw=data_raw['bms']
- df_gps_raw=data_raw['gps']
- df_bms=preprocess_Df_Bms(df_bms_raw)
- df_gps=preprocess_Df_Gps(df_gps_raw)
-
-
-
- if input_sn[0:2] == 'UD' or input_sn[0:2] == 'MG':
- mode = 1
- else:
- mode = 0
-
- df_bms_drive_timetable=get_bms_drive_timetable(df_bms,mode)
- df_gps_drive_cycle_accum=pd.DataFrame()
- if len(df_bms_drive_timetable)>0:
- for index in range(len(df_bms_drive_timetable)):
-
- drive_start_time=df_bms_drive_timetable.loc[index,'drive_start_time']
- drive_end_time=df_bms_drive_timetable.loc[index,'drive_end_time']
- time_condition=(df_gps['time']>drive_start_time)&(df_gps['time']<drive_end_time)
- df_gps_drive_cycle=df_gps.loc[time_condition,:].copy()
- df_gps_drive_cycle=df_gps_drive_cycle.reset_index(drop=True)
-
- condition_a=df_gps_drive_cycle['deltatime']>60*3
- condition_b=(df_gps_drive_cycle['deltatime']>90*1)&(df_gps_drive_cycle['distance']>1000)
- drive_cycle_dist_array=df_gps_drive_cycle.loc[~(condition_a|condition_b),'distance'].values
- drive_cycle_dist_array=drive_cycle_dist_array[np.where((drive_cycle_dist_array>=1)&(drive_cycle_dist_array<1000))[0]]
- gps_dist=drive_cycle_dist_array.sum()
- df_bms_drive_timetable.loc[index,'gps_dist']=gps_dist
-
- if len(df_gps_drive_cycle)>2:
- gps_starttime=df_gps_drive_cycle.loc[1,'time']
- gps_endtime=df_gps_drive_cycle.loc[df_gps_drive_cycle.index[-1],'time']
-
-
- unrecorded_odo_head=cal_deltasoc(df_bms,drive_start_time,gps_starttime)
- unrecorded_odo_tail=cal_deltasoc(df_bms,gps_endtime,drive_end_time)
- else:
-
- unrecorded_odo_head=cal_deltasoc(df_bms,drive_start_time,drive_end_time)
- unrecorded_odo_tail=0
-
- predict_dist=cal_unrecorded_gps(df_gps_drive_cycle,df_bms)
-
- totaldist=predict_dist+unrecorded_odo_head+ unrecorded_odo_tail
- df_bms_drive_timetable.loc[index,'predict_dist']=totaldist
- else :
- pass
-
-
- index_list=list(range(len(df_bms_drive_timetable)))
- dist_gps=0
- dist_predict=0
- day_start_time=''
- day_end_time=''
- day_start_soc=0
- day_end_soc=0
- day_min_soc=101
- drive_accum_soc=0
- if len(df_bms_drive_timetable)>0:
-
- day_start_soc=df_bms_drive_timetable.loc[1,'drive_start_soc']
- day_start_time=df_bms_drive_timetable.loc[1,'drive_start_time']
-
- day_end_time=df_bms_drive_timetable.loc[len(df_bms_drive_timetable)-1,'drive_end_time']
- day_end_soc=df_bms_drive_timetable.loc[len(df_bms_drive_timetable)-1,'drive_end_soc']
- for index in index_list:
- '''汇总里程'''
- dist_gps+=df_bms_drive_timetable.loc[index,'gps_dist']/1000
- dist_predict+=df_bms_drive_timetable.loc[index,'predict_dist']
- drive_start_soc=df_bms_drive_timetable.loc[index,'drive_start_soc']
- drive_end_soc=df_bms_drive_timetable.loc[index,'drive_end_soc']
- day_min_soc=min(day_min_soc,drive_start_soc,drive_end_soc)
- delta_soc=drive_start_soc-drive_end_soc
- drive_accum_soc+=abs(delta_soc)
-
-
-
- dist_gps=round(dist_gps,3)
- dist_predict=round(dist_predict,3)
- dist_all=round(dist_gps+dist_predict,3)
-
-
-
-
- return {'SN':input_sn,'range':dist_all,'accum_soc':drive_accum_soc,'day_start_soc':day_start_soc,
- 'day_end_soc':day_end_soc,'day_start_time':day_start_time,'day_end_time':day_end_time,
- 'day_min_soc':day_min_soc}
-
-
-
-
|