Projektvorstellung: BHKW-Steuerung

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ächsten preparationHyteresis-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:

    • minBufferTankTemperatureStartfreigabe (unter Min starten)

    • thresholdBufferTankTemperaturerestriktiver Start/Weiterlauf

    • maxBufferTankTemperaturesofort Stop + OVER_TEMPERATURE

    • reducePowerThresholdTemperatureLeistungsreduktion bei „near max“:
      Zielleistung halbiert für REDUCED_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
    → sonst ERROR, 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ühlenstarten (wenn Last & Temp passen) → kein EinspeisenHysterese gegen Takten → Temperatur-Limits erzwingen Sicherheit.