hitl_tester.test_cases.bms.test_bms_state_checks

A simple test case to test states.

  1"""
  2A simple test case to test states.
  3"""
  4
  5import pytest
  6
  7from hitl_tester.modules.bms.bms_serial import serial_monitor
  8from hitl_tester.modules.bms.bms_hw import BMSHardware
  9
 10bms_hardware = BMSHardware(pytest.flags)  # type: ignore[arg-type]
 11bms_hardware.init()
 12
 13
 14def power_on_test():
 15    """Power on the system."""
 16    # Default power up settings
 17    bms_hardware.plateset.ce_switch = False  # BMS configured as off the charger
 18    bms_hardware.plateset.thermistor1 = 25  # set THERM1 to degrees C
 19    bms_hardware.plateset.thermistor2 = 25  # set THERM2 to degrees C
 20    bms_hardware.load.disable()  # load relay off
 21    bms_hardware.charger.disable()  # charger relay off
 22
 23    bms_hardware.delay(2)  # Delay before BMS powers on
 24
 25    v = 3.7  # start test with cell voltages at 3.7
 26
 27    bms_hardware.cells[1].volts = v  # sets cell1 voltage
 28    bms_hardware.cells[2].volts = v  # sets cell2 voltage
 29    bms_hardware.cells[3].volts = v  # sets cell3 voltage
 30    bms_hardware.cells[4].volts = v  # sets cell4 voltage
 31
 32    bms_hardware.delay(5)
 33
 34
 35def test_startup():
 36    """Test resting state."""
 37    bms_hardware.load.disable()  # disable load
 38    bms_hardware.delay(2)  # wait for load to disable and isolate
 39    bms_hardware.plateset.ce_switch = True  # Enable charging
 40    bms_hardware.charger.enable()  # Turn on charger relay
 41    bms_hardware.charger.set_profile(16.8, 0.035)
 42    bms_hardware.delay(2)
 43    states = serial_monitor.read()
 44    assert bms_hardware.max_time <= 14  # set to 14 not zero because of various delays in startup
 45    assert states["flags.state_resting"] is True  # Put actual state check here when found
 46
 47
 48def test_charging_state():
 49    """Test charging state."""
 50    bms_hardware.load.disable()  # disable load
 51    bms_hardware.delay(2)  # wait for load to disable and isolate
 52    bms_hardware.plateset.ce_switch = True  # Enable charging
 53    bms_hardware.charger.enable()  # Turn on charger relay
 54    bms_hardware.charger.set_profile(16.8, 0.035)
 55    bms_hardware.delay(2)
 56    bms_hardware.charge_rate = 146
 57    states = serial_monitor.read()
 58
 59    assert bms_hardware.max_time == 0
 60    assert states["flags.state_charging"] is True  # Put actual state check here when found
 61
 62
 63def test_discharging_state():
 64    """Test discharging state."""
 65    bms_hardware.load.disable()  # disable load
 66    bms_hardware.delay(2)  # wait for load to disable and isolate
 67    bms_hardware.plateset.ce_switch = True  # Enable charging
 68    bms_hardware.charger.enable()  # Turn on charger relay
 69    bms_hardware.charger.set_profile(16.8, 0.035)
 70    bms_hardware.delay(2)
 71    bms_hardware.charge_rate = -114
 72    states = serial_monitor.read()
 73    assert bms_hardware.max_time == 0
 74    assert states["flags.state_discharging"] is True  # Put actual state check here when found
 75
 76
 77def test_discharging_to_resting():
 78    """Test discharging to resting state."""
 79    bms_hardware.load.disable()  # disable load
 80    bms_hardware.delay(2)  # wait for load to disable and isolate
 81    bms_hardware.plateset.ce_switch = True  # Enable charging
 82    bms_hardware.charger.enable()  # Turn on charger relay
 83    bms_hardware.charger.set_profile(16.8, 0.035)
 84    bms_hardware.delay(2)
 85    bms_hardware.charge_rate = -114
 86    bms_hardware.max_time = 10798
 87    bms_hardware.delay(3)
 88    states = serial_monitor.read()
 89    assert bms_hardware.max_time <= 10
 90    assert states["flags.state_resting"] is True  # Put actual state check here when found
 91
 92
 93def test_charging_to_resting():
 94    """Test charging to resting state."""
 95    bms_hardware.load.disable()  # disable load
 96    bms_hardware.delay(2)  # wait for load to disable and isolate
 97    bms_hardware.plateset.ce_switch = True  # Enable charging
 98    bms_hardware.charger.enable()  # Turn on charger relay
 99    bms_hardware.charger.set_profile(16.8, 0.035)
100    bms_hardware.delay(2)
101    bms_hardware.charge_rate = 146
102    bms_hardware.max_time = 10798
103    bms_hardware.delay(3)
104    states = serial_monitor.read()
105    assert bms_hardware.max_time <= 10
106    assert states["flags.state_resting"] is True  # Put actual state check here when found
107
108
109def test_charging_to_discharging():
110    """Test charging to discharging state."""
111    bms_hardware.load.disable()  # disable load
112    bms_hardware.delay(2)  # wait for load to disable and isolate
113    bms_hardware.plateset.ce_switch = True  # Enable charging
114    bms_hardware.charger.enable()  # Turn on charger relay
115    bms_hardware.charger.set_profile(16.8, 0.035)
116    bms_hardware.delay(2)
117    bms_hardware.charge_rate = 146
118    bms_hardware.delay(2)
119    bms_hardware.charge_rate = -114
120    states = serial_monitor.read()
121
122    assert bms_hardware.max_time == 0
123    assert states["flags.state_discharging"] is True  # Put actual state check here when found
124
125
126def test_discharging_to_charging():
127    """Test discharging to charging state."""
128    bms_hardware.load.disable()  # disable load
129    bms_hardware.delay(2)  # wait for load to disable and isolate
130    bms_hardware.plateset.ce_switch = True  # Enable charging
131    bms_hardware.charger.enable()  # Turn on charger relay
132    bms_hardware.charger.set_profile(16.8, 0.035)
133    bms_hardware.delay(2)
134    bms_hardware.charge_rate = -114
135    bms_hardware.delay(2)
136    bms_hardware.charge_rate = 146
137    states = serial_monitor.read()
138
139    assert bms_hardware.max_time == 0
140    assert states["flags.state_charging"] is True  # Put actual state check here when found
def power_on_test():
15def power_on_test():
16    """Power on the system."""
17    # Default power up settings
18    bms_hardware.plateset.ce_switch = False  # BMS configured as off the charger
19    bms_hardware.plateset.thermistor1 = 25  # set THERM1 to degrees C
20    bms_hardware.plateset.thermistor2 = 25  # set THERM2 to degrees C
21    bms_hardware.load.disable()  # load relay off
22    bms_hardware.charger.disable()  # charger relay off
23
24    bms_hardware.delay(2)  # Delay before BMS powers on
25
26    v = 3.7  # start test with cell voltages at 3.7
27
28    bms_hardware.cells[1].volts = v  # sets cell1 voltage
29    bms_hardware.cells[2].volts = v  # sets cell2 voltage
30    bms_hardware.cells[3].volts = v  # sets cell3 voltage
31    bms_hardware.cells[4].volts = v  # sets cell4 voltage
32
33    bms_hardware.delay(5)

Power on the system.

def test_startup():
36def test_startup():
37    """Test resting state."""
38    bms_hardware.load.disable()  # disable load
39    bms_hardware.delay(2)  # wait for load to disable and isolate
40    bms_hardware.plateset.ce_switch = True  # Enable charging
41    bms_hardware.charger.enable()  # Turn on charger relay
42    bms_hardware.charger.set_profile(16.8, 0.035)
43    bms_hardware.delay(2)
44    states = serial_monitor.read()
45    assert bms_hardware.max_time <= 14  # set to 14 not zero because of various delays in startup
46    assert states["flags.state_resting"] is True  # Put actual state check here when found

Test resting state.

def test_charging_state():
49def test_charging_state():
50    """Test charging state."""
51    bms_hardware.load.disable()  # disable load
52    bms_hardware.delay(2)  # wait for load to disable and isolate
53    bms_hardware.plateset.ce_switch = True  # Enable charging
54    bms_hardware.charger.enable()  # Turn on charger relay
55    bms_hardware.charger.set_profile(16.8, 0.035)
56    bms_hardware.delay(2)
57    bms_hardware.charge_rate = 146
58    states = serial_monitor.read()
59
60    assert bms_hardware.max_time == 0
61    assert states["flags.state_charging"] is True  # Put actual state check here when found

Test charging state.

def test_discharging_state():
64def test_discharging_state():
65    """Test discharging state."""
66    bms_hardware.load.disable()  # disable load
67    bms_hardware.delay(2)  # wait for load to disable and isolate
68    bms_hardware.plateset.ce_switch = True  # Enable charging
69    bms_hardware.charger.enable()  # Turn on charger relay
70    bms_hardware.charger.set_profile(16.8, 0.035)
71    bms_hardware.delay(2)
72    bms_hardware.charge_rate = -114
73    states = serial_monitor.read()
74    assert bms_hardware.max_time == 0
75    assert states["flags.state_discharging"] is True  # Put actual state check here when found

Test discharging state.

def test_discharging_to_resting():
78def test_discharging_to_resting():
79    """Test discharging to resting state."""
80    bms_hardware.load.disable()  # disable load
81    bms_hardware.delay(2)  # wait for load to disable and isolate
82    bms_hardware.plateset.ce_switch = True  # Enable charging
83    bms_hardware.charger.enable()  # Turn on charger relay
84    bms_hardware.charger.set_profile(16.8, 0.035)
85    bms_hardware.delay(2)
86    bms_hardware.charge_rate = -114
87    bms_hardware.max_time = 10798
88    bms_hardware.delay(3)
89    states = serial_monitor.read()
90    assert bms_hardware.max_time <= 10
91    assert states["flags.state_resting"] is True  # Put actual state check here when found

Test discharging to resting state.

def test_charging_to_resting():
 94def test_charging_to_resting():
 95    """Test charging to resting state."""
 96    bms_hardware.load.disable()  # disable load
 97    bms_hardware.delay(2)  # wait for load to disable and isolate
 98    bms_hardware.plateset.ce_switch = True  # Enable charging
 99    bms_hardware.charger.enable()  # Turn on charger relay
100    bms_hardware.charger.set_profile(16.8, 0.035)
101    bms_hardware.delay(2)
102    bms_hardware.charge_rate = 146
103    bms_hardware.max_time = 10798
104    bms_hardware.delay(3)
105    states = serial_monitor.read()
106    assert bms_hardware.max_time <= 10
107    assert states["flags.state_resting"] is True  # Put actual state check here when found

Test charging to resting state.

def test_charging_to_discharging():
110def test_charging_to_discharging():
111    """Test charging to discharging state."""
112    bms_hardware.load.disable()  # disable load
113    bms_hardware.delay(2)  # wait for load to disable and isolate
114    bms_hardware.plateset.ce_switch = True  # Enable charging
115    bms_hardware.charger.enable()  # Turn on charger relay
116    bms_hardware.charger.set_profile(16.8, 0.035)
117    bms_hardware.delay(2)
118    bms_hardware.charge_rate = 146
119    bms_hardware.delay(2)
120    bms_hardware.charge_rate = -114
121    states = serial_monitor.read()
122
123    assert bms_hardware.max_time == 0
124    assert states["flags.state_discharging"] is True  # Put actual state check here when found

Test charging to discharging state.

def test_discharging_to_charging():
127def test_discharging_to_charging():
128    """Test discharging to charging state."""
129    bms_hardware.load.disable()  # disable load
130    bms_hardware.delay(2)  # wait for load to disable and isolate
131    bms_hardware.plateset.ce_switch = True  # Enable charging
132    bms_hardware.charger.enable()  # Turn on charger relay
133    bms_hardware.charger.set_profile(16.8, 0.035)
134    bms_hardware.delay(2)
135    bms_hardware.charge_rate = -114
136    bms_hardware.delay(2)
137    bms_hardware.charge_rate = 146
138    states = serial_monitor.read()
139
140    assert bms_hardware.max_time == 0
141    assert states["flags.state_charging"] is True  # Put actual state check here when found

Test discharging to charging state.