diff --git a/pv_input.py b/pv_input.py index 2d8037a..7853ddf 100644 --- a/pv_input.py +++ b/pv_input.py @@ -1,67 +1,39 @@ -import pandas as pd import pvlib +import pandas as pd import matplotlib.pyplot as plt +from pvlib.modelchain import ModelChain +from pvlib.location import Location +from pvlib.pvsystem import PVSystem +from pvlib.temperature import TEMPERATURE_MODEL_PARAMETERS -# Standortbedingungen (z.B. München, Deutschland) -latitude = 48.1351 -longitude = 11.5820 -tz = 'Europe/Berlin' +latitude = 47.2675 +longitude = 11.3910 +tz = 'Europe/Vienna' +surface_tilt = 0 +surface_azimuth = 180 -# Abrufen der Wetter- und Strahlungsdaten für den Standort von PVGIS -weather_data, meta = pvlib.iotools.get_pvgis_tmy(latitude, longitude) +database_module = pvlib.pvsystem.retrieve_sam('SandiaMod') +database_inverter = pvlib.pvsystem.retrieve_sam('CECInverter') -# Zeitstempel setzen und Zeitzonenkonvertierung -weather_data.index = weather_data.index.tz_localize(tz) +module = database_module['Canadian_Solar_CS5P_220M___2009_'] +inverter = database_inverter['ABB__PVI_4_2_OUTD_US__208V_'] +modules_per_string = 10 +strings_per_inverter = 2 -# PV Modulbedingungen -module_parameters = { - 'pdc0': 240, - 'gamma_pdc': -0.004 -} +temperature_parameters = TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_glass'] -# Wechselrichterbedingungen -inverter_parameters = { - 'pdc0': 240, - 'eta_inv_nom': 0.96 -} +location = Location(latitude, longitude, tz) +system = PVSystem(surface_tilt=surface_tilt, surface_azimuth=surface_azimuth, module_parameters=module, + inverter_parameters=inverter, temperature_model_parameters=temperature_parameters, + modules_per_string=modules_per_string, strings_per_inverter=strings_per_inverter) -# Erstellung des Standort-Objekts -site = pvlib.location.Location(latitude, longitude, tz=tz) +modelchain = ModelChain(system, location) -# Solarpositions-Array -solar_position = site.get_solarposition(weather_data.index) +times = pd.date_range(start='2021-07-01', end ='2021-07-07', freq='1min', tz=location.tz) -# Erstellen eines PV-Systems -system = pvlib.pvsystem.PVSystem( - surface_tilt=30, - surface_azimuth=180, - module_parameters=module_parameters, - inverter_parameters=inverter_parameters -) +clear_sky = location.get_clearsky(times) +#clear_sky.plot(figsize=(16,9)) -# Berechnen der Einfallswinkelmodifikatoren (AOI) -mc = system.get_aoi(solar_position['apparent_zenith'], solar_position['azimuth']) - -# Berechnen der Strahlungswerte auf der Moduloberfläche -poa_irrad = system.get_irradiance(weather_data['Gb(n)'], weather_data['G(h)'], weather_data['Gd(h)'], mc) - -# Modellierung der Zelltemperatur -tcell = pvlib.temperature.sapm_cell(poa_irrad['poa_global'], weather_data['T2m'], weather_data['WS10m']) - -# Modellierung der DC-Leistung -dc_power = system.pvwatts_dc(poa_irrad['poa_global'], tcell) - -# Modellierung der AC-Leistung -ac_power = system.pvwatts_ac(dc_power) - -# Jahresertrag berechnen -annual_energy = ac_power.sum() / 1000 # kWh - -print(f"Jährlicher Output: {annual_energy:.2f} kWh") - -# Plot der Ergebnisse -ac_power.plot() -plt.ylabel('AC Leistung (W)') -plt.xlabel('Datum') -plt.title('Täglicher Ertrag einer PV-Anlage in kWh') -plt.show() +modelchain.run_model(clear_sky) +modelchain.results.ac.plot(figsize=(16,9)) +plt.show() \ No newline at end of file