Projektvorstellung: CHP Cost Optimization Controller
Kurzkontext
Zwei Gas-BHKWs (je 20 kW el. / 40 kW th.) sollen bei hohen Strompreisen laufen.
Grundlast: 150–250 kW Netzbezug. Zusätzlich: 500 kW Gaskessel und 110 kWp PV.
Ziel
Kostenoptimierter Betrieb anhand aktueller/kommender Energiepreise, Netzlast und Pufferspeicher-Temperaturen – mit robustem Zustandsautomat und Hysterese gegen Takten.
Kernfunktionen
-
Preisbasiert & vorausschauend via
TimeOfUseTariff
– aktuelle Preise (€/MWh) für Start/Stopp
– „Future Price“ (Durchschnitt im nächstenpreparationHyteresis-Fenster) für Vorkühlen/Vorbereitung -
Leistungsziel:
applyPowerTarget = min(maxActivePower, gridPowerWithoutChp)→ keine Netzeinspeisung -
Netzbezug-Trigger: Aktivierung/Idle abhängig von
minGridPower
(praktisch: Start erst ab ~40 kW Netzbezug – Eigenerzeugung unberücksichtigt) -
Modi:
MANUAL_ON(Volllast),MANUAL_OFF(Stop), sonst Automatik
Zustandsautomat
UNDEFINED → NORMAL → { CHP_PREPARING | CHP_ACTIVE | IDLE | OVER_TEMPERATURE | CHP_INACTIVE | CHP_NOT_READY | ERROR }
Zustandswechsel sind über STATE_TRANSITION_HYSTERESIS entprellt.
Temperaturüberwachung (wichtig)
-
Pufferspeicher-Temperatur (Modbus) mit Schwellwerten aus der Config:
-
minBufferTankTemperature→ Startfreigabe (unter Min starten) -
thresholdBufferTankTemperature→ restriktiver Start/Weiterlauf -
maxBufferTankTemperature→ sofort Stop +OVER_TEMPERATURE -
reducePowerThresholdTemperature→ Leistungsreduktion bei „near max“:
Zielleistung halbiert fürREDUCED_POWER_GRACE_SECONDS(z. B. 3600 s),
Hysterese mit Flankenerkennung verhindert Flattern
-
-
Interne Flags/Channels:
temperatureBelowMin/AboveThreshold/AboveMax/NearMax,awaitingReducedPowerHysteresis
Hysteresen & Timeouts (Auszug)
-
Start/Run/Preparation: konfigurierbar (
startHyteresis,runHyteresis,preparationHyteresis) -
Zustandswechsel:
STATE_TRANSITION_HYSTERESIS = 10 s -
Sonderfälle:
TARGET_NOT_REACHED_GRACE_SECONDS = 300 s,IDLE_GRACE_SECONDS = 300 s,REDUCED_POWER_GRACE_SECONDS = 3600 s
Sicherheits-/Betriebsprüfungen
-
Grid-Meter vorhanden und
MeterType.GRID -
BHKW(s) betriebsbereit (Ready-Signal, keine Fehler)
-
Tarifdaten vorhanden
→ sonstERROR, Vorbereitung aus, BHKW OFF
Praktische Herausforderung & Ansatz
-
Schmaler Temperaturarbeitsbereich der BHKWs:
Startverhinderung > 73 °C (Speicher); Übertemperatursperre ~ > 75 °C
Wirtschaftlich ist Volllast ⇒ faktisch „ganz oder gar nicht“. -
Lösung: vorausschauend abkühlen
– Wenn in einer Stunde Preis hoch, dann jetzt Heizsystem in den „Wohlfühlbereich“ der BHKWs absenken.
– Kessel in Sparbetrieb: Kessel-Soll = Grenztemperatur, bei der unsere Prozesse gerade noch sicher laufen.Diese Grenztemperatur zu ermitteln, war nicht gerade trivial…
Grundsätzlich denke ich, dass Anlagen am besten wärme- oder stromgeführt betrieben werden sollten. Die Kombination war anspruchsvoll und zeitaufwändig und wurde mit einer (möglicherweise zu) komplizierten StateMachine und vielen Hyterese-Timern gelöst.
Zusammengefasst:
Preise hoch → vorbereiten/kühlen → starten (wenn Last & Temp passen) → kein Einspeisen → Hysterese gegen Takten → Temperatur-Limits erzwingen Sicherheit.



