1

我正在尝试使用“CECMod”模块而不是“SandiaMod”模块来重现代码

因此,我没有实例化sandia_modules = pvlib.pvsystem.retrieve_sam('SandiaMod'),而是执行sandia_modules = pvlib.pvsystem.retrieve_sam('CECMod')。

但是,CECMod DataFrame 的行数比 SandiaMod DataFrame 少。因此,SandiaMod 中的某些行(如 A[0]、A 1、A[2]、A[3]、A[4]、B[0] 等)不会出现在 CECMod 中。不幸的是,这些行用于计算有效辐照度,从而计算我们系统的最终能量输出。由于 CECMod 信息不完整,因此无法计算能量输出。这意味着 CECMod 中的任何模块都不能用于使用这种方法计算系统的能量输出。

有人可以指导我找到一种计算与 CECMod DataFrame 中的模块兼容的能量输出的方法吗?

4

1 回答 1

1

我遇到了同样的问题,我通过以下方式解决了:

导入依赖:

import pandas as pd
import pvlib
from pvlib.pvsystem import PVSystem
from pvlib.location import Location
from pvlib.modelchain import ModelChain
from pvlib.temperature import TEMPERATURE_MODEL_PARAMETERS

使用 Temperature_Model_parameters 以在顶层设置模型。

temperature_model_parameters = TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_glass']

在这里,我为我的系统设置了模块和逆变器,您应该可以根据您的 cec_module 和逆变器进行更改

cec_modules = pvlib.pvsystem.retrieve_sam('CECMod')
cec_inverters = pvlib.pvsystem.retrieve_sam('cecinverter')

cec_module = cec_modules['Canadian_Solar_Inc__CS6X_320P']
cec_inverter = cec_inverters['INGETEAM_POWER_TECHNOLOGY_S_A___Ingecon_Sun_40TL_U_M__480V_']

然后声明你的位置变量

latitude= 20.56
longitude= -103.22
altitude=1544
tz='America/Mexico_City'

实例一个 Location 类:

location = Location(latitude=latitude, longitude=longitude, altitude=altitude, tz=tz)

声明系统配置的变量

surface_tilt = 25
surface_azimuth = 180 # pvlib uses 0=North, 90=East, 180=South, 270=West convention
albedo = 0.2

使用声明的变量实例化 PVSystem 类:

system = PVSystem(surface_tilt=surface_tilt, surface_azimuth=surface_azimuth,
                 module_parameters=cec_module,
                 inverter_parameters=cec_inverter,
                 temperature_model_parameters=temperature_model_parameters,
                 albedo=albedo, surface_type=None, module=None, 
                 module_type='glass_polymer',
                 modules_per_string=19.5, 
                 strings_per_inverter=8, inverter=None, 
                 racking_model='open_rack', 
                 losses_parameters=None, 
                 name='Name of PV system: Huerto de Cutonalá')

然后实例化一个 ModelChain 类:

mc = ModelChain(system, location, name='Huerto de Cutonalá', 
                clearsky_model='ineichen', transposition_model='haydavies', 
                solar_position_method='nrel_numpy', airmass_model='kastenyoung1989',
                dc_model=None, #from module specifications
                ac_model='sandia', #from inverter specifications
                aoi_model='no_loss', 
                spectral_model='no_loss', #spectral model 'no loss' otherwise error
                temperature_model='sapm', losses_model='no_loss')

此时您已经模拟了您的系统,但现在您必须声明您的天气预报模型和时间变量以获得功率输出。

import datetime
#Variables de tiempo

start = pd.Timestamp(datetime.date.today(), tz=tz) # today's date
end = start + pd.Timedelta(days=7) # 7 days from today

导入与预测模型相关的依赖项:

from pvlib import solarposition, irradiance, atmosphere, pvsystem, inverter, temperature, iam
from pvlib.forecast import GFS, NAM, NDFD, RAP, HRRR

# define your forecast model
fm = GFS()
#fm = NAM()
#fm = NDFD()
#fm = RAP()
#fm = HRRR()

从预测模型中获取和处理数据:

forecast_data = fm.get_processed_data(latitude, longitude, start, end)

现在这是棘手的部分,为了使用 .run_model 方法,您需要一个带有天气数据的 pandas.DataFrame:

ghi = forecast_data['ghi']
dni = forecast_data['dni']
dhi = forecast_data['dhi']
temp_air = forecast_data['temp_air']
wind_speed = forecast_data['wind_speed']
indexDF = forecast_data.index

weather = pd.DataFrame([dni, ghi, dhi, temp_air, wind_speed]).T

您应该使用 .T 方法,以便根据 .run_model 方法中所需的天气参数转置数据

现在使用带有天气数据框的 .run_model 方法作为参数:

mc.run_model(weather)

那么您现在可以为您的模型链实例使用 .ac、.dc 和其他一些方法:

mc.ac
mc.effective_irradiance
mc.airmass
mc.cell_temperature
于 2020-12-09T04:11:27.980 回答