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 -