1. 太陽輻照量模擬
pysolar是一個用于計算太陽位置和輻照量的Python庫。它是基于python語言編寫的,可以方便地在各種python項目中使用。pysolar主要用于計算太陽的位置、太陽高度角、太陽方位角、日出和日落時間等信息。這些信息可以用于太陽能電池板和太陽能集熱器等應用的設(shè)計和優(yōu)化。
Pysolar模擬始自2007年以來得太陽,根據(jù)Bretagnon’s VSOP 87理論計算太陽的位置。pysolar包含了許多太陽幾何和輻射計算方法的實現(xiàn),例如:太陽方位角(指的是羅盤方位,相對于物理的北而言)和海拔高度角的計算、地球磁場和大氣層對太陽輻射的影響等。它還提供了一些實用的功能,例如:在給定經(jīng)緯度和時間的情況下,可以計算出太陽高度角、方位角、日出和日落時間等信息。
Pysolar的參考框架如上圖所示。地平線定義為海拔高度為零。當太陽在地平線上時,高度為正。方位角向北定義為零。正方位定義為北部以東的估計值;負估計或大于180的估計位于北部以西。在北半球,如果我們從(海拔、方位)的角度來看,太陽在(0,90)左右升起,在中午左右到達(70,180),在(0,270)左右落下。
pysolar非常容易使用,可以使用pip命令來安裝:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pysolar
pip install pysolar
安裝完成后,可以在Python腳本中使用pysolar.solar模塊進行計算。以下是一個使用pysolar計算太陽高度角和方位角的示例代碼:
from pysolar.solar import get_altitude, get_azimuth
import datetime
import pytz
# 設(shè)置經(jīng)緯度和時區(qū)
lat = 39.9
lon = 116.4
tz = pytz.timezone('Asia/Shanghai')
# 獲取當前時間和太陽高度角、方位角
dt = datetime.datetime.now(tz)
altitude = get_altitude(lat, lon, dt)
azimuth = get_azimuth(lat, lon, dt)
# 輸出結(jié)果
print("當前時間: ", dt)
print("太陽高度角: ", altitude)
print("太陽方位角: ", azimuth)
2. 光伏發(fā)電系統(tǒng)模擬
典型的太陽能光伏發(fā)電系統(tǒng)由太陽能電池陣列(組件)、電纜、電力電子變換器(逆變器)、儲能裝置(蓄電池)、負載即用戶等構(gòu)成,如下所示。其中,太陽能電池陣列和儲能裝置為電源系統(tǒng),控制器和電力電子變換器為控制保護系統(tǒng),負載為系統(tǒng)終端。
pvlib-python是一個Python庫,用于光伏系統(tǒng)性能建模和分析。它提供了光伏系統(tǒng)設(shè)計和性能評估所需的工具,包括太陽輻照度計算、光伏組件和系統(tǒng)性能模擬、光伏系統(tǒng)建模、陰影分析等等。pvlib是一個開源項目,由Solar Energy Technologies Office(SETO)資助開發(fā)。
pvlib的主要特點包括:
- 多種太陽輻照度模型,可以計算全天的太陽輻照度、太陽位置、天空散射輻射等信息。
- 多種光伏模型,包括標準模型、光譜模型和機器學習模型。
- 多種組件模型,包括單晶硅、多晶硅、CdTe等各種類型的光伏組件模型。
- 多種系統(tǒng)模型,包括集中式光伏電站、分布式光伏電站等。
- 多種工具和功能,如陰影分析、功率曲線繪制等。
pvlib的使用非常廣泛,在學術(shù)界和工業(yè)界都有很多應用。它提供了方便快捷的工具,可以幫助工程師和科學家更好地理解和優(yōu)化光伏系統(tǒng)的性能。
安裝:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pvlib
2.1. 光伏發(fā)電系統(tǒng)模擬實現(xiàn)過程
2.2. 主要模塊介紹
2.2.1. PVSystem
PVSystem是一個表示光伏系統(tǒng)的模塊(類),它可以用來計算光伏系統(tǒng)的電量輸出。PVSystem包括一些屬性,例如組件、逆變器、陣列等,這些屬性可以用來描述光伏系統(tǒng)的各個組成部分。
在PVSystem類中,有一些方法可以用來計算光伏系統(tǒng)的電量輸出。例如,可以使用PVSystem.get_irradiance()方法計算光伏系統(tǒng)的輻照度,使用PVSystem.sapm()方法計算光伏系統(tǒng)的電池板電壓和電流,使用PVSystem.snlinverter()方法計算光伏系統(tǒng)的逆變器輸出功率等。
PVSystem類還可以與其他pvlib模塊結(jié)合使用,例如Location、ModelChain等模塊。使用PVSystem可以方便地模擬光伏系統(tǒng)的性能表現(xiàn),為光伏系統(tǒng)的設(shè)計和優(yōu)化提供有力的支持。
2.2.2. ModelChain
ModelChain是pvlib中的一個類,用于將多個組件(比如光伏組件、逆變器、陣列)組合起來,并計算其整個系統(tǒng)的性能。
ModelChain的構(gòu)建是基于PVSystem的實例,即需要先定義一個PVSystem對象,然后將其傳遞給ModelChain類的構(gòu)造函數(shù),用于指定模擬的光伏系統(tǒng)。
ModelChain提供了一個run_model()方法,該方法接受一個時間序列作為輸入,并計算在該時間段內(nèi)系統(tǒng)的性能。具體而言,ModelChain會將該時間段拆分成多個時間步驟,并對每個時間步驟執(zhí)行以下步驟:
使用Location對象和時間計算大氣輻射(如GHI、DNI、DHI),使用PVSystem對象計算總輻照度(POA)
- 使用PVSystem對象計算太陽能電池板的輸出功率
- 使用PVSystem對象計算逆變器的輸入功率和輸出功率
- 使用PVSystem對象計算電池組的輸入功率和輸出功率
返回結(jié)果,包括各個組件的性能參數(shù),如輻射度、電池板輸出功率、逆變器輸入功率和輸出功率等。
通過ModelChain,可以方便地對光伏系統(tǒng)進行建模和仿真,并分析各個組件的性能,以及整個系統(tǒng)的性能表現(xiàn)。
PVLib庫中的ModelChain可以集成天氣預測數(shù)據(jù)。在ModelChain中,可以使用一系列模塊來計算光伏電池組的電量輸出,其中包括天氣預測模塊。具體來說,可以使用GFS和NAM模塊將天氣數(shù)據(jù)引入ModelChain中,然后使用其他模塊計算電量輸出。
GFS是全球預報系統(tǒng),它可以提供全球的天氣預測數(shù)據(jù)。而NAM是北美預報模型,它提供了更細致的天氣預測數(shù)據(jù),針對北美地區(qū)。這些模塊可以將氣象數(shù)據(jù)導入ModelChain中,以進行更準確的光伏電量預測。
需要注意的是,使用天氣預測數(shù)據(jù)進行光伏電量預測需要對天氣數(shù)據(jù)的準確性有一定的了解和評估。此外,不同的天氣預測模塊和數(shù)據(jù)源可能會導致不同的預測結(jié)果。因此,需要根據(jù)具體情況進行選擇和評估。
2.2.3. Bifacial modeling
在pvlib中,Bifacial modeling(雙面組件建模)指的是在模擬光伏發(fā)電時考慮雙面組件在正面和背面同時受到太陽輻射的情況。
pvlib中的Bifacial模型主要包括兩個模塊:BifacialGroundDiffuse和BifacialAOI。BifacialGroundDiffuse模塊用于計算反射地面散射輻射的分布,可以為雙面組件建模計算分布在組件背面的反射輻射量。BifacialAOI模塊則用于計算太陽角度對雙面組件背面散射光的影響,包括反射、折射和透射的效果。
通過使用Bifacial modeling,可以更準確地模擬雙面組件的發(fā)電能力,并幫助預測背面反射的光線,以提高系統(tǒng)的發(fā)電量。
2.2.4. Forecasting
pvlib中的Forecasting模塊提供了天氣預報數(shù)據(jù)的獲取和處理功能。它包括以下功能:
獲取天氣預報數(shù)據(jù):可以通過指定時間范圍和地理位置,獲取各種天氣變量的預報數(shù)據(jù),如溫度、風速、云量等。
處理天氣預報數(shù)據(jù):可以將獲取到的天氣預報數(shù)據(jù)處理成pvlib中常用的數(shù)據(jù)結(jié)構(gòu),如時間序列數(shù)據(jù)和DataFrame數(shù)據(jù)。
預測光伏發(fā)電量:可以基于獲取到的天氣預報數(shù)據(jù),預測未來光伏發(fā)電量的變化趨勢。
在使用Forecasting模塊之前,需要先安裝好相關(guān)的天氣預報數(shù)據(jù)源,如NOAA等。同時,需要注意的是,天氣預報數(shù)據(jù)存在一定的不確定性,因此預測結(jié)果可能會存在一定的誤差。
2.3. 示例
2.3.1. 生成晴朗天空GHI和POA輻照度的示例
以哈爾濱地區(qū)為例,輸入維度、經(jīng)度,太陽板陣列仰角25,方位角180,則夏至、冬至輻照度計算過程如下。
from pvlib import location
from pvlib import irradiance
import pandas as pd
from matplotlib import pyplot as plt
tz='Asia/Shanghai'
# 哈爾濱地區(qū)緯度、經(jīng)度
lat, lon = 45.739, 120.683
# 創(chuàng)建本地對象,存儲維度、經(jīng)度、時區(qū)
site = location.Location(lat, lon, tz=tz)
# 計算晴天的GHI并將其轉(zhuǎn)換到陣列的平面
# 定義函數(shù),獲取某個地方的輻照度(理論標準輻照度)
def get_irradiance(site_location, date, tilt, surface_azimuth):
# 創(chuàng)建一天間隔10分鐘的時間序列
times = pd.date_range(date, freq='10min', periods=6*24,tz=site_location.tz)
#使用默認的內(nèi)部模型生成晴天數(shù)據(jù)
#get_ clearsky方法返回具有GHI、DNI和DHI值的數(shù)據(jù)表
clearsky = site_location.get_clearsky(times)
# 獲取太陽方位角和天空頂點以傳遞到函數(shù)
solar_position = site_location.get_solarposition(times=times)
# 使用get_total_iradiance函數(shù)將GHI轉(zhuǎn)換為POA
POA_irradiance = irradiance.get_total_irradiance(
surface_tilt=tilt,
surface_azimuth=surface_azimuth,
dni=clearsky['dni'],
ghi=clearsky['ghi'],
dhi=clearsky['dhi'],
solar_zenith=solar_position['apparent_zenith'],
solar_azimuth=solar_position['azimuth'])
return pd.DataFrame({'GHI': clearsky['ghi'],'POA': POA_irradiance['poa_global']})
#獲取夏至和冬至的輻照度數(shù)據(jù),假設(shè)傾斜25度,和朝南的陣列
summer_irradiance = get_irradiance(site, '06-21-2022', 25, 180)
winter_irradiance = get_irradiance(site, '12-22-2022', 25, 180)
# 轉(zhuǎn)換時間序列為小時:分鐘,方便繪圖
summer_irradiance.index = summer_irradiance.index.strftime("%H:%M")
winter_irradiance.index = winter_irradiance.index.strftime("%H:%M")
plt.rcParams['figure.figsize']= 12,4
plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文標簽
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({"font.size":11})
# 畫夏季和冬季的 GHI POA
fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
summer_irradiance['GHI'].plot(ax=ax1, label='GHI')
summer_irradiance['POA'].plot(ax=ax1, label='POA')
winter_irradiance['GHI'].plot(ax=ax2, label='GHI')
winter_irradiance['POA'].plot(ax=ax2, label='POA')
ax1.set_xlabel('日時間序列 (夏季)')
ax2.set_xlabel('日時間序列 (冬季)')
ax1.set_ylabel('輻照度 ($W/m^2$)')
ax1.legend()
ax2.legend()
plt.show()
2.3.2. 一個簡單的ModelChain示例
官方文檔中的一個完整的示例,拿到了一組光伏模塊和逆變器數(shù)據(jù),并虛擬了溫度數(shù)據(jù),通過模型計算,得到了在該位置上的運算結(jié)果。
ModelChain有三個組成部分:
- PVSystem對象,表示模塊和逆變器的集合
- Location對象,表示地球上的位置
- 指定PV建模過程中每個步驟要使用的模型的屬性值。
import pandas as pd
import numpy as np
import pvlib
from pvlib.pvsystem import PVSystem, FixedMount
from pvlib.location import Location
from pvlib.modelchain import ModelChain
from pvlib.temperature import TEMPERATURE_MODEL_PARAMETERS
# sapm,Sandia Array Performance Model,一種用于預測溫度的模型,對應有不同的參數(shù)可以選擇
temperature_model_parameters = TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_glass']
# 從SAM網(wǎng)站上獲取SandiaMod光伏模塊的配置
sandia_modules = pvlib.pvsystem.retrieve_sam('SandiaMod')
# 從SAM網(wǎng)站上獲取cec逆變器的配置
cec_inverters = pvlib.pvsystem.retrieve_sam('cecinverter')
# 選擇一個光伏模塊及一個逆變器的數(shù)據(jù)
sandia_module = sandia_modules['Canadian_Solar_CS5P_220M___2009_']
cec_inverter = cec_inverters['ABB__MICRO_0_25_I_OUTD_US_208__208V_']
# 設(shè)置位置信息
location = Location(latitude=32.2, longitude=-110.9)
# 實例化一個PVSystem對象
system = PVSystem(surface_tilt=20, surface_azimuth=200,
module_parameters=sandia_module,
inverter_parameters=cec_inverter,
temperature_model_parameters=temperature_model_parameters)
# 實例化一個ModelChain對象
mc = ModelChain(system, location)
# 虛擬一些天氣數(shù)據(jù)
weather = pd.DataFrame([[1050, 1000, 100, 30, 5]],
columns=['ghi', 'dni', 'dhi', 'temp_air', 'wind_speed'],
index=[pd.Timestamp('20170401 1200', tz='US/Arizona')])
# 運行模型
mc.run_model(weather)
# 獲取相關(guān)結(jié)果
print(mc.results.aoi) # 入射角
print(mc.results.cell_temperature) # 電池溫度
print(mc.results.dc) # 直流電功率
print(mc.results.ac) # 交流電功率
2.4. 關(guān)鍵術(shù)語
2.4.1. 輻射基本專業(yè)術(shù)語
DNI: Direct Normal Irradiance 陽光從太陽盤面直接照射到與光路正交的表面,稱作直接輻射簡寫為 DNI。
DHI: Diffuse Horizontal Irradiance 在大氣中散射的直接到達地面的陽光稱為散射輻射。散射輻射的標準測量在水平面上進行,這個測量叫做散射水平輻射,或者簡化為“散射”簡寫為 DHI。
GHI:Global Horizontal Irradiance 太陽的 DHI和 DNI到達水平表面稱為總水平輻射,通常簡稱為總輻射,簡寫為 GHI。
Solar Zenith Angle: 太陽天頂角 (與太陽高度角之和為90度,互余關(guān)系)解釋為一束光線從太陽到達地面一點形成的光線與此點垂直于地面的直線夾角;所以在日出和日落時天頂角為 90度(太陽高度角為0),沒有直射輻射到達水平面。
三個輻射參數(shù)之間的關(guān)系:
GHI = DHI + (cosθ x DNI)
- θ = Solar Zenith Angle(太陽天頂角)
- 0°is vertical
- 90°is horizontal
氣團:氣團是指氣象要素(主要指溫度和濕度)水平分布比較均勻并具有一定垂直穩(wěn)定度的較大空氣團。在同一氣團中,各地氣象要素的重點分布幾乎相同,天氣現(xiàn)象也大致一樣。氣團的水平范圍可達幾千公里,垂直高度可達幾公里到十幾公里,常常從地面伸展到對流層頂。
氣團的分類方法主要有三種,一種是按氣團的熱力性質(zhì)不同,劃分為冷氣團和暖氣團;第二種是按氣團的濕度特征的差異,劃分為干氣團和濕氣團,第三種是按氣團的發(fā)源地,常分為北冰洋氣團、極地氣團,熱帶氣團、赤道氣團。
2.4.2. GHI 和 POA
GHI 和 POA 都是太陽輻射的度量單位,但它們有不同的含義:
- GHI(Global Horizontal Irradiance):全水平輻照度,是指垂直于地球表面的平面上所接收到的來自太陽的輻射總量,包括直射輻射和散射輻射,單位通常是 W/m2。
- POA(Plane of Array Irradiance):組件平面輻照度,是指垂直于光伏組件表面的平面上所接收到的來自太陽的輻射總量,也包括直射輻射和散射輻射,單位通常是 W/m2。
通俗地說,GHI 是地面上接收到的總輻射量,而 POA 是太陽能電池板上接收到的總輻射量。因此,POA 是在考慮組件傾角、方向和陰影遮擋等因素的基礎(chǔ)上計算的,而 GHI 不考慮這些因素。
3. 光伏發(fā)電預測方案
對于光伏發(fā)電預測,可以利用pvlib進行建模和預測。下面給出一個基本的預測方案:
-
獲取天氣預報數(shù)據(jù)
可以從氣象局獲取當?shù)匚磥韼滋斓奶鞖忸A報數(shù)據(jù),包括氣溫、風速、濕度、降水等信息。 -
計算理論太陽輻照度
根據(jù)地理位置、日期、時間、太陽高度角等信息,利用pvlib中的函數(shù)計算出理論太陽輻照度。 -
計算實際POA
根據(jù)天氣預報中的氣溫、風速、濕度等信息,結(jié)合理論太陽輻照度,利用pvlib中的函數(shù)計算出實際的POA。 -
建立光伏發(fā)電量預測模型
利用歷史數(shù)據(jù)和當前實際POA值,建立光伏發(fā)電量預測模型,可以選擇不同的模型,如物理模型或者基于機器學習的模型。在pvlib中,可以使用ModelChain進行建模和預測。 -
進行光伏發(fā)電量預測
利用模型對未來幾天的光伏發(fā)電量進行預測,得到預測結(jié)果。
參考:文章來源:http://www.zghlxwxcb.cn/news/detail-403277.html
芳樽里的歌. 從pvlib入門光伏發(fā)電系統(tǒng). CSDN博客. 2022.04
https://github.com/pvlib/pvlib-python
https://pvlib-python.readthedocs.io/en/stable/user_guide/pvsystem.html
https://github.com/pingswept/pysolar
https://pysolar.readthedocs.io/en/latest/#source-code-repository文章來源地址http://www.zghlxwxcb.cn/news/detail-403277.html
到了這里,關(guān)于光伏發(fā)電系統(tǒng)模擬及其發(fā)電預測開源python工具pvlib的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!