硕士论文开发中pvlib/feedinlib报错:'PVSystem'无'racking_model'属性
问题排查:AttributeError: 'PVSystem' object has no attribute 'racking_model'
问题描述
在硕士论文研究中使用pvlib与feedinlib工具时触发错误:AttributeError: 'PVSystem' object has no attribute 'racking_model'。代码参考官方示例编写,查阅pvlib文档确认racking_model是PVSystem的属性且有默认值,排查后发现辐照数据绘制环节运行正常,错误出在计算feedin的步骤。
完整代码
from feedinlib import era5 import cdsapi import matplotlib.pyplot as plt import pvlib from feedinlib import Photovoltaic from feedinlib import get_power_plant_data from shapely.geometry import Point from pvlib import pvsystem # 获取组件数据 module_df = get_power_plant_data(dataset='SandiaMod') # 打印前四个组件 module_df.iloc[:, 1:5] # 获取逆变器数据 inverter_df = get_power_plant_data(dataset='cecinverter') # 打印前四个逆变器 inverter_df.iloc[:, 1:5] system_data = { 'module_name': 'Advent_Solar_Ventura_210___2008_', # 数据库中的组件名称 'inverter_name': 'ABB__MICRO_0_25_I_OUTD_US_208__208V_', # 数据库中的逆变器名称 'azimuth': 180, 'tilt': 30, 'albedo': 0.2, } pv_system = Photovoltaic(**system_data) # 注释内容为直接创建PVSystem的示例代码 latitude = 52.4 longitude = 13.5 # location = Point(longitude,latitude) # 设置起止日期(结束日期包含在数据下载时间段内) start_date, end_date = '2015-01-01', '2015-02-01' # 设置下载变量集 variable = 'pvlib' era5_netcdf_filename = 'ERA5_weather_data.nc' area = [longitude, latitude] # 发电位置 pvlib_df = era5.weather_df_from_era5( era5_netcdf_filename='ERA5_weather_data.nc', lib='pvlib', area=area) # matplotlib inline pvlib_df.loc[:, ['dhi', 'ghi']].plot(title='辐照强度') plt.xlabel('时间') plt.ylabel('辐照强度 $W/m^2$'); feedin = pv_system.feedin( weather=pvlib_df, location=(latitude, longitude)) # matplotlib inline feedin.plot(title='光伏出力') plt.xlabel('时间') plt.ylabel('功率 W');
排查思路与解决方案
1. 版本兼容性问题
feedinlib与pvlib版本不匹配是常见诱因:
- 执行
pip show pvlib feedinlib查看当前版本 - 参考feedinlib官方版本兼容说明,调整至匹配的版本组合(比如feedinlib较新版本可能依赖pvlib>=0.9.0,而旧版pvlib的PVSystem类无
racking_model属性)
2. 手动指定racking_model参数
尝试在system_data中显式添加该参数,使用pvlib默认值:
system_data = { 'module_name': 'Advent_Solar_Ventura_210___2008_', 'inverter_name': 'ABB__MICRO_0_25_I_OUTD_US_208__208V_', 'azimuth': 180, 'tilt': 30, 'albedo': 0.2, 'racking_model': 'open_rack' # pvlib默认值 }
3. 手动初始化PVSystem实例
绕过feedinlib的Photovoltaic封装,直接创建pvlib的PVSystem实例再传入:
# 手动获取组件和逆变器参数 module_params = module_df.loc['Advent_Solar_Ventura_210___2008_'] inverter_params = inverter_df.loc['ABB__MICRO_0_25_I_OUTD_US_208__208V_'] # 创建PVSystem实例 pvlib_system = pvsystem.PVSystem( surface_tilt=30, surface_azimuth=180, module_parameters=module_params, inverter_parameters=inverter_params, albedo=0.2, racking_model='open_rack' ) # 初始化Photovoltaic pv_system = Photovoltaic(pv_system=pvlib_system)
内容的提问来源于stack exchange,提问作者Tycho
相关产品推荐
相关产品推荐

