PVLIB — мощность постоянного тока от облучения — простой расчет

Уважаемые пользователи pvlib и разработчики.

Я исследователь в области компьютерных наук, не особо разбираюсь в симуляции или моделировании солнечных батарей. Я заинтересован в использовании pvlib, поскольку мы пытаемся смоделировать работу небольшой солнечной панели, используемой для приложений IoT, в частности, характеристики панели следующие: максимальная эффективность 12,8%, Vmp = 5,82 В, размер = 225 × 155 × 17 мм.

Перед использованием pvlib один из моих сотрудников написал код, который вычисляет облучение непосредственно из среднемесячных значений, рассчитанных с помощью PVWatt. Меня это не очень удовлетворило, поэтому мы начинаем использовать pvlib. В старом коде мощность и ток панели рассчитываются как:

Вт = Излучение * Размер панели (м^2) * Эффективность A = Вт / Вмп

Облучение в Мадриде, полученное с помощью PVWatt, и это то, что использовал мой сотрудник: пытаясь понять, вычисляет ли pvlib значения, аналогичные приведенным выше, в среднем за день для каждого месяца. И кривая производства в день. Я написал это, чтобы сравнить pvlib с нашей старой моделью:

import math
import numpy as np
import datetime as dt
import matplotlib.pyplot as plt 
import pandas as pd
import pvlib
from pvlib.location import Location

def irradiance(day,m):
    DIrradiance =(2030.0,2960.0,4290.0,5110.0,5950.0,
                 7090.0,7200.0,6340.0,4870.0,3130.0,2130.0,1700.0)
    madrid = Location(40.42, -3.70, 'Europe/Madrid', 600, 'Madrid')
    times = pd.date_range(start=dt.datetime(2015,m,day,00,00), 
                      end=dt.datetime(2015,m,day,23,59), 
                      freq='60min')
    spaout = pvlib.solarposition.spa_python(times, madrid.latitude, madrid.longitude)
    spaout = spaout.assign(cosz=pd.Series(np.cos(np.deg2rad(spaout['zenith']))))
    z = np.array(spaout['cosz'])
    return z.clip(0)*(DIrradiance[m-1])

madrid = Location(40.42, -3.70, 'Europe/Madrid', 600, 'Madrid')
times = pd.date_range(start = dt.datetime(2015,8,15,00,00),
                  end = dt.datetime(2015,8,15,23,59), 
                  freq='60min')

old = irradiance(15,8)              # old model
new = madrid.get_clearsky(times)    # pvlib irradiance 
plt.plot(old,'r-')                  # compare them.
plt.plot(old/6.0,'y-')             # old seems 6 times more..I do not know why
plt.plot(new['ghi'].values,'b-')
plt.show()

Приведенный выше код вычисляет старую освещенность, используя зенитный угол. и вычислить значения ghi с помощью файла clear_sky. Я не понимаю, надо ли значения в ghi тоже умножать на cos зенита или нет. В любом случае, они меньше в 6 раз. В конце я хотел бы получить мощность и ток на выходе панели (постоянный ток) без инвертора, и мы не очень заинтересованы в их точном моделировании, но в по крайней мере, чтобы иметь разумную кривую. Мы можем получить от панели произведенный ампер, и мы хотим сравнить значения из измерений, помещая панель на крышу, со значениями, рассчитанными pvlib.

Любая помощь в этом будет действительно оценена. Спасибо


Извините, меня не очень волнует моя предыдущая модель, так как я хотел бы перенести весь код в pvlib. Я последовал вашему совету и использую irradiance.total_irrad, теперь код выглядит так:

madrid = Location(40.42, -3.70, 'Europe/Madrid', 600, 'Madrid')
times = pd.date_range(start=dt.datetime(2015,1,1,00,00), 
                  end=dt.datetime(2015,1,1,23,59), 
                  freq='60min')
ephem_data = pvlib.solarposition.spa_python(times, madrid.latitude, 
madrid.longitude)
irrad_data = madrid.get_clearsky(times)
AM = atmosphere.relativeairmass(ephem_data['apparent_zenith'])
total = irradiance.total_irrad(40, 180,
        ephem_data['apparent_zenith'], ephem_data['azimuth'],
        dni=irrad_data['dni'], ghi=irrad_data['ghi'],
        dhi=irrad_data['dhi'], airmass=AM,
        surface_type='urban')
poa = total['poa_global'].values

Теперь я знаю освещенность на POA и хочу вычислить выход в амперах: это просто

(poa*PANEL_EFFICIENCY*AREA) / VOLT_OUTPUT   ?

person Antonio Caruso    schedule 06.07.2017    source источник


Ответы (1)


Мне непонятно, как вы пришли к своим значениям для DIrradiance или каковы единицы измерения, поэтому я не могу комментировать расхождения между значениями. Я предполагаю, что это какие-то месячные данные, так как есть 12 значений. Если это так, вам нужно рассчитать ~почасовые данные об освещенности pvlib, а затем интегрировать их для проверки согласованности.

Если ваш модуль будет наклонен, вам нужно будет преобразовать ваши ~часовые значения освещенности GHI, DNI, DHI в освещенность плоскости массива (POA), используя модель транспонирования. irradiance.total_irrad function - самый простой способ сделать это.

Следующие шаги зависят от ВАХ вашего модуля, остальной части схемы и от того, насколько точной должна быть модель.

person Will Holmgren    schedule 06.07.2017
comment
DIrradiance[i] — это среднесуточная освещенность x час для каждого месяца, поэтому она выражается в Втч/м^2 в день. - person Antonio Caruso; 07.07.2017