PVLIB: Как добавить спецификации модуля и преобразователя, которых нет в библиотеке CE C и SAM? - PullRequest
0 голосов
/ 13 января 2020

Я работаю над фотоэлектрической системой, установленной в Амстердаме. Код PVsystem выглядит следующим образом. Я получаю хорошие результаты с инвертором и модулями, указанными в коде, который получается с retrieve_sam.

import pvlib
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pvlib.temperature import TEMPERATURE_MODEL_PARAMETERS
from pandas.plotting import register_matplotlib_converters
from pvlib.modelchain import ModelChain

# Define location for the Netherlands
location = pvlib.location.Location(latitude=52.53, longitude=5.15, tz='UTC', altitude=50, name='amsterdam')

#import the database
module_database = pvlib.pvsystem.retrieve_sam(name='SandiaMod')
inverter_database = pvlib.pvsystem.retrieve_sam(name='cecinverter')

module = module_database.Canadian_Solar_CS5P_220M___2009_
# module = module_database.DMEGC_Solar_320_M6_120BB_ (I want to add this module)
inverter = inverter_database.ABB__PVI_3_0_OUTD_S_US__208V_

temperature_model_parameters = pvlib.temperature.TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_glass']

modules_per_string = 10
inverter_per_string = 1

# Define a PV system characteristics
surface_tilt = 12.5
surface_azimuth = 180
system = pvlib.pvsystem.PVSystem(surface_tilt=surface_tilt, surface_azimuth=surface_azimuth, albedo=0.25,
                                 module=module, module_parameters=module,
                                 temperature_model_parameters=temperature_model_parameters,
                                 modules_per_string=modules_per_string, inverter_per_string=inverter_per_string,
                                 inverter=inverter, inverter_parameters=inverter, racking_model='open_rack')


# Define a weather file
def importPSMData():
    df = pd.read_csv('/Users/laxmikantradkar/Desktop/PVLIB/solcast_data1.csv', delimiter=';')

    # Rename the columns for input to PVLIB
    df.rename(columns={'Dhi': 'dhi', 'Dni': 'dni', 'Ghi': 'ghi', 'AirTemp': 'temp_air', 'WindSpeed10m': 'wind_speed',
                       }, inplace=True)
    df.rename(columns={'Year': 'year', 'Month': 'month', 'Day': 'day', 'Hour': 'hour',
                       'Minute': 'minute'}, inplace=True)
    df['dt'] = pd.to_datetime(df[['year', 'month', 'day', 'hour', 'minute']])
    df.set_index(df['dt'], inplace=True)


    # Rename data parameters to run to datetime
    # df.rename(columns={'PeriodEnd': 'period_end'}, inplace=True)


    # Drop unnecessary columns
    df = df.drop('PeriodStart', 1)
    df = df.drop('Period', 1)
    df = df.drop('Azimuth', 1)
    df = df.drop('CloudOpacity', 1)
    df = df.drop('DewpointTemp', 1)
    df = df.drop('Ebh', 1)
    df = df.drop('PrecipitableWater', 1)
    df = df.drop('SnowDepth', 1)
    df = df.drop('SurfacePressure', 1)
    df = df.drop('WindDirection10m', 1)
    df = df.drop('Zenith', 1)
    return df


mc = ModelChain(system=system, location=location)
weatherData = importPSMData()
mc.run_model(weather=weatherData)
ac_energy = mc.ac

# ac_energy.to_csv('/Users/laxmikantradkar/Desktop/ac_energy_netherlands.csv')

plt.plot(ac_energy)
plt.show()

Теперь я хочу изменить модуль и инвертор, которых нет в библиотеке. Может кто-нибудь сказать, пожалуйста, как это сделать?

Можно ли получить доступ к библиотеке и вручную добавить строку / столбец преобразователя и модуля? Если да, где находится библиотека?

Это ../Desktop/PVLIB/venv/lib/python3.8/site-packages/pvlib/data/sam-library-sandia-modules-2015-6-30.csv

Когда я изменяю попытку изменить параметры модуля / инвертора по указанному выше пути, я получаю ошибку, как DataFrame' object has no attribute 'Module name'

Я начал работать над PVLIB_ python 2 дня go, так что я новичок в этом языке. Я действительно ценю твою помощь. Не стесняйтесь поправлять меня в любой момент.

1 Ответ

3 голосов
/ 30 января 2020

Я начал работать над PVLIB_ python 2 дня go, поэтому я новичок в этом языке. Я действительно ценю твою помощь. Не стесняйтесь поправлять меня в любой момент.

Добро пожаловать в сообщество! Если вы еще этого не сделали, я советую вам изучить документацию pvlib- python и продолжить изучение основ Python, играя с примерами в документации. Я рекомендую вам ознакомиться с pandas учебными пособиями и любыми другими pandas учебными материалами с высоким рейтингом, которые вы можете найти, чтобы начать работать с наукой о данных в Python.

Когда я изменяю, пытаюсь изменить параметры модуля / инвертора по указанному выше пути, я получаю сообщение об ошибке, поскольку объект DataFrame не имеет атрибута «Имя модуля»

Это потому, что вы запрашиваете столбец в таблица DataFrame, которой там нет. Не беспокойтесь, вы можете сделать свой собственный модуль.

Теперь я хочу изменить модуль и инвертор, которого нет в библиотеке. Может кто-нибудь сказать, пожалуйста, как это сделать? Можно ли получить доступ к библиотеке и вручную добавить строку / столбец преобразователя и модуля? Если да, где находится библиотека?

Нет необходимости менять библиотеку. Вы можете создать модуль самостоятельно, поскольку это Series из библиотеки pandas. Вот пример, показывающий, как вы можете вывести модуль в виде словаря, изменить пару параметров и создать свой собственный модуль.

my_new_module = module.copy() # create your own copy of the module
print("Before:", my_new_module, sep="\n") # show module before
my_new_module["Notes"] = "This is how to change a field in the module. Do this for every field in the module."
my_new_module.name = "DMEGC_Solar_320_M6_120BB_" # rename the Series appropriately
print("\nAfter:", my_new_module, sep="\n") # show module after

Затем вы можете просто вставить «my_new_module» в PVSystem:

system = pvlib.pvsystem.PVSystem(
    surface_tilt=surface_tilt,
    surface_azimuth=surface_azimuth,
    albedo=0.25,
    module=my_new_module, # HERE'S THE NEW MODULE!
    module_parameters=module,
    temperature_model_parameters=temperature_model_parameters,
    modules_per_string=modules_per_string,
    inverter_per_string=inverter_per_string,
    inverter=inverter,
    inverter_parameters=inverter,
    racking_model='open_rack')

Сложной частью здесь являются правильные коэффициенты, которым вы можете доверять. Возможно, вам будет проще использовать module_database = pvlib.pvsystem.retrieve_sam(name='CECMod') и заменить эти параметры, поскольку их легче заменить данными из листа модуля spe c.

Это должно работать одинаково и для инверторов.

...