Как рассчитать скорректированную освещенность с помощью PVLib - PullRequest
0 голосов
/ 19 марта 2019

У меня есть набор прогнозов погоды HQ для данного местоположения X, оптимизированный для моей страны. Это включает в себя прогнозируемые значения глобального освещения (единица измерения: Вт / м ^ 2) для данной временной отметки.

Кроме того, у меня есть следующая информация о солнечной панели в точке X: координаты (широта, долгота), часовой пояс, высота над уровнем моря, азимут, наклон .

Теперь я хочу вычислить скорректированное излучение на солнечной панели, то есть излучение, которое будет на солнечной панели, учитывая азимут + наклон. Коллега указал мне на PVLib . Затем я изучил примеры intro , где они показывают, как рассчитать скорректированное освещение для нескольких заданных местоположений; именно так, как я хочу.

Однако они используют значения освещенности из своей собственной модели и определяют детали солнечного модуля. Я только хочу рассчитать скорректированные значения освещенности, но не смог выяснить, как использовать мои собственные прогнозы освещенности из прогнозов погоды .

Любые предложения, что мне нужно сделать, чтобы достичь своей цели? (Я новичок в теме, извиняюсь, если задаю слишком тривиальный вопрос.)

Что у меня так далеко:

naive_times = pd.DatetimeIndex(start='2018', end='2019', freq='1h')
coordinates = [(sol_loc_lat, sol_loc_lng, sol_loc_desc, sol_loc_alt, sol_loc_tz),]
my_irradiance = df_meteo_raw_all[[m_datetime, m_irradiance]].set_index(m_datetime)[m_irradiance]

# get the module and inverter specifications from SAM
sandia_modules = pvlib.pvsystem.retrieve_sam('SandiaMod')
sapm_inverters = pvlib.pvsystem.retrieve_sam('cecinverter')
module = sandia_modules['Canadian_Solar_CS5P_220M___2009_']
inverter = sapm_inverters['ABB__MICRO_0_25_I_OUTD_US_208_208V__CEC_2014_']

# specify constant ambient air temp and wind for simplicity
temp_air = 20 # todo get from meteo data
wind_speed = 0 # todo get from meteo data


for latitude, longitude, name, altitude, timezone in coordinates:
    localized_system = LocalizedPVSystem(module_parameters=module,
                                          inverter_parameters=inverter,
                                          surface_tilt=sol_tilt, # or latitude as in example?
                                          surface_azimuth=sol_azimuth, # or 180 as in example?
                                          latitude=latitude,
                                          longitude=longitude,
                                          name=name,
                                          altitude=altitude,
                                          tz=timezone)
    times = naive_times.tz_localize(timezone)
    #clearsky = localized_system.get_clearsky(times)
    solar_position = localized_system.get_solarposition(times)
    #total_irrad = localized_system.get_irradiance(solar_position['apparent_zenith'],
    #                                               solar_position['azimuth'],
    #                                               clearsky['dni'],
    #                                               clearsky['ghi'],
    #                                               clearsky['dhi'])
    temps = localized_system.sapm_celltemp(my_irradiance, # was: total_irrad['poa_global'],
                                            wind_speed, temp_air)
    aoi = localized_system.get_aoi(solar_position['apparent_zenith'],
                                    solar_position['azimuth'])
    airmass = localized_system.get_airmass(solar_position=solar_position)
    effective_irradiance = localized_system.sapm_effective_irradiance(total_irrad['poa_direct'], # update change here too, how?
                                                                      total_irrad['poa_diffuse'], # update change here too, how?
                                                                      airmass['airmass_absolute'], aoi)
    dc = localized_system.sapm(effective_irradiance, temps['temp_cell'])
    ac = localized_system.snlinverter(dc['v_mp'], dc['p_mp'])
    annual_energy = ac.sum()
    energies[name] = annual_energy

Обратите внимание, что я заменил total_irrad['poa_global'] на my_irradiance, и позже мне придется его заменить, но не знаю как. И действительно ли необходимо указывать характеристики солнечного модуля, просто чтобы рассчитать скорректированное излучение?

...