Skip to content

Integralvariablen und Speichermodellierung

Integralvariablen

Energiespeicherkomponenten unterscheiden sich von anderen Komponenten in der Modellierung durch die zeitliche Kopplung der integralen Energiemenge zwischen den Simulationsschritten, formuliert in der Gleichung

\( \begin{equation} \begin{aligned} \frac{\Delta E} {\Delta t} = \dot{P} _{in} – \dot{P} _{aus} \end{aligned}\end{equation}\).

Dafür gibt es für die algebraische und die lineare Integralvariable je einen Variablentyp, der sich wie folgt deklarieren lässt:

Integral E [kWh] ;
Linear Integral lE [kWh] ;

Die oben abgebildete Speichergleichung lässt sich gleichermaßen für lineare und algebraische Variablen durch die PML-Funktion setDerivative aufrufen.

lE.setDerivative(lP_in – lP_aus) ;

E.setDerivative(P_in – P_aus) ;

E bzw. lE stellen den Speicherfüllstand zu Beginn des Simulationsschritts dar (wird der Speicher innerhalb einer Stunde von 10 auf 20 kWh beladen, erhalten E bzw. lE den Wert 10). Das ist auch der Wert, den man in den Zeitreihen ablesen kann.

Mit der Gleichung setDerivative wird die Integralvariable zum Ende des Simulationsschritts berechnet. Sie lässt sich so darstellen:

E_future = delta_t * (P_in – P_aus) + E ;

Im Algorithmus wird der Wert E_future in dem zeitlich nächstfolgenden Optimierungsproblem als Initialisierungswert verwendet.

Speichermodellierung – Initialisierung

Die Integralvariablen müssen zu Beginn der Simulation einen Anfangswert haben, das heißt initialisiert werden. Dafür gibt es in den Standardformularen bereits einen Initialisierungs-Tab, der mit begin init und end init gefüllt ist. In diesen trägt man den Anfangswert sowohl für algebraische als auch lineare Variablen wie folgt ein:

lE.initIntegral(100 [kWh]);

E.initIntegral(100[kWh]);

Es können auch andere Variablen, die durch eine Primitivverknüpfung bereits einen Wert enthalten (Eingabeprimitiv), als Initialisierungswert verwendet werden, z. B.:

lE.initIntegral(10 [%] * E_max);

Die init-Section wird vor der restlichen Modellbeschreibung ausgewertet. Dort verwendete Variablen müssen einen Eingabewert besitzen, sie können nicht erst in den nachfolgenden Modellbeschreibungen berechnet werden!

Wird der Intialisierungsteil für lineare Variablen leer gelassen, wird automatisch eine Zyklusbeziehung zwischen erstem und letztem Zeitschritt des Optimierungsmodells erstellt. Verwenden Sie das nur sinnvoll, z. B. bei der Modellierung eines saisonalen Speichers. In diesem Fall wird kein Anfangszustand vorgegeben, sondern dieser ist variabel, muss aber zu Beginn des Jahres denselben Wert wie zum letzten Zeitschritt des Jahres annehmen.

Lade- und Entladeleistung

Die Be- und Entladeleistungen sind normale lineare Leistungsvariablen, die sinnvoll beschränkt werden müssen. Lade- und Entladeleistungen sind meist durch Eingabedaten, wie die maximale Ladeleistung (Koeffizient im Optimierungsproblem), beschränkt.

lP_charging <= P_charging_max ;

lP_discharging <= P_discharging_max ;

Im Normalfall darf ein Speicher nicht gleichzeitig be- und entladen werden, sondern nur entweder be- oder entladen werden. Diese Bedingung wird über die Binärvariable bCharging hinzugefügt, z. B.:

lP_charging <= bCharging * P_charging_max ;

lP_discharging <= (1- bCharging) * P_discharging_max ;

lP_charging >= 0 [kW];

lP_discharging >= 0 [kW];

Wie sieht der Lösungsraum für lP_charging und lP_discharging aus, wenn

  • bCharging den Wert 1 annimmt bzw.
  • bCharging den Wert 0 annimmt?

Der Energiegehalt des Speichers kann in der Realität keine beliebig hohen Werte annehmen. Die integrale Variable lE muss deshalb sinnvoll beschränkt werden. Für Sonderfälle ist es möglich, die Beschränkung des Integrals direkt in der Form

lE <= 1000 [kWh] ; lE >= 0

vorzunehmen. Dabei ist zu beachten, dass damit nur der aktuelle Füllstand lE beschränkt werden kann und nicht der sich aus der setDerivative-Gleichung ergebende, welcher als Initialwert für den nächsten Schritt verwendet wird (siehe oben: Integralvariablen). Diese Formulierung ist nur bei ganzjähriger zeitlicher Kopplung des Optimierungsproblems möglich, da alle Füllstände im Optimierungsproblem erscheinen und durch die Zyklusbeziehung der allerletzte Füllstand des Optimierungsmodells dem ersten gleichgesetzt wird. In allen anderen Fällen wird die Über- oder Unterschreitung des maximalen bzw. minimalen Speicherfüllstands über eine Begrenzung der Lade- und Entladeleistung beschränkt, dass

  • maximal so viel geladen werden kann, bis der Speicher voll ist:

lP_charging <= lP_charging_max_remaining ;

lP_charging_max_remaining == (E_max – lE )/ .system.stepWidth.toNumber();

  • und maximal so viel entnommen werden kann, bis der Speicher leer ist:

lP_discharging <= lP_charging_max_remaining ;

lP_discharging_max_remaining == (lE – 0 [kWh])/ .system.stepWidth.toNumber();

An den Anfang scrollen