Skip to content

Commit b2e7355

Browse files
authored
fix current out of nominal difference (#3174)
1 parent a73dca1 commit b2e7355

3 files changed

Lines changed: 46 additions & 4 deletions

File tree

packages/control/auto_phase_switch_test.py

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pytest
22
from threading import Event
3-
from typing import List, Optional
3+
from typing import List, Optional, Tuple
44
from unittest.mock import Mock
55
from control.chargepoint.control_parameter import ControlParameter
66
from control.counter import Counter, CounterData, Set
@@ -150,3 +150,40 @@ def test_auto_phase_switch(monkeypatch, vehicle: Ev, params: Params):
150150
assert current == params.expected_current
151151
assert message == params.expected_message
152152
assert control_parameter.state == params.expected_state
153+
154+
155+
@pytest.mark.parametrize(
156+
"evse_current, get_currents, all_surplus, expected",
157+
[
158+
pytest.param(8, [7.7]*3, 100, (False, Ev.ENOUGH_POWER), id="kein 1p3p, genug Leistung für mehrphasige Ladung"),
159+
pytest.param(10, [9.8, 0, 0], 50, (False, Ev.NOT_ENOUGH_POWER),
160+
id="kein 1p3p, nicht genug Leistung, um auf 3p zu schalten"),
161+
pytest.param(16, [14, 0, 0], 5000, (False, Ev.CURRENT_OUT_OF_NOMINAL_DIFFERENCE),
162+
id="kein 1p3p, Auto lädt nicht mit vorgegebener Maximalstromstärke"),
163+
pytest.param(6, [7.5]*3, -20, (False, Ev.CURRENT_OUT_OF_NOMINAL_DIFFERENCE),
164+
id="kein 1p3p, Auto lädt nicht mit vorgegebener Minimalstromstärke"),
165+
pytest.param(16, [15.8, 0, 0], 5000, (True, None), id="1p3p"),
166+
pytest.param(6, [5.8]*3, -10, (True, None), id="3p1p"),
167+
])
168+
def test_check_phase_switch_conditions(evse_current: int,
169+
get_currents: List[float],
170+
all_surplus: int,
171+
expected: Tuple[bool, Optional[str]],
172+
monkeypatch):
173+
# setup
174+
ev = Ev(0)
175+
mock_get_evu_counter = Mock(return_value=Mock(get_usable_surplus=Mock(return_value=all_surplus)))
176+
monkeypatch.setattr(data.data.counter_all_data, "get_evu_counter", mock_get_evu_counter)
177+
178+
# execution
179+
phase_switch, condition_msg = ev._check_phase_switch_conditions(
180+
ChargeTemplate(),
181+
ControlParameter(phases=3-get_currents.count(0)),
182+
evse_current,
183+
get_currents,
184+
sum(get_currents)*230,
185+
16,
186+
LoadmanagementLimit(None, None))
187+
188+
# evaluation
189+
assert (phase_switch, condition_msg) == expected

packages/control/chargepoint/chargepoint.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ def initiate_control_pilot_interruption(self):
311311
name=f"cp{self.chargepoint_module.config.id}")):
312312
message = "Control-Pilot-Unterbrechung für " + str(
313313
charging_ev.ev_template.data.control_pilot_interruption_duration) + "s."
314-
self.set_state_and_log(message)
314+
self.set_state_and_log(message)
315315
else:
316316
message = "CP-Unterbrechung nicht möglich, da der Ladepunkt keine CP-Unterbrechung unterstützt."
317317
self.set_state_and_log(message)

packages/control/ev/ev.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,10 +287,15 @@ def _check_phase_switch_conditions(self,
287287
if phases_in_use > 1 and all_surplus > 0:
288288
# genug Leistung, um weiter mehrphasig zu laden
289289
return False, self.ENOUGH_POWER
290-
elif phases_in_use == 1 and all_surplus < required_surplus:
290+
elif phases_in_use == 1 and (all_surplus < required_surplus or unbalanced_load_limit_reached):
291291
# nicht genug Leistung, um mehrphasig zu laden, also einphasig laden
292292
return False, self.NOT_ENOUGH_POWER
293-
elif min_current == evse_current or max_current == evse_current:
293+
elif ((get_medium_charging_current(get_currents) < max_current_range and
294+
evse_current > max_current_range and
295+
phases_in_use == 1) or
296+
(get_medium_charging_current(get_currents) > min_current_range and
297+
evse_current < min_current_range and
298+
phases_in_use > 1)):
294299
# EV lädt nicht mit dem vorgegebenen Strom +/- der erlaubten Abweichung
295300
return False, self.CURRENT_OUT_OF_NOMINAL_DIFFERENCE
296301
else:

0 commit comments

Comments
 (0)