From 83db948c2fa5b23b523f40ace0b03edc8fe412e4 Mon Sep 17 00:00:00 2001 From: s0170071 Date: Sun, 20 Sep 2026 14:58:59 +0200 Subject: [PATCH] fix: Speicher kann sich im Mindest-SoC-Modus nicht mehr erholen Im Band zwischen min_soc und max_soc wird bei aktiver Hysterese und erlaubter Entladeleistung die vorzeichenbehaftete Speicherleistung auf die Freigabe addiert. Laedt der Speicher, geht damit auch seine Ladeleistung an die Fahrzeuge - er kann im Band nicht mehr laden, solange ein Fahrzeug die Leistung aufnimmt, und der SoC bleibt an min_soc haengen. Nur noch den entladenden Anteil addieren. Fuer base_power <= 0 aendert sich nichts, der Zweig oberhalb max_soc bleibt unveraendert. --- packages/control/bat_all.py | 4 +++- packages/control/bat_all_test.py | 13 +++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index c1939c2187..150fa4e816 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -400,7 +400,9 @@ def get_charging_power_left_diff(self): # Ausgangsleistung des WR überschreiten. # Wenn der Speicher mit mehr als der erlaubten Entladeleistung entladen wird, muss das # vom Überschuss subtrahiert werden. - charging_power_left = min(required_absolut_discharge_power + base_power, + # Lädt der Speicher, bleibt seine Ladeleistung bei ihm: sie ist der einzige Weg + # zurück auf max_soc und damit aus der Hysterese heraus. + charging_power_left = min(required_absolut_discharge_power + min(0, base_power), absolute_bat_discharge_power) log.debug(f"Erlaubte Entlade-Leistung nutzen {charging_power_left}W") else: diff --git a/packages/control/bat_all_test.py b/packages/control/bat_all_test.py index 4f0a6f7cbe..43e22c27f8 100644 --- a/packages/control/bat_all_test.py +++ b/packages/control/bat_all_test.py @@ -158,9 +158,18 @@ class Params: 400, 90, 0, False, 600), Params(("Mindest-SoC, Hysterese, EV-Vorrang, keine Speichernutzung"), ChargemodeConfigBat(mode="min_soc_bat_mode"), 400, 60, 400, False, hysteresis_discharge=False), - Params(("Mindest-SoC, Hysterese, Speicherentladung, Speichernutzung erlaubt"), + Params(("Mindest-SoC, Hysterese, Speicher lädt, Ladeleistung bleibt beim Speicher"), ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), - 400, 60, 900, False, hysteresis_discharge=True), + 400, 60, 500, False, hysteresis_discharge=True), + Params(("Mindest-SoC, Hysterese, Speicher ruht, nur die erlaubte Entladeleistung"), + ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), + 0, 60, 500, False, hysteresis_discharge=True), + Params(("Mindest-SoC, Hysterese, Speicher entlädt innerhalb der Entladeleistung"), + ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), + -300, 60, 200, False, hysteresis_discharge=True), + Params(("Mindest-SoC, Hysterese, Speicher entlädt mehr als die Entladeleistung"), + ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), + -700, 60, -200, False, hysteresis_discharge=True), Params(("Mindest-SoC, Hysterese, Speicherentladung, Speichernutzung erlaubt, Speicher-Sperre aktiv"), ChargemodeConfigBat(mode="min_soc_bat_mode", power_discharge=500, power_discharge_active=True), 400, 60, 0, False, 600, hysteresis_discharge=True),