hitl_tester.test_cases.bms.test_402t
Modified version of the tests in test_2590_cell_sims.py, for testing 402T testing.
Used in these test plans:
- 402t_1_3 ⠀⠀⠀(bms/402t_1_3.plan)
- 402t_1_4 ⠀⠀⠀(bms/402t_1_4.plan)
- 402t_2_1 ⠀⠀⠀(bms/402t_2_1.plan)
- 402t ⠀⠀⠀(bms/402t.plan)
Example Command (warning: test plan may run other test cases):
./hitl_tester.py 402t_1_3 -DCHARGE_VOLTAGE=16 -DCHARGE_TIME=86400 -DCHARGE_CURRENT=0.18 -DSAMPLE_INTERVAL=10 -DDEFAULT_SCAN_INDEX=18 -DSTEP_START=1 -DSTEP_END=7 -DREST_TIME=0 -DOLD_CURRENTS=False
1""" 2Modified version of the tests in test_2590_cell_sims.py, for testing 402T testing. 3""" 4 5from __future__ import annotations 6 7import time 8from contextlib import suppress 9 10import pytest 11 12from hitl_tester.modules.bms.bms_hw import BMSHardware 13from hitl_tester.modules.bms.plateset import Plateset 14from hitl_tester.modules.bms_types import DischargeType, TimeoutExceededError 15from hitl_tester.modules.logger import logger 16 17CHARGE_VOLTAGE = 16 18CHARGE_TIME = 24 * 3600 # 24 hours 19CHARGE_CURRENT = 0.180 20SAMPLE_INTERVAL = 10 21DEFAULT_SCAN_INDEX = 18 22STEP_START = 1 23STEP_END = 7 24REST_TIME = 0 25OLD_CURRENTS = False 26 27bms_hardware = BMSHardware(pytest.flags) # type: ignore[arg-type] 28bms_hardware.init() 29 30plateset = Plateset() 31 32 33# FIXME(JA): docs, refactor 34 35 36def standard_charge( 37 charge_current: float = 2, 38 max_time: int = 7 * 24 * 3600, 39 sample_interval: int = 10, 40 minimum_readings: int = 3, 41 charge_voltage: float = 16.8, 42 termination_current: float = 0.100, 43): 44 """ 45 Charge batteries in accordance with 4.3.1 for not greater than three hours. 46 4.3.1 = 23 ± 5°C (73.4°F) ambient pressure/relative humidity, with 2+ hours between charge and discharge. 47 """ 48 bms_hardware.voltage = charge_voltage 49 bms_hardware.ov_protection = bms_hardware.voltage + 0.050 # 50mV above the charging voltage 50 bms_hardware.current = charge_current 51 bms_hardware.termination_current = termination_current 52 bms_hardware.max_time = max_time 53 bms_hardware.sample_interval = sample_interval 54 bms_hardware.minimum_readings = minimum_readings 55 56 # Run the Charge cycle 57 bms_hardware.run_li_charge_cycle() 58 59 60def standard_discharge( 61 discharge_current: float = 2, 62 max_time: int = 7 * 24 * 3600, 63 sample_interval: int = 10, 64 discharge_voltage: float = 10, 65): 66 """Discharge at 2A until 10V.""" 67 bms_hardware.voltage = discharge_voltage 68 bms_hardware.uv_protection = -0.05 # bms_hardware.voltage - 0.050 # 50mV below voltage cutoff 69 bms_hardware.current = discharge_current 70 bms_hardware.discharge_type = DischargeType.CONSTANT_CURRENT 71 bms_hardware.max_time = max_time 72 bms_hardware.sample_interval = sample_interval 73 74 # Run the discharge cycle, returning the capacity 75 capacity = bms_hardware.run_discharge_cycle() 76 logger.write_info_to_report(f"Discharge complete, capacity was {capacity * 1000.0} mAh") 77 return capacity 78 79 80def log_dmm_data(): 81 """Log all DMM data.""" 82 for i, name in enumerate( 83 [ 84 "Cell 1", 85 "Cell 2", 86 "Cell 3", 87 "Cell 4", 88 "Cell 5", 89 "Cell 6", 90 "Cell 7", 91 "Cell 8", 92 "Cell 9", 93 "Cell 10", 94 "Thermistor 2", 95 "Thermistor 1", 96 "BT (Battery Terminal)", 97 "Charge", 98 ] 99 ): 100 bms_hardware.dmm.scan_index = i 101 logger.write_info_to_report(f"{name} = {bms_hardware.dmm.volts} V") 102 bms_hardware.dmm.scan_index = DEFAULT_SCAN_INDEX 103 104 105@pytest.mark.skipif(STEP_END < 1 or STEP_START > 1, reason=f"Starting on step {STEP_START}") 106def test_step_1_402t(): 107 """ 108 Discharge at 104 mA down to 9V 109 """ 110 standard_discharge(sample_interval=SAMPLE_INTERVAL, discharge_current=0.104, discharge_voltage=9) 111 112 113@pytest.mark.skipif(STEP_END < 2 or STEP_START > 2, reason=f"Starting on step {STEP_START}") 114def test_step_2_402t(): 115 """ 116 Charge 250 mA, 50400 seconds 117 """ 118 with suppress(TimeoutExceededError): 119 standard_charge( 120 sample_interval=SAMPLE_INTERVAL, 121 charge_current=CHARGE_CURRENT, 122 termination_current=-0.05, 123 charge_voltage=CHARGE_VOLTAGE, 124 max_time=50400, 125 ) 126 127 128@pytest.mark.skipif(STEP_END < 3 or STEP_START > 3, reason=f"Starting on step {STEP_START}") 129def test_step_3_402t(): 130 """ 131 Discharge at 104 mA down to 9V 132 """ 133 standard_discharge(sample_interval=SAMPLE_INTERVAL, discharge_current=0.104, discharge_voltage=9) 134 135 136@pytest.mark.skipif(STEP_END < 4 or STEP_START > 4, reason=f"Starting on step {STEP_START}") 137def test_step_4_402t(): 138 """ 139 Charge 250 mA, 50400 seconds 140 """ 141 with suppress(TimeoutExceededError): 142 standard_charge( 143 sample_interval=SAMPLE_INTERVAL, 144 charge_current=CHARGE_CURRENT, 145 termination_current=-0.05, 146 charge_voltage=CHARGE_VOLTAGE, 147 max_time=50400, 148 ) 149 150 151@pytest.mark.skipif(STEP_END < 5 or STEP_START > 5, reason=f"Starting on step {STEP_START}") 152def test_step_5_402t(): 153 """ 154 Discharge at 104 / 180 mA down to 9V 155 """ 156 standard_discharge( 157 sample_interval=SAMPLE_INTERVAL, discharge_current=0.104 if OLD_CURRENTS else 0.180, discharge_voltage=9 158 ) 159 160 161@pytest.mark.skipif(STEP_END < 6 or STEP_START > 6, reason=f"Starting on step {STEP_START}") 162def test_step_6_402t(): 163 """ 164 Charge at 180 / 120 mA for 50400 seconds 165 Let pack rest for at least 5 hours 166 Discharge at 180 / 120 mA down to 10V (save data) 167 """ 168 with suppress(TimeoutExceededError): 169 standard_charge( 170 sample_interval=SAMPLE_INTERVAL, 171 charge_current=CHARGE_CURRENT if OLD_CURRENTS else 0.120, 172 termination_current=-0.05, 173 charge_voltage=CHARGE_VOLTAGE, 174 max_time=CHARGE_TIME, 175 ) 176 standard_discharge(sample_interval=SAMPLE_INTERVAL, discharge_current=0.120, discharge_voltage=10) 177 178 179@pytest.mark.skipif(STEP_END < 7 or STEP_START > 7, reason=f"Starting on step {STEP_START}") 180def test_step_7_402t(): 181 """ 182 Charge at 250 mA for 50400 seconds 183 Let pack rest for at least 5 hours 184 """ 185 with suppress(TimeoutExceededError): 186 standard_charge( 187 sample_interval=SAMPLE_INTERVAL, 188 charge_current=CHARGE_CURRENT if OLD_CURRENTS else 0.120, 189 termination_current=-0.05, 190 charge_voltage=CHARGE_VOLTAGE, 191 max_time=CHARGE_TIME, 192 ) 193 bms_hardware.max_time = 48 * 3600 194 bms_hardware.sample_interval = SAMPLE_INTERVAL 195 bms_hardware.run_resting_cycle() 196 197 # Measure impedance 198 pulse_current = 1.0 199 raw_voltage_data = bms_hardware.csv.ocv.measure_impedance_data(pulse_current) 200 impedance = bms_hardware.csv.ocv.calculate_impedance(raw_voltage_data, pulse_current) 201 bms_hardware.csv.raw_impedance.record(impedance, raw_voltage_data) 202 logger.write_result_to_html_report(f"Impedance: {impedance} mΩ") 203 204 205@pytest.mark.skipif(STEP_END < 10 or STEP_START > 10, reason=f"Starting on step {STEP_START}") 206def test_step_10_402t(): 207 """ 208 A: Discharge the pack at 100 mA for 15 minutes 209 B: Discharge the pack at 230 mA for 5 minutes 210 C: Discharge the pack at a base rate of 340 mA for 5 minutes. While discharging, pulse (increase) the current 211 discharge by an additional 1.5 A (1500 mA). The pulses will happen throughout the discharge, starting at a 212 frequency of 400 Hz and increasing linearly up to 1000 Hz by the end of the 5 minute test. 213 D: Rest for 5 minutes. We need to see the open circuit voltage be above 12.5V. 214 """ 215 with suppress(TimeoutExceededError): 216 standard_discharge( 217 sample_interval=SAMPLE_INTERVAL, discharge_current=0.100, discharge_voltage=9, max_time=15 * 60 218 ) 219 with suppress(TimeoutExceededError): 220 standard_discharge( 221 sample_interval=SAMPLE_INTERVAL, discharge_current=0.230, discharge_voltage=9, max_time=5 * 60 222 ) 223 224 bms_hardware.load.configure_frequency_trigger() 225 bms_hardware.load.enable() 226 # bms_hardware.load.transient_mode(True) 227 bms_hardware.load.send_trigger() 228 start_time = time.perf_counter() 229 while (runtime := time.perf_counter() - start_time) < 5 * 60: 230 # Increase frequency 231 progress = runtime / (5 * 60) 232 bms_hardware.load.change_frequency(frequency := 0.4 + 0.6 * progress) 233 234 # Log rest data 235 current = -1 * bms_hardware.load.amps 236 logger.write_info_to_report( 237 f"Elapsed Time: {runtime:.1f}, Voltage: {bms_hardware.dmm.volts}, Current: {current}, " 238 f"Frequency: {frequency}" 239 ) 240 bms_hardware.csv.cycle.record(runtime, current) 241 242 time.sleep(1) 243 # bms_hardware.load.transient_mode(False) 244 bms_hardware.load.disable() 245 246 # Rest for 5 minutes (12.5V+) 247 bms_hardware.max_time = 5.25 * 60 248 bms_hardware.sample_interval = SAMPLE_INTERVAL 249 bms_hardware.run_resting_cycle() 250 251 252@pytest.mark.skipif(STEP_END < 11 or STEP_START > 11, reason=f"Starting on step {STEP_START}") 253def test_step_11_402t(): 254 """ 255 1. Measure open circuit voltage 256 2. Temp Cycle in thermal chamber per MIL-STD-202, method 102 (now 107), letter D: 257 - Bring pack to -40C (+0, -5) for 1 hour 258 - Bring pack to 25C (+10, -5) for no more than 5 minutes 259 - Bring pack to 60C (+5, -0) for 1 hour 260 - Bring pack to 25C (+10, -5) for no more than 5 minutes 261 - Repeat preceding 4 steps 5 times 262 3. Inspect for any physical/mechanical defects 263 4. Measure open circuit voltage 264 """ 265 bms_hardware.sample_interval = SAMPLE_INTERVAL 266 bms_hardware.thermal_chamber.internal_units = "C" 267 for i in range(5): 268 logger.write_info_to_report(f"Step 11.{i}") 269 bms_hardware.thermal_chamber.set_point_temperature = -40 270 bms_hardware.max_time = 3600 271 bms_hardware.run_resting_cycle() 272 bms_hardware.thermal_chamber.set_point_temperature = 25 273 bms_hardware.max_time = 5 * 60 274 bms_hardware.run_resting_cycle() 275 bms_hardware.thermal_chamber.set_point_temperature = 60 276 bms_hardware.max_time = 3600 277 bms_hardware.run_resting_cycle() 278 bms_hardware.thermal_chamber.set_point_temperature = 25 279 bms_hardware.max_time = 5 * 60 280 bms_hardware.run_resting_cycle() 281 282 283@pytest.mark.skipif(REST_TIME == 0, reason="Resting not requested") 284def test_resting(): 285 """Record resting data.""" 286 bms_hardware.max_time = REST_TIME 287 bms_hardware.sample_interval = SAMPLE_INTERVAL 288 bms_hardware.run_resting_cycle()
37def standard_charge( 38 charge_current: float = 2, 39 max_time: int = 7 * 24 * 3600, 40 sample_interval: int = 10, 41 minimum_readings: int = 3, 42 charge_voltage: float = 16.8, 43 termination_current: float = 0.100, 44): 45 """ 46 Charge batteries in accordance with 4.3.1 for not greater than three hours. 47 4.3.1 = 23 ± 5°C (73.4°F) ambient pressure/relative humidity, with 2+ hours between charge and discharge. 48 """ 49 bms_hardware.voltage = charge_voltage 50 bms_hardware.ov_protection = bms_hardware.voltage + 0.050 # 50mV above the charging voltage 51 bms_hardware.current = charge_current 52 bms_hardware.termination_current = termination_current 53 bms_hardware.max_time = max_time 54 bms_hardware.sample_interval = sample_interval 55 bms_hardware.minimum_readings = minimum_readings 56 57 # Run the Charge cycle 58 bms_hardware.run_li_charge_cycle()
Charge batteries in accordance with 4.3.1 for not greater than three hours. 4.3.1 = 23 ± 5°C (73.4°F) ambient pressure/relative humidity, with 2+ hours between charge and discharge.
61def standard_discharge( 62 discharge_current: float = 2, 63 max_time: int = 7 * 24 * 3600, 64 sample_interval: int = 10, 65 discharge_voltage: float = 10, 66): 67 """Discharge at 2A until 10V.""" 68 bms_hardware.voltage = discharge_voltage 69 bms_hardware.uv_protection = -0.05 # bms_hardware.voltage - 0.050 # 50mV below voltage cutoff 70 bms_hardware.current = discharge_current 71 bms_hardware.discharge_type = DischargeType.CONSTANT_CURRENT 72 bms_hardware.max_time = max_time 73 bms_hardware.sample_interval = sample_interval 74 75 # Run the discharge cycle, returning the capacity 76 capacity = bms_hardware.run_discharge_cycle() 77 logger.write_info_to_report(f"Discharge complete, capacity was {capacity * 1000.0} mAh") 78 return capacity
Discharge at 2A until 10V.
81def log_dmm_data(): 82 """Log all DMM data.""" 83 for i, name in enumerate( 84 [ 85 "Cell 1", 86 "Cell 2", 87 "Cell 3", 88 "Cell 4", 89 "Cell 5", 90 "Cell 6", 91 "Cell 7", 92 "Cell 8", 93 "Cell 9", 94 "Cell 10", 95 "Thermistor 2", 96 "Thermistor 1", 97 "BT (Battery Terminal)", 98 "Charge", 99 ] 100 ): 101 bms_hardware.dmm.scan_index = i 102 logger.write_info_to_report(f"{name} = {bms_hardware.dmm.volts} V") 103 bms_hardware.dmm.scan_index = DEFAULT_SCAN_INDEX
Log all DMM data.
106@pytest.mark.skipif(STEP_END < 1 or STEP_START > 1, reason=f"Starting on step {STEP_START}") 107def test_step_1_402t(): 108 """ 109 Discharge at 104 mA down to 9V 110 """ 111 standard_discharge(sample_interval=SAMPLE_INTERVAL, discharge_current=0.104, discharge_voltage=9)
Discharge at 104 mA down to 9V
114@pytest.mark.skipif(STEP_END < 2 or STEP_START > 2, reason=f"Starting on step {STEP_START}") 115def test_step_2_402t(): 116 """ 117 Charge 250 mA, 50400 seconds 118 """ 119 with suppress(TimeoutExceededError): 120 standard_charge( 121 sample_interval=SAMPLE_INTERVAL, 122 charge_current=CHARGE_CURRENT, 123 termination_current=-0.05, 124 charge_voltage=CHARGE_VOLTAGE, 125 max_time=50400, 126 )
Charge 250 mA, 50400 seconds
129@pytest.mark.skipif(STEP_END < 3 or STEP_START > 3, reason=f"Starting on step {STEP_START}") 130def test_step_3_402t(): 131 """ 132 Discharge at 104 mA down to 9V 133 """ 134 standard_discharge(sample_interval=SAMPLE_INTERVAL, discharge_current=0.104, discharge_voltage=9)
Discharge at 104 mA down to 9V
137@pytest.mark.skipif(STEP_END < 4 or STEP_START > 4, reason=f"Starting on step {STEP_START}") 138def test_step_4_402t(): 139 """ 140 Charge 250 mA, 50400 seconds 141 """ 142 with suppress(TimeoutExceededError): 143 standard_charge( 144 sample_interval=SAMPLE_INTERVAL, 145 charge_current=CHARGE_CURRENT, 146 termination_current=-0.05, 147 charge_voltage=CHARGE_VOLTAGE, 148 max_time=50400, 149 )
Charge 250 mA, 50400 seconds
152@pytest.mark.skipif(STEP_END < 5 or STEP_START > 5, reason=f"Starting on step {STEP_START}") 153def test_step_5_402t(): 154 """ 155 Discharge at 104 / 180 mA down to 9V 156 """ 157 standard_discharge( 158 sample_interval=SAMPLE_INTERVAL, discharge_current=0.104 if OLD_CURRENTS else 0.180, discharge_voltage=9 159 )
Discharge at 104 / 180 mA down to 9V
162@pytest.mark.skipif(STEP_END < 6 or STEP_START > 6, reason=f"Starting on step {STEP_START}") 163def test_step_6_402t(): 164 """ 165 Charge at 180 / 120 mA for 50400 seconds 166 Let pack rest for at least 5 hours 167 Discharge at 180 / 120 mA down to 10V (save data) 168 """ 169 with suppress(TimeoutExceededError): 170 standard_charge( 171 sample_interval=SAMPLE_INTERVAL, 172 charge_current=CHARGE_CURRENT if OLD_CURRENTS else 0.120, 173 termination_current=-0.05, 174 charge_voltage=CHARGE_VOLTAGE, 175 max_time=CHARGE_TIME, 176 ) 177 standard_discharge(sample_interval=SAMPLE_INTERVAL, discharge_current=0.120, discharge_voltage=10)
Charge at 180 / 120 mA for 50400 seconds Let pack rest for at least 5 hours Discharge at 180 / 120 mA down to 10V (save data)
180@pytest.mark.skipif(STEP_END < 7 or STEP_START > 7, reason=f"Starting on step {STEP_START}") 181def test_step_7_402t(): 182 """ 183 Charge at 250 mA for 50400 seconds 184 Let pack rest for at least 5 hours 185 """ 186 with suppress(TimeoutExceededError): 187 standard_charge( 188 sample_interval=SAMPLE_INTERVAL, 189 charge_current=CHARGE_CURRENT if OLD_CURRENTS else 0.120, 190 termination_current=-0.05, 191 charge_voltage=CHARGE_VOLTAGE, 192 max_time=CHARGE_TIME, 193 ) 194 bms_hardware.max_time = 48 * 3600 195 bms_hardware.sample_interval = SAMPLE_INTERVAL 196 bms_hardware.run_resting_cycle() 197 198 # Measure impedance 199 pulse_current = 1.0 200 raw_voltage_data = bms_hardware.csv.ocv.measure_impedance_data(pulse_current) 201 impedance = bms_hardware.csv.ocv.calculate_impedance(raw_voltage_data, pulse_current) 202 bms_hardware.csv.raw_impedance.record(impedance, raw_voltage_data) 203 logger.write_result_to_html_report(f"Impedance: {impedance} mΩ")
Charge at 250 mA for 50400 seconds Let pack rest for at least 5 hours
206@pytest.mark.skipif(STEP_END < 10 or STEP_START > 10, reason=f"Starting on step {STEP_START}") 207def test_step_10_402t(): 208 """ 209 A: Discharge the pack at 100 mA for 15 minutes 210 B: Discharge the pack at 230 mA for 5 minutes 211 C: Discharge the pack at a base rate of 340 mA for 5 minutes. While discharging, pulse (increase) the current 212 discharge by an additional 1.5 A (1500 mA). The pulses will happen throughout the discharge, starting at a 213 frequency of 400 Hz and increasing linearly up to 1000 Hz by the end of the 5 minute test. 214 D: Rest for 5 minutes. We need to see the open circuit voltage be above 12.5V. 215 """ 216 with suppress(TimeoutExceededError): 217 standard_discharge( 218 sample_interval=SAMPLE_INTERVAL, discharge_current=0.100, discharge_voltage=9, max_time=15 * 60 219 ) 220 with suppress(TimeoutExceededError): 221 standard_discharge( 222 sample_interval=SAMPLE_INTERVAL, discharge_current=0.230, discharge_voltage=9, max_time=5 * 60 223 ) 224 225 bms_hardware.load.configure_frequency_trigger() 226 bms_hardware.load.enable() 227 # bms_hardware.load.transient_mode(True) 228 bms_hardware.load.send_trigger() 229 start_time = time.perf_counter() 230 while (runtime := time.perf_counter() - start_time) < 5 * 60: 231 # Increase frequency 232 progress = runtime / (5 * 60) 233 bms_hardware.load.change_frequency(frequency := 0.4 + 0.6 * progress) 234 235 # Log rest data 236 current = -1 * bms_hardware.load.amps 237 logger.write_info_to_report( 238 f"Elapsed Time: {runtime:.1f}, Voltage: {bms_hardware.dmm.volts}, Current: {current}, " 239 f"Frequency: {frequency}" 240 ) 241 bms_hardware.csv.cycle.record(runtime, current) 242 243 time.sleep(1) 244 # bms_hardware.load.transient_mode(False) 245 bms_hardware.load.disable() 246 247 # Rest for 5 minutes (12.5V+) 248 bms_hardware.max_time = 5.25 * 60 249 bms_hardware.sample_interval = SAMPLE_INTERVAL 250 bms_hardware.run_resting_cycle()
A: Discharge the pack at 100 mA for 15 minutes B: Discharge the pack at 230 mA for 5 minutes C: Discharge the pack at a base rate of 340 mA for 5 minutes. While discharging, pulse (increase) the current discharge by an additional 1.5 A (1500 mA). The pulses will happen throughout the discharge, starting at a frequency of 400 Hz and increasing linearly up to 1000 Hz by the end of the 5 minute test. D: Rest for 5 minutes. We need to see the open circuit voltage be above 12.5V.
253@pytest.mark.skipif(STEP_END < 11 or STEP_START > 11, reason=f"Starting on step {STEP_START}") 254def test_step_11_402t(): 255 """ 256 1. Measure open circuit voltage 257 2. Temp Cycle in thermal chamber per MIL-STD-202, method 102 (now 107), letter D: 258 - Bring pack to -40C (+0, -5) for 1 hour 259 - Bring pack to 25C (+10, -5) for no more than 5 minutes 260 - Bring pack to 60C (+5, -0) for 1 hour 261 - Bring pack to 25C (+10, -5) for no more than 5 minutes 262 - Repeat preceding 4 steps 5 times 263 3. Inspect for any physical/mechanical defects 264 4. Measure open circuit voltage 265 """ 266 bms_hardware.sample_interval = SAMPLE_INTERVAL 267 bms_hardware.thermal_chamber.internal_units = "C" 268 for i in range(5): 269 logger.write_info_to_report(f"Step 11.{i}") 270 bms_hardware.thermal_chamber.set_point_temperature = -40 271 bms_hardware.max_time = 3600 272 bms_hardware.run_resting_cycle() 273 bms_hardware.thermal_chamber.set_point_temperature = 25 274 bms_hardware.max_time = 5 * 60 275 bms_hardware.run_resting_cycle() 276 bms_hardware.thermal_chamber.set_point_temperature = 60 277 bms_hardware.max_time = 3600 278 bms_hardware.run_resting_cycle() 279 bms_hardware.thermal_chamber.set_point_temperature = 25 280 bms_hardware.max_time = 5 * 60 281 bms_hardware.run_resting_cycle()
- Measure open circuit voltage
- Temp Cycle in thermal chamber per MIL-STD-202, method 102 (now 107), letter D:
- Bring pack to -40C (+0, -5) for 1 hour
- Bring pack to 25C (+10, -5) for no more than 5 minutes
- Bring pack to 60C (+5, -0) for 1 hour
- Bring pack to 25C (+10, -5) for no more than 5 minutes
- Repeat preceding 4 steps 5 times
- Inspect for any physical/mechanical defects
- Measure open circuit voltage
284@pytest.mark.skipif(REST_TIME == 0, reason="Resting not requested") 285def test_resting(): 286 """Record resting data.""" 287 bms_hardware.max_time = REST_TIME 288 bms_hardware.sample_interval = SAMPLE_INTERVAL 289 bms_hardware.run_resting_cycle()
Record resting data.