Professional Documents
Culture Documents
Sub Curva_Max_pote_4pts()
If Sheets("HR").Range("E54") = 0 Then
MsgBox ("No se ha cargado ninguna curva")
Exit Sub
End If
If MsgBox("El proceso de interpolaci n demorar unos minutos. Desea continuar? ", vbYesNo, "Advertencia")
= vbYes Then
MsgBox "La interpolaci n iniciar , por favor espere, no cierre Excel ni apague el equipo. "
Else
Exit Sub 'Salida de la macro
End If
Sheets("IngresoDatos").Range("N8").ClearContents
Sheets("IngresoDatos").Range("B19:H23").ClearContents
Sheets("IngresoDatos").Range("A27:O14927").ClearContents
Sheets("HR").Range("L91") = "---"
Sheets("HR").Range("L92") = "---"
Sheets("HR").Range("L93") = "---"
'Datos Curva1
GC1 = Sheets("IngresoDatos").Range("E9") 'Irradiancia 1
T1 = Sheets("IngresoDatos").Range("F9") 'T celda 1
GC1 = correccionIrra(GC1, tipo, T1)
TC1 = Sheets("IngresoDatos").Range("C9") 'T panel 1
Captura1 = Sheets("1").Range("A19:B15000") 'V,I 1
Captura1 = CorrIsc(Captura1)
If curvas = 1 Then
MsgBox ("Solo hay una curva cargada, se graficar y mostrar n los datos obtenidos, la temperatura e irradiancia p
ueden distar de los parametros objetivos")
For m = 1 To 2
For n = 1 To 14900
CurvasIV(n, m) = Captura1(n, m)
Next
Next
For n = 1 To 14900
potencia(n, 1) = CurvasIV(n, 1) * CurvasIV(n, 2)
Next
Voc = Vcorto(CurvasIV)
Pmax(1) = 0
indPmax(1) = 1
For n = 1 To 14900
For n = 1 To 14900
End If
Next
For n = 1 To 14900
Isc(1) = CurvasIV(1, 2)
Sheets("IngresoDatos").Cells(19, 8) = Isc(1)
Sheets("IngresoDatos").Cells(20, 8) = Voc(1)
Sheets("IngresoDatos").Cells(21, 8) = Pmax(1)
Sheets("IngresoDatos").Cells(22, 8) = Vmp(1)
Sheets("IngresoDatos").Cells(23, 8) = Imaxp(1)
Exit Sub
End If
End If
End If
End If
If curvas = 5 Then
UserForm1.Show
ReempCurve = Sheets("IngresoDatos").Range("N8")
Case 2
GC2 = GCAdd
T2 = TAdd
TC2 = TCAdd
For I = 1 To UBound(Captura2, 1)
Captura2(I, 1) = CapturaAdd(I, 1)
Captura2(I, 2) = CapturaAdd(I, 2)
Next
Case 3
GC3 = GCAdd
T3 = TAdd
TC3 = TCAdd
For I = 1 To UBound(Captura3, 1)
Captura3(I, 1) = CapturaAdd(I, 1)
Captura3(I, 2) = CapturaAdd(I, 2)
Next
Case 4
GC4 = GCAdd
T4 = TAdd
TC4 = TCAdd
For I = 1 To UBound(Captura4, 1)
Captura4(I, 1) = CapturaAdd(I, 1)
Captura4(I, 2) = CapturaAdd(I, 2)
Next
Case 5
Case Else
MsgBox ("No seleccion ninguna opci n, vuelva a iniciar la interpolaci n. El programa se cerrar .")
Exit Sub
End Select
End If
curvas = 4
End If
G(1) = GC1
G(2) = GC2
G(3) = GC3
G(4) = GC4
T(1) = TC1
T(2) = TC2
T(3) = TC3
T(4) = TC4
For a = 1 To 14900
CurvasIV(a, 1) = Captura1(a, 1)
CurvasIV(a, 2) = Captura1(a, 2)
Isc(1) = Captura1(1, 2)
If curvas > 1 Then
Isc(2) = Captura2(1, 2)
If curvas > 2 Then
Isc(3) = Captura3(1, 2)
If curvas > 3 Then
Isc(4) = Captura4(1, 2)
End If
End If
End If
For n = 1 To 14900
For m = 1 To 8
CurvasIV(n, m) = CurvasOrdenadas(n, m)
Next m
Next n
For n = 1 To 4
G(n) = CurvasOrdenadas(n, 9)
Isc(n) = CurvasOrdenadas(n, 10)
T(n) = CurvasOrdenadas(n, 11)
LetraAsig(n) = CurvasOrdenadas(n, 12)
Next
Extrapol = CurvasOrdenadas(5, 12)
If Extrapol = 10 Then
Exit Sub
End If
If curvas = 2 Then
N_curva(1) = 1
N_curva(2) = 2
Isc(5) = Isc(1)
Isc(1) = Empty
Isc(6) = Isc(2)
Isc(2) = Empty
For n = 1 To 14900
CurvasIV(n, 9) = CurvasIV(n, 1)
CurvasIV(n, 1) = Empty
CurvasIV(n, 10) = CurvasIV(n, 2)
CurvasIV(n, 2) = Empty
CurvasIV(n, 11) = CurvasIV(n, 3)
CurvasIV(n, 3) = Empty
CurvasIV(n, 12) = CurvasIV(n, 4)
CurvasIV(n, 4) = Empty
Next
Sheets("HR").Range("L91") = "Curva1"
Sheets("HR").Range("L92") = "Curva2"
Sheets("HR").Range("L93") = "Interpolaci n Irradiancia"
N_curva(1) = 1
N_curva(2) = 3
For n = 1 To 14900
CurvasIV(n, 9) = CurvInter(n, 1)
CurvasIV(n, 10) = CurvInter(n, 2)
CurvasIV(n, 11) = CurvasIV(n, 3)
CurvasIV(n, 12) = CurvasIV(n, 4)
Next
If (G(5) < Parametros(1) And G(2) < Parametros(1)) Or (G(5) > Parametros(1) And G(2) > Parametros(1)) Then
Extrapol = 1
MsgBox ("Se present un error en la asignaci n de curvas. Se realizar n las correcciones mediante extrapolaci
n, se sugiere tener cuidado con los resultados")
End If
N_curva(1) = 5
N_curva(2) = 6
G(7) = Parametros(1)
'CurvInter = CorrIsc(CurvInter)
For n = 1 To 14900
CurvasIV(n, (13)) = CurvInter(n, 1)
CurvasIV(n, (14)) = CurvInter(n, 2)
Next
For h = 1 To 2
N_curva(1) = h
N_curva(2) = h + 2
G(curvas + h) = Parametros(1)
'CurvInter = CorrIsc(CurvInter)
For n = 1 To 14900
CurvasIV(n, (2 * h + 7)) = CurvInter(n, 1)
CurvasIV(n, (2 * h + 8)) = CurvInter(n, 2)
Next
Next
N_curva(1) = 5
N_curva(2) = 6
For n = 1 To 14900
CurvasIV(n, 13) = CurvInter(n, 1)
CurvasIV(n, 14) = CurvInter(n, 2)
Next
End If
For m = 1 To 7
For n = 1 To 14900
potencia(n, m) = CurvasIV(n, (2 * m - 1)) * CurvasIV(n, (2 * m))
Next
Next
Voc = Vcorto(CurvasIV)
For m = 1 To 7
Pmax(m) = 0
indPmax(m) = 1
For n = 1 To 14900
For n = 1 To 14900
For m = 1 To 7
If potencia(n, m) < 0 Then
CurvasIV(n, (2 * m - 1)) = Empty
CurvasIV(n, (2 * m)) = Empty
potencia(n, m) = Empty
End If
If potencia(n, m) = 0 And CurvasIV(n, (2 * m)) <> 0 And CurvasIV(n, (2 * m - 1)) <> 0 Then
potencia(n, m) = Empty
End If
Next
Next
For n = 1 To 14900
For m = 1 To 14
For n = 1 To 7
Sheets("IngresoDatos").Cells(19, (n + 1)) = Isc(n)
Sheets("IngresoDatos").Cells(20, (n + 1)) = Voc(n)
Sheets("IngresoDatos").Cells(21, (n + 1)) = Pmax(n)
Sheets("IngresoDatos").Cells(22, (n + 1)) = Vmp(n)
Sheets("IngresoDatos").Cells(23, (n + 1)) = Imaxp(n)
Next
End Sub
'_____________________________________________________________________________________________
___
For n = 1 To 7
For a = 1 To 14900
If indataF(a, (2 * n)) > 0.9 Then
indice_inicio(n) = a
End If
Next
For a = 1 To 14900
If indataF(a, (2 * n)) > 0 Then
indice_final(n) = a
End If
Next
Next
For n = 1 To 7
a=1
a=1
For intI = indice_inicio(n) To indice_final(n)
I(a) = indataF(intI, (2 * n))
a=a+1
Next
MinCuad = Application.LinEst(I, V)
End If
Next
Vcorto = Vopen
End Function
'_____________________________________________________________________________________________
___________________________________________________________________
Function Interpol_T(N_curva As Variant, Parametros As Variant, G As Variant, T As Variant, Isc As Variant, Curva
sIV As Variant) As Variant
'N_curva posici n en la matriz de datos en los que se ubicar n los resultados de esta funci n
Dim Curva1(1 To 14900, 1 To 2) As Variant
Dim Curva2(1 To 14900, 1 To 2) As Variant
For n = 1 To 14900
Curva1(n, 1) = CurvasIV(n, (2 * N_curva(1) - 1))
Curva1(n, 2) = CurvasIV(n, 2 * N_curva(1))
End Function
'_____________________________________________________________________________________________
_______________________________________________________________________________________
Function Interpol_G(N_curva As Variant, Parametros As Variant, G As Variant, T As Variant, Isc As Variant, Curv
asIV As Variant, Extrapol As Variant) As Variant
'N_curva posici n en la matriz de datos en los que se ubicar n los resultados de esta funci n
Dim Curva1(1 To 14900, 1 To 2) As Variant
Dim Curva2(1 To 14900, 1 To 2) As Variant
For n = 1 To 14900
Curva1(n, 1) = CurvasIV(n, (2 * N_curva(1) - 1))
Curva1(n, 2) = CurvasIV(n, 2 * N_curva(1))
If Extrapol = 0 Then
End Function
'_____________________________________________________________________________________________
_________________________________
Function Interpol(Curva1 As Variant, Curva2 As Variant, delta As Variant, a As Variant) As Variant
k=0
j=5
Z=0
n=0
For I = 1 To 14900
V1 = Curva1(I, 1)
I1 = Curva1(I, 2)
Z=0
j=1
While (Z = 0)
V2 = Curva2(j, 1)
I2 = Curva2(j, 2)
resta = Abs(I2 - I1)
j=j+1
If (j = 14900) Then
Z=1
End If
Wend
Next
Interpol = Curva
End Function
'_____________________________________________________________________________________________
____________________
For I = 1 To 14900
Next
n=1
For h = 1 To 14900
CurvaFinal = CorrIsc(Curva)
Extrapolar = CurvaFinal
h=1
End Function
'_____________________________________________________________________________________________
_________________________________________________________________________
a=0
B=0
C=0
D=0
If curvas = 4 Then
For I = 1 To (curvas)
If (G_real(I) < Parametros(1)) And (Tdut(I) > Parametros(2)) And a <> 1 Then
For n = 1 To 14900
CurvasIV_o(n, 1) = CurvasIV(n, ((2 * I) - 1)) 'V
CurvasIV_o(n, 2) = CurvasIV(n, (2 * I)) 'I
Next n
G_o(1) = G_real(I)
T_o(1) = Tdut(I)
Isc_o(1) = Isc(I)
a = 1 'Indica que la curva A fue asignada
ElseIf (G_real(I) < Parametros(1)) And (Tdut(I) < Parametros(2)) And B <> 1 Then
For n = 1 To 14900
CurvasIV_o(n, 3) = CurvasIV(n, ((2 * I) - 1)) 'V
CurvasIV_o(n, 4) = CurvasIV(n, (2 * I)) 'I
Next n
G_o(2) = G_real(I)
T_o(2) = Tdut(I)
Isc_o(2) = Isc(I)
B = 1 'Indica que la curva B fue asignada
ElseIf (G_real(I) > Parametros(1)) And (Tdut(I) > Parametros(2)) And C <> 1 Then
For n = 1 To 14900
CurvasIV_o(n, 5) = CurvasIV(n, ((2 * I) - 1)) 'V
CurvasIV_o(n, 6) = CurvasIV(n, (2 * I)) 'I
Next n
G_o(3) = G_real(I)
T_o(3) = Tdut(I)
Isc_o(3) = Isc(I)
C = 1 'Indica que la curva C fue asignada
ElseIf (G_real(I) > Parametros(1)) And (Tdut(I) < Parametros(2)) And D <> 1 Then
For n = 1 To 14900
CurvasIV_o(n, 7) = CurvasIV(n, ((2 * I) - 1)) 'V
CurvasIV_o(n, 8) = CurvasIV(n, (2 * I)) 'I
Next n
G_o(4) = G_real(I)
T_o(4) = Tdut(I)
Isc_o(4) = Isc(I)
D = 1 'Indica que la curva D fue asignada
Else
Extrapol = 1
MsgBox ("Se present un error en la asignaci n de curvas. Se realizar n las correcciones mediante extrap
olaci n, se sugiere tener cuidado con los resultados")
Exit For
End If
Next
If Extrapol = 1 Then
a=0
B=0
C=0
D=0
For I = 1 To curvas
If (G_real(I) < (Application.WorksheetFunction.Large(G_real, 2))) And (Tdut(I) >= (Application.Worksheet
Function.Large(Tdut, 2))) And a <> 1 Then
For n = 1 To 14900
CurvasIV_o(n, 1) = CurvasIV(n, ((2 * I) - 1)) 'V
CurvasIV_o(n, 2) = CurvasIV(n, (2 * I)) 'I
Next n
G_o(1) = G_real(I)
T_o(1) = Tdut(I)
Isc_o(1) = Isc(I)
a = 1 'Indica que la curva A fue asignada
G_o(2) = G_real(I)
T_o(2) = Tdut(I)
Isc_o(2) = Isc(I)
B = 1 'Indica que la curva B fue asignada
ElseIf (G_real(I) >= (Application.WorksheetFunction.Large(G_real, 2))) And (Tdut(I) >= (Application.Wor
ksheetFunction.Large(Tdut, 2))) And C <> 1 Then
For n = 1 To 14900
CurvasIV_o(n, 5) = CurvasIV(n, ((2 * I) - 1)) 'V
CurvasIV_o(n, 6) = CurvasIV(n, (2 * I)) 'I
Next n
G_o(3) = G_real(I)
T_o(3) = Tdut(I)
Isc_o(3) = Isc(I)
C = 1 'Indica que la curva C fue asignada
ElseIf (G_real(I) >= (Application.WorksheetFunction.Large(G_real, 2))) And (Tdut(I) < (Application.Works
heetFunction.Large(Tdut, 2))) And D <> 1 Then
For n = 1 To 14900
CurvasIV_o(n, 7) = CurvasIV(n, ((2 * I) - 1)) 'V
CurvasIV_o(n, 8) = CurvasIV(n, (2 * I)) 'I
Next n
G_o(4) = G_real(I)
T_o(4) = Tdut(I)
Isc_o(4) = Isc(I)
D = 1 'Indica que la curva D fue asignada
Else
MsgBox ("Se present un error en la asignaci n de curvas. Favor revise los datos.")
Extrapol = 10 'constante para finalizar codigo
On Error Resume Next
End If
Next
End If
For I = 1 To (curvas)
If (Tdut(I) < Parametros(2)) And a <> 1 Then
For n = 1 To 14900
CurvasIV_o(n, 1) = CurvasIV(n, ((2 * I) - 1)) 'V
CurvasIV_o(n, 2) = CurvasIV(n, (2 * I)) 'I
Next n
G_o(1) = G_real(I)
T_o(1) = Tdut(I)
Isc_o(1) = Isc(I)
a = 1 'Indica que la curva A fue asignada
ElseIf (Tdut(I) = Parametros(2)) And B <> 1 Then
For n = 1 To 14900
CurvasIV_o(n, 3) = CurvasIV(n, ((2 * I) - 1)) 'V
CurvasIV_o(n, 4) = CurvasIV(n, (2 * I)) 'I
Next n
G_o(2) = G_real(I)
T_o(2) = Tdut(I)
Isc_o(2) = Isc(I)
B = 1 'Indica que la curva B fue asignada
G_o(3) = G_real(I)
T_o(3) = Tdut(I)
Isc_o(3) = Isc(I)
C = 1 'Indica que la curva C fue asignada
Else
MsgBox ("Se present un error en la asignaci n de curvas. Los parametros no son adecuados para llevar
a cabo una interpolaci n de 3 puntos, por favor corrija los datos de temperatura o agregue la curva faltante para lle
var a cabo una interpolaci n de 4 puntos ")
Extrapol = 10 'constante para finalizar codigo
On Error Resume Next
End If
Next
For I = 1 To (curvas)
If (Tdut(I) = Parametros(2)) And a <> 1 Then
For n = 1 To 14900
CurvasIV_o(n, 1) = CurvasIV(n, ((2 * I) - 1)) 'V
CurvasIV_o(n, 2) = CurvasIV(n, (2 * I)) 'I
Next n
G_o(1) = G_real(I)
T_o(1) = Tdut(I)
Isc_o(1) = Isc(I)
a = 1 'Indica que la curva A fue asignada
G_o(2) = G_real(I)
T_o(2) = Tdut(I)
Isc_o(2) = Isc(I)
B = 1 'Indica que la curva B fue asignada
Else
MsgBox ("Se present un error en la asignaci n de curvas. Los parametros no son adecuados para llevar
a cabo una interpolaci n de 2 puntos, por favor corrija los datos de temperatura o agregue la curva faltante para lle
var a cabo una interpolaci n de 3 o 4 puntos ")
Extrapol = 10 'constante para finalizar codigo
Exit For
End If
Next
If ((G_o(1) > Parametros(1)) And (G_o(2) > Parametros(1))) Or ((G_o(1) < Parametros(1)) And (G_o(2) < Param
etros(1))) And Extrapol <> 10 Then
Extrapol = 1
MsgBox ("Se present un error en la asignaci n de curvas. Se realizar n las correcciones mediante extrapol
aci n, se sugiere tener cuidado con los resultados")
End If
End If
For n = 1 To 4
matrizTotal(n, 9) = G_o(n)
matrizTotal(n, 10) = Isc_o(n)
matrizTotal(n, 11) = T_o(n)
Next
matrizTotal(1, 12) = a
matrizTotal(2, 12) = B
matrizTotal(3, 12) = C
matrizTotal(4, 12) = D
matrizTotal(5, 12) = Extrapol
For n = 1 To 14900
For m = 1 To 8
matrizTotal(n, m) = CurvasIV_o(n, m)
Next
Next
Array_curvasIV_G_Tdut_Isc = matrizTotal
End Function
'_____________________________________________________________________________________________
_________________________
Dim x As Integer
x = 61
Dim V(1 To 210) As Variant
Dim I(1 To 210) As Variant
a=1
a=1
For intI = x To 301
I(a) = indataF(intI, 2)
a=a+1
Next
' Se sustituyen los primeros 60 (Ver paso anterior x-1) datos por los resultados de las
' extrapolaciones lineales (Se obtiene Isc)
h = indataF(x, 1)
For a = 0 To (x - 1)
indataedit(a + 1, 1) = a * (h / (x - 1))
Next a
For a = 0 To (x - 1)
indataedit(a + 1, 2) = MinCuad(2) + (indataedit((a + 1), 1) * MinCuad(1))
Next a
For a = 1 To x
indataF(a, 1) = indataedit(a, 1)
indataF(a, 2) = indataedit(a, 2)
Next a
For a = 1 To 14900
If indataF(a, 2) > 0 Then
indice_final = a
End If
Next
a=1
a=1
For intI = indice_inicio To indice_final
I(a) = indataF(intI, 2)
a=a+1
Next
For a = 1 To 100
Next
CorrIsc = indataF
End Function
'_____________________________________________________________________________________________
_________________________
'Revisar la norma IEC 60891 para ecuaci n de correcci n de irradiancia por temperatura de la celda
' PVKcal= constante de calibraci n de medida de irradiancia del equipo PV-KLA
' Vc= tensi n entregada por la celda de referenca (raw value)
' cal= constante de calibraci n de la celda de referencia
' alph= coeficiente de temperatura del modelo de la celda a un espectro 1.5 AM
'(revisar hoja de datos de la celda: anotaci n 3) de la tabla de incertidumbre en la medici n de irradiancia)
Calib = Sheets("IngresoDatos").Range("M20:M23")
PVKcal = Calib(1, 1)
Vc = Gr / PVKcal 'mV
alph = Calib(2, 1) '[1/K] Desfase en medicion de temperatura celda de referencia
End If
End If
correccionIrra = (Vc / cal) * (1 / (1 + (alph * (T - Tcal)))) ' Irradiancia corregida con ecuaci n de la norma IEC6089
1-2021
End Function