基于ERA5卫星GHI数据计算跟踪式组件表面辐照度的方法咨询
跟踪式光伏组件表面辐照度计算(基于ERA5 GHI数据)
要计算跟踪式光伏组件表面的辐照度,核心是先从ERA5的水平面总辐照度(GHI)分解出关键分量,再结合跟踪系统的类型计算入射辐照度,以下是关键步骤和对应的计算函数/方法:
1. 从GHI分解直射(DNI)和散射(DHI)分量
ERA5通常仅提供GHI,需先分解为直射法向辐照度(DNI)和水平面散射辐照度(DHI),常用Erbs模型,对应的计算逻辑可封装为函数:
def erbs_decompose(GHI, solar_zenith, datetime): # 输入:GHI(水平面总辐照度)、太阳天顶角、时间 # 输出:DNI、DHI zenith_rad = np.radians(solar_zenith) extraterrestrial = pvlib.irradiance.get_extra_radiation(datetime) kt = GHI / (extraterrestrial * np.cos(zenith_rad)) if kt <= 0.22: DHI = GHI * (1 - 0.09 * kt) elif kt <= 0.8: DHI = GHI * (0.9511 - 0.1604*kt + 4.388*kt**2 - 16.638*kt**3 + 12.336*kt**4) else: DHI = GHI * 0.165 DNI = (GHI - DHI) / np.cos(zenith_rad) if np.cos(zenith_rad) > 0 else 0 return DNI, DHI
2. 计算太阳位置参数
需要太阳高度角、方位角来确定跟踪系统的角度,常用SPA(太阳位置算法),可直接调用成熟函数:
- Python
pvlib.solarposition.get_solarposition():输入经纬度、时间,输出太阳天顶角、方位角等参数 - 自行实现SPA核心逻辑:基于日期、经纬度计算太阳赤纬、时角等,进而推导位置参数
3. 跟踪式表面辐照度计算
根据跟踪系统类型选择对应方法:
单轴跟踪(南北轴,东西方向转动)
计算跟踪表面的入射角,再结合各辐照度分量计算总入射辐照度,常用函数逻辑:
def single_axis_irradiance(DNI, DHI, GHI, solar_zenith, solar_azimuth, axis_tilt=0, axis_azimuth=180): # 输入:DNI、DHI、GHI、太阳天顶角/方位角、跟踪轴倾角/方位角(南北轴默认方位角180°) # 输出:跟踪表面总辐照度 tracker_angles = pvlib.tracking.singleaxis(solar_zenith, solar_azimuth, axis_tilt, axis_azimuth) surface_tilt = tracker_angles['surface_tilt'] surface_azimuth = tracker_angles['surface_azimuth'] # 直射分量 dni_irrad = pvlib.irradiance.dni(dni=DNI, solar_zenith=solar_zenith, surface_tilt=surface_tilt, surface_azimuth=surface_azimuth, solar_azimuth=solar_azimuth) # 散射分量(Hay模型) dhi_irrad = pvlib.irradiance.haydavies(dhi=DHI, solar_zenith=solar_zenith, surface_tilt=surface_tilt, surface_azimuth=surface_azimuth, solar_azimuth=solar_azimuth) # 地面反射分量(默认反照率0.2) albedo_irrad = pvlib.irradiance.albedo(ghi=GHI, surface_tilt=surface_tilt, albedo=0.2) return dni_irrad + dhi_irrad + albedo_irrad
双轴跟踪(始终正对太阳)
此时表面与太阳光线垂直,入射角为0,直射分量直接取DNI,散射分量用Klucher模型计算:
def double_axis_irradiance(DNI, DHI, GHI, solar_zenith, solar_azimuth): # 双轴跟踪时表面始终垂直太阳,动态调整表面倾角/方位角 surface_tilt = 90 - solar_zenith surface_azimuth = solar_azimuth # 直射分量 dni_irrad = DNI # 散射分量(Klucher模型) dhi_irrad = pvlib.irradiance.klucher(dhi=DHI, solar_zenith=solar_zenith, surface_tilt=surface_tilt, surface_azimuth=surface_azimuth, solar_azimuth=solar_azimuth) # 地面反射分量 albedo_irrad = pvlib.irradiance.albedo(ghi=GHI, surface_tilt=surface_tilt, albedo=0.2) return dni_irrad + dhi_irrad + albedo_irrad
注意事项
- ERA5的GHI为小时均值,计算时需用对应时段的平均太阳位置,或逐分钟插值提升精度
- 若ERA5提供DNI/DHI的再分析数据,可直接使用,无需分解
内容的提问来源于stack exchange,提问作者Ignpl
相关产品推荐
相关产品推荐

