IndexStaByOneCycle.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. '''
  2. 基于单一状态(一次行车、一次静置、一次充电)的指标统计库
  3. '''
  4. __author__ = 'wlm'
  5. CONF_PATH = 'D:\\Platform\\platform\\CONFIGURE\\'
  6. import sys
  7. sys.path.append(CONF_PATH)
  8. import PathSetting
  9. sys.path.append(PathSetting.backend_path)
  10. import datetime
  11. import Tools
  12. import pandas as pd
  13. import numpy as np
  14. class IndexStaByOneCycle():
  15. def __init__(self):
  16. pass
  17. def odo_sta(self, odo_array):
  18. '''
  19. 一次行车行驶里程统计
  20. ---------输入参数------------
  21. odo_array : 一次行车对应的odo数据
  22. ---------输出参数------------
  23. 如果gps 可信,则输出本次行车的累积行驶里程;
  24. 否则,输出None
  25. '''
  26. odo_array = odo_array[~pd.isnull(odo_array)]
  27. if len(odo_array) > 0:
  28. return np.sum(odo_array)
  29. else:
  30. return None
  31. def capacity_sta(self, cap, soc_array, soh_array):
  32. '''
  33. 一个cycle净累积ah统计
  34. ---------输入参数------------
  35. cap : 标称容量
  36. soc_array : 一个cycle对应的soc数据
  37. soh_array : 一个cycle对应的soh数据
  38. ---------输出参数------------
  39. 本次行车的累积ah
  40. '''
  41. soc_array = soc_array[~pd.isnull(soc_array)]
  42. soh_array = soh_array[~pd.isnull(soh_array)]
  43. if len(soc_array) > 0 and len(soh_array) > 0 :
  44. return (soc_array[0] - soc_array[-1]) * np.mean(soh_array) * cap / 100.0 / 100.0
  45. else:
  46. return None
  47. def energy_sta(self, cap, soc_array, soh_array, volt_array):
  48. '''
  49. 一个cycle净累积能量统计
  50. ---------输入参数------------
  51. cap : 标称容量
  52. soc_array : 一个cycle对应的soc数据
  53. soh_array : 一个cycle对应的soh数据
  54. volt_array : 一个cycle对应的volt数据
  55. ---------输出参数------------
  56. 本次行车的累积能量
  57. '''
  58. soc_array = soc_array[~pd.isnull(soc_array)]
  59. soh_array = soh_array[~pd.isnull(soh_array)]
  60. volt_array = volt_array[~pd.isnull(volt_array)]
  61. if len(soc_array) > 0 and len(soh_array) > 0 and len(volt_array)>0:
  62. cap = self.capacity_sta(cap, soc_array, soh_array)
  63. return cap * np.mean(volt_array) / 1000.0
  64. else:
  65. return None
  66. def acc_time_sta(self, time_array):
  67. '''
  68. 一个cycle的持续时间
  69. ---------输入参数------------
  70. time_array : 一次cycle对应的time数据
  71. ---------输出参数------------
  72. 本cycle的持续时间,单位 h
  73. '''
  74. time_array = time_array[~pd.isnull(time_array)]
  75. if len(time_array) > 0:
  76. return float(abs(time_array[0] - time_array[-1]))/1e9/3600.0
  77. else:
  78. return None
  79. def mean_temp_sta(self, temp_array):
  80. '''
  81. 一个cycle的单体平均温度
  82. ---------输入参数------------
  83. temp_array : 一个cycle对应的某个单体的temp数据
  84. ---------输出参数------------
  85. 本cycle的单体平均温度
  86. '''
  87. temp_array = temp_array[~pd.isnull(temp_array)]
  88. if len(temp_array) > 0:
  89. return np.mean(temp_array)
  90. else:
  91. return None
  92. def temp_change_rate_sta(self, time_array, temp_array):
  93. '''
  94. 一个cycle的单体温度变化率
  95. ---------输入参数------------
  96. time_array : 一个cycle对应的time数据
  97. temp_array : 一个cycle对应的temp数据
  98. ---------输出参数------------
  99. 本cycle的单体温度变化率
  100. '''
  101. time_array = time_array[~pd.isnull(time_array)]
  102. temp_array = temp_array[~pd.isnull(temp_array)]
  103. if len(temp_array) > 0 and len(time_array) > 0:
  104. return abs(temp_array[0] - temp_array[-1])/\
  105. (float(abs(time_array[0] - time_array[-1]))/1e9/3600.0)
  106. else:
  107. return None
  108. def dischrg_max_pwr_sta(self, volt_array, crnt_array):
  109. '''
  110. 一个cycle的放电功率最大值
  111. ---------输入参数------------
  112. volt_array : 一个cycle对应的volt数据
  113. crnt_array : 一个cycle对应的crnt数据
  114. ---------输出参数------------
  115. 本cycle的放电功率最大值
  116. '''
  117. volt_array = volt_array[~pd.isnull(volt_array)]
  118. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  119. if len(volt_array) > 0 and len(crnt_array) > 0:
  120. pwr = volt_array * crnt_array / 1000.0
  121. pwr = pwr[pwr > 0]
  122. return np.max(pwr)
  123. else:
  124. return None
  125. def chrg_max_pwr_sta(self, volt_array, crnt_array):
  126. '''
  127. 一个cycle的充电功率最大值
  128. ---------输入参数------------
  129. volt_array : 一个cycle对应的volt数据
  130. crnt_array : 一个cycle对应的crnt数据
  131. ---------输出参数------------
  132. 本cycle的充电功率最大值
  133. '''
  134. volt_array = volt_array[~pd.isnull(volt_array)]
  135. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  136. if len(volt_array) > 0 and len(crnt_array) > 0:
  137. pwr = volt_array * crnt_array / 1000.0
  138. pwr = pwr[pwr < 0]
  139. return np.max(abs(pwr))
  140. else:
  141. return None
  142. def regen_count_sta(self, crnt_array):
  143. '''
  144. 一个行车cycle的regen 行数
  145. ---------输入参数------------
  146. crnt_array : 一个行车cycle对应的crnt数据
  147. ---------输出参数------------
  148. 本行车cycle的regen行数, 总行数
  149. '''
  150. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  151. if len(crnt_array) > 0:
  152. return len(crnt_array[crnt_array < -1]), len(crnt_array)
  153. else:
  154. return None, None
  155. def speed_sta(self, sum_odo, acc_time, speed_array):
  156. '''
  157. 一个行车cycle的平均速度和最大瞬时速度
  158. ---------输入参数------------
  159. sum_odo : 一个行车cycle对应的累积odo数据
  160. acc_time : 一个行车cycle对应的累积time数据
  161. speed_array : 一个行车cycle对应的speed数据
  162. ---------输出参数------------
  163. 本行车cycle的平均速度和最大速度
  164. '''
  165. speed_array = speed_array[~pd.isnull(speed_array)]
  166. if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
  167. return sum_odo/acc_time, np.max(speed_array)
  168. else:
  169. return None, None
  170. def speed_sta(self, sum_odo, acc_time, speed_array):
  171. '''
  172. 一个行车cycle的平均速度和最大瞬时速度
  173. ---------输入参数------------
  174. sum_odo : 一个行车cycle对应的累积odo数据
  175. acc_time : 一个行车cycle对应的累积time数据
  176. speed_array : 一个行车cycle对应的speed数据
  177. ---------输出参数------------
  178. 本行车cycle的平均速度和最大速度
  179. '''
  180. speed_array = speed_array[~pd.isnull(speed_array)]
  181. if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
  182. return sum_odo/acc_time, np.max(speed_array)
  183. else:
  184. return None, None