123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- '''
- 基于单一状态(一次行车、一次静置、一次充电)的指标统计库
- '''
- __author__ = 'Wang Liming'
- import CONFIGURE.PathSetting as PathSetting
- import sys
- sys.path.append(PathSetting.backend_path)
- import datetime
- import Tools
- import pandas as pd
- import numpy as np
- class IndexStaByOneCycle():
- def __init__(self):
- pass
- def odo_sta(self, odo_array):
- '''
- 一次行车行驶里程统计
- ---------输入参数------------
- odo_array : 一次行车对应的odo数据
- ---------输出参数------------
- 如果gps 可信,则输出本次行车的累积行驶里程;
- 否则,输出None
- '''
- odo_array = odo_array[~pd.isnull(odo_array)]
- if len(odo_array) > 0:
- return np.sum(odo_array)
- else:
- return None
- def capacity_sta(self, cap, soc_array, soh_array):
- '''
- 一个cycle净累积ah统计
- ---------输入参数------------
- cap : 标称容量
- soc_array : 一个cycle对应的soc数据
- soh_array : 一个cycle对应的soh数据
- ---------输出参数------------
- 本次行车的累积ah
- '''
- soc_array = soc_array[~pd.isnull(soc_array)]
- soh_array = soh_array[~pd.isnull(soh_array)]
- if len(soc_array) > 0 and len(soh_array) > 0 :
- return (soc_array[0] - soc_array[-1]) * np.mean(soh_array) * cap / 100.0 / 100.0
- else:
- return None
- def energy_sta(self, cap, soc_array, soh_array, volt_array):
- '''
- 一个cycle净累积能量统计
- ---------输入参数------------
- cap : 标称容量
- soc_array : 一个cycle对应的soc数据
- soh_array : 一个cycle对应的soh数据
- volt_array : 一个cycle对应的volt数据
- ---------输出参数------------
- 本次行车的累积能量
- '''
- soc_array = soc_array[~pd.isnull(soc_array)]
- soh_array = soh_array[~pd.isnull(soh_array)]
- volt_array = volt_array[~pd.isnull(volt_array)]
- if len(soc_array) > 0 and len(soh_array) > 0 and len(volt_array)>0:
- cap = self.capacity_sta(cap, soc_array, soh_array)
- return cap * np.mean(volt_array) / 1000.0
- else:
- return None
- def acc_time_sta(self, time_array):
- '''
- 一个cycle的持续时间
- ---------输入参数------------
- time_array : 一次cycle对应的time数据
- ---------输出参数------------
- 本cycle的持续时间,单位 h
- '''
- time_array = time_array[~pd.isnull(time_array)]
- if len(time_array) > 0:
- return float(abs(time_array[0] - time_array[-1]))/1e9/3600.0
- else:
- return None
- def mean_temp_sta(self, temp_array):
- '''
- 一个cycle的单体平均温度
- ---------输入参数------------
- temp_array : 一个cycle对应的某个单体的temp数据
- ---------输出参数------------
- 本cycle的单体平均温度
- '''
- temp_array = temp_array[~pd.isnull(temp_array)]
- if len(temp_array) > 0:
- return np.mean(temp_array)
- else:
- return None
- def temp_change_rate_sta(self, time_array, temp_array):
- '''
- 一个cycle的单体温度变化率
- ---------输入参数------------
- time_array : 一个cycle对应的time数据
- temp_array : 一个cycle对应的temp数据
- ---------输出参数------------
- 本cycle的单体温度变化率
- '''
- time_array = time_array[~pd.isnull(time_array)]
- temp_array = temp_array[~pd.isnull(temp_array)]
- if len(temp_array) > 0 and len(time_array) > 0:
- return abs(temp_array[0] - temp_array[-1])/\
- (float(abs(time_array[0] - time_array[-1]))/1e9/3600.0)
- else:
- return None
- def dischrg_max_pwr_sta(self, volt_array, crnt_array):
- '''
- 一个cycle的放电功率最大值
- ---------输入参数------------
- volt_array : 一个cycle对应的volt数据
- crnt_array : 一个cycle对应的crnt数据
- ---------输出参数------------
- 本cycle的放电功率最大值
- '''
- volt_array = volt_array[~pd.isnull(volt_array)]
- crnt_array = crnt_array[~pd.isnull(crnt_array)]
- if len(volt_array) > 0 and len(crnt_array) > 0:
- pwr = volt_array * crnt_array / 1000.0
- pwr = pwr[pwr > 0]
- return np.max(pwr)
- else:
- return None
- def chrg_max_pwr_sta(self, volt_array, crnt_array):
- '''
- 一个cycle的充电功率最大值
- ---------输入参数------------
- volt_array : 一个cycle对应的volt数据
- crnt_array : 一个cycle对应的crnt数据
- ---------输出参数------------
- 本cycle的充电功率最大值
- '''
- volt_array = volt_array[~pd.isnull(volt_array)]
- crnt_array = crnt_array[~pd.isnull(crnt_array)]
- if len(volt_array) > 0 and len(crnt_array) > 0:
- pwr = volt_array * crnt_array / 1000.0
- pwr = pwr[pwr < 0]
- return np.max(abs(pwr))
- else:
- return None
- def regen_count_sta(self, crnt_array):
- '''
- 一个行车cycle的regen 行数
- ---------输入参数------------
- crnt_array : 一个行车cycle对应的crnt数据
- ---------输出参数------------
- 本行车cycle的regen行数, 总行数
- '''
- crnt_array = crnt_array[~pd.isnull(crnt_array)]
- if len(crnt_array) > 0:
- return len(crnt_array[crnt_array < -1]), len(crnt_array)
- else:
- return None, None
- def speed_sta(self, sum_odo, acc_time, speed_array):
- '''
- 一个行车cycle的平均速度和最大瞬时速度
- ---------输入参数------------
- sum_odo : 一个行车cycle对应的累积odo数据
- acc_time : 一个行车cycle对应的累积time数据
- speed_array : 一个行车cycle对应的speed数据
- ---------输出参数------------
- 本行车cycle的平均速度和最大速度
- '''
- speed_array = speed_array[~pd.isnull(speed_array)]
- if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
- return sum_odo/acc_time, np.max(speed_array)
- else:
- return None, None
- def speed_sta(self, sum_odo, acc_time, speed_array):
- '''
- 一个行车cycle的平均速度和最大瞬时速度
- ---------输入参数------------
- sum_odo : 一个行车cycle对应的累积odo数据
- acc_time : 一个行车cycle对应的累积time数据
- speed_array : 一个行车cycle对应的speed数据
- ---------输出参数------------
- 本行车cycle的平均速度和最大速度
- '''
- speed_array = speed_array[~pd.isnull(speed_array)]
- if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
- return sum_odo/acc_time, np.max(speed_array)
- else:
- return None, None
|