使用pvlib绘制光伏AC发电量时出现KeyError: 'precipitable_water'求助
问题:ModelChain运行时出现
KeyError: 'precipitable_water' 我正在用pvlib库完成一个实际光伏装置的学校项目,尝试绘制ModelChain的AC发电量时遇到了如下错误:
import pvlib from pvlib import clearsky, atmosphere, solarposition from pvlib.modelchain import ModelChain from pvlib.location import Location from pvlib.pvsystem import PVSystem, Array, SingleAxisTrackerMount, AbstractMount, FixedMount from pvlib.temperature import TEMPERATURE_MODEL_PARAMETERS location = Location(latitude = 40.30117520975112, longitude = -3.6973221576701967, tz = "Europe/Madrid", altitude = 660, name = 'Ormazabal Getafe') modules = pvlib.pvsystem.retrieve_sam('CECMod') inverters = pvlib.pvsystem.retrieve_sam('CECInverter') module = modules['JA_Solar_JAP72S01_330_SC'] inverter = inverters['SMA_America__STP_33_US_41__480V_'] temp_par = TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_glass'] system = PVSystem(surface_tilt = 19, surface_azimuth = 170, module_parameters = module, inverter_parameters = inverter, temperature_model_parameters = temp_par, modules_per_string = 17, strings_per_inverter = 6) modelchain = ModelChain(system, location, aoi_model = 'physical') times = pd.date_range(start = '2023-06-01', end = '2023-12-15', freq = 'h', tz = location.tz) solar_position = location.get_solarposition(times) clearsky = location.get_clearsky(times) clearsky.plot(figsize = (20, 8)) plt.ylabel('Irradiance $W/m^2$') plt.title('Irradiance in the location') plt.show() modelchain.run_model(clearsky) modelchain.results.ac.plot(figsize = (20, 8)) plt.show()
错误信息:
----> 26 modelchain.run_model(clearsky) KeyError: 'precipitable_water'
原因与解决方法
这个错误是因为你指定了aoi_model='physical'(物理入射角模型),该模型需要**可降水量(precipitable_water)**作为输入参数,但你传入的clearsky数据集里没有这个字段。
有两种解决方式:
方式一:更换AOI模型
如果不需要物理模型的高精度,可以改用不需要额外参数的AOI模型,比如'sapm'或'no_loss'。修改ModelChain的初始化代码:
modelchain = ModelChain(system, location, aoi_model='sapm')
方式二:添加可降水量数据
如果必须使用physical模型,需要计算并添加precipitable_water到输入数据中。可以用pvlib的atmosphere.precipitable_water函数计算,示例代码如下:
# 生成气温序列,这里用20℃作为示例,有实际观测数据的话替换更准确 temp_air = pd.Series(20, index=times) # 计算可降水量 precipitable_water = pvlib.atmosphere.precipitable_water(temp_air, location.altitude) # 将可降水量添加到clearsky数据中 clearsky['precipitable_water'] = precipitable_water
之后再运行modelchain.run_model(clearsky)即可。
内容的提问来源于stack exchange,提问作者Luis Enrique Orozco Villanueva
相关产品推荐
相关产品推荐

