IndexStaByOneCycle.py 7.0 KB

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