$Title Betrieb von Energiesystemen $Ontext Vorlesung: Betriebliche Planung von Energiesystemen Abschnitt: 2.3 Design integrierter Energiesysteme Problemstellung: Deterministisches Betriebsmodell fuer gegebenes Design - Model - Author: Christoph Schwindt Date: 22/12/2023 Verwendete technische Parameter: ================================ - Pumpspeicher Schluchsee Waldshut mit Speicherkapazitaet 626 MWh, Generatorwirkungsrad ca. 0,9, Pumpenwirkungsgrad ca. 0,8, Ausspeicherleistung 220/0,9 MW = 244 MW, Einspeicherleistung 220 x 0,8 = 176 MW - Akku-Speicher: 100 Speicher vom Typ BYD HVM 11.0 PREMUIM mit Speicherkapazitaet 100 x 11 x 0,9 kWh, Wirkungsgrad Lithium-Ionen-Akku 0,9 - 0,95, hier 0,925, Einspeicherleistung 100 x 10,2 x sqrt(0,925) kW = 1,01 MW, Ausspeicherleistung 100 x 10,2 / sqrt(0,925) kW = 1,09 MW - Zylindrischer Wasserstoff-Hochdruckbehaelter: Durchmesser 5 m, Laenge 20 m, Speicherdruck 700 bar, Gewicht Wasserstoff 0,0841 kg/m3 bei Normaldruck Brennwert Wasserstoff 141,8 MJ/kg = 0,0033 MWh/m3 ergibt Speicherkapazitaet von 289,9 MWh - Elektrolyseur: Leistungsaufnahme 130 MW, Wirkungsgrad 0,65 ergibt Einspeicherleistung 84,5 MW - Brennstoffzelle: 100 Membran-Brennstoffzellen a Leistung 500 kW, Wirkungsgrad 0,6 ergibt Ausspeicherleistung 100 x 833 kW = 83,3 MW - Windkraft: 40 On-Shore Windraeder a 6 MW, spezifische Gestehungskosten 40 Euro/MWh - Photovoltaik-Freiflaechen-Anlage: 400 Hektar a ca. 1 MW pro Hektar, spezifische Gestehungskosten 30 Euro/MWh - Biogas: 200 Hektar a 5000 m3 Methan pro Jahr und Hektar Silomais, Brennwert Methan 55,5 MJ/kg, Gewicht Methan 0,72 kg/m3, ergibt Einspeicherleistung 200 x 5000 m3 x 0,72 kg/m3 x 55,5/3,6 kWh/kg / 8760 h = 1,268 MW, spezifische Gestehungskosten 72 Euro/MWh - Biogas-Niederdruckbehaelter: Volumen 3000 m3, Brennwert 6,25 kWh/m3 ergibt 18,85 MWh, Nennleistung Gasturbine 1 MW, Wirkungsgrad Gasturbine 0.4 Gestehungskosten siehe www.ise.fraunhofer.de/content/dam/ise/de/documents/publications/studies/DE2021_ISE_Studie_Stromgestehungskosten_Erneuerbare_Energien.pdf, es wurden jeweils linke Intervallgrenzen (minimale Kostenschaetzungen) angesetzt $Offtext $eolcom// ******************* Lese Daten fuer Deutschland im Jahr 2019 aus Excel ein ******************** $call gdxxrw.exe operations-power-systems_data.xlsx o=operations-power-systems_data.gdx index=Parameter!A1:D2 $gdxin operations-power-systems_data.gdx sets i Anlagen / wind, solar, pump, akku, wasserstoff, biogas / BigE(i) Teilmenge Erzeuger / wind, solar / BigS(i) Teilmenge Speicher / pump, akku, wasserstoff / BigES(i) Teilmenge Erzeuger-Speicher / biogas / t Perioden / t1*t35041 / // Viertelstundenperioden eines Jahres, t35041 = Dummyperiode c_cap Spaltenkoepfe der Datentabelle / t, dayahead, wind, solar, last / ; // Daten fuer 2019 parameters data(t,c_cap) eingelesene Datentabelle l(t) zu deckende Last in Periode t [MWh] p(t) 'Preis auf Sportmarkt in Periode t [Euro/MWh]' p_bar 'Arbeitspreis zu dem Last gedeckt wird [Euro/MWh]' z_min(i) minimaler Fuellstand von Speicher und Erzeuger-Speicher i [MWh] z_max(i) maximaler Fuellstand von Speicher und Erzeuger-Speicher i [MWh] / pump 626, akku 0.99, wasserstoff 290, biogas 18.85 / eta_plus(i) Wirkungsgrad Einspeicherprozess Speicher oder Erzeuger-Speicher i / pump 0.9, akku 0.96, wasserstoff 0.65, biogas 1 / eta_minus(i) Wirkungsgrad Ausspeicherprozess Speicher oder Erzeuger-Speicher i / pump 0.8, akku 0.96, wasserstoff 0.6, biogas 0.4 / z_a(i) Anfangsfuellstand Speicher i [MWh] P_plus(i) maximale Einspeicherleistung [MW] / pump 176, akku 1.01, wasserstoff 84.5, biogas 1.27 / P_minus(i) maximale Ausspeicherleistung [MW] / pump 244, akku 1.09, wasserstoff 83.3, biogas 2.5 / zeta(i,t) Nutzungsgrad Erzeuger i BigP(i) Nennleistung Erzeuger i [MW] / wind 240, solar 200 / c(i) 'spezifische Gestehungskosten Erzeuger und Erzeuger-Speicher i in [Euro/MWh]' / wind 40, solar 30, biogas 72 / gamma(i) anteiliger Verlust pro Periode / pump 0, akku 1.37E-5, wasserstoff 0, biogas 0 / erz_wind(t) Erzeugung Windstrom aus Daten erz_solar(t) Erzeugung Solarstrom aus Daten tau Laenge einer Periode in Stunden / 0.25 / ; z_min(i)$(BigES(i) or BigS(i)) = 0.2*z_max(i) ; // minimaler Fuellstand pauschal 20 % des maximalen Fuellstands z_a(i) = 0.5*(z_min(i)+z_max(i)) ; // Anfangsfuellstand als Mittelwert von minimalem und maximalem Fuellstand $LOAD data scalars max_wind maximale Windstromerzeugung einer Periode aus den Daten fuer 2019 max_solar maximale Solarstromerzeugung einer Periode aus den Daten fuer 2019 ; p(t) = data(t,'dayahead') ; // Gleichgewichtspreise der Stundenkontrakte p_bar = 1/card(t)*sum(t, p(t)) ; // Arbeitspreis als Durchschnittspreis auf dem Sportmarkt * p_bar = 0.247 * 308.5 // Strompreis fuer Haushaltskunden 2019: 30,85 Ct/kWh, // Anteil Erzeugung, Beschaffung und Vertrieb am Strompreis 24,7 % erz_wind(t) = data(t,'wind') ; erz_solar(t) = data(t,'solar') ; max_wind = smax(t, erz_wind(t)) ; max_solar = smax(t, erz_solar(t)) ; l(t) = data(t,'last') / 1000 ; // entspricht Elektrizitaetsbedarf von ca. 80.000 Personen zeta('wind',t) = erz_wind(t)/max_wind ; // verwende Deutschland-Mittelwerte der realisierten Nutzungsgrade fuer Perioden t zeta('solar',t) = erz_solar(t)/max_solar ; // verwende Deutschland-Mittelwerte der realisierten Nutzungsgrade fuer Perioden t variables DB Deckungsbeitrag (Zielfunktionswert) s(t) 'in Periode t eingekaufte bzw. negative verkaufte Menge an Strom [Euro/MWh]' x(i,t) mit Erzeuger oder Erzeuger-Speicher i generierte Menge in t z(i,t) Fuellstand von Speicher i zu Beginn von Periode t z_plus(i,t) in Speicher i in Periode t eingespeicherte Menge z_minus(i,t) aus Speicher i in Periode t ausgespeicherte Menge ; positive variables x, z, z_plus, z_minus ; equations def_DB Definition Deckungsbeitrag lastdeckung(t) Lastdeckung erzeuger_speicher_leistung(i,t) Leistung Biogasasturbine speicher_bilanz(i,t) Speicherbilanzgleichung ; def_DB.. DB =e= sum[t$(ord(t)0), p(t)*s.l(t))/sum(t$(s.l(t)>0), s.l(t)) ; vk_preis = sum(t$(s.l(t)<0), p(t)*s.l(t))/sum(t$(s.l(t)<0), s.l(t)) ; display 'Mittlerer Einkaufspreis', ek_preis, 'Mittlerer Verkaufspreis', vk_preis ; parameter z_transposed(t,i) ; z_transposed(t,i)$(BigES(i) or BigS(i)) = z.l(i,t) ; z_transposed(t,i)$(BigES(i) or BigS(i)) = EPS$(not z_transposed(t,i)) + z_transposed(t,i) ; ******************* Exportiere Speicherfuellstaende in Excel-Datei unter Verwendung der GDX Utilities execute_unload 'levels.gdx' z_transposed execute 'gdxxrw.exe levels.gdx epsOut=0 o=levels.xlsx par=z_transposed rng=Tabelle1!A1'