PVLib中结合地平线计算晴空辐照度及相关建模问题
山区光伏系统辐照度模拟相关问题
我在山区部署了光伏系统,周边高山会遮挡地平线。分别用PVLib、带/不带地平线参数的PVGIS模拟晴空辐照度后,发现二者差异显著,现提出以下问题:
- 调用
Location.get_clearsky()函数时,能否考虑Location的地平线信息? - 若不可行,PVLib中是否有其他方法考虑地平线的影响?
- 若仍不可行,能否仅使用PVGIS输出的带地平线的晴空GHI数据,运行采用pvwatts交直流模型的ModelChain(无DNI和DHI数据)?
附:模拟代码
# Location locationValley = Location(latitude=46.179, longitude=7.602, altitude=1431, tz='Europe/Zurich', name='Valley') # Weather datetime = pd.date_range(start='2022-01-01', end='2022-01-02', freq='5min', tz=locationValley.tz, inclusive='left') csPowerValley = locationValley.get_clearsky(datetime) # ineichen with climatology table by default # ModelChain array1 = Array( mount=FixedMount(surface_tilt=30, surface_azimuth=241, racking_model = 'open_rack'), module_parameters={'pdc0': 55, 'gamma_pdc' : -0.004}, module_type = 'glass_polymer', modules_per_string = 445, # 445 modules for 1 string or 89 modules for 5 strings is the same strings = 1, temperature_model_parameters=pvlib.temperature.TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_polymer'], ) system = PVSystem(arrays=[array1], inverter_parameters={'pdc0': 24475, 'eta_inv_nom': 0.96}) modelChain = ModelChain(system, locationValley, clearsky_model = 'ineichen', aoi_model='no_loss', spectral_model="no_loss") modelChain.run_model(csPowerValley)
问题解答
1. Location.get_clearsky()是否支持地平线信息?
不能。Location.get_clearsky()底层调用的是晴空辐照度模型(默认Ineichen),这类模型计算的是无遮挡条件下的理想晴空辐照度,不会读取或应用Location对象中的地平线遮挡信息。
2. PVLib中考虑地平线影响的替代方法
有两种常用方式:
- 手动计算遮挡后辐照度:先通过
pvlib.solarposition.get_solarposition()计算太阳高度角/方位角,再结合自定义的地平线数据(比如每个方位的遮挡高度角),判断太阳是否被遮挡。对于被遮挡时段,直接将对应的DNI设为0,GHI和DHI则根据遮挡比例做相应扣减。 - 使用
pvlib.irradiance.get_total_irradiance()的horizon_band参数:如果能提供地平线的方位-高度角数据,可以通过该参数在计算斜面辐照度时考虑遮挡。不过需要注意,这个参数主要是过滤掉低于地平线的太阳辐射,需要提前整理好地平线的轮廓数据。
3. 仅用PVGIS的GHI数据运行Pvwatts模型的ModelChain?
可以,但需要注意两点:
- 初始化ModelChain时要指定
irradiance_model='pvwatts',避免ModelChain尝试拆分GHI为DNI和DHI,这样模型会直接用输入的GHI计算直流功率。 - 温度模型需要环境温度数据,如果没有的话,要么用默认值,要么从其他渠道补充,否则会影响功率计算的准确性。
内容的提问来源于stack exchange,提问作者Maxime Charrière
相关产品推荐
相关产品推荐

