我遇到了同样的问题,我通过以下方式解决了:
导入依赖:
import pandas as pd
import pvlib
from pvlib.pvsystem import PVSystem
from pvlib.location import Location
from pvlib.modelchain import ModelChain
from pvlib.temperature import TEMPERATURE_MODEL_PARAMETERS
使用 Temperature_Model_parameters 以在顶层设置模型。
temperature_model_parameters = TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_glass']
在这里,我为我的系统设置了模块和逆变器,您应该可以根据您的 cec_module 和逆变器进行更改
cec_modules = pvlib.pvsystem.retrieve_sam('CECMod')
cec_inverters = pvlib.pvsystem.retrieve_sam('cecinverter')
cec_module = cec_modules['Canadian_Solar_Inc__CS6X_320P']
cec_inverter = cec_inverters['INGETEAM_POWER_TECHNOLOGY_S_A___Ingecon_Sun_40TL_U_M__480V_']
然后声明你的位置变量
latitude= 20.56
longitude= -103.22
altitude=1544
tz='America/Mexico_City'
实例一个 Location 类:
location = Location(latitude=latitude, longitude=longitude, altitude=altitude, tz=tz)
声明系统配置的变量
surface_tilt = 25
surface_azimuth = 180 # pvlib uses 0=North, 90=East, 180=South, 270=West convention
albedo = 0.2
使用声明的变量实例化 PVSystem 类:
system = PVSystem(surface_tilt=surface_tilt, surface_azimuth=surface_azimuth,
module_parameters=cec_module,
inverter_parameters=cec_inverter,
temperature_model_parameters=temperature_model_parameters,
albedo=albedo, surface_type=None, module=None,
module_type='glass_polymer',
modules_per_string=19.5,
strings_per_inverter=8, inverter=None,
racking_model='open_rack',
losses_parameters=None,
name='Name of PV system: Huerto de Cutonalá')
然后实例化一个 ModelChain 类:
mc = ModelChain(system, location, name='Huerto de Cutonalá',
clearsky_model='ineichen', transposition_model='haydavies',
solar_position_method='nrel_numpy', airmass_model='kastenyoung1989',
dc_model=None, #from module specifications
ac_model='sandia', #from inverter specifications
aoi_model='no_loss',
spectral_model='no_loss', #spectral model 'no loss' otherwise error
temperature_model='sapm', losses_model='no_loss')
此时您已经模拟了您的系统,但现在您必须声明您的天气预报模型和时间变量以获得功率输出。
import datetime
#Variables de tiempo
start = pd.Timestamp(datetime.date.today(), tz=tz) # today's date
end = start + pd.Timedelta(days=7) # 7 days from today
导入与预测模型相关的依赖项:
from pvlib import solarposition, irradiance, atmosphere, pvsystem, inverter, temperature, iam
from pvlib.forecast import GFS, NAM, NDFD, RAP, HRRR
# define your forecast model
fm = GFS()
#fm = NAM()
#fm = NDFD()
#fm = RAP()
#fm = HRRR()
从预测模型中获取和处理数据:
forecast_data = fm.get_processed_data(latitude, longitude, start, end)
现在这是棘手的部分,为了使用 .run_model 方法,您需要一个带有天气数据的 pandas.DataFrame:
ghi = forecast_data['ghi']
dni = forecast_data['dni']
dhi = forecast_data['dhi']
temp_air = forecast_data['temp_air']
wind_speed = forecast_data['wind_speed']
indexDF = forecast_data.index
weather = pd.DataFrame([dni, ghi, dhi, temp_air, wind_speed]).T
您应该使用 .T 方法,以便根据 .run_model 方法中所需的天气参数转置数据
现在使用带有天气数据框的 .run_model 方法作为参数:
mc.run_model(weather)
那么您现在可以为您的模型链实例使用 .ac、.dc 和其他一些方法:
mc.ac
mc.effective_irradiance
mc.airmass
mc.cell_temperature