anexo ii.- procedimientos en visual basic aplicado a objeto.

Anuncio
ANEXO II. PROCEDIMIENTOS EN VISUAL BASIC APLICADO A OBJETO.
ANEXO II.- PROCEDIMIENTOS EN VISUAL BASIC
APLICADO A OBJETO.
Este apartado contiene una síntesis de los procedimientos que mejor ayudan a
comprender las decisiones tomadas y los cálculos realizados en el estudio sobre
tarificación. Cada uno de ellos se encuentra numerado para poderlos referenciar
desde el documento principal. No aparecen los restantes procedimientos creados,
como los referentes a la depuración y tratamientos de datos que, aún siendo
interesantes, aumentaría en gran medida el tamaño de este anexo.
•
Obtención de las lecturas máximas registradas por el maxímetro por mes.
For k = 0 To 11 'Obtencion de los máximos leidos por el maximetro.
maximetro(k) = maximo_mes(potencia, k)
Next k
minmax = min_maximetro(maximetro) 'Obtiene el mínimo valor de lectura del
maximetro.
maxmax = max_maximetro(maximetro) 'Obtiene el máximo valor de lectura del
maximetro.
Function maximo_mes(potencia, k) 'Obtencion de la lectura máxima del maximetro
para un mes determinado. Datos: matriz de potencia y mes(k).
Dim max_mes As Single 'variable auxiliar
max_mes = 0 'valor inicial.
For i = 0 To 8927 'recorre la columna de cada mes.
If potencia(i, k) > max_mes Then
max_mes = potencia(i, k)
End If
Next i
maximo_mes = max_mes
End Function
- 139 -
[procedimiento 1]
ANÁLISIS COMPARATIVO DE CONTRATACIÓN DE SUMINISTRO ELÉCTRICO EN
MERCADOS COMPETITIVOS. APLICACIÓN A LA ESCUELA TÉCNICA SUPERIOR
DE INGENIEROS DE LA UNVERSIDAD DE SEVILLA.
•
Obtención del vector de potencias facturadas para la modalidad dos.
For k = 0 To 11 'Obtención de la matriz de potencia facturada (pc,pf de cada
mes).
pc = pcmin ‘valor inicial de la potencia contratada.
i = 0
Do While pc < pcmax
Pf(i, k) = pfacturada(pc, maximetro(k))
pc = pc + 1
i = i + 1
Loop
i = 0
Next k
Erase pfmedia
For i = 0 To 1500 'Halla la potencia facturada media anual para cada pc
For k = 0 To 11
pfmedia(i) = pfmedia(i) + Pf(i, k)
Next k
pfmedia(i) = pfmedia(i) / 12 'potencia media.
Next i
Function pfacturada(pc, maximetro) 'Función que halla potencia facturada para
un mes. Datos: pc: potencia contratada,
'maximetro: lectura del maximetro para un mes.
If maximetro > 1.05 * pc Then 'ecuaciones condicionadas.
Pf = maximetro + 2 * (maximetro - 1.05 * pc)
ElseIf maximetro < 0.85 * pc Then
Pf = 0.85 * pc
Else
Pf = maximetro
End If
pfacturada = Pf 'resultado
End Function
•
[Procedimiento 2]
Obtención de potencia mínima y potencia contratada. Modo dos
Function pf_minima(pfmedia) 'Función que halla la potencia facturada mínima.
Dato:vector de potencias facturadas media anual.
Dim minimo(1) As Single
minimo(1) = 10000 'valor inicial
For i = 0 To 1500
If pfmedia(i) = 0 Then 'Rechazo del valor cero.
minimo(0) = minimo(0)
minimo(1) = minimo(1)
ElseIf pfmedia(i) < minimo(1) Then 'Elección del mínimo.
minimo(1) = pfmedia(i)
minimo(0) = i
End If
Next i
pf_minima = minimo
End Function
[Procedimiento 3]
- 140 -
ANEXO II. PROCEDIMIENTOS EN VISUAL BASIC APLICADO A OBJETO.
•
Obtención de potencia facturada y potencias contratadas para el modo tres.
Sub modo3_2() 'Obtiene potencia a facturar optima y potencias contratadas para
modo 3.
......
If Range("F40").Value = 1 Then 'DISCRIMINACION HORARIA TIPO CH3.
potencia1 = p1CH3
potencia2 = p2CH3
potencia3 = p3CH3
ch = 3
ElseIf Range("F42").Value = 1 Then 'Discriminación horaria tipo CH4.
potencia1 = p1CH4
potencia2 = p2CH4
potencia3 = p3CH4
ch = 4
End If
For j = 0 To 11 'Creacion de la matriz punta-llano, potencia12.
For i = 0 To 8927
potencia12(i, j) = potencia1(i, j) + potencia2(i, j)
Next i
Next j
Erase maximetro12
Erase maximetro3
For k = 0 To 11 'Obtencion de la lectura del maximetro para punta-llano.
maximetro12(k) = maximo_mes(potencia12, k)
Next k
For k = 0 To 11 'Obtencion de la lectura del maximetro valle.
maximetro3(k) = maximo_mes(potencia3, k)
Next k
pcmin12 = Round(0.8 * minmax12)
pcmax12 = Round(1.2 * maxmax12)
pcmin3 = Round(0.8 * minmax3)
pcmax3 = Round(1.2 * maxmax3)
pc12 = pcmin12 'valores iniciales
pc3 = pcmin3
Erase pfmatriz 'Borrado de la matriz.
Do While pc12 < pcmax12 'creacion de la matriz que alberga la potencia
'facturada anual para cada pareja de potencia contratada: pc12-pc3.
Do While pc3 < pcmax3
pfmatriz(i,
j)
=
pfacturada3_anual(pc12,
pc3,
maximetro12,
maximetro3)
'matriz que alberga todas las potencias facturadas posibles para
el rango escogido.
pc3 = pc3 + 1
j = j + 1
Loop
pc3 = pcmin3 'restablecimiento de los valores iniciales.
j = 0
pc12 = pc12 + 1
i = i + 1
Loop
pfmin = 30000 'valor alto inicial para pfmin.
For i = 0 To 1500 'Busqueda de la potencia facturada minima, óptima.
For j = 0 To 1500
If pfmatriz(i, j) = 0 Then
pfmin = pfmin
- 141 -
ANÁLISIS COMPARATIVO DE CONTRATACIÓN DE SUMINISTRO ELÉCTRICO EN
MERCADOS COMPETITIVOS. APLICACIÓN A LA ESCUELA TÉCNICA SUPERIOR
DE INGENIEROS DE LA UNVERSIDAD DE SEVILLA.
ElseIf pfmatriz(i, j) < pfmin Then
pfmin = pfmatriz(i, j)
pc12 = pcmin12 + i 'valor de la potencia contratada para
PUNTA-LLANO.
pc3 = pcmin3 + j 'valor de la potencia contratada para VALLE.
End If
Next j
Next i
Function pfacturada3_anual(pc12, pc3, maximetro12, maximetro3) 'Función que
'obtiene potencia facturada modo3.Datos: potencia contratada punta-llano,
'valle y lectura de maxímetro para cada periodo.
pfanual = 0
For k = 0 To 11 'Bucle que recorre todos los meses.
maximo12 = maximetro12(k)
maximo3 = maximetro3(k)
pf12 = pfacturada(pc12, maximo12) 'calculo de potencia facturada bajo
'modalidad 2.
pf3 = pfacturada(pc3, maximo3)
If pf3
Pf
ElseIf
Pf
End If
> pf12 Then 'elección de ecuaión de facturación modo 3.
= pf12 + 0.2 * (pf3 - pf12)
pf3 <= pf12 Then
= pf12
pfanual = pfanual + Pf 'resultado anual.
Next k
[Procedimiento 4]
pfacturada3_anual = pfanual
•
Obtención de la potencia facturada óptima y potencias a contratar para el
modo cuatro.
Sub modo 4_3
…
pc1 = pcmin1 'valores iniciales
pc2 = pcmin2
pc3 = pcmin3
Erase pfmatriz 'Limpiado de la matriz que va a albergar las potencias
facturadas dependiendo de las potencias contratadas escogidas.
Do While pc1 < pcmax1 'Bucle triple anidado que obtiene potencia a
facturar para cada combinación de pc.
Do While pc2 < pcmax2
Do While pc3 < pcmax3
pfmatriz(i, j, k) = pfacturada4_anual(pc1, pc2, pc3,
maximetro1, maximetro2, maximetro3)
'Función que obtiene pfacturada. Dicho valor lo asignamos a un
elemento de la matriz-cubo pfmatriz.
pc3 = pc3 + 10 'Paso de barrido: 10 kW para potencia valle.
k = k + 1
Loop
pc3 = pcmin3
k = 0
pc2 = pc2 + 10 'Paso de barrido: 10 kW para potencia llano.
j = j + 1
Loop
pc2 = pcmin2
j = 0
pc1 = pc1 + 10 'Paso de barrido: 10 kW para potencia punta.
i = i + 1
Loop
- 142 -
ANEXO II. PROCEDIMIENTOS EN VISUAL BASIC APLICADO A OBJETO.
'Obtencion de la potencia facturada minima.
pfmin = 30000 'Valor inicial alto.
For i = 0 To 102 'valores exactos de la dimension de la hipermatriz.
For j = 0 To 98
For k = 0 To 65
If pfmatriz(i, j, k) = 0 Then 'descarta el cero como minimo
factible.
pfmin = pfmin
ElseIf pfmatriz(i, j, k) < pfmin Then
pfmin = pfmatriz(i, j, k)
pc1 = pcmin1 + 10 * i 'valores de las distintas potencias
contratadas.
pc2 = pcmin2 + 10 * j 'índice multiplicado por el paso.
pc3 = pcmin3 + 10 * k
End If
Next k
Next j
Next i
…
Function pfacturada4_anual(pc1, pc2, pc3, maximetro1, maximetro2, maximetro3)
‘Función que obtiene potencia facturada para modo 4.
‘Datos: potencia contrtada punta, llano, valle, y lectura de los 3 maximetros
pfanual = 0
For k = 0 To 11
maximo1 = maximetro1(k)
maximo2 = maximetro2(k)
maximo3 = maximetro3(k)
Pf1 = pfacturada(pc1, maximo1) ‘llamada a función que calcula potencia
Pf2 = pfacturada(pc2, maximo2) ‘facturada según modo 2.
pf3 = pfacturada(pc3, maximo3)
If Pf2 > Pf1 Then
If pf3 > Pf2 Then
Pf = Pf1 + 0.5 * (Pf2 - Pf1) + 0.2 * (pf3 - Pf2)
Else
Pf = Pf1 + 0.5 * (Pf2 - Pf1)
End If
Else
If pf3 > Pf2 Then
If pf3 > Pf1 Then
Pf = Pf1 + 0.5 * (pf3 - Pf1) + 0.2 * (pf3 - Pf2)
Else
Pf = Pf1 + 0.2 * (pf3 - Pf2)
End If
Else
If pf3 > Pf1 Then
Pf = Pf1 + 0.5 * (pf3 - Pf1)
Else
Pf = Pf1
End If
End If
End If
pfanual = pfanual + Pf
Next k
[Procedimiento 5]
- 143 -
ANÁLISIS COMPARATIVO DE CONTRATACIÓN DE SUMINISTRO ELÉCTRICO EN
MERCADOS COMPETITIVOS. APLICACIÓN A LA ESCUELA TÉCNICA SUPERIOR
DE INGENIEROS DE LA UNVERSIDAD DE SEVILLA.
•
Obtención del recargo por discriminación horaria. Tipo dos.
…
If Range("F38").Value = 1 Then 'Eleccion del TIPO 2 de discriminacion horaria.
cpunta = 40 'recargo de PUNTA.
energia1 = e1CH2 'Obtencion de la matriz PUNTA de energia.
energiapunta = energia_mes(energia1) 'obtencion de energia punta total
para cada mes.
For j = 0 To 11 'Recargo por discriminacion horaria dividida por meses.
discriminacionhoraria(j) = 0.058606 * ((cpunta * energiapunta(j)) / 100)
'el primer termino es el termino de energia de medio uso.
Next j
…
[Procedimiento 6]
•
Obtención del recargo por discriminación horaria. Tipo tres.
cpunta =
cvalle =
energia1
energia3
70 'recargo de PUNTA.
-43 'Descuento de VALLE.
= e1CH3 'Obtencion de la matriz PUNTA de energia.
= e3CH3 'Obencion de la matriz VALLE de energia.
energiapunta = energia_mes(energia1) 'Total de energia PUNTA por mes.
energiavalle = energia_mes(energia3) 'Total de energia VALLE por mes.
For j = 0 To 11 'Recargo por discriminacion horaria dividida por meses.
discriminacionhoraria(j) = 0.058606 * ((cpunta * energiapunta(j) +
cvalle * energiavalle(j)) / 100)
Next j
'Vector que almacena para cada mes el recargo por CH.
[Procedimiento 7]
•
Obtención del recargo por discriminación horaria. Tipo cuatro.
cpunta = 100
cvalle =
energia1
energia3
'recargo de PUNTA
-43 'Descuento de VALLE.
= e1CH4 'Obtencion de la matriz PUNTA de energía
= e3CH4 'Obencion de la matriz VALLE de energía.
energiapunta = energia_mes(energia1) 'Total de energía PUNTA por mes.
energiavalle = energia_mes(energia3) 'Total de enrgía VALLE por mes.
For j = 0 To 11 'Recargo por discriminación horaria dividida por meses.
discriminacionhoraria(j) = 0.058606 * ((cpunta * energiapunta(j) +
cvalle * energiavalle(j)) / 100)
Next j
'Obtencion de vector CH para cada mes.
[Procedimiento 8]
- 144 -
ANEXO II. PROCEDIMIENTOS EN VISUAL BASIC APLICADO A OBJETO.
•
Obtención del coeficiente del complemento por energía reactiva para tarifas
generales.
Function reactiva()
'Obtencion del valor de coseno de phi y cargo o bonificacion por reactiva para
cada mes.
Dim Wa As Single 'Variable auxiliar. Almacena energia activa total de cada mes
Dim Wr As Single 'Variable auxiliar. Almacena energia reactiva total de cada
mes.
Dim cosphi(12) As Single 'Almacena el coseno de phi para cada uno de los
meses.
Dim Kr(12) As Single 'Almacena el recargo o bonificacion para cada uno de los
meses.
Dim cosphimedio As Single 'Valor medio anual del coseno de phi.
Dim Krmedio As Single 'Valor medio anual del
recargo o bonificacion.
For k = 1 To 12
…
cosphi(k) = Wa / (Sqr((Wa) ^ 2 + (Wr) ^ 2))
Kr(k) = (17 / (cosphi(k)) ^ 2) - 21
cosphimedio = cosphimedio + cosphi(k)
Krmedio = Krmedio + Kr(k)
Next k
cosphimedio = cosphimedio / 12 'Obtencion de valores medios.
Krmedio = Krmedio / 12
[Procedimiento 9]
- 145 -
ANÁLISIS COMPARATIVO DE CONTRATACIÓN DE SUMINISTRO ELÉCTRICO EN
MERCADOS COMPETITIVOS. APLICACIÓN A LA ESCUELA TÉCNICA SUPERIOR
DE INGENIEROS DE LA UNVERSIDAD DE SEVILLA.
•
Obtención de la potencia facturada para el mercado libre asignando las
potencias contratadas individualmente comenzando por P1 y finalizando
con P6.
Sub PF 'Obtención de potencia facturada repartida mensualmente.
…
pfact1 = pfact(2, minimop1, maximop1, maximetro1) 'Obtención de pcoptima y pf
'para PERIODO1.
pcopt1 = pfact1(0, 1)
pfacturada1 = pfact1(0, 2)
…'resto de periodos.
pfact6 = p_fact(7, pcopt5, maximop6, maximetro6) 'Obtención de pcoptima y pf
'para PERIODO6.
pcopt6 = pfact6(0, 1)
pfacturada6 = pfact6(0, 2)
pfacturada = pfacturada1 + pfacturada2 + pfacturada3 + pfacturada4 +
pfacturada5 + pfacturada6 'potencia facturada anual total.
pfacturada = pfacturada / 12 'potencia facturada para cada mes.
End Sub
Function pfact(hoja, minimo, maximo, maximetro) 'datos de entrada: hoja de
'excel en
la que se van a plasmar los resultados,lectura minima y maxima del 'maximetro.
Lectura completa del maximetro.
…
A = 0 'valores iniciales.
Aef = 0
pc = pcmin
k = 0
Do While pc < pcmax 'Obtencion del vector potencia facturada: Pf
For j = 0 To 11
For i = 0 To 3000
A = (maximetro(i, j) - pc)
If A > 0 Then
Aef = Aef + A ^ 2
End If
Next i
Next j
k1 = 1
Aef = Sqr(Aef)
Fep = k1 * 234 * Aef
FP(0, k) = pc + Fep
pc = pc + 10 'paso de 10 kW.
k = k + 1
Aef = 0
Loop
[Procedimiento 10]
- 146 -
ANEXO II. PROCEDIMIENTOS EN VISUAL BASIC APLICADO A OBJETO.
•
Obtención de potencia facturada optima y potencias contratadas para
mercado libre con las tres primeras potencias como variables.
Sub fp()
'Estudio de la potencia a contratar para cada uno de los periodos,potencia
'facturada resultante. Estudio previo, con poco ajuste: paso de 50 kW.
…
tp(1) = 10.154758
tp(2) = 5.082712
tp(3) = 3.7227
tp(4) = 3.7227
tp(5) = 3.7227
tp(6) = 1.69601
…
'partimos de la potencia media en el maximetro para cada periodo.
pcmin1 = Round((maximop1 + minimop1) / 2)
pcmin2 = Round((maximop2 + minimop2) / 2)
pcmin3 = Round((maximop3 + minimop3) / 2)
…
...
Do While pc1 < pcmax1 'Triple bucle para obtener la matriz-cubo
Do While pc2 < pcmax2
Do While pc3 < pcmax3
pfact1 = p_fact2(pc1, maximetro1) 'funcion que obtiene la potencia
'facturada para cada uno de los periodos.
If pc2 < pc1 Then 'restricciones.
pc22 = pc1
Else
pc22 = pc2
End If
pfact2 = p_fact2(pc22, maximetro2)
If pc3 < pc22 Then
pc33 = pc22
Else
pc33 = pc3
End If
pfact3 = p_fact2(pc33, maximetro3)
pfacturada(i, j, k) = tp(1) * pfact1 + tp(2) * pfact2 +
(tp(3) + tp(4) + tp(5) + tp(6)) * pfact3
'facturacion por potencia. Se tiene en cuenta tp para cada
'periodo.
k = k + 1
pc3 = pc3 + 50 'paso de 50 kW
Loop
k = 0
pc3 = pcmin3
j = j + 1
pc2 = pc2 + 50 'paso de 50 kW
Loop
j = 0
pc2 = pcmin2
i = i + 1
pc1 = pc1 + 50 'paso de 50 kW.
Loop
…
sub end
Function p_fact2(pc, maximetro)
A = 0 'valores iniciales.
Aef = 0
k = 0
- 147 -
ANÁLISIS COMPARATIVO DE CONTRATACIÓN DE SUMINISTRO ELÉCTRICO EN
MERCADOS COMPETITIVOS. APLICACIÓN A LA ESCUELA TÉCNICA SUPERIOR
DE INGENIEROS DE LA UNVERSIDAD DE SEVILLA.
For j = 0 To 11
For i = 0 To 3000
A = (maximetro(i, j) - pc)
If A > 0 Then
Aef = Aef + A ^ 2
End If
Next i
Next j
k1 = 1
Aef = Sqr(Aef)
Fep = k1 * 234 * Aef
p_fact2 = pc + Fep
End Function
[Procedimiento 11]
- 148 -
Descargar