利用 pvlib-python
计算太阳辐照度需结合地理位置、时间、大气条件等参数,通过内置的辐照度模型(如晴空模型、分解模型等)实现。以下是具体步骤、核心代码及关键参数说明,帮助快速上手:
一、核心原理与前提
pvlib-python
计算太阳辐照度的核心是:
需提前准备的输入参数:
二、完整步骤与代码示例
以下以 “计算某地点某天的逐时太阳辐照度(直射、散射、总辐射)” 为例,分步骤说明:
步骤 1:安装与导入库
python
运行
# 安装pvlib(若未安装)# pip install pvlibimport pvlibimport pandas as pdimport matplotlib.pyplot as plt
步骤 2:设置地理位置与时间
python
运行
# 地理位置:以北京为例(纬度39.9°N,经度116.4°E,海拔50m)latitude = 39.9longitude = 116.4altitude = 50tz = 'Asia/Shanghai' # 时区(关键,避免时间计算错误)# 时间范围:2023年6月21日(夏至),逐时数据start_time = '2023-06-21 00:00:00'end_time = '2023-06-22 00:00:00'times = pd.date_range(start=start_time, end=end_time, freq='H', tz=tz)
步骤 3:计算太阳位置参数
太阳高度角(apparent_elevation
)、方位角(azimuth
)是计算辐照度的基础,需先通过 solarposition.get_solarposition()
获得:
python
运行
# 计算太阳位置(高度角、方位角等)solar_position = pvlib.solarposition.get_solarposition( time=times, latitude=latitude, longitude=longitude, altitude=altitude, method='nrel_numpy' # 推荐NREL模型,精度较高)# 查看结果(部分字段)print(solar_position[['apparent_elevation', 'azimuth']].head())
步骤 4:获取大气参数(可选,提升精度)
大气参数(如气溶胶光学厚度、水汽含量)会影响太阳辐射的衰减,pvlib
可通过 atmosphere
模块估算或手动输入:
python
运行
# 方法1:估算大气参数(基于地理位置和时间)# 计算相对大气质量(airmass):太阳光线穿过大气层的路径长度airmass = pvlib.atmosphere.get_relative_airmass(solar_position['apparent_elevation'])# 计算大气压力(基于海拔)pressure = pvlib.atmosphere.alt2pres(altitude)# 方法2:手动输入关键参数(如需更高精度,可从气象站或卫星数据获取)aod700 = 0.1 # 700nm处气溶胶光学厚度(干净大气约0.05-0.2)water_vapor = 1.5 # 水汽含量(cm,温带地区约1-2)ozone = 0.3 # 臭氧浓度(cm,约0.2-0.4)
步骤 5:选择辐照度模型计算辐照度
pvlib
提供多种模型,常用晴空模型(计算无云时的理论辐照度)和分解模型(从总辐射分解直射 / 散射)。以下以最常用的 ineichen
晴空模型为例:
python
运行
# 用Ineichen晴空模型计算辐照度(需太阳位置、大气参数)clear_sky = pvlib.irradiance.ineichen( apparent_zenith=90 - solar_position['apparent_elevation'], # 视天顶角=90-高度角 airmass=airmass, altitude=altitude, aod700=aod700, water_vapor=water_vapor, ozone=ozone, pressure=pressure)# 结果包含:# dni:直射法向辐照度(W/m²,垂直于太阳光线的平面)# ghi:总水平辐照度(W/m²,水平面上的总辐射,=直射+散射)# dhi:散射水平辐照度(W/m²,天空散射到水平面的辐射)print(clear_sky[['ghi', 'dni', 'dhi']].head())
步骤 6:可视化结果
python
运行
# 逐时辐照度曲线plt.figure(figsize=(12, 6))clear_sky[['ghi', 'dni', 'dhi']].plot()plt.title('2023-06-21 北京太阳辐照度(Ineichen模型)')plt.ylabel('辐照度 (W/m²)')plt.xlabel('时间')plt.grid(True)plt.show()
三、关键模型与参数说明
四、注意事项
通过以上步骤,可快速利用 pvlib-python
计算任意地点、任意时间的太阳辐照度,为光伏电站选址、发电量预估提供核心数据。