Compute every step from solar angles to effective irradiance to calculate the performance of a grid connected PV system.
prodGCPV(lat,
modeTrk = 'fixed',
modeRad = 'prom',
dataRad,
sample = 'hour',
keep.night = TRUE,
sunGeometry = 'michalsky',
corr, f,
betaLim = 90, beta = abs(lat)-10, alfa = 0,
iS = 2, alb = 0.2, horizBright = TRUE, HCPV = FALSE,
module = list(),
generator = list(),
inverter = list(),
effSys = list(),
modeShd = '',
struct = list(),
distances = data.frame(),
...)
A ProdGCPV
object.
numeric, latitude (degrees) of the point of the Earth where calculations are needed. It is positive for locations above the Equator.
A character string, describing the tracking method
of the generator. See calcGef
for details.
Information about the source data of the
global irradiation. See calcG0
for details.
See calcSol
for details.
character
, method for the sun geometry
calculations. See calcSol
, fSolD
and fSolI
.
See calcG0
for details.
See calcGef
for details.
list of numeric values with information about the PV module,
Vocn
open-circuit voltage of the module at Standard Test Conditions (default value 57.6 volts.)
Iscn
short circuit current of the module at Standard Test Conditions (default value 4.7 amperes.)
Vmn
maximum power point voltage of the module at Standard Test Conditions (default value 46.08 amperes.)
Imn
Maximum power current of the module at Standard Test Conditions (default value 4.35 amperes.)
Ncs
number of cells in series inside the module (default value 96)
Ncp
number of cells in parallel inside the module (default value 1)
CoefVT
coefficient of decrement of voltage of each cell with the temperature (default value 0.0023 volts per celsius degree)
TONC
nominal operational cell temperature, celsius degree (default value 47).
list of numeric values with information about the generator,
Nms
number of modules in series (default value 12)
Nmp
number of modules in parallel (default value 11)
list of numeric values with information about the DC/AC inverter,
Ki
vector of three values, coefficients of the efficiency curve of the inverter (default c(0.01, 0.025, 0.05)), or a matrix of nine values (3x3) if there is dependence with the voltage (see references).
Pinv
nominal inverter power (W) (default value 25000 watts.)
Vmin, Vmax
minimum and maximum voltages of the MPP range of the inverter (default values 420 and 750 volts)
Gumb
minimum irradiance for the inverter to start (W/m²) (default value 20 W/m²)
list of numeric values with information about the system losses,
ModQual
average tolerance of the set of modules (%), default value is 3
ModDisp
module parameter disperssion losses (%), default value is 2
OhmDC
Joule losses due to the DC wiring (%), default value is 1.5
OhmAC
Joule losses due to the AC wiring (%), default value is 1.5
MPP
average error of the MPP algorithm of the inverter (%), default value is 1
TrafoMT
losses due to the MT transformer (%), default value is 1
Disp
losses due to stops of the system (%), default value is 0.5
See calcShd
for
details.
Additional arguments for calcG0
or calcGef
Oscar Perpiñán Lamigueiro
The calculation of the irradiance on the horizontal plane is
carried out with the function calcG0
. The transformation
to the inclined surface makes use of the fTheta
and
fInclin
functions inside the calcGef
function. The shadows are computed with calcShd
while the performance of the PV system is simulated with fProd
.
Perpiñán, O, Energía Solar Fotovoltaica, 2015. (https://oscarperpinan.github.io/esf/)
Perpiñán, O. (2012), "solaR: Solar Radiation and Photovoltaic Systems with R", Journal of Statistical Software, 50(9), 1-32, tools:::Rd_expr_doi("10.18637/jss.v050.i09")
fProd
,
calcGef
,
calcShd
,
calcG0
,
compare
,
compareLosses
,
mergesolaR
library(lattice)
library(latticeExtra)
lat <- 37.2;
G0dm <- c(2766, 3491, 4494, 5912, 6989, 7742, 7919, 7027, 5369, 3562,
2814, 2179)
Ta <- c(10, 14.1, 15.6, 17.2, 19.3, 21.2, 28.4, 29.9, 24.3, 18.2,
17.2, 15.2)
prom <- list(G0dm = G0dm, Ta = Ta)
###Comparison of different tracker methods
prodFixed <- prodGCPV(lat = lat, dataRad = prom,
keep.night = FALSE)
prod2x <- prodGCPV(lat = lat, dataRad = prom,
modeTrk = 'two',
keep.night = FALSE)
prodHoriz <- prodGCPV(lat = lat,dataRad = prom,
modeTrk = 'horiz',
keep.night = FALSE)
##Comparison of yearly productivities
compare(prodFixed, prod2x, prodHoriz)
compareLosses(prodFixed, prod2x, prodHoriz)
##Comparison of power time series
ComparePac <- CBIND(two = as.zooI(prod2x)$Pac,
horiz = as.zooI(prodHoriz)$Pac,
fixed = as.zooI(prodFixed)$Pac)
AngSol <- as.zooI(as(prodFixed, 'Sol'))
ComparePac <- CBIND(AngSol, ComparePac)
mon <- month(index(ComparePac))
xyplot(two + horiz + fixed ~ AzS|mon, data = ComparePac,
type = 'l',
auto.key = list(space = 'right',
lines = TRUE,
points = FALSE),
ylab = 'Pac')
if (FALSE) {
###Use of modeRad = 'aguiar' and modeRad = 'prev'
prodAguiarFixed <- prodGCPV(lat = lat,
modeRad = 'aguiar',
dataRad = G0dm,
keep.night = FALSE)
##We want to compare systems with different effective irradiance
##so we have to convert prodAguiarFixed to a 'G0' object.
G0Aguiar <- as(prodAguiarFixed, 'G0')
prodAguiar2x <- prodGCPV(lat = lat,
modeTrk = 'two',
modeRad = 'prev',
dataRad = G0Aguiar)
prodAguiarHoriz <- prodGCPV(lat = lat,
modeTrk = 'horiz',
modeRad = 'prev',
dataRad = G0Aguiar)
##Comparison of yearly values
compare(prodAguiarFixed,
prodAguiar2x,
prodAguiarHoriz)
compareLosses(prodAguiarFixed,
prodAguiar2x,
prodAguiarHoriz)
##Compare of daily productivities of each tracking system
compareYf <- mergesolaR(prodAguiarFixed,
prodAguiar2x,
prodAguiarHoriz)
xyplot(compareYf, superpose = TRUE,
ylab = 'kWh/kWp',
main = 'Daily productivity',
auto.key = list(space = 'right'))
}
###Shadows
#Two-axis trackers
struct2x <- list(W = 23.11, L = 9.8, Nrow = 2, Ncol = 8)
dist2x <- data.frame(Lew = 40, Lns = 30, H = 0)
prod2xShd <- prodGCPV(lat = lat, dataRad = prom,
modeTrk = 'two',
modeShd = 'area',
struct = struct2x,
distances = dist2x)
print(prod2xShd)
#Horizontal N-S tracker
structHoriz <- list(L = 4.83);
distHoriz <- data.frame(Lew = structHoriz$L*4);
#Without Backtracking
prodHorizShd <- prodGCPV(lat = lat, dataRad = prom,
sample = '10 min',
modeTrk = 'horiz',
modeShd = 'area', betaLim = 60,
distances = distHoriz,
struct = structHoriz)
print(prodHorizShd)
xyplot(r2d(Beta)~r2d(w),
data = prodHorizShd,
type = 'l',
main = 'Inclination angle of a horizontal axis tracker',
xlab = expression(omega (degrees)),
ylab = expression(beta (degrees)))
#With Backtracking
prodHorizBT <- prodGCPV(lat = lat, dataRad = prom,
sample = '10 min',
modeTrk = 'horiz',
modeShd = 'bt', betaLim = 60,
distances = distHoriz,
struct = structHoriz)
print(prodHorizBT)
xyplot(r2d(Beta)~r2d(w),
data = prodHorizBT,
type = 'l',
main = 'Inclination angle of a horizontal axis tracker\n with backtracking',
xlab = expression(omega (degrees)),
ylab = expression(beta (degrees)))
compare(prodFixed, prod2x, prodHoriz, prod2xShd,
prodHorizShd, prodHorizBT)
compareLosses(prodFixed, prod2x, prodHoriz, prod2xShd,
prodHorizShd, prodHorizBT)
compareYf2 <- mergesolaR(prodFixed, prod2x, prodHoriz, prod2xShd,
prodHorizShd, prodHorizBT)
xyplot(compareYf2, superpose = TRUE,
ylab = 'kWh/kWp', main = 'Daily productivity',
auto.key = list(space = 'right'))
Run the code above in your browser using DataLab