Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El objetivo de este proyecto es el diseño de una aplicación java que pueda servir como
herramienta para la estimación del número de colectores solares planos para producción de ACS.
Siguiendo el método de cálculo de CENSOLAR [1], calcula el número de colectores teórico para
cubrir la demanda energética anual en función de la radiación solar anual por m2, calculada para
una inclinación dada y en la provincia seleccionada. Con este resultado, el usuario decide el
número de colectores que quiere instalar y, en función de la superficie resultante, el programa
calcula la aportación solar anual y el déficit energético anual. Por otro lado, para los mismos
datos de consumo de ACS, el programa aplica el método F-chart y calcula la cobertura solar
anual con el mismo número de colectores decidido tras los resultados del método anterior.
El programa permite cambiar el valor de las variables que intervienen en los dos métodos y ver
de forma gráfica como influyen en el resultado. Hay variables que solo se emplean en uno de los
dos métodos, por eso, no se trata de comparar el resultado de los dos métodos de cálculo sino de
tener dos referencias a la hora de estimar la aportación solar de una instalación para la
producción de ACS, mediante colector solar plano, para unas condiciones de consumo y
localización dadas.
Para este proyecto hemos creado una aplicación JavaSE desarrollada con los programas
NetBeans IDE 7.2.1, iReport-5.1.0 para los informes de resultados, y conexión con base de datos
Access para almacenar resultados y realizar los informes. Para las gráficas de los informes utiliza
librerías de JFreeChart .
3
APLICACIÓN JAVA
4
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
2.1.1. Programación
Para desarrollar aplicaciones Java es necesario un "Java Development Kit" o JDK. Existen
múltiples JDKs, desarrollados por compañías diferentes, o desarrollados como proyectos de
software libre. En nuestro caso hemos empleado el que distribuye de modo gratuito Sun
Microsystems, que se puede descargar desde http://java.sun.com. La implementación de Java de
Sun suele ser la más actualizada y, es software libre. No obstante se podría emplear cualquier
otro JDK ya que la portabilidad del lenguaje garantiza que todos funcionarán del mismo modo.
El JDK viene a ser el kit de desarrollo de Java, un conjunto de herramientas , utilidades,
documentación y ejemplos para desarrollar aplicaciones Java.
El entorno JDK no es el más adecuado para el desarrollo de aplicaciones Java, debido a que
funciona única y exclusivamente mediante comandos de consola. Hoy en día la programación se
suele ayudar de entornos visuales, como Netbeans, que facilitan enormemente la tarea. Netbeans
es un excelente entorno de desarrollo, completamente gratuito y se distribuyen bajo licencia
libre. Puede descargarse desde http://netbeans.org . Netbeans es un entorno de desarrollo
integrado (IDE) que permite editar programas en java, compilarlos, ejecutarlos, depurarlos,
5
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
construir rápidamente el interfaz gráfico de una aplicación eligiendo los componentes de una
paleta, etc. El IDE de NetBeans es gratuito, y de codigo abierto para desarrolladores de software.
A continuación se explica de forma breve las características de Java que han sido más
utilizadas en la realización de la aplicación.
Un Objeto es un elemento que tiene una serie de características llamadas “propiedades”. Por
otro lado, al objeto se le pueden dar órdenes que cumplirá de inmediato. A dichas órdenes se les
denomina “métodos”.
Al hacer esto, en el mismo proyecto podemos crear objetos de dichas clases y usarlos para
hacer el programa.
6
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
En general, un proyecto java está constituido por un grupo de clases, algunas de las cuales
serán de creación propia. En el programa usaremos objetos derivados de dichas clases.
2.1.1.2. Herencia
La Herencia consiste en crear una clase que obtenga todas las características de otra. Esta clase
a su vez tendrá también características propias.
La clase inicial se denomina clase Base y la clase nueva creada a partir de la clase base se
llama clase Derivada:
CLASE BASE
Herencia
CLASE DERIVADA
Se puede hacer que una clase de creación propia derive o herede de otra ya existente añadiendo
en la línea de creación de la clase: “extends NombreClaseBase”
En NetBeans podemos abrir varios proyectos y copiar los ficheros de clases de uno a otro. Si
un proyecto tiene muchas clases, interesa agruparlas en carpetas.
7
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Es interesante reunir las clases que más usemos en un solo proyecto de tipo biblioteca, para
poder acceder a ellas fácilmente. Una biblioteca se puede compactar en un solo fichero de tipo
.JAR . Al asociar un fichero de biblioteca .JAR a un proyecto, hacemos que en dicho proyecto se
puedan usar las clases contenidas en dicha biblioteca.
La estructura try{} encierra entre las llaves el código que puede producir una excepción (un
error grave) que debe ser manejado por el bloque catch(Exception ex){}, en este caso solo
capturamos la excepción que puede surgir.
Ejemplo :
8
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Las variables globales, también llamadas propiedades de la clase, son variables que pueden ser
usadas desde cualquier evento del programa. Estas variables mantienen su valor hasta que otro
evento lo modifique.
Son las variables utilizadas para un procedimiento concreto cuyos valores solo sirven dentro de
dicho procedimiento. Se declaran e inician detro del evento donde intervienen.
Ejemplo:
En java se pueden programar procedimientos que luego puedan ser llamados desde distintos
evento. Por ejemplo, para presentar los resultados con tres decimales programamos el siguiente
método:
9
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Se puede llamar a un mismo procedimiento desde distintos eventos, evitando así la repetición
de código. Por ejemplo
el resultado “feo” tendrá tres decimales sin tener que repetir todo el código anterior.
La ventana de diseño de NetBeans nos permite crear cada componente, colocarlo en la ventana
y asignarle los eventos que necesitemos para programar en ellos las acciones que se tengan que
realizar. Sin embargo, si el diseño se ha realizado directamente desde código, será necesario
crear también desde código los distintos eventos a usar y asociarlos al componente
correspondiente.
Para programar eventos hay que tener en cuenta que un evento pertenece a un objeto “Oyente”
(Listener) o a un objeto “Adaptador” (Adapter)
El objeto oyente/adaptador hay que asociarlo al elemento sobre el que sucede el evento.
Componente.MetodoParaAñadirOyente(new NombreOyenteAdaptador() {
public void nombreEvento1(TipoDatoParametro evt) {
LlamadaAProcedimientoEvento1(evt);}
public void nombreEvento2(TipoDatoParametro evt) {
LlamadaAProcedimientoEvento2(evt);}
});
10
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Ejemplo:
v_txt_ocupacionn[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
pasar_focoDmesActionPerformed(evt); } });
Para el diseño de la aplicación, Java proporciona dos paquetes gráficos: AWT y Swing. La
diferencia fundamental entre AWT y Swing es que Swing proporciona gran cantidad de controles
y componentes para el desarrollo de interfaces gráficas que enriquecen la interfaz del programa.
Es por ello que, en este proyecto se ha utilizado el paquete gráfico Swing. Swing proporciona,
también, muchas clases prefabricadas para facilitar el diseño gráfico. A continuación se explica
de forma breve las características que han sido más utilizadas en la realización de la interfaz :
JFrame: es el componente básico para implementar una interfaz visual con la librería Swing.
Se ha utlilizado para crear la clase “Cuadro” la cual hereda de la clase JFrame.
JTextField: es un elemento que permite la entrada de texto por parte del usuario. Se ha
utilizado para introducir los parámetros .
JPanel: es un objeto de los llamados "contenedores". Es así porque sirve para agrupar y
organizar otros elementos de la interfaz. De esta forma, actúa como una caja donde se van
metiendo elementos de la interfaz para poder manejarlos como una agrupación. Es una clase
fundamental que se ha utilizado para dar un diseño atractivo e intuitivo.
JLabel: es una etiqueta de texto. En este proyecto se ha utilizado para informar al usuario a
qué variable corresponden cada uno de los JTextFields y también para mostrar resultados y
gráficos.
JButton: se trata de un elemento que actúa como un pulsador al que se le pueden asignar
acciones una vez pulsado. Se ha utilizado para numerosos controles en la aplicación.
11
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
JCheckBox: es un elemento que puede ser seleccionado o no. Actúa como un botón de estado
en el que la información que recogemos es, si está seleccionado, cierta, y en caso contrario,
falsa. Se ha utilizado en opciones de cálculos .
JDialog: Los Cuadros de Diálogo son ventanas simplificadas que muestran distintas opciones
al usuario. Los objetos JDialog son los que permiten la creación y uso de cuadros de diálogo
en un proyecto java. Existen dos tipos de cuadros de diálogo: los modales y no modales. Los
cuadros de diálogo modales no permiten que se active otra ventana hasta que el cuadro de
diálogo no se haya cerrado. Los cuadros de diálogo no modales permiten trabajar con otra
ventana a pesar de que el propio cuadro de diálogo no haya sido cerrado.
JLabel
JTextField
JPanel
JButton
JCheckBox
Una vez que se ha finalizado el programa, en Netbeans, debemos prepararlo para la instalación
en cualquier otro ordenador. Para ello, es necesario tener en cuenta todos aquellos ficheros
externos cuyos contenidos intervienen en la aplicación: base de datos, imágenes, informes, etc...
12
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Dentro de la carpeta dist se crea un fichero con extensión .jar. Este fichero se puede decir que
es el “ejecutable” del programa. El fichero .jar contiene todas las clases que hemos
programado en el proyecto. En nuestro caso se ha generado el fichero
Simulacion_ACS_1_1.jar
Los programas java pueden ejecutarse en cualquier entorno, pero para que un ejecutable .jar
pueda ser ejecutado en un determinado sistema, debe estar instalado en él la máquina virtual
de java.
Además del fichero ejecutable (.jar) con el nombre del proyecto, se crea también una carpeta
lib. Esta carpeta contiene las librerías adicionales que se hayan incluido en el proyecto.
Bases de datos. Es necesario copiar el archivo base de datos en la carpeta dist. En nuestro
caso hemos creado la carpeta “Base” para la base de datos, entonces copiamos la carpeta
“Base” en la carpeta distribuible.
Imágenes (para la presentación, los iconos de los botones de las barras de herramientas, etc.)
, también tenemos que introducir los ficheros de estas imágenes dentro de la carpeta
distribuible.
Informes. Es necesario que los ficheros de estos estén dentro de la carpeta del distribuible.
Los ficheros de informes necesarios para el funcionamiento del programa son los ficheros
compilados .jasper. Estos ficheros están dentro de una carpeta llamada “informesireport” ,
así que copiamos la carpeta con los informes dentro de la carpeta del distribuible.
Imágenes de informes. Como los informes del programa usan imágenes, la situación de estas
en la carpeta distribuible depende de la forma en que haya configurado dichas imágenes en el
iReport. Para este proyecto las imágenes se guardan en la capeta “Gráficas” que también
copiamos en la carpeta dist.
Una vez incluidos todos estos elementos ya tenemos la carpeta distribuible completada.
Para la instalación de la aplicación en otro ordenador, solo hay que copiar en una misma
carpeta todos los elementos que intervienen, es decir:
13
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
capeta "Base"
carpeta "Graficas"
carpeta "informesireport"
El ordenador de destino tiene que tener instalada la máquina virtual de java, propia del sistema
operativo que utilice, para que el proyecto pueda ejecutarse.
14
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
15
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.1.2.1. “Provincia”
C1.1.2.3. "Cancelar"
16
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.1.2.5. "Aceptar"
// DG[0]=45;
DG[1] = 0;
DG[2] = 1.05;
DG[3] = 0.15;
DG[4] = 32;
DG[5] = 40;
DG[6] = 2.01;
DG[7] = 0.83;
DG[8] = 4.8;
DG[9] = 45;
DG[10] = 0.94;
DG[11] = 0.12;
} else { Cancela_Datos_Generales(0);}
Introduce_Datos_Generales(DG);}
17
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.1.3.2. "Volver"
C1.1.3.3. "Cancelar"
C1.1.3.4. "Continuar"
18
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.1.4.2. "Volver"
C1.1.4.3. "Cancelar"
C1.1.4.4. "Continuar"
19
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
20
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.2.1.2. "Cancelar"
C1.2.1.3. "Calcular"
if (pueblo.Nombre.equals("")) {
JOptionPane.showMessageDialog(null, "Debe introducir los datos necesarios");
}// Nuevo_Proyecto();
if (pueblo.Tuso == 0) {
JOptionPane.showMessageDialog(null, "Debe introducir los datos necesarios");
}//Nuevo_Datos_DelSitio();
if (pueblo.vH[1] == 0) {
JOptionPane.showMessageDialog(null, "Debe introducir los datos necesarios");
}// Nuevo_Datos_Mensuales();
Aceptar_DatosdeEntrada();
Calculo_mensual_porcuadro();
Vaciar_resultados_porcuadro();
Vaciar_subpaneldatosyresultados();
Paneles.setSelectedComponent(panel_resultados);
}
21
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.2.2.1. "mes"
C1.2.2.2. "Consultar"
Reiniciar_subpanelesResultados();
dialogo_datosdelsitio.setSize(500, 400);
dialogo_datosdelsitio.setLocation(300, 300);
dialogo_datosdelsitio.setVisible(true);
}
22
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.3.1. "Calcular"
23
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.3.3. "Resultados"
C1.4.1. "Consultar"
24
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.5.1. "Calcular"
25
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Evento:
private void panel_histogramasMouseReleased(java.awt.event.MouseEvent evt) {
Dibuja_Histogramas_RendiAporSustitucion();
}
26
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.7.1.1. "Datos"
27
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.7.1.3. "Aceptar"
figura 20. temperatura del agua de red (tr) y cargas térmicas(Qa) para el método f-chart
28
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.7.2.1 "Datos"
C1.7.2.3. "Aceptar"
29
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.7.3.1. "Datos"
30
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.7.3.3. "Aceptar"
31
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
32
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
A la izquierda, en el panel_graf dibuja una curva azul que une los valores del factor f de cada
mes y una línea roja que representa el valor de la cobertura solar anual (CSA) caluladas con el
método f-chart. A la derecha, en el panel_valores_grafica_fchart se muestran los valores
calculados de f y CSA. Tanto las curvas como los valores se actualizan cada vez que varían los
datos del proyecto.
C1.8.2.1. "Comprobar"
33
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
34
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
35
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.8.3.1. "Iniciar"
C1.8.3.2. "todos"
36
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.8.3.7. "Cancelar"
componente: btnf_Cancelar_Mn
descripción: Cancela todos los cambios repecto a los datos iniciales de ocupación, consumo
diario, temperatura de uso e inclinación. Elimina las marcas de todos los meses.
Rellena los campos con los datos iniciales del proyecto y actualiza los resultados y
las gráficas.
Finalmente nos da la opción de guardar los resultados en una tabla.
evento: private void btnf_Cancelar_MmActionPerformed(java.awt.event.ActionEvent evt) {
Cancela_Cambios_Mn(); // Cancela_cambios_fchart();
Ver_Datos_y_Resultados();//actualiza ocupación y consumo del panel datos y resultados
Almacena_simulacion_sinverlo(); }
37
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
En esta ventana podemos ver los resultados que hemos guardado y realizar informes y
guardarlos en archivo o imprimirlos.
C1.8.5. "Guardar"
componente: btnGuardar_fchart
descripción: Guarda los resultados con los datos que tengamos en ese momento y abre la
ventana BD_Resultados [JDialog] (figura 25) que describiremos más adelante.
evento: private void btnGuadar_fchartActionPerformed(java.awt.event.ActionEvent evt) {
Guardar_Resultados_finales();
GuardarResultadosACS(1);
GuardarVariacionAnual(1); }
38
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Evento:
private void panel_GRAF2MouseReleased(java.awt.event.MouseEvent evt) {
GraficayDibuja_DemandaAporatacion_Masmenos(); }
Compara la demanda de energía para calentar el agua cada mes calculado (barras de de color
amarillo) con la aportación solar de los paneles disponibles cada mes (barras de color rojo).
39
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.9.3.1. "INICIO"
40
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.9.3.2. "todos"
41
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.9.3.6. "Cancelar"
componente: btnDA_Cancelar_Mm
descripción: Cancela todos los cambios repecto a los datos iniciales de ocupación, consumo
diario, temperatura de uso e inclinación. Elimina las marcas de todos los meses.
Rellena los campos con los datos iniciales del proyecto y actualiza los resultados y
las gráficas.
Finalmente nos da la opción de guardar los resultados en una tabla.
evento: private void btnDA_Cancelar_MmActionPerformed(java.awt.event.ActionEvent evt) {
Cancela_Cambios_Mn(); // Cancela_cambios_DA();
Ver_Datos_y_Resultados();//actualiza ocupación y consumo del panel datos y resultados
Ver_Datos_y_Resultados();//actualiza ocupación y consumo del panel datos y resultados
Almacena_simulacion_sinverlo(); }
42
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
En esta ventana podemos ver los resultados que hemos guardado y realizar informes y
guardarlos en archivo o imprimirlos.
C1.9.5. "Guardar"
componente: btnGuardar_graf2
descripción: Guarda los resultados con los datos que tengamos en ese momento y abre la
ventana BD_Resultados [JDialog] (figura 35) que describiremos más adelante.
evento: private void btnGuardar_graf2ActionPerformed(java.awt.event.ActionEvent evt) {
Guardar_Resultados_finales();
GuardarResultadosACS(1);
GuardarVariacionAnual(1); }
Muestra datos y resultados de los proyectos calculados durante una sesión. Al comenzar una
nueva sesión no habrá ningún dato en este panel.
43
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.10.1. "Guardar"
Con el uso de librerías de JFreechart se dibujan la gráficas que se emplearán como imagen en
los informes iReport.
44
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
figura 36. gráficas de rendimiento, aportación solar relativa y sustitución con JFreechart
45
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
46
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
47
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Muestra la gráfica del rendimiento de los colectores cada mes y permite ver como varía en
función del factor de eficiencia óptica (b), el coeficiente general de pérdidas (m) y la temperatura
del ACS.
48
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.12.1. "Inicio"
49
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C1.12.5. "Imprimir"
componente: btnImprime_graficaRendimiento
descripción: Permite sacar por impresora la gráfica que tengamos el el panel_rendimiento_JFC
evento: private void btnImprime_graficaRendimientoActionPerformed(java.awt.event.ActionEvent evt) {
Imprimegrafica_VariacionesRendimiento(); }
figura 43. opción imprimir la gráfica del rendimiento de los paneles para distintos valores de b,m y T.
50
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
A la derecha de la pantalla irá apareciendo un resumen de los valores de los principales datos y
resultados conforme intervienen en los cálculos. Cada vez que se modifica un dato aprarece su
valor y los resultados actualizados. De esta forma vemos como influye la variación del valor de
una variable en los resultados finales independientemente de la pestaña [JPanel] en que estemos
operando.
método:
public void VerResultados() {
try {
//subpanelresultados2_8
etiresultadosDA3.setText("" + pueblo.getDemandaAnual());
etiresultadosENanual3.setText("" + pueblo.getENDañoM2());
etiresultadosSCteorica3.setText("" + pueblo.getSCteorica());
etiresultadosNCteorico3.setText("" + pueblo.getNCteorico());
etiresultadosCAm5.setText("" + pueblo.getConsumoanualACSm3());
//subpanelresultados2_9
etiresultadosAportacionAnual2.setText("" + pueblo.getaportacionAnual());
etiresultadosDeficitAnual2.setText("" + pueblo.getdeficitEnergeticoAnual());
etiresultadosCEanual2.setText("" + pueblo.getCosteEanual());
etiresultadosCAuxanual2.setText("" + pueblo.getCosteAuxAnual());
etiresultadosAhorroanual2.setText("" + pueblo.getAhorroAnual());
etiresultadosCSA2.setText("" + pueblo.getCoberturaSA());
//subpanelresultados2_10
etiresultadosSCresultante2.setText("" + pueblo.getSCresultante());
etiresultadosVolumen2.setText("" + pueblo.VolAcuDiseño);
etiresultadosbcol2.setText("" + pueblo.getbcol());
etiresultadosmcol2.setText("" + pueblo.getmcol());
etiresultadosFCCI2.setText("" + pueblo.getFCCI());
Prueba_Resultados();
} catch (Exception ex) { } }
51
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
"Aportación solar %": Aportación solar anual calculada por el método de Censolar [1].
"Déficit energético": Parte de la demanda no cubierta por energía solar.
"Coste Energía anual": coste en € de la energía eléctrica, para cubrir la toda la demanda
anual, según el precio del kwh que pongamos como dato al inicio del proyecto.
"Coste Auxiliar anual": coste en € de la energía eléctrica para demanda no cubierta por
energía solar.
"Ahorro anual": diferencia entre los dos costes anteriores.
"CSA f-chart": Cobertura Solar Anual calculada por el método de F-Chart.
"Superficie resultante m2": superficie calculada con el número de paneles que asignemos al
proyecto. Este valor es el que se emplea en los cáculos.
"Volumen acumulador": volumen en litros del acumulador que asignemos al proyecto. Este
valor es el que se emplea en los cálculos.
"b": factor de eficiencia óptica de los colectores.
"m": coeficiente de pérdidas de los colectores.
"FCCI": factor del intercambiador.
Condiciones de diseño. Cada botón(?) [JButton] nos muestra cada condición.
52
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
• "V/M": volumen del acumulador respecto al volumen recomendado (por defecto 70 l/m2
de panel.)
• "C/A": litros diarios respecto a la superficie total (m2) de paneles.
• "M/A": volumen del acumulador del proyecto respecto a la superficie total (m2) de
paneles.
figura 48. Elementos del grupo Other Components del Form cuadro
Se abre con el botón “Nuevo proyecto” de panel “Inicio” (figura 7). A partir de aquí podemos
seguir presionando “Aceptar” o “Calcula todo” (figura 8).
“Aceptar” cierra esta ventana y abre dialogo_datosdelsitio [JDialog] (figura 9).
“Calcular todo” realiza todos los cálculos de una sola vez y con los datos por defecto de la
provincia seleccionada y los valores que nos pide del número de colectores y volumen del
acumulador (figura 49).
53
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Después de introducir los datos seguimos con el botón “Continuar” (figura 10) que cerrará esta
ventana y nos lleva al panel_calculos [JPanel] (figura 11).
Se abre con el botón “Ver gráficas RenAporSus” del panel_JFreeChart [JPanel] (figura 36)
Se abre con el botón “Ver gráficas DA” del panel_JFreeChart [JPanel] (figura 37)
Se abre con el botón “Ver gráfica f-chart” del panel_JFreeChart [JPanel] (figura 38)
54
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Se abre con el botón “Ver paneles en imagen” del panel_JFreeChart [JPanel] (figura 38)
55
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Se abre con el botón “ver gráficas variaciones” del panel_JFreeChart [JPanel] (figura 39)
Se abre con el botón “ver gráfica informe general “ del panel_JFreeChart [JPanel] (figuras 39)
Muestra la imagen que aparecerá en el “informe general”.
Se abre con los botones “Guardar” y “Ver resultados” y con el botón “Resultados” del panel
“INICIO”.
56
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Muestra los datos y resultados que se guardan en la tabla de la base de datos del programa.
Estos valores se pueden consultar en los informes que genera el programa.
C3.13.2. "Eliminar"
Cada botón de este panel abre una ventana donde podemos ver el tipo de informe generado con
los datos de tabla Resultados almacenados en la base de datos del programa y el archivo .jasper
correspondiente (de la carpeta informesireport del programa). En esta ventana podemos guardar
el informe como archivo y sacarlo por impresora. A continuación veremos los eventos que se
ejecutan con cada botón.
57
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C3.13.5.1. "Informe"
58
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
JasperPrint informe4=JasperFillManager.fillReport(rutainforme4,null,conexion);
JasperViewer ventanavisor1=new JasperViewer(informe1,false);
JasperViewer ventanavisor2=new JasperViewer(informe2,false);
JasperViewer ventanavisor3=new JasperViewer(informe3,false);
JasperViewer ventanavisor4=new JasperViewer(informe4,false);
ventanavisor1.setTitle("INFORME GENERAL gráfica demanda");
ventanavisor1.setVisible(true);
ventanavisor2.setTitle("INFORME GENERAL gráfica MJm2anual");
ventanavisor2.setVisible(true);
ventanavisor3.setTitle("INFORME GENERAL gráfica aportación");
ventanavisor3.setVisible(true);
ventanavisor4.setTitle("INFORME GENERAL gráfica CSA");
ventanavisor4.setVisible(true);}
catch(Exception e){JOptionPane.showMessageDialog(null,"Error al mostrar informe"+e);
}
}
59
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C3.13.6. "Cerrar"
60
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
Se abre con los botones “Guardar” y “Ver resultados” y con el botón “Resultados” del panel
“INICIO” después de cerrar la ventana BD_Resultados.
Muestra los datos y resultados que se guardan en la tabla de la base de datos del programa.
Estos valores se pueden consultar en los informes que genera el programa.
61
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C3.14.5. "Informes"
componente: btnInforme_variaciones
descripción: Abre una ventana donde podemos ver el informe generado con los datos de tabla
Variaciones, almacenados en la base de datos del programa, y el archivo .jasper
correspondiente (de la carpeta informesireport del programa). En esta ventana
podemos guardar el informe como archivo y sacarlo por impresora.
En el comboInfo_Variaciones [JComboBox] se marca la variable que define el
informe.
evento: private void btnInforme_variacionesActionPerformed(java.awt.event.ActionEvent evt) {
int info=comboInfo_Variacion.getSelectedIndex();
if(info==0){JOptionPane.showMessageDialog(null,"Seleccione una variable");}
else{ dialogo_graf_variaciones_JFC.setSize(950,650);
dialogo_graf_variaciones_JFC.setResizable(true);
dialogo_graf_variaciones_JFC.setVisible(true);
if(info==1){DibujayGuarda_Grafica_Variaciones("consumo");
Info_Variable("consumo","INFORME VARIACIONES CON EL CONSUMO DE ACS");}
if(info==2){DibujayGuarda_Grafica_Variaciones("tempACS");
Info_Variable("tempACS","INFORME VARIACIONES CON LA TEMPERATURA DEL
ACS");}
if(info==3){DibujayGuarda_Grafica_Variaciones("inclinacion");
Info_Variable("inclinacion","INFORME VARIACIONES CON LA INCLINACIÓN DE
LOS PANELES");}
if(info==4){DibujayGuarda_Grafica_Variaciones("acumulacion");
Info_Variable("acumulacion","INFORME VARIACIONES CON EL VOLUMEN DEL
ACUMULADOR");}
if(info==5){DibujayGuarda_Grafica_Variaciones("superficie");
Info_Variable("superficie","INFORME VARIACIONES CON LA SUPERFICIE DE
CAPTADORES");}
if(info==6){DibujayGuarda_Grafica_Variaciones("b");
Info_Variable("b","INFORME VARIACIONES CON EL FACTOR DE EFICIENCIA
ÓPTICA (b)");}
if(info==7){DibujayGuarda_Grafica_Variaciones("m");
Info_Variable("m","INFORME VARIACIONES CON EL m DE LOS COLECTORES");}
if(info==8){DibujayGuarda_Grafica_Variaciones("FCCI");
Info_Variable("FCCI","INFORME VARIACIONES CON EL FCCI factor
intercambiador");}
if(info==9){DibujayGuarda_Grafica_Variaciones("MAI");
Info_Variable("MAI","INFORME MAI ángulo de incidencia");}
dialogo_graf_variaciones_JFC.dispose();} }
62
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
componente: btnVertablamensual_BDVA
descripción: Guarda los datos y resultados mensuales en la tablamensual y abre la ventana
BD_tablamensual [JDialog] (figura 51)
evento: private void btnVertablamensual_BDVAActionPerformed(java.awt.event.ActionEvent evt) {
GuardarTablamensual();
VerTablamensual_enJTable(1);}
C3.14.7. "Cerrar"
componente: btnCerrar_Variaciones
descripción: Cierra esta ventana
evento: private void btnCerrar_VariacionesActionPerformed(java.awt.event.ActionEvent evt) {
BD_Variacion_anual.dispose(); }
Muestra los datos y resultados mensuales que se guardan en la tabla de la base de datos del
programa. Estos valores se pueden consultar en los informes que genera el programa.
63
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Programación
C3.15.4. "Cerrar"
Cerrar el programa
Al cerrar el programa se cierra tambien la conexión con la base de datos. Los datos y
resultados guardados durante la sesión quedarán almacenados en las tablas de la base de datos y
podrán consultarse y emplearse en los informes en otras sesiones posteriores.
cerrar
64
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Diagramas de flujo
Nuevo proyecto
Cancelar provincia
Nº colectores
Aceptar Calcula todo
Volumen acumulador
Volver
Datos Ocupación %mes
por defecto
Temperatura de red
mensuales Radiacción H
Factor k (inclinación)
Horas sol
Temperatura ambiente
Continuar Cancelar
CÁLCULOS
65
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Diagramas de flujo
...Calcula
Datos del
CÁLCULOS todo
sitio
Seleccionar meses
Modificar
datos Seleccionar todos
Rendimiento
Cancelar Calcular
Inicio
mes
b, m inclinación Temperatura
Consultar
+ - + - + -
Resultados mensuales:
Consumo ACS m3
Salto térmico Imprimir
Demanda termias
Demanda MJ
H corregida Demanda MJ/mes
Energía neta incidente RESULTADOS Energía neta disponible MJ/m2
Intensidad incidente
Energía neta disponible MJ/m2
Rendimiento colector Demanda anual: MJ
Aportación solar por m2 Energía/año·m2 : MJ
Calcular Superficie colectora teórica: m2
Número de colectores teórico:
Nº de colectores a instalar
Resultados mensuales: Resultados anuales:
Superficie Demanda MJ Demanda anual: MJ
colectora Calcular superficie resultante Energía neta disponible MJ/m2 Energía/año·m2 : MJ
resultante (A) Sustitución % Aportación solar: %
Déficit de energía Déficit energético: MJ
Coste eléctrico de la demanda Ahorro anual : €
Resultados Coste eléctrico del déficit Coste energía auxiliar: €
Ahorro
F-Chart
DATOS& Gráficas ACUMULADOR
RESULTADOS GRÁFICAS demanda-aportación
Rendimiento mes Acumulación por m2
Aportación solar relativa Demanda MJ/mes
Sustitución mes Energía neta total MJ/mes
V Calcular
Modificar Consultar
datos Volumen
M + -
proyectado
Datos y Resultados mes: Horas sol
Ocupación %mes Intensidad incidente
Temperatura de red Temperatura ambiente Comprobar
H corregida Rendimiento colector
Factor k (inclinación) Consumo ACS m3
volumen
Energía neta incidente 0.8 < V/M <1.2
66
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Diagramas de flujo
Gráficas
demanda-aportación Localización
Provincia
Temp ACS
Consumo ACS
Demanda MJ
Superf m2
Paneles
b
variaciones Base de datos m
FCCI*
de resultados MAI*
inclinación
acumulación
Nº de Inicio MJ/m2 año
colectores Aportación año
Guardar Ver CSA
Selaccionar mes
Cancelar resultadosV/M
M/A
+ - todos C/A
60< C/A <100 Guardar resultado Resultados
actual anteriores
+ - + - + - + -
Diálogo BD_Resultados
eliminar
Cerrar
67
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Diagramas de flujo
Diálogo
BD_variacion_anual
eliminar
Cerrar
Eliminar todo
provincia
mes
Eliminar Informes Resultados ocupación
mensuales Consumo ACS
Eliminar Temp red
filas entre variable Temp ambiente
Temp ACS
tabla_mensual inclinación
Consumo ACS provincia horas sol
Temp ACS Demanda MJ Informes
rendimiento
Acumulador MJ/m2 año Demanda MJ
superficie Aportación Aportación MJ
inclinación CSA Diálogo Sustitución
b V/M BD_tablamensual Qa
m M/A Ea
FCCI C/A Ep
MAI f
eliminar
68
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Diagramas de flujo
...Calcula
Cargas Energía Energía todo
caloríficas absorbida perdida
por defecto
69
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Diagramas de flujo
Localización FCCI*
Provincia MAI*
Temp ACS inclinación
Consumo ACS acumulación (M)
Demanda MJ MJ/m2 año
Superf m2 (A) Aportación año
Paneles CSA
b V/M
m M/A
Gráficas f-chart C/A
Nº de kg de b m FCCI
colectores acumulación
Guardar Ver
resultados
+ - + - + - + - + -
Guardar resultado Resultados
actual anteriores
Comprobar Inicio
37.5< M/A<300 Cancelar
Selaccionar mes
todos
+ - + - + - + -
Tabla variacionesFchartAnual*
no ¿guardar? sí
Tabla resultadosACS
Diálogo BD_Resultados
70
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Diagramas de flujo
Gráficas JFree
Ver tabla mensual Ver gráfica f-chart Ver gráficas informe general
Diálogo
BD_tablamensual
paneles variable
71
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Diagramas de flujo
72
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Acceso a base de datos
Para que nuestro programa Java pueda usar la base de datos ha sido necesario realizar los
siguientes pasos:
paso1. Colocar el fichero de base de datos en una subcarpeta de la carpeta del proyecto java.
Primero definimos estos objetos como globales en la clase “Cuadro”, para así poderlos usar
desde cualquier lado. Además será necesario indicar el import para las clases Connection y
Statement. Estos import son respectivamente: java.sql.Connection y java.sql.Statement
Una vez definidos los objetos conexión y sentencia, para que nuestro programa pueda acceder
a la base de datos “baseResultadosACS” creamos el método “PrepararBaseDatos” al que
llamaremos desde el constructor.
El controlador define el tipo de base de datos que se va a usar (base de datos de Access, o de
MySQL, o de cualquier otro gestor de base de datos)
En nuestro caso, tendremos que indicar el controlador para base de datos de Access.
El objeto “conexion” es el que efectúa la conexión real con la base de datos. Para construir este
objeto hacen falta tres datos:
El nombre del usuario que manipulará la base de datos. En el caso de Access no necesitamos
indicar ningún nombre de usuario.
73
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Acceso a base de datos
El password del usuario que manipulará la base de datos. En el caso de Access tampoco
necesitaremos ningún password.
La DSN de la base de datos. DSN significa “nombre del origen de datos” y es una cadena de
texto que contiene información sobre el fichero de base de datos que queremos usar. En el
código, la creación de la DSN será:
conexion=DriverManager.getConnection(DSN,user,password);
El objeto “sentencia” será el que nos permita ejecutar órdenes SQL sobre la base de datos. Es
decir, el objeto que nos permite actuar y manipular la base de datos.
El objeto sentencia se crea a partir del objeto conexión creado en el paso anterior, usando la
siguiente instrucción:
sentencia=conexion.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
Se usará el objeto “sentencia” para ejecutar consultas SQL en la base de datos. Dichas
consultas se almacenan en objetos del tipo “ResultSet” los cuales permiten seleccionar el registro
de una tabla de la base de datos y extraer el datos de un campo en concreto.
Esta preparación se debe realizar en el momento en que se ejecuta el programa, por lo cual
hemos introducido este código en el constructor. A continuación mostramos la parte del código,
de nuestra aplicación java, donde aparecen los elementos descritos para acceder a la base de
datos que se utiliza en dicha aplicación.
*
* @author Eduardo
*/
...
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
...
public class Cuadro extends javax.swing.JFrame {
...
74
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Acceso a base de datos
75
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Acceso a base de datos
2.1.3.3. Métodos para borrar datos de una tabla de nuestra base de datos
El objeto JTable nos permite introducir tablas en nuestras aplicaciones.En estos objetos
podemos mostrar el contenido de una tabla de la base de datos o del resultado de una consulta.
Para extraer datos de la base de datos realizamos una consulta SQL de tipo SELECT cuyo
resultado se almacena en un objeto ResultSet. Un ResultSet básicamente es una tabla
almacenada en memoria (y por tanto no visible). Podemos trasladar el contenido de un ResultSet
a un JTable para que el usuario lo pueda visualizar dentro de nuestra aplicación java.
De la base de datos extraemos datos a un ResultSet. (Esto se hace ejecutando una consulta
SQL de tipo SELECT a través del objeto sentencia)
Del ResultSet extraemos los datos a un modelo de tabla. (Esto se hace recorriendo el
ResultSet y almacenando cada registro en un vector)
76
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Acceso a base de datos
Almacenamiento del vector en el modelo de tabla. (Cada vector extraido del ResultSet se
inserta como fila en el modelo de tabla)
Se asigna el modelo de tabla al objeto JTable. (Al hacer esto el objeto JTable muestra el
contenido del modelo)
77
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Acceso a base de datos
78
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Informes
2.1.4. Informes
Una vez creado el programa, surgió la necesidad de imprimir documentos tales como listados
de datos y resultados, gráficos, etc. Estos documentos se rellenan con datos tomados
directamente desde la base de datos de nuestro programa. A estos documentos los llamaremos
“informes”. Para crear estos documentos necesitamos usar un programa de creación de
informes. En nuestro caso, hemos usado un programa gratuito llamado Ireport que hemos
descargado de la página http://www.jasperforge.org/sf/projects/ireport. Este programa permite
definir la estructura general del informe (sin tener en cuenta los datos).
Es necesario indicar la conexión a la base de datos y la consulta SQL para extraer los datos que
aparecerán en el informe.
Una vez creado el informe, este se enlaza con nuestra aplicación, de forma que cuando el
usuario pulse la opción de imprimir, el informe se rellene con los datos de la base de datos y
luego sea enviado a la impresora.
Cuando creamos un informe con iReport, se genera un fichero del tipo .jasper. Los ficheros
.jasper son informes compilados, de forma que puedan ser usados en aplicaciones java.
Para que nuestro programa sea capaz de presentar informes, hemos creado una carpeta llamada
“informesireport” dentro de la carpeta de nuestro programa. Y dentro de dicha carpeta hemos
copiado los ficheros .jasper de los informes que queremos utilizar.
En nuestra aplicación, el informe aparece en una ventana (el visor de informes, objeto
JasperViewer) que tiene una pequeña barra de herramientas. En esta barra podrá imprimir el
informe o cambiar su zoom, entre otras opciones.
Los ficheros que contienen las librerías necesarias para el programa iReport son los siguientes:
commons-collections-2.1, commons-logging-1.0.2 y jasperreports-2.0.1. Gracias a la inclusión
de estos ficheros, nuestro proyecto ya dispone de las librerías de clases que contienen a las clases
que necesitamos ( JasperPrint, JasperFillManager, JasperViewer). Una vez agregadas estas
librerías, el proceso para imprimir un informe es el siguiente:
Crear un objeto visor (JasperViewer) que permita visualizar el informe o bien imprimir
directamente el informe con un objeto JasperPrintManager.
Cuando un informe tiene una instrucción SQL fija, siempre mostrará los mismos datos. En
otros casos parte de la instrucción SQL del informe puede variar, de forma que extrae distinta
información según el dato que varía. Estos datos variantes se denominan parámetros. El
parámetro debe ser sustituido por un valor que es proporcionado desde la aplicación java, y es
entonces cuando la instrucción SQL se completa y se ejecuta. En la aplicación java es necesario
79
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Informes
crear un objeto de tipo Map que contenga los distintos parámetros con los valores de cada uno
para luego enviar este objeto al informe que se quiere mostrar.
Para los informes se emplean los datos alamacenados en las tablas del archivo
“baseResultadosACS.mdb” de la carpeta “Base” del programa y los archivos .jasper de la carpeta
“informesireport” del programa. Dichas tablas son:
resultadosACS
variacionesFchartAnual
tabla_mensual
A continuación describiremos brevemente los principales informes que se pueden generar con
el programa.
80
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Informes
Permite imprimir y guardar como archivo pdf todos los paneles [Jpanel] principales del
programa con los datos y resultados del proyecto en curso.
81
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Informes
Permite imprimir y guardar como archivo pdf los datos y resultados mensuales del proyecto en
curso.
82
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Informes
Permite imprimir y guardar como archivo pdf las graficas de rendimiento, sustitución,
aportación solar relativa, demanda-aportación y F-Chart, del proyecto en curso, en una página.
83
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Informes
Permite imprimir y guardar como archivo pdf los datos y resultados anuales del proyecto en
curso para distintos valores de una de las siguientes variables:
Ocupación (consumo), Temperatura ACS, Inclinación, Acumulación, Superficie, b, m, FCCI,
MAI. Para cada variable se genera un informe en el que, manteniendo fijas las demás, se muestra
en forma de gráficas como varían los resultados anuales de Aportación y CSA. Además se
muestra en forma de de tabla los resultados de demanda, MJm2 y condiciones de diseño para
cada valor de la variable en estudiada.
if(info==1){DibujayGuarda_Grafica_Variaciones("consumo");
Info_Variable("consumo","INFORME VARIACIONES CON EL CONSUMO DE
ACS");}
...
dialogo_graf_variaciones_JFC.dispose();}
}
84
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Informes
85
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Informes
86
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Informes
87
APLICACIÓN JAVA. MEMORIA DESCRIPTIVA. Informes
88
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
El programa permite cambiar el valor de las variables que intervienen en los dos métodos y ver
de forma gráfica como influyen en el resultado. Como hay variables que se emplean en uno y en
el otro no, no se trata de comparar el resultado de los dos métodos de cálculo sino de tener dos
referencias a la hora de estimar la aportación solar de una instalación para la producción de ACS,
mediante colector solar plano, para unas condiciones de consumo y localización dadas.
89
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
90
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
DATOS RESULTADOS
Inclinación : Resultados mensuales:
Desviación N-S (β): 0 Consumo ACS m3
Corrección de H: Salto térmico
Pérdidas globales: Demanda termias
Nº de usuarios: Demanda MJ
Litros/día·usuario: H corregida
Área de colector: Energía neta incidente
Parámetros b y m del colector: Intensidad incidente
Corrección de b: Energía neta disponible MJ/m2
Temperatura de uso: Energía neta total MJ/mes
Precio del kw·h : € Rendimiento de un colector
Ocupación %mes Aportación solar por m2
Datos mensuales Sustitución %
Temperatura de red Déficit de energía
Radiación H Coste eléctrico de la demanda
Factor k (inclinación) Coste eléctrico del déficit
Horas sol Ahorro
Temperatura ambiente Resultados anuales:
Nº colectores a instalar Demanda anual: MJ
Energía/año·m2 : MJ
Aportación solar: %
Déficit energético: MJ
Ahorro anual : €
Coste energía auxiliar: €
Superficie colectora teórica: m2
Número de colectores teórico:
Superficie colectora resultante (A)
91
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
DATOS RESULTADOS
Inclinación : Consumo de ACS litros/día
Desviación N-S (β): 0 Carga calorífica mensual
Corrección de H: Superficie resultante (A)
Pérdidas globales: Energía solar absorbida mensual
Nº de usuarios: Factor F’rUL
Litros/día·usuario: Factor k1 corrección por acumulación
Área de colector: Factor k2 corrección por
Parámetros b y m del colector: Energía perdida mensual
Corrección de b: Variable D1 para f
Temperatura de uso: Variable D2 para f
Ocupación %mes Fracción solar mensual f
Datos mensuales Energía solar útil mensual
Temperatura de red Fracción solar anual CSA
Radiación H volumen de acumulación teórico (V)
Factor k (inclinación)
Horas sol Condiciones de diseño
Temperatura ambiente 0.8<=V/M<=1.2
Nº colectores a instalar 37.5<=M/A<=300
Calor específico
Modificación del ángulo de incidencia
Factor captador-intercambiador
Acumulación por m2
Volumen de acumulación (M)
Temperatura mínima del ACS
VARIACIONES(*)
Ocupación
Litros/día·usuario
Temperatura de uso
Inclinación
Número de colectores
Kg de acumulación
b
m
Factor captador-intercambiador
Modificación ángulo de incidencia (**)
(*) Denominamos "variaciones" a las variables para las cuales el programa dispone de
"botones +-" con los que podemos ver las variaciones de los resultados en función del
incremento de estás variables. Cada vez que pulsamos "+" o "-" aumenta o disminuye, en una
cantidad fijada, el valor de la variable correspondiente y se recalculan todas las operaciones y se
dibujan las gráficas con los nuevos valores y resultados. Las variaciones afectan a los dos
métodos y variarán los resultados según influyan o no.
92
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
Además de estas variaciones, podemos cambiar cualquier otro dato introduciendo su valor,
mediante teclado, en el campo de texto correspondiente.
Inclinación : 45
Desviación N-S (β): 0 0
Corrección de H: 1.05
Pérdidas globales: 0.15
Nº de usuarios: 32
Litros/día·usuario: 40
Área de colector: 2.01
Parámetros b y m del colector: 0.83 y 4.8
Corrección de b: 0.94
Temperatura de uso: 45
Precio €/kwh 0.12
Ocupación %mes 100
Temperatura de red Según provincia
Radiación H Según provincia
Factor k (inclinación) Según provincia
Horas sol Según provincia
Temperatura ambiente Según provincia
Calor específico 4184 J/kgºC
Modificación ángulo de incidencia 0.96
Factor captador-intercambiador 0.95
Acumulación por m2 70 litros
Temperatura mínima del ACS 45
Temperatura de red
Radiación H
Factor k (inclinación)
Horas sol
Temperatura ambiente
(fuente CENSOLAR [2])
Con cada opción de "Valores por defecto" el programa introduce los valores por defecto
correspondientes al evento que se esté ejecutando en ese momento.
93
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
El programa incorpora un botón llamado "Calcula todo" con el cual, una vez seleccionada la
provincia, nos pide que indiquemos el número de colectores y el volumen del acumulador. Con
estos dos datos y tomando todos los "valores por defecto" anteriores realiza todas las operaciones
a la vez. Esta opción se diseñó para ofrecer una forma rápida de comparar los resultados en
función de la provincia seleccionada manteniendo todos los demás datos iguales.
Una vez seleccionada la localización del proyecto, el programa nos pedirá los siguientes datos:
Inclinación: Ángulo que formarán los colectores respecto a la superficie horizontal. Por
defecto, toma el valor de 45º pero tenemos la opción de tomar los valores 35,40,45,50,55 y
60. (ventana datos generales)
Desviación N-S: por defecto 0º, todos los datos en el programa están referidos a este valor.
Corrección de H: factor que modifica el valor de la radiación media diaria sobre superficie
horizontal (H), por defecto el programa toma un valor de 1.05, (valor para niveles de
contaminación atmosférica muy bajos).
Pérdidas globales: por defecto toma un valor de 0.15 como valor recomendado
(CENSOLAR[1]), cuando no se dispone de datos para estimar las pérdidas de calor, que
dependen del aislamiento y del tipo de consumo.
Litros/día·usuario: Consumo diario estimado para cada usuario. Por defecto, 40 litros.
Área del colector: superficie útil en m2 del colector que el proyectista decida instalar. Por
defecto toma 2.01 m2.
Todos estos datos se introducen en la ventana "Datos generales", podemos seleccionar los
valores por defecto o introducir el valor que queramos por teclado.
94
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
Pulsando "Continuar" el programa asigna estos datos al proyecto y partir de aquí podemos
calcular las necesidades energéticas para cada mes, para lo cual necesitamos conocer los
siguientes datos mensuales:
Ocupación: es el porcentaje del número máximo de usuarios que cada mes utilizará la
instalación. Por defecto tiene un valor del 100% todos los meses, podemos cambiarlo en la
ventana "Datos mensuales" y con los botones +- en los paneles "Gráficas f-chart" y "Gráficas
demanda-aportación".
Temperatura media del agua red: Por defecto el programa toma los valores de la capital de la
provincia seleccionada en el proyecto (fuente CENSOLAR[1]), podemos consultarlos en el
panel "DATOS&RESULTADOS".
Demanda energética : energía necesaria para calentar el agua desde la temperatura de red
hasta la de consumo. El valor calculado aparece en la columna neMJ del el panel
"CÁLCULOS".
95
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
Justificación de cálculos:
Valor de H corregido: por defecto, multiplica H por el factor 1.05 (valor para zona de sierra
de atmósfera limpia), su valor resultante puede consultarse en el panel
"DATOS&RESULTADOS".
Intensidad media útil I, en W/m2, se obtiene dividiendo E (previamente pasada a julios) por
las horas de sol útiles (pasada a segundos). "DATOS&RESULTADOS"
Temperatura ambiente durante las horas de sol: sus valores dependen de la provincia
seleccionada y puede consultarse en el panel "DATOS&RESULTADOS" . (fuente
CENSOLAR[2])
Rendimiento de los colectores. Por defecto, considera un colector con cubierta y destinado a
la obtención de ACS, el factor b se corrige multiplicándolo por 0.94. Su valor resultante
puede consultarse en el panel "DATOS&RESULTADOS".
Aportación solar por m2: Se obtiene multiplicando la energía neta incidente (E) por el
rendimiento de los colectores. Su valor mensual se puede consultar en el panel
"CÁLCULOS".
Energía neta disponible al día por m2: corregimos la Aportación con el factor 0.85 a fin de
considerar las pérdidas producidas en el acumulador (15%).
Energía neta disponible al mes por m2: multiplica por el número de días de cada mes. Su
valor puede consultarse en el panel "CÁCULOS" y en la columna ENDmes del panel
"RESULTADOS".
Superficie colectora necesaria. Para ello dividimos la demanda energética total entre la
energía neta disponible por m2.
96
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
Una vez decidido el número de colectores a instalar, el programa continúa realizando los
siguientes cálculos.
Déficit energético: Representa la energía auxiliar que hay que aportar los meses en que la
energía solar no basta por sí sola para cubrir el 100% de las necesidades.
97
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
En el programa java:
clase: LocalizacionACS
objeto: pueblo
variables: VConsumo[i] : resultado del consumo de ACS en el mes [i]
LitrosDia : dato del consumo de ACS por día y usuario
NumUsu : dato del número de usuarios
vDias[i] : dato del número de días del mes [i]
vOcupación: dato del % de usuarios en el mes [i]
vDAporceocupacion[i]: porcentaje de la nueva ocupación respecto a la ocupación
inicial en el mes [i]
vDAporcelitros[i]: porcentaje del nuevo litros/día·usuario respecto a su valor inicial
en el mes [i]
método: public void Calcula_vConsumo(){
for(int i=0;i<12;i++){
vConsumo[i]=(LitrosDia*NumUsu*vDias[i]*vOcupacion[i])/100000;
vConsumo[i]=vConsumo[i]*vDAporceocupacion[i];//para calculo variando ocupacion en DA
vConsumo[i]=vConsumo[i]*vDAporcelitros[i];//para los calculo variando los litros en DA
ConTresDecimales();
vConsumo[i]=Double.valueOf(formateador.format(vConsumo[i])); } }
De este salto térmico depende, la cantidad de energía que será necesario aportar mediante el
sistema de agua caliente sanitaria por energía solar, y el rendimiento de la instalación.
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vSalto[i] : resultado del salto térmico en el mes [i]
Tuso : dato de la temperatura de uso del ACS
VTred [i]: dato temperatura del agua red, para provincia seleccionada, en el mes [i]
método public void Calcula_vSalto(){
for(int i=0;i<12;i++){ vSalto[i]=Tuso-vTred[i]; } }
98
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
Estos cálculos se realizarán calculando la energía necesaria para calentar, los litros de agua
calculados en el consumo, desde la temperatura de red de distribución hasta la temperatura de
consumo durante todos los días de cada mes. Los cálculos se realizan según la siguiente
ecuación:
Q = m * Cp * ( ∆T )* N° días
En donde:
m es la cantidad de agua a calentar cada día.
Cp es el calor especifico del agua 4.184 KJ / litro
∆T es el incremento de temperatura que del agua ºC
Q es la necesidad energética mensual MJ / mes
N° días es el número de días de cada mes.
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vDemandaMJmes[i] : resultado de la demanda energética en el mes [i]
vConsumo[i] : consumo mensual de ACS en el mes [i], descrito anteriormente
vSalto[i]: salto térmico en el mes [i], descrito anteriormente
vDAportetuso [i]: porcentaje de variación de la temperatura de uso respecto a su
valor inicial en el mes [i]
método public void Calcula_vDemandaMJmes(){
for(int i=0;i<12;i++){
vConsumo[i]=(LitrosDia*NumUsu*vDias[i]*vOcupacion[i])/100000;
vSalto[i]=Tuso-vTred[i];
vDemandaMJmes[i]=vConsumo[i]*vSalto[i]*4.184;//MJ/mes
ConTresDecimales();
vDemandaMJmes[i]=Double.valueOf(formateador.format(vDemandaMJmes[i])); } }
99
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
2.2.5.4. Cálculo de la radiación media diaria sobre superficie horizontal para cada mes ( H )
El programa contiene los datos de radiación solar de las tablas de CENSOLAR[2]. Las
unidades de partida son MJ / m2 por día medio de cada mes. Una vez seleccionada la provincia,
los valores de radiación aparecen, por defecto, en la ventana "Datos mensuales". Para los
cálculos, este valor se corrige multiplicándolo por el factor "CorH" según condiciones
ambientales de la localización del proyecto (1.05 para atmósferas muy limpias y 0.95 para
atmósferas contaminadas). Estos valores se pueden consultar en el panel
"DATOS&RESULTADOS".
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vHcor[i]: resultado de la radiación media diaria, corregida, sobre superficie
horizontal, en la provincia seleccionada, para el mes [i]
vH[i]: dato de la radiación media diaria sobre superficie horizontal, en la provincia
seleccionada, para el mes [i]
CorH : dato del factor de corrección de H, por defecto 1.05.
método public void Calcula_vHcor(){
for(int i=0;i<12;i++){
vHcor[i]=vH[i]*CorH;
ConTresDecimales();
vHcor[i]=Double.valueOf(formateador.format(vHcor[i]));
} }
2.2.5.5. Cálculo de la radiación media diaria sobre superficie inclinada para cada mes
En el programa java:
100
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
clase LocalizacionACS
objeto pueblo
variables vE[i]: resultado de la radiación aprovechable que incide un día medio sobre cada m2
de superficie inclinada de colectores en el mes [i]
vHcor [i]: resultado de la irradiación horizontal media para el mes [i] en la provincia
seleccionada.
vCork [i]: dato del factor de corrección "k" para el mes [i], para la inclinación y la
provincia seleccionada.
0.94 : dato del factor resultante de estimar un 6% de pérdida de la energía incidente
debido a los momentos en que la altura del sol es pequeña resultando que la
intensidad es menor del valor umbral de 200 w/m2
método public void Calcula_vE(){
Calcula_vHcor();
for(int i=0;i<12;i++){
vE[i]=0.94*vCork[i]*vHcor[i];
ConTresDecimales();
vE[i]=Double.valueOf(formateador.format(vE[i])); } }
La intensidad media útil de la radiación solar, es la es la intensidad con que incide la radiación
de forma instantánea en un día medio de cada mes. Esta intensidad se mide en W / m2, por ello
se transformaran las unidades de radiación diaria media de cada mes en unidades de radiación
instantánea, dividiendo la radiación diaria media entre el número de horas medias de cada mes,
obteniendo la intensidad media útil para cada mes según la siguiente ecuación:
El programa asigna un número de horas sol útil, a cada mes, para cada provincia. Estos valores
son los que emplea para calcular la Intensidad y pueden ser consultados en el panel
"DATOS&RESULTADOS". Los resultados obtenidos son de gran importancia ya que serán
utilizados para calcular el rendimiento del colector solar plano de la instalación.
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vI[i]: resultado de la intensidad media útil de radiación solar para el mes [i]
vE[i]:
277.778 : resultado del factor de conversión de MJ/m2·día a W/m2
vHorasSolUtil[i]: dato del número de horas sol el mes [i], en provincia seleccionada
método public void Calcula_vI(){
Calcula_vE();
for(int i=0;i<12;i++){ vI[i]=277.778*vE[i]/vHorasSolUtil[i];
ConTresDecimales();
vI[i]=Double.valueOf(formateador.format(vI[i])); } }
101
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
η = m – b T/I
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vRendimiento[i]: resultado del rendimiento de los colectores para el mes [i]
vI[i]: resultado de la intensidad de la radiación solar para el mes [i]
Corb : dato del factor de corrección del parámetro "b" de los colectores, por defecto
0.94.
bcol: dato del factor de eficiencia óptica de los colectores
mcol: dato del coeficiente general de pérdidas de los colectores
Tuso : dato de la temperatura de uso del ACS
vTamb[i]: dato de la temperatura ambiente para el mes [i]
vfporcetuso[i]: porcentaje de variación de la temperatura de uso en el mes [i]
respecto a su valor inicial.
método public void Calcula_vRendimiento(){
Calcula_vI();//con esto calcula I
for(int i=0;i<12;i++){
//vRendimiento[i]=100*Corb*bcol-100*mcol*(Tuso-vTamb[i])/vI[i];
vRendimiento[i]=100*Corb*bcol-100*mcol*(Tuso*vfporcetuso[i]-vTamb[i])/vI[i];
// if(vRendimiento[i]<20){vRendimiento[i]=0;}
if(vRendimiento[i]<0){vRendimiento[i]=0;}
ConTresDecimales();
vRendimiento[i]=Double.valueOf(formateador.format(vRendimiento[i]));} }
102
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
Estos datos de rendimiento son los que serán utilizados en los cálculos posteriores, para
calcular la energía que es aprovechada por el colector solar plano de la que incide sobre él.
Llamamos "Aportación solar por m2" a la energía que incide por m2, de superficie de
colector solar plano, y que es transferida al fluido caloportador. Es decir, es la energía,
procedente del sol, que el colector aprovecha de la energía total que incide sobre él.
Esta energía incidente se calcula multiplicando la radiación solar que incide por día y metro
cuadrado de superficie por el rendimiento del colector solar plano en cada mes y multiplicando
por el numero de días de cada mes.
La ecuación que se aplicará para calcular la energía incidente considerando el rendimiento del
colector solar plano será la siguiente:
Aportación = E * η
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vAportacion[i]: resultado de la energía solar captada por m2 de colector el mes [i]
vE[i]: resultado de la radiación media diaria para el mes [i]
vRendimiento [i]: resultado del rendimiento de los colectores para el mes [i]
método public void Calcula_vAportacion(){
Calcula_vRendimiento();//con esto calcula I que calcula E
for(int i=0;i<12;i++){
if(vOcupacion[i]>0){vAportacion[i]=vE[i]*vRendimiento[i]/100;}// hemos añadido /100
else{vAportacion[i]=0;}
ConTresDecimales();
vAportacion[i]=Double.valueOf(formateador.format(vAportacion[i])); } }
El colector solar plano, las tuberías, el depósito interacumulador, y los demás accesorios de
una instalación solar térmica, durante el funcionamiento mantienen temperaturas superiores a la
temperatura ambiente, perdiendo calor por conducción a través de las uniones del sistema a tierra
y por convección y radiación al ambiente.
103
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
Las pérdidas por radiación son generalmente pequeñas siendo las pérdidas por convección las
más importantes. Las pérdidas de calor son una causa importante de la reducción del rendimiento
del sistema de energía solar y obligan a aislar la instalación con el fin de minimizarlas.
En el propio colector solar plano existen pérdidas debido a los distintos fenómenos físicos de
transmisión de calor. Estas pérdidas son las siguientes:
Pérdida de calor frontal por radiación hacia el cielo debido a la absortancia del colector.
Pérdida de calor frontal por convección, en general depende de la velocidad del viento.
Pérdidas de calor posteriores y laterales del colector solar plano, que dependerán del tipo y
espesor del aislamiento estas pérdidas se estiman en un 2 o el 3 % de la energía captada.
Pérdidas por la cara posterior del colector solar plano, dependen del tipo y espesor de
aislamiento que ese utilice.
Pérdidas hacia arriba por la cara expuesta a la radiación dependen de la emitancia del
colector solar plano.
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vENDdia[i]: resultado de la energía neta diaria disponible por m2 para el mes [i]
vAportacion[i]: resultado de la energía solar captada por m2 de colector el mes [i]
PerdGlo : dato del factor de pérdidas globales de la energía que llega a los
colectores. (por defecto 0.15)
vDias[i]: dato del número de días para el mes [i]
vENDmes[i]: resultado de la energía neta mensual disponible por m2 para el mes [i]
ENDañoM2 : resultado de la energía neta disponible al año por m2.
método public void Calcula_vENDdia(){
Calcula_vAportacion();
for(int i=0;i<12;i++){
vENDdia[i]=vAportacion[i]*(1-PerdGlo);// hemos quitado /100 ya que está en la aportacion } }
104
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
De este modo hemos calculado la energía solar por metro cuadrado y día, por mes y por año,
de la que se dispone para calentar el agua caliente sanitaria. Los resultados se pueden consultar
en el panel "CÁLCULOS" y en el panel "RESULTADOS".
En el programa java:
clase LocalizacionACS
objeto pueblo
variables SCteorica : resultado de la superficie, de colectores, en m2 calculada.
NCteorico : resultado del número de colectores necesarios para la "SCteorica"
calculada.
DemandaAnual : resultado de la demanda energética para todo el año.
ENDañoM2 : resultado de la energía neta disponible por m2 y año.
Acol : dato en m2 del área de un colector.
NCrecomendado : dato del número de colectores a instalar según el proyectista.
Scresultante : resultado de la superficie total de colectores según el
"NCrecomendado" y "Acol"
ConsumoAnualACSm3 : resultado del consumo anual de ACS en m3.
NumDiasAnual : resultado del número total de días del año.
PruebaSC : resultado del cociente de consumo diario de ACS en m3 por m2 de
colectores instalados.
método public void Calcula_DemandaAnual(){
Calcula_vDemandaMJmes();
DemandaAnual=0;
for(int i=0;i<12;i++){
DemandaAnual=DemandaAnual+vDemandaMJmes[i];
}ConTresDecimales();
DemandaAnual=Double.valueOf(formateador.format(DemandaAnual)); }
105
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
2.2.5.11. Cálculo de la energía total obtenida por el sistema de captación de energía solar térmica
(ENTotalmes)
En el apartado anterior hemos calculado la energía neta disponible por metro cuadrado de
colector para cada mes del año, en este apartado se calculará la energía total disponible y que se
puede obtener por el sistema de energía solar térmica, para ello multiplicaremos la energía neta
disponible por la superficie del colector solar plano en metros cuadrados.
106
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vENTotalmes[i]: resultado de la energía neta total disponible, en función de la
superficie de colectores instalados, para el mes [i].
vENDmes[i]: resultado de la energía neta disponible por m2 de colector el mes [i].
Scresultante : resultado de la superficie de colectores instalada.
método public void Calcula_vENTotalmes(){
Calcula_vENDmes(); Calcula_SCresultante();
for(int i=0;i<12;i++){ vENTotalmes[i]=vENDmes[i]*SCresultante;
ConTresDecimales();
vENTotalmes[i]=Double.valueOf(formateador.format(vENTotalmes[i])); } }
Para la producción de agua caliente sanitaria es necesario aportar energía, para elevar la
temperatura del agua, en el sistema objeto del proyecto, esta energía se aportará mediante un
sistema de energía solar térmica. Este sistema, en días nublados y cubiertos no podrá
proporcionar toda la energía necesaria, para el calentamiento de toda el agua caliente sanitaria
que se consume en un día, aportando la energía que falta el sistema de aportación de energía
auxiliar.
El sistema de energía solar térmica aportará una gran parte de las necesidades energéticas. Así
en este apartado se calculará el porcentaje de aportación de energía solar en el sistema de agua
caliente sanitaria objeto del proyecto.
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vSustitucion[i]: resultado del cociente de la demanda energética y la energía solar
disponible para el mes [i].
vDemandaMJmes[i] : resultado de la demanda energética para el mes [i].
vENTotalmes[i]: resultado de la energía solar disponible para el mes [i].
método public void Calcula_vSustitucion(){
Calcula_vDemandaMJmes(); Calcula_vENTotalmes();
for(int i=0;i<12;i++){ if(vOcupacion[i]==0){vSustitucion[i]=0;}
else{double sust=vENTotalmes[i]/vDemandaMJmes[i];
vSustitucion[i]=sust;}
ConTresDecimales();
vSustitucion[i]=Double.valueOf(formateador.format(vSustitucion[i])); } }
107
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
Durante los meses de verano suele producirse un superávit de energía térmica, es decir se
produce mas energía térmica de la que se consume, por lo que se podría utilizar este exceso de
agua caliente sanitaria para otros usos que no sean los habituales.
Este déficit nos indica cuando la instalación de energía solar suministra toda la energía
necesaria, y cuando es necesario que entre en funcionamiento el sistema auxiliar de aportación
de energía, para suministrar el agua caliente sanitaria en las condiciones de consumo.
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vDeficit[i]: resultado de la diferencia entre la demanda de energía y la energía solar
para cada mes [i]
vDemandaMJmes[i]: resultado de la demanda energética para el mes [i].
vENTotalmes[i]: resultado de la energía solar disponible para el mes [i].
DeficitEnergeticoAnual : resultado de la suma de demanda energética no cubierta
por energía solar durante todo el año.
método public void Calcula_vDeficit(){
Calcula_vDemandaMJmes();
Calcula_vENTotalmes();
for(int i=0;i<12;i++){
vDeficit[i]=vDemandaMJmes[i]-vENTotalmes[i];
ConTresDecimales();
vDeficit[i]=Double.valueOf(formateador.format(vDeficit[i])); } }
Los valores positivos aparecen en color rojo y los negativos en color azul. Los datos negativos
significan que existe superávit de energía disponible para el calentamiento del agua caliente
108
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
sanitaria y por lo tanto están cubiertas todas las necesidades energéticas mediante la instalación
de energía solar térmica para la obtención de ACS. Para calcular el déficit total anual, los
valores negativos equivalen a un valor del 0%. Solo se indican en la pantalla para poder observar
cuanto y cuando la energía solar disponible sobrepasa a la demandada.
Nos da una idea del porcentaje de la demanda anual de energía que es sustituida por energía
solar. Como se indicó anteriormente, en los meses en que el valor de calculado vDeficit[i] resulte
negativo se considera igual a 0.
En el programa java:
clase LocalizacionACS
objeto pueblo
variables VCobertura[i]: resultado del % de la demanda energética mensual cubierta por
energía solar para el mes [i]
vDeficit[i]: resultado del déficit energético para el mes [i]
aportacionAnual : resultado de % de la demanda energética anual cubierta por
energía solar al cabo de un año.
método public void Calcula_vCobertura(){
Calcula_vDeficit();
for(int i=0;i<12;i++){
vCobertura[i]=100*(1-vDeficit[i]/vDemandaMJmes[i]);
ConTresDecimales();
vCobertura[i]=Double.valueOf(formateador.format(vCobertura[i])); } }
En el programa java:
109
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
clase LocalizacionACS
objeto pueblo
variables Preciokwh : dato de coste del kwh
vDemandaMJmes[i]: demanda energía en MJ para el mes [i]
DemandaAnual : demanda energía anual en MJ
vCEmes[i]: coste de la energía eléctrica para la demanda energética para el mes [i].
CosteEanual : coste de la energía eléctrica para la demanda anual.
vCosteAuxmes[i]: coste de la energía eléctrica para la demanda no cubierta por
energía solar para el mes [i]
CAuxAnual : coste de la energía eléctrica para la demanda no cubierta por energía
solar durante un año.
vAhorromes[i]: coste de la energía eléctrica cubierta por energía solar el mes [i].
AhorroAnual : coste de la energía eléctrica cubierta por energía solar.
método public void Calcula_vCosteEmes(){
Calcula_vDemandaMJmes();
for(int i=0;i<12;i++){ vCEmes[i]=Preciokwh/3.6*vDemandaMJmes[i];
ConTresDecimales();
vCEmes[i]=Double.valueOf(formateador.format(vCEmes[i])); } }
110
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
Figura 2. Curvas-f
Para estimar la aportación energética de la instalación solar mensualmente, basta con
determinar cada uno de los dos parámetros adimensionales y aplicar la correlación de las curvas-
f. De forma numérica f se puede calcular mediante siguiente ecuación:
2 2 3
f=1,029·D1-0,065·D2-0,245·D1 +0,0018·D2 +0,0215·D1
El parámetro D2 representa la relación entre las pérdidas de energía del captador y la carga
total de calentamiento durante un mes.
El parámetro D1 expresa la relación entre la energía absorbida en la superficie captadora y la
carga total de calentamiento durante un mes.
Así pues, conocida la radiación solar sobre la superficie de captación y el tipo y número de
captadores instalados, se puede calcular la aportación energética mensual para una determinada
demanda mediante el empleo del método de las curvas f.
111
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
Se define la carga calorífica (Qa) como la cantidad de calor mensual que se necesita para
calentar agua.
Qa=Ce·C·N·(ta-tr)
Qa : Carga calorífica mensual para calentar el agua (J/mes)
Ce : Calor específico del líquido calo-conductor en el proceso de intercambio de calor. En el
caso de agua su valor es de 4187 (J /kg°C).
C : Consumo diario de agua (litros/ día).
N : Número de días del mes.
ta : Temperatura del agua caliente de acumulación (°C).
tr : Temperatura del agua de red (°C).
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vfcarga[i]: resultado de la carga calorífica para el mes [i]
Ce : dato del calor específico del fluido caloportador, por defecto el agua.
N : dato del número de usuarios.
C : dato del consumo diario de ACS en litros/día·usuario
vDias[i]: dato del número de días del mes [i]
tac : dato de la temperatura del agua caliente
vTred[i] : dato temperatura del agua de red el mes [i] en provincia seleccionada.
vfporcetuso[i] : % variación temperatura de uso respecto a valor inicial en el mes [i].
vfporceocupacion[i]: % variación de ocupación respecto a su valor inicial el mes [i].
vfporcelitros[i]: % variación consumo diario de ACS respecto valor inicial el mes [i].
método public void Calcula_vfcarga(){
for(int i=0;i<12;i++){
vfcarga[i]=(Ce*N*C*vDias[i]*(tac-vTred[i]))/Math.pow(10,6);//MJ/mes
vfcarga[i]=(Ce*N*C*vDias[i]*(tac*vfporcetuso[i]-vTred[i]))/Math.pow(10,6);//
vfcarga[i]=vfcarga[i]*vfporceocupacion[i];//para los calculo variando la ocupacion en fchart
vfcarga[i]=vfcarga[i]*vfporcelitros[i];//para los calculo variando los litros en fchart
ConTresDecimales();
vfcarga[i]=Double.valueOf(formateador.format(vfcarga[i])); } }
112
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
2.2.7.2. Determinación de energía absorbida por el colector y pérdida del mismo (Ea, Ep).
La energía que absorbe el colector (Ea), la cual es trasformada en calor se calcula a través de la
ecuación:
Ea=Sc·F’r·(τα)·R1·N
• (τα)/(τα) Modificador del ángulo de incidencia. "MAI", valor por defecto 0.96. En general
n
se puede tomar como constante: 0,96 (superficie transparente sencilla) o 0,94 (superficie
transparente doble).
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vEabsorbida[i]: resultado de la energía absorbida para el mes [i].
FEO : dato del factor de eficiencia óptica del captador
MAI : dato del factor de modificación del ángulo de incidencia
FCCI : dato del factor de corrección del conjunto captador-intercambiador.
Fadim : resultado del factor adimensional
fSc : dato de la superficie en m2 de captación.
vE[i]: resultado de la radiación incidente por m2 de superficie inclinada, el mes [i].
Incluye factor de corrección por suciedad en la cubierta de los colectores
(- 3%) y por incidencia de rayos no perpenticulares (- 3%) de valor
experimental 0.94.
vDias[i]: dato del número de días del mes [i].
113
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
La energía que se pierde en el colector (Ep), se determina por medio de la siguiente ecuación:
En donde:
F’r· UL : Factor de eficiencia del intercambiador de calor del colector solar por el coeficiente
global de pérdidas del captador. Este factor viene asociado intrínsecamente a un factor de
disipación de calor. (%).
114
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vEperdida[i] : resultado de la energía perdida para el mes [i]
CGP : dato del coeficiente global de pérdidas del colector.
FCCI : dato del factor de corrección del conjunto captador-intercambiador.
FprUL : resultado de F’r· UL= Fr· UL·( F’r / Fr)
vDt[i] : resultado del número de segundos del mes [i].
K1 : resultado del factor de corrección k1 para almacenamientos (acumulación)
distintos de 75 litros/m2
KgA : datos de los kilogramos (volumen) de acumulación.
fSc : resultado de la superficie de captación en m2
vK2[i] : resultado del factor de corrección k2 para el mes [i].
0.95 : dato del FCCI
Tmin : dato temperatura mínima del ACS, por defecto igual a temperatura de uso.
vTamb[i] : dato de temperatura ambiente para el mes [i] en provincia seleccionada.
método public void Calcula_FprUL(){
FprUL=CGP*FCCI;
ConTresDecimales();
FprUL=Double.valueOf(formateador.format(FprUL)); }
Calcula_vDt();
Calcula_FprUL();
Calcula_K1();
Calcula_vK2();
for(int i=0;i<12;i++){
vEperdida[i]=fSc*FprUL*(100-vTamb[i])*vDt[i]*K1*vK2[i]/1000000;//Mj/mes
ConTresDecimales();
vEperdida[i]=Double.valueOf(formateador.format(vEperdida[i])); } }
115
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
A la ganancia del colector (D1) se la conoce como la energía solar útil proporcionada. Esta
ganancia relaciona la energía absorbida por la placa del colector usado y el parámetro Qa durante
un mes, como se muestra en la ecuación :
D1=Ea/Qa
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vD1[i] : resultado de la ganancia D1 para el mes [i]
vEabsorbida[i] : resultado de la energía absorbida para el mes [i].
vfcarga[i] : resultado de la carga calorífica para el mes [i].
método public void Calcula_D1(){
Calcula_vfcarga();
Calcula_vEabsorbidaf();
for(int i=0;i<12;i++){
vD1[i]=vEabsorbida[i]/vfcarga[i];
ConTresDecimales();
vD1[i]=Double.valueOf(formateador.format(vD1[i]));}}
Las pérdidas totales en el colector (D2) debido a la reflexión de la luz solar, relacionan las
pérdidas de energía en el captador a determinada temperatura, con la carga calorífica de
calentamiento (Qa) durante un mes según la siguiente ecuación :
D2=Ep/Qa
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vD2[i] : resultado de las pérdidas D2 para el mes [i].
vEperdida[i] : resultado de la energía perdida para el mes [i].
vfcarga[i] : resultado de la carga calorífica para el mes [i].
método public void Calcula_D2(){
Calcula_vfcarga();
Calcula_vEperdidaf();
for(int i=0;i<12;i++){
vD2[i]=vEperdida[i]/vfcarga[i];
ConTresDecimales();
vD2[i]=Double.valueOf(formateador.format(vD2[i]));}}
116
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
Qu = f·Qa
A la fracción de carga calorífica mensual (Qa), que se transforma en energía solar, se la conoce
como parámetro f. El cálculo de este parámetro se realiza con ayuda de la ecuación
2 2 3
f=1,029·D1-0,065·D2-0,245·D1 +0,0018·D2 +0,0215·D1
En el programa java:
clase LocalizacionACS
objeto pueblo
variables vf[i] : resultado del factor f para el mes [i].
vEutilc[i] : resultado de la energía útil captada para el mes [i].
vfcarga[i] : resultado de la carga calorífica para el mes [i].
vD1[i] : resultado de la ganancia D1 para el mes [i].
vD2[i] : resultado de las pérdidas D2 para el mes [i].
método public void Calcula_fchart(){
Calcula_D1(); Calcula_D2();
for(int i=0;i<12;i++){
vf[i]=1.029*vD1[i]-0.065*vD2[i]-
0.245*Math.pow(vD1[i],2)+0.0018*Math.pow(vD2[i],2)+0.0215*Math.pow(vD1[i],3);
//if(vf[i]>1){vf[i]=1;}
vf[i]=vf[i]*100;
ConTresDecimales();
vf[i]=Double.valueOf(formateador.format(vf[i]));}}
CSA=(ΣQu)/ (ΣQa)
En el programa java:
117
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
clase LocalizacionACS
objeto pueblo
variables CSA : resultado de la cobertura solar anual.
sumaQu : resultado de la suma de la energía útil captada todos los meses del año.
sumaQa : resultado de la suma de las cargas caloríficas de todos los meses del año.
método public void Calcula_CoberturaSA(){
Calcula_vfcarga();Calcula_vEutilcaptada();
double sumaQu=0;double sumaQa=0;
for(int i=0;i<12;i++){
sumaQu=sumaQu+vEutilc[i];
sumaQa=sumaQa+vfcarga[i];}
CSA=sumaQu/sumaQa;
ConTresDecimales();
CSA=Double.valueOf(formateador.format(CSA));}
public void Comprueba_K1_fchart(){
pruebak1=KgA/fSc;
ConTresDecimales();pruebak1=Double.valueOf(formateador.format(pruebak1)); }
En el programa java:
clase LocalizacionACS
objeto pueblo
variables VolAcuTeorico: resultado del volumen de acumulación, por defecto 70 litros por m2
de colector.
VolAcuDiseño : dato del volumen de acumulación introducido por el proyectista.
PruebaVolAcu : resultado del cociente del VolAcuTeorico entre el VolAcuDiseño
118
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
El sistema interacumulador se utiliza para acumular agua caliente sanitaria en las horas de
máxima radiación solar y esta agua será utilizada en los momentos de demanda. La producción
de agua caliente sanitaria no suele coincidir con los momentos de consumo, de ahí la necesidad
de acumularla.
119
APLICACIÓN JAVA. MEMORIA DE CÁLCULOS
120