Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO...

80
Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO PARA PROMOCIONAR LA INGENIERÍA ELÉCTRICA TRABAJO FIN DE GRADO dirigido por José Antonio Barrado Rodrigo Grado de Ingeniería Eléctrica Tarragona 2016

Transcript of Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO...

Page 1: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

Ivan Bellanco Bellanco

PROGRAMA INFORMÁTICO PARA PROMOCIONAR LA INGENIERÍA ELÉCTRICA

TRABAJO FIN DE GRADO

dirigido por José Antonio Barrado Rodrigo

Grado de Ingeniería Eléctrica

Tarragona

2016

Page 2: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

1.Índice

1

1. Índice

1. Índice .............................................................................................................................. 1

2. Introducción ................................................................................................................... 4

3. Antecedentes .................................................................................................................. 5

4. Objetivos ........................................................................................................................ 6

5. Comparativa de Posibles Soluciones.............................................................................. 7

5.1. LabView .................................................................................................................. 7

5.2. C# ............................................................................................................................ 8

5.3. Visual Basic ............................................................................................................ 8

5.4. Conclusiones ........................................................................................................... 9

6. Comparativa con Otras Aplicaciones ........................................................................... 10

6.1. WWF Switch’em off ............................................................................................. 10

6.2. CLMNTK .............................................................................................................. 10

6.3. Iberdrola Sustainability Game .............................................................................. 11

6.4. ElectroCity ............................................................................................................ 12

6.5. REE Controla tu energia ....................................................................................... 12

7. Introducción a Visual Basic ......................................................................................... 14

7.1. Plataforma de Desarrollo ...................................................................................... 14

7.1.1. Toolbox .......................................................................................................... 15

7.1.2. Formulario ..................................................................................................... 15

7.1.3. Properties ....................................................................................................... 15

7.1.4. Código ........................................................................................................... 16

7.2. Controles ............................................................................................................... 16

7.2.1. Button ............................................................................................................ 16

7.2.2. CheckBox ...................................................................................................... 16

7.2.3. Label .............................................................................................................. 16

7.2.4. PictureBox ..................................................................................................... 17

Page 3: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

1.Índice

2

7.2.5. ProgressBar .................................................................................................... 17

7.2.6. TableLayoutPanel .......................................................................................... 17

7.2.7. Timer ............................................................................................................. 17

7.2.8. TrackBar ........................................................................................................ 17

8. Índice de Programación ................................................................................................ 19

9. Código .......................................................................................................................... 22

9.1. Form 1 ................................................................................................................... 22

9.2. FInicio ....................................................................................................................... 35

9.3. FCicle ........................................................................................................................ 35

9.4. FEol ........................................................................................................................... 35

9.5. FHidro ....................................................................................................................... 36

9.6. FSol ........................................................................................................................... 37

9.7. FNuc .......................................................................................................................... 37

9.8. FSalir ......................................................................................................................... 37

9.9.FEventos .................................................................................................................... 38

9.10. FEventosImagenes .................................................................................................. 39

9.11. FEventosResp ......................................................................................................... 42

9.12. FInfo1 ...................................................................................................................... 44

9.13. Finfo2 ...................................................................................................................... 44

9.14. Final ........................................................................................................................ 45

10.Interfaz Gráfica ............................................................................................................... 46

10.1 . FInicio ................................................................................................................. 47

10.2. FSalir ................................................................................................................. 47

10.3. FInfo1 ................................................................................................................ 48

10.4. Finfo2 ................................................................................................................ 49

10.5. Form1 ................................................................................................................ 50

10.6. FCicle ............................................................................................................... 51

Page 4: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

1.Índice

3

10.7. FEol ................................................................................................................... 52

10.8. FHidro .............................................................................................................. 53

10.9. FNuc .................................................................................................................. 54

10.10. FSol ................................................................................................................... 55

10.11. FEventos ............................................................................................................ 56

10.12. FeventosResp .................................................................................................... 56

10.13. FEventosImagenes ............................................................................................ 57

10.14. Final ................................................................................................................... 57

11. Modelo Matemático .................................................................................................. 58

11.1. Energia Consumida Programada............................................................................. 58

11.2. Cuotas de Generación ............................................................................................. 59

11.3. Generación Eólica ................................................................................................... 62

11.4. Velocidad del Viento .............................................................................................. 64

11.5. Generación Solar ..................................................................................................... 67

11.6. Generación Hidráulica ............................................................................................ 70

11.7. Generación Nuclear ................................................................................................ 71

11.8. Generación Térmica ................................................................................................ 72

11.9. Funciones didacticas ............................................................................................... 72

11.10. Excepción .............................................................................................................. 75

11.11. Conclusiones ......................................................................................................... 76

12. Conclusiones ............................................................................................................. 77

13. Bibliografía ............................................................................................................... 78

Page 5: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

2. Introducción

4

2. Introducción

En el presente trabajo de final de grado se detalla la creación de una aplicación

informática, similar a un juego interactivo, para fomentar el interés de personas ajenas al

mundo universitario en el área de la ingeniería eléctrica.

Dedicado sobre todo a estudiantes de ESO, primaria o bachillerato que suelen asistir a

jornadas de puertas abiertas o visitas de la universidad, ayudándoles a enfocar su trayectoria

hacia la ingeniería eléctrica y mostrándoles algunos de los conocimientos que podrían

adquirir.

Se ha tomado como punto de partida un programa anterior, de la misma índole, con el

objetivo de corregir las deficiencias que se observaron y mejorar el rendimiento global y la

parte visual de la aplicación, así como hacerlo más dinámico y entretenido.

Page 6: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

3. Antecedentes

5

3. Antecedentes

Durante el curso 2014 – 2015 se me otorgó una beca de colaboración para dar soporte

a proyectos de innovación docente del Instituto de Ciencias de la Educación, con una jornada

laboral de 15 horas semanales, durante 6 meses.

Durante ese tiempo se creó un programa basado en el lenguaje LabView que, a

diferencia de los lenguajes tradicionales, presenta una programación gráfica. Además, se

complementa con una tarjeta de adquisición para que el equipo pueda comunicarse con el

mundo externo.

Tras crear el programa, se puso a prueba con alumnos de educación primaria,

secundaria y bachillerato, con la intención de detectar los posibles errores y las mejoras

pertinentes.

LabView presentaba restricciones severas, ya que, para poder ejecutar el programa se

necesitaba instalar en el ordenador programas propios de LabView, no reajustaba el apartado

gráfico a las diferentes resoluciones de pantalla y no disponía de documentación de soporte,

ya sea impresa o digital, para consultar en caso de dudas sobre el lenguaje.

A partir de toda la experiencia anterior, se decidió cambiar el lenguaje de

programación a uno con mayor accesibilidad para los usuarios, y definir unos objetivos

basados en la experiencia anterior (Descritos en el apartado 4. Objetivos).

Page 7: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

4. Objetivos

6

4. Objetivos

Llegados a este punto, se marcan los siguientes objetivos:

Hacer el programa más interactivo

Utilizar un lenguaje más accesible para los usuarios

Implementar diferentes niveles de dificultad

Adaptarse a diferentes resoluciones de pantalla

No infringir derechos de imágenes

Continuar con la divulgación de la ingeniería eléctrica

Page 8: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

5. Comparativa de Posibles Soluciones

7

5. Comparativa de Posibles Soluciones

En el siguiente apartado se comparan las diferentes soluciones que existen para

cumplir los objetivos del apartado 4.

5.1. LabView

LabVIEW (acrónimo de Laboratory Virtual Instrumentation Engineering Workbench)

es una plataforma y entorno de desarrollo para diseñar sistemas, con un lenguaje de

programación visual gráfico. Recomendado para sistemas de hardware y software de

pruebas, control y diseño, ya que se complementa con una tarjeta de adquisición, conectada

a los puertos del ordenador, permitiendo adquirir datos del exterior. El lenguaje que usa se

llama lenguaje G, donde la G simboliza lenguaje Gráfico.

Este programa fue creado por National Instruments (1976) para funcionar sobre

máquinas MAC. Ahora está disponible para las plataformas Windows, UNIX, MAC y

GNU/Linux.

Su principal característica es la facilidad de uso, válido para programadores

profesionales como para personas con pocos conocimientos en programación pueden hacer

programas relativamente complejos. También es muy rápido hacer programas con LabVIEW

y cualquier programador, por experimentado que sea, puede beneficiarse de él. Los

programas en LabView son llamados instrumentos virtuales (VIs).

El lenguaje G tiene una gran potencia de cálculo, típica de lenguajes orientados a

operaciones matemáticas. Sin embargo el aspecto gráfico queda de un tono un tanto

desfasado, en comparación con las posibilidades gráficas de otros lenguajes. En la figura

5.1.1. se puede ver un ejemplo del entorno gráfico de LabView.

Figura 5.1.1. Entorno gráfico de LabView

Page 9: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

5. Comparativa de Posibles Soluciones

8

A demás este lenguaje necesita de un programa que lo interprete para poder ser

ejecutado. Es decir, que el usuario tendría que descargar software de LabView, e instalarlo

en el ordenador para poder ejecutar el programa.

5.2. C#

C# (pronunciado si sharp en inglés) es un lenguaje de programación orientado a

objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET. C#

es uno de los lenguajes de programación diseñados para la infraestructura de lenguaje

común.

Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma

.NET, similar al de Java, aunque incluye mejoras derivadas de otros lenguajes.

El nombre C Sharp fue inspirado por la notación musical, donde '#' (sostenido, en

inglés sharp) indica que la nota (C es la nota do en inglés) es un semitono más alta, sugiriendo

que C# es superior a C/C++. Además, el signo '#' se compone de cuatro signos '+' pegados.

Aunque C# forma parte de la plataforma .NET, ésta es una API, mientras que C# es

un lenguaje de programación independiente diseñado para generar programas sobre dicha

plataforma. Ya existe un compilador implementado que provee el marco Mono - DotGNU,

el cual genera programas para distintas plataformas como Windows, Unix, Android, iOS,

Windows Phone, Mac OS y GNU/Linux.

Este lenguaje esta principalmente orientado a objetos, con una potente capacidad

gráfica, además de tener un amplio repositorio de información por parte de Microsoft y

muchos libros para tomar referencia del lenguaje. Como puntos en contra destaca la

necesidad de una buena base de programación y conocimientos de programación a objetos.

5.3.Visual Basic

Visual Basic es un lenguaje de programación dirigido por eventos, desarrollado por

Alan Cooper para Microsoft. Este lenguaje de programación es un dialecto de BASIC, con

importantes agregados. Su primera versión fue presentada en 1991, con la intención de

simplificar la programación utilizando un ambiente de desarrollo que facilitó en cierta

medida la programación misma.

Page 10: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

5. Comparativa de Posibles Soluciones

9

Aunque Visual Basic es de propósito general, también provee facilidades para el

desarrollo de aplicaciones de bases de datos usando Data Access Objects, Remote Data

Objects o ActiveX Data Objects.

Visual Basic contiene un entorno de desarrollo integrado o IDE que integra editor de

textos para edición del código fuente, un depurador, un compilador (y enlazador) y un editor

de interfaces gráficas o GUI.

Visual Basic suele ser un lenguaje muy común en las escuelas de ingeniería, ya que

resulta muy accesible para los usuarios con pocos conocimientos de programación, y permite

crear interfaces gráficas con mucha rapidez. Además permite crear ejecutables para

programas con sistema operativo Windows, que es uno de los más populares del mercado.

5.4. Conclusiones

Tras todo lo anterior mostrado, se decidió elegir Visual Basic como lenguaje de

programación por las siguientes razones:

Fácil programación

Riqueza de recursos gráficos

Fácil implementación con Windows

Page 11: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

6. Comparativa con Otras Aplicaciones

10

6. Comparativa con Otras Aplicaciones

La idea de promocionar la ingeniería eléctrica no es nueva, ya que, en la red podemos

encontrar diferentes programas o juegos que promueven el uso de las energías renovables

con la intención de inculcar buenos hábitos al público infantil. A continuación se muestran

algunos ejemplos:

6.1. WWF Switch’em off

En este juego de la World Wildlife Fund, se debe desconectar las centrales

contaminantes que van apareciendo a lo largo de las pantallas. Si se tarda mucho en

desconectarlas, la contaminación del aire provocará que se pierda el juego. Ver figura 6.1.

Pese a ser un juego entretenido, resulta injusto para las centrales térmicas, ya que las

centrales de ciclo combinado pueden tener una elevada eficiencia. Además, en vez de

enfatizar el uso de energía renovable la intención acaba siendo evitar el uso de energía

contaminante.

6.2.CLMNTK

Este juego de la asociación gallega Climantica es uno de los más completos. Se trata

de construir una ciudad y tomar decisiones que la conduzcan a un crecimiento sostenible. A

Figura 6.1. Juego WWF Switch’em off

Page 12: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

6. Comparativa con Otras Aplicaciones

11

lo largo del juego aparecen preguntas que comportaran un beneficio o una penalización. El

único inconveniente del juego es su duración y complejidad, ya que pueden ser excesivas

para algunos usuarios. Ver Figura 6.2.

6.3. Iberdrola Sustainability Game

Este juego de la compañía de energía eléctrica Iberdrola se asemeja a un juego de mesa

tipo Trivial, en el que las casillas contienen preguntas, que al ser respondidas correctamente

suman puntos al usuario, como se ve en la Figura 6.3. Las preguntas pueden tratar sobre:

consejos para ahorrar factura eléctrica, preguntas sobre la energía eólica, cambio climático

o información de las acciones que Iberdrola lleva a cabo a nivel mundial. Es un juego online

y además tiene dos niveles de dificultad, uno para niños y otro para adultos, pudiendo jugar

a la vez varias personas de una familia.

Figura 6.2. Juego CLMNTK

Page 13: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

6. Comparativa con Otras Aplicaciones

12

6.4.ElectroCity

Este juego en inglés se basa en crear una ciudad y aprovechar los recursos naturales,

decidiendo entre respetar el medio ambiente o generar energía eléctrica a bajo coste. El

desarrollo del juego es lento, pero posee un alto contenido educativo. Ver Figura 6.4.

6.5. REE Controla tu energía

Juego de Red Eléctrica de España que consiste en igualar la generación de energía

eléctrica a la energía demandada a través de las diferentes centrales, como se ve en la Figura

6.5. Van sucediendo diferentes eventos como: líneas que fallan por robos o fenómenos

meteorológicos, paradas de la central nuclear, países como Portugal, Marruecos o Francia

Figura 6.3. Juego Iberdrola Sustainability Game

Figura 6.4. Juego ElectroCity

Page 14: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

6. Comparativa con Otras Aplicaciones

13

que necesitan energía. En mi opinión es un juego entretenido pero puede resultar difícil de

seguir.

Figura 6.5. Juego REE controla tu energia

Page 15: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

7. Introducción a Visual Basic

14

7. Introducción a Visual Basic

En este punto, se detallan las características propias del lenguaje de programación

Visual Basic. No se especifica en detalle el funcionamiento de las características de código,

ya que es recomendable que el lector posea ciertas bases en programación, como

conocimiento de variables, asignaciones de valores o el uso de funciones.

7.1.Plataforma de Desarrollo

La plataforma de desarrollo que se utilizó para este proyecto fue la aplicación de

Microsoft Visual Studio 2015, que es gratuita para usuarios con cuenta Microsoft.

En la figura 7.2.1. y 7.2.2. se puede ver el aspecto visual de Microsoft Visual Studio

2015. En el área de trabajo podemos destacar, a parte de las barras superiores de

herramientas, cuatro secciones principales: la sección denominada Toolbox, la ventana

nombrada Form [Design], que es la interfaz visual, la sección de Propierties y la ventana

nombrada Form, que se corresponde con la ventana de código.

Figura 7.2.1. Microsoft Visual Studio 2015

Page 16: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

7. Introducción a Visual Basic

15

7.1.1. Toolbox

Esta parte de la interfaz nos permite seleccionar los controles que podemos incluir en

nuestra ventana, como pueden ser botones, imágenes o texto. Si el lector es usuario habitual

del sistema operativo de Windows, podrá observar que todos estos controles son los más

habituales de las ventanas de este sistema.

Con simplemente arrastrar un control hasta el formulario, este se situara donde

deseemos, y se incluirá en el código automáticamente, sin tener que escribir en código todo

su funcionamiento.

7.1.2. Formulario

Formulario (abreviado a Form) es como se denomina en Visual Basic a las ventanas

que el usuario ve en un sistema Windows. Con lo cual el programador, puede ver en todo

momento el resultado visual del programa, sin tener que ejecutar una y otra vez el programa.

7.1.3. Properties

Esta pestaña permite al programador cambiar cualquier parámetro del Form o los

controles incluidos en el Form.

Figura 7.2.2. Microsoft Visual Studio 2015

Page 17: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

7. Introducción a Visual Basic

16

Desde la posición, si es visible o no para el usuario, tamaño, color y un número de

propiedades aun mayor, el programador puede personalizar, con un número infinito de

posibilidades, el aspecto del programa.

7.1.4. Código

Cada Form tiene asociada una ventana de código, donde se puede generar eventos. Por

ejemplo, si un Form tiene un botón, en la ventana de código podremos escribir, cuales son

las acciones que el programa generará cuando el usuario haga un doble clic sobre el mismo.

Esta es la ventana que el usuario final no podrá ver y que solo se usa durante la fase

de programación.

7.2. Controles

Por tal de que el lector pueda interpretar bien el código se explicará cuales son cada

uno de los controles que han sido utilizados en el desarrollo del programa. En la imagen

7.3.1. mostrada al final de este punto, se puede observar el aspecto visual de cada uno de los

controles, mostrados de izquierda a derecha en el mismo orden que son enumerados. El

control Timer no tiene una interfaz visual, ya que es un cálculo del programa, por tanto no

saldrá en la imagen nombrada.

7.2.1. Button

El control Button permite al usuario hacer clic en él para llevar a cabo una acción. El

control Button puede mostrar texto e imágenes. Al hacer clic en el botón, parece como si se

hubiera presionado y soltado.

7.2.2. CheckBox

El control CheckBox indica si una condición determinada está activada o desactivada.

Normalmente se utiliza para presentar una selección Sí/No o Verdadero/Falso al usuario. Se

puede utilizar de controles de casilla en grupos para mostrar múltiples opciones de entre las

que el usuario puede seleccionar una o más. Es similar al control RadioButton, pero se puede

seleccionar cualquier número de controles CheckBox agrupados.

7.2.3. Label

Los controles Label de formularios se utilizan para mostrar texto o imágenes que el

usuario no puede editar. Se utilizan para identificar objetos en un formulario; por ejemplo,

Page 18: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

7. Introducción a Visual Basic

17

para proporcionar una descripción de lo que hará cierto control si se hace clic en él o para

mostrar información en respuesta a un evento o proceso en tiempo de ejecución de la

aplicación. Dado que el control Label no puede recibir el foco, puede utilizarse también para

crear teclas de acceso para otros controles.

7.2.4. PictureBox

Representa un control de cuadro de imagen de Windows para mostrar una imagen.

7.2.5. ProgressBar

Representa un control de barra de progreso de Windows, simulando procesos de carga

de datos.

7.2.6. TableLayoutPanel

Representa un panel que dispone dinámicamente su contenido en una cuadrícula que

se compone de filas y columnas y permite ajustar la distancia entre ellas, permitiendo

mantener una relación de aspecto entre los controles. Solo es visible durante la

programación.

7.2.7. Timer

Genera un evento después de un intervalo establecido, con la opción de generar

eventos recurrentes.

7.2.8. TrackBar

El control TrackBar (también denominado en ocasiones control "deslizante") se utiliza

para navegar por grandes volúmenes de información o para ajustar visualmente una

configuración numérica. El control TrackBar tiene dos partes: el control de posición,

también conocido como control deslizante, y las marcas de paso. El control de posición es

la parte que puede ajustarse. Su posición corresponde a la propiedad Value. Las marcas de

paso son indicadores visuales espaciados a intervalos regulares. La barra de seguimiento se

desplaza en los incrementos que se especifiquen y puede alinearse horizontal o

verticalmente. Un ejemplo del uso de una barra de seguimiento sería el establecimiento de

la velocidad de intermitencia del cursor o de la velocidad del mouse.

Page 19: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

7. Introducción a Visual Basic

18

Figura 7.3.1. Controles de Form

Page 20: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

8. Índice de Programación

19

8. Índice de Programación

Debido al alto número de variables del programa, puede resultar un tanto confuso,

encontrar qué variable tiene determinada función, por tanto, en este punto se enumerarán

todas las variables del programa y los controles con nombres específicos, ordenados

alfabéticamente en la Tabla 8.1.

Nombre Función

AumentoEolica Aumento del tanto por ciento de energía Eólica.

AumentoSolar Aumento del tanto por ciento de energía solar.

AuxEol Variable global, que se utiliza como variable de apoyo en el proceso

de cálculo de la velocidad del viento.

AuxHidro Variable global, que se utiliza como variable de apoyo en el proceso

de vaciado de la presa.

Capacidad Variable global que indica el tanto por ciento de llenado de la presa

hidráulica.

Clima Variable global que se utiliza para calcular cual es el clima a

mostrar (soleado o nubes).

EnergiaAbs Variable global que indica cual es la energía absorbida, y que por

tanto es la que el usuario tiene que generar.

EnergiaBase Energía base siempre presente.

Facil Variable que indica si el usuario a elegido la versión fácil.

FCicle Form perteneciente al ciclo combinado.

FEol Form perteneciente a la energía eólica.

FEventos Form que se utiliza para mostrar preguntas y eventos al usuario.

FHidro Form perteneciente a la energía hidroeléctrica.

FInfo Form perteneciente a la información inicial para el usuario.

FInicio Pantalla de carga inicial del programa.

FNuc Form perteneciente a la energía nuclear.

Form1 Form principal. Es la pantalla principal del juego.

FSalir Form que se muestra al salir, por tal de asegurar de que el usuario

realmente quiere salir.

FSol Form que pertenece a la energía solar generada.

GraficAbs(5) Guarda la energía absorbida.

Page 21: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

8. Índice de Programación

20

GraficEnergia(5) Guarda la energía producida.

GraficHores(5) Guarda las horas para mostrarlas por un gráfico.

Hora Variable global que indica la hora a mostrar en el reloj.

HoraSiguiente La hora a la que se comprobara la energía.

LluviaTim Para determinar si había lluvia al parar un timer.

Minutos Variable global que indica que minutos mostrar en el reloj.

Noche Variable global que indica si es o no de noche.

NumPregunta Para determinar en qué número de pregunta nos encontramos.

PBNuc Variable global que indica el valor de posición del ProgresBar de

FNuc.

PreguntasActivas Variable para determinar si se ha activado una pregunta.

Probabilidad Para calcular la probabilidad de Velocidad de viento.

ReduccionConsumo Reducción del consumo de energía.

RepNucTim Para determinar si estábamos reparando al parar un timer.

RespCorrecta Para determinar qué respuesta es la correcta.

TBCicle Variable global que indica el valor de posición del TrackBar de

FCicle.

TBEol Variable global que indica el valor de posición del TrackBar de

FEol.

TBHidro Variable global que indica el valor de posición del TrackBar de

FHidro.

TBSol Variable global que indica el valor de posición del TrackBar de

FSol

UltimaHora Variable global que indica se utiliza para guardar la última hora del

reloj, y poder hacer cálculos de comparación.

VCicle Variable global que indica el valor de energía generada en el ciclo

combinado.

VEol Variable global que indica el valor de energía eólica generada.

VHidro Variable global que indica el valor de energía hidroeléctrica

generada.

Viento Variable global que se utiliza para calcular cual es la velocidad del

viento.

VNuc Variable global que indica el valor de energía nuclear generada.

Page 22: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

8. Índice de Programación

21

VSol Variable global que indica el valor de energía solar generada.

VTotal Variable global que indica el valor de toda la energía generada.

Vuelta Para saber cuántas veces se ha pasado por la hora de revisión.

Tabla 8.1. Índice de programación.

Page 23: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

22

9. Código

En este apartado se muestra todo el código que forma la aplicación desarrollada. Se

dividirá por los diferentes forms a los que pertenece. Recuérdese que las líneas que empiezan

con el símbolo del apostrofe ( ‘ ) son anotaciones que solo sirven para aclarar información,

y no son leídas por el compilador.

Se ha seguido el mismo código de color que se utiliza en el programa Visual Studio,

para facilitar su comprensión.

9.1. Form 1

10. Imports System.Threading 'Necesario para ejecutar programas en paralelo 11. 12. Module Variables 13. '///////////Variables de los valores de generacion///////// 14. Public VSol As Integer 'Variable global indica Valor energia generada

por Sol 15. Public VEol As Integer 'Variable global indica Valor energia generada

por Eol 16. Public VHidro As Integer 17. Public VCicle As Integer 18. Public VNuc As Integer 19. Public VTotal As Double 'Variable global que indica el valor de totes les

energies 20. '/////Variables para guardar datos de los controles//////// 21. 'Para que el valor del trackbar no fuese 0 cada vez que se llama a un

nuevo form, se definen 22. 'las variables TBXXXX, para almacenar el ultimo valor del TB. 23. Public TBSol As Integer 'Variable global indica Valor del trackbar

de Sol 24. Public TBEol As Integer 'Variable global indica Valor del trackbar de

Eol 25. Public TBHidro As Integer 26. Public TBCicle As Integer 27. Public PBNuc As Integer 'Variable que guarda el valor del progres bar nuc 28. Public Capacidad As Integer 'Variable global que indica el valor de

llenado de la presa 29. Public NumPregunta As Integer ' Marca que pregunta se mostrará 30. Public RespCorrecta As String 'Indica si la respuesta es correcta o

incorrecta 31. Public GraficHores(5) As Integer 'Guarda las horas para mostrarlas por un

grafico 32. Public GraficEnergia(5) As Integer 'Guarda la energia producida 33. Public GraficAbs(5) As Integer 'Guarda la energia absorvida 34. Public Vuelta As Integer 'Para saber cuantas veces se ha pasado por la

hora de revision 35. Public Hora As Integer 'hora actual 36. Public Minutos As Integer 'Minutos actuales 37. Public EnergiaAbs As Integer 'variable que indica la energia

programada 38. Public Facil As Boolean 'Variable que indica si el usuario a elegido

la versión fácil 39. Public EmpezadoCicle As Boolean 'Para saber si hemos mostrado ya un

mensaje 40. Public Contaminacion As Integer 'Valor de la contaminacion 41. '////////Variables de procesos internos aleatorios /////

Page 24: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

23

42. Public Clima As Integer 'Variable global que indica el clima que debemos mostrar

43. Public Estado As Boolean 'Variable global que indica si una funcion esta activa o desactivada

44. Public Viento As Integer 'Variable que indica el viento que hace 45. Public Probabilidad As Integer 'Para calcular la probabilidad de

Velocidad de viento 46. Public AuxEol As Integer 'Variable que ayuda al calculo de saturacion

del viento 47. Public Noche As Boolean 'Para determinar si la hora corresponde a la

noche 48. Public HoraSiguiente As Integer 'La hora a la que se comprovara la

energia 49. Public LluviaTim As Boolean 'Para determinar si habia lluvia al parar

un timer 50. Public RepNucTim As Boolean 'Para determinar si estabamos reparando

al parar un timer 51. '////Variables de proceso en paralelo///////// 52. Public Prueba As Thread 'Variable que permite el subproceso 53. Public AuxHidro As Integer 'Variable para ayudar a la reduccion de la

presa 54. Public PreguntasActivas As Boolean ' Variable para determinar si se ha

activado una pregunta 55. '//////Variables de las respuestas a las preguntas///// 56. Public ReduccionConsumo As Integer 'Reduccion del consumo de energia 57. Public EnergiaBase As Integer 'Energia base siempre presente 58. Public AumentoSolar As Integer 'Aumento del tanto porciento de

energia solar 59. Public AumentoEolica As Integer 'Aumento del tanto porciento de

energia Eolica 60. End Module 61. 62. Public Class Form1 63. '///Definicion de variables iniciales///// 64. Dim RespCorrecta = "Incorrecte" 65. Dim Capacidad = 93 66. Dim PBNuc = 100 67. Dim Minutos = 0 68. Dim VNuc = 4050 'Energia nuclear a máximo rendimiento 69. Dim Vuelta = 0 70. Dim EmpezadoCicle = False 71. '/////Variables propias de esta funcion///// 72. Private Aux As Boolean 73. Private LastClim As Integer 74. Private CallVAlertaCap = False 'Variable que define si hemos llamado o

no a ValertaCAp 75. 'para no repetir el mensaje varias veces 76. Public Sub ThreadTask() 'Método que permite ir actualizando el valor de

la capacidad de la presa 77. Control.CheckForIllegalCrossThreadCalls = False 'Orden por tal de que

se puede cambiar los labels desde un subproceso 78. Estado = True 'Indicamos que la funcion esta activa 79. Do 80. If Capacidad <= 10 Then 'Mostramos un mensaje si la capacidad

disminuye demasiado 81. VAlertaCap() 82. Else 83. Capacidad = Capacidad - AuxHidro 'Vamos restando valor a la

capacidad con auxhidro, que es 0 en caso de 84. 'que no haya empezado el programa 85. ContPresa.Text = Capacidad & " %" 'Actualizamos los labels

con cada vuelta

Page 25: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

24

86. FHidro.ContPresa.Text = Capacidad & " %" 87. RefCapacidad() 88. If Facil Then 89. Thread.Sleep(3000 - VHidro / 13) 'En funcion de lo que

generen se reduce mas rapido 90. Else 91. Thread.Sleep(3000 - VHidro / 9) 'Esperamos 2 segundos

entre vueltas 92. End If 93. 94. End If 95. Loop 96. End Sub 97. Sub RefCapacidad() 'Para refrescar la imagen de la capacidad de la presa 98. If Capacidad > 90 Then 99. PBCapacidad.Image = ControlE.My.Resources.Resources.Capacidad100 100. ElseIf Capacidad > 80 Then 101. PBCapacidad.Image =

ControlE.My.Resources.Resources.Capacidad90 102. ElseIf Capacidad > 70 Then 103. PBCapacidad.Image =

ControlE.My.Resources.Resources.Capacidad80 104. ElseIf Capacidad > 60 Then 105. PBCapacidad.Image =

ControlE.My.Resources.Resources.Capacidad70 106. ElseIf Capacidad > 50 Then 107. PBCapacidad.Image =

ControlE.My.Resources.Resources.Capacidad60 108. ElseIf Capacidad > 40 Then 109. PBCapacidad.Image =

ControlE.My.Resources.Resources.Capacidad50 110. ElseIf Capacidad > 30 Then 111. PBCapacidad.Image =

ControlE.My.Resources.Resources.Capacidad40 112. ElseIf Capacidad > 21 Then 113. PBCapacidad.Image =

ControlE.My.Resources.Resources.Capacidad30 114. Else 115. PBCapacidad.Image =

ControlE.My.Resources.Resources.Capacidad20 116. End If 117. End Sub 118. Public Sub SecuenciaInicial() 119. '///////////Parte de eólica///////// 120. VViento() 'Viento aleatorio 121. LabelVViento.Text = "Velocitat vent: " & Int(Viento) & " m/s" 122. FEol.ComprovarMaximo() 'Comprobamos la saturación 123. VEol = TBEol * 0.0074 * AuxEol ^ 3 'Calculamos la generación 124. '////////////Parte del reloj///////////// 125. Randomize() 'Para números realmente aleatorios 126. Hora = Int(Rnd() * 24) 'Numero aleatorio entre 0 y 24 127. If Hora = 24 Then 'Las 24 horas son las 00 128. Hora = 0 129. End If 130. LabelHora.Text = "Actual: " & Hora & ":00" 131. '////////////Parte climatica//////////// 132. Climatologia() 'Clima (sol) aleatorio 133. '///////////Parte de consumo//////////// 134. BaseDatos() 'Marcamos la energia a consumir 135. ContECons.Text = EnergiaAbs & " kWh" 136. '///////////Escribimos la hora de revision////////// 137. If Hora = 20 Then

Page 26: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

25

138. HoraSiguiente = 0 139. ElseIf Hora = 21 Then 140. HoraSiguiente = 1 141. ElseIf Hora = 22 Then 142. HoraSiguiente = 2 143. ElseIf Hora = 23 Then 144. HoraSiguiente = 3 145. Else 146. HoraSiguiente = Hora + 4 147. End If 148. LabelHoraSeg.Text = "Revisió: " & HoraSiguiente & ":00" 149. '//////////Iniciamos las preguntas///////////////// 150. TimerEventos.Start() 'Iniciamos el temporizador de

preguntas 151. '///////Dificultad/////////////////// 152. If Facil Then 153. TimerNuc.Interval = 2000 154. Else 155. TimerNuc.Interval = 1700 156. 157. End If 158. End Sub 159. Sub Refrescar() 'Funcion que permite refrescar el valor total de

energia 160. VTotal = VSol + VEol + VHidro + VNuc + VCicle + EnergiaBase 161. ContEGenSol.Text = VSol 162. ContEGenEol.Text = VEol 163. ContEGenNuc.Text = VNuc 164. ContEGenCicle.Text = VCicle 165. ContEGenTot.Text = VTotal & " kWh" 166. FCicle.ContEGenTot.Text = VTotal & " kWh" 167. FEol.ContEGenTot.Text = VTotal & " kWh" 168. FHidro.ContEGenTot.Text = VTotal & " kWh" 169. FNuc.ContEGenTot.Text = VTotal & " kWh" 170. FSol.ContEGenTot.Text = VTotal & " kWh" 171. End Sub 172. Sub Climatologia() 'Funcion que permite dar un clima aleatorio 173. Randomize() 174. Clima = Rnd() * 100 'Le damos un valor aleatorio a la

variable Clima 175. 'Según el valor aleatorio distinguimos entre dos situaciones 176. If Hora >= 21 Or Hora < 7 Then 'Segun la hora sera de noche o

día 177. Noche = True 178. Else 179. Noche = False 180. End If 181. If Noche Then 182. LabelNubes.Visible = False 183. PBClima.Image = ControlE.My.Resources.Resources.Noche 184. TBSol = 0 185. VSol = 0 186. Refrescar() 187. ContEGenSol.ForeColor = Color.Red 188. LastClim = Clima 189. Timerlluvia.Stop() 190. ElseIf Clima < 77 Then 'Probabilidad de sol 77% 191. ContEGenSol.ForeColor = Color.White 192. PBClima.Image = ControlE.My.Resources.Resources.Sol 193. LabelNubes.Visible = False 194. If LastClim >= 77 Then 'Si el anterior clima fue nubes

Page 27: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

26

195. TBSol = TBSol + TBSol * 42.874 / 100 'Actualizamos el valor automaticamente

196. VSol = VSol + VSol * 42.874 / 100 197. Timerlluvia.Stop() 'Detenemos la lluvia 198. If VSol > 3150 Then 'Para evitar valores superiores al

máximo 199. VSol = 3150 200. TBSol = 3150 201. End If 202. Refrescar() 203. End If 204. LastClim = Clima 205. Else 'Evento Nubes 206. ContEGenSol.ForeColor = Color.White 207. PBClima.Image = ControlE.My.Resources.Resources.nubes 208. If LastClim < 77 Then 'Si el anterior clima fue sol 209. TBSol = TBSol - TBSol * 30 / 100 210. VSol = VSol - VSol * 30 / 100 211. Refrescar() 212. End If 213. LabelNubes.Visible = True 'Mostramos informacion de que

se ha reducido VSol 214. LastClim = Clima 215. Timerlluvia.Start() 'La lluvia rellena la presa 216. End If 217. 218. End Sub 219. Sub Climatologia_Sub() 'Para la subform 220. If Noche Then 221. FSol.PBClima.Image = ControlE.My.Resources.Resources.Noche 222. FSol.TrackBarSol.Enabled = False 223. FSol.LabelBloq.Visible = True 224. ElseIf Clima < 77 Then 'Clima con Sol 225. FSol.PBClima.Image = ControlE.My.Resources.Resources.Sol 226. FSol.TrackBarSol.Maximum = 3150 227. FSol.TrackBarSol.Enabled = True 228. FSol.LabelBloq.Visible = False 229. Else 'Clima con nubes 230. FSol.PBClima.Image = ControlE.My.Resources.Resources.nubes 231. FSol.TrackBarSol.Maximum = 2205 232. FSol.TrackBarSol.Enabled = True 233. FSol.LabelBloq.Visible = False 234. End If 235. End Sub 236. Sub RandomViento() 237. Randomize() 'Para que los numeros no sean los mismos cada vez

que se inicia el programa 238. 'Sumaremos todas las probabilidades para que salga un numero 239. 'Probabilidad = (Rnd() * 1.1) + (Rnd() * 1.3) + (Rnd() * 2.4)

+ (Rnd() * 4.05) + (Rnd() * 5.2) + (Rnd() * 5.7) + (Rnd() * 6.2) + (Rnd() * 6.3) + (Rnd() * 6.2) + (Rnd() * 6.15) + (Rnd() * 6.25) + (Rnd() * 5.9) + (Rnd() * 5.5) + (Rnd() * 5.1) + (Rnd() * 4.5) + (Rnd() * 4.4) + (Rnd() * 3.9) + (Rnd() * 3.4) + (Rnd() * 2.8) + (Rnd() * 2.4) + (Rnd() * 1.7) + (Rnd() * 1.3) + (Rnd() * 1.2) + (Rnd() * 0.95) + (Rnd() * 0.7) + (Rnd() * 0.7) + (Rnd() * 0.5) + (Rnd() * 0.6) + (Rnd() * 0.5) + (Rnd() * 0.4) + (Rnd() * 0.4) + (Rnd() * 0.35) + (Rnd() * 0.3) + (Rnd() * 0.3) + (Rnd() * 0.3) + (Rnd() * 0.2) + (Rnd() * 0.2) + (Rnd() * 0.15) + (Rnd() * 0.01) + (Rnd() * 0.01) + (Rnd() * 0.075) + (Rnd() * 0.05) + (Rnd() * 0.05) + (Rnd() * 0.03) + (Rnd() * 0.03) + (Rnd() * 0.02) + (Rnd() * 0.01) + (Rnd() * 0.01) + (Rnd() * 0.005) + (Rnd() * 0.005) + (Rnd() * 0.005) + (Rnd() * 0.005) + (Rnd() * 0.005)

240. Probabilidad = (Rnd() * 100)

Page 28: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

27

241. Select Case Probabilidad 'Segun la probabilidad habrá una velocidad de viento

242. Case > 97.6 243. Viento = 1 244. Case > 91.15 245. Viento = 2 246. Case > 80.25 247. Viento = 3 248. Case > 67.75 249. Viento = 4 250. Case > 55.4 251. Viento = 5 252. Case > 43.25 253. Viento = 6 254. Case > 32.65 255. Viento = 7 256. Case > 23.75 257. Viento = 8 258. Case > 16.45 259. Viento = 9 260. Case > 11.25 261. Viento = 10 262. Case > 8.25 263. Viento = 11 264. Case > 6.1 265. Viento = 12 266. Case > 4.7 267. Viento = 13 268. Case > 3.6 269. Viento = 14 270. Case > 2.7 271. Viento = 15 272. Case > 1.95 273. Viento = 16 274. Case > 1.35 275. Viento = 17 276. Case > 0.85 277. Viento = 18 278. Case > 0.5 279. Viento = 19 280. Case > 0.3 281. Viento = 20 282. Case > 0.175 283. Viento = 21 284. Case > 0.095 285. Viento = 22 286. Case > 0.045 287. Viento = 23 288. Case > 0.025 289. Viento = 24 290. Case > 0.015 291. Viento = 25 292. Case > 0.005 293. Viento = 26 294. Case > 0 295. Viento = 27 296. End Select 297. End Sub 298. Sub VViento() 'Funcion que permite dar un viento aleatorio 299. RandomViento() 300. 'Según el valor aleatorio distinguimos entre diferentes

situaciones

Page 29: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

28

301. If Viento < 4 Then 'Con ningun viento 302. PBViento.Image = ControlE.My.Resources.Resources.Viento0 303. LabelViento.Text = "Vent insuficient!" 304. ContEGenEol.ForeColor = Color.Red 305. VEol = 0 306. TBEol = 0 307. Refrescar() 308. ElseIf Viento < 10 Then 'Con poco viento 309. PBViento.Image = ControlE.My.Resources.Resources.Viento40 310. LabelViento.Text = "" 311. ContEGenEol.ForeColor = Color.White 312. ElseIf Viento < 25 Then 'Con viento 313. PBViento.Image = ControlE.My.Resources.Resources.Viento75 314. LabelViento.Text = "" 315. ContEGenEol.ForeColor = Color.White 316. Else 'Con mucho viento 317. PBViento.Image = ControlE.My.Resources.Resources.Viento100 318. LabelViento.Text = "Hi ha massa vent!" 319. VEol = 0 320. TBEol = 0 321. Refrescar() 322. ContEGenEol.ForeColor = Color.Red 323. End If 324. End Sub 325. Sub VViento_Sub() 326. If Viento < 4 Then 'Con ningun viento 327. FEol.PBViento.Image =

ControlE.My.Resources.Resources.Viento0 'Cambiamos el gif 328. FEol.LabelAvisoEol.Text = " Molins parats" 329. FEol.TrackBarEol.Enabled = False 330. ElseIf Viento < 10 Then 'Con poco viento 331. FEol.PBViento.Image =

ControlE.My.Resources.Resources.Viento40 'Cambiamos el gif 332. FEol.LabelAvisoEol.Text = "" 333. ElseIf Viento < 25 Then 'Con viento 334. FEol.PBViento.Image =

ControlE.My.Resources.Resources.Viento75 'Cambiamos el gif 335. FEol.LabelAvisoEol.Text = "" 336. Else 'Con mucho viento 337. FEol.PBViento.Image =

ControlE.My.Resources.Resources.Viento100 'Cambiamos el gif 338. FEol.LabelAvisoEol.Text = "Molins parats per seguretat" 339. FEol.TrackBarEol.Enabled = False 340. End If 341. End Sub 342. Sub VAlertaCap() 'Funcion que muesta un mensaje de que se acaba la

capacidad 343. If Not CallVAlertaCap Then 'Si no se ha mostrado el mensaje

antes lo mostramos 344. 345. If MessageBox.Show("Alerta, has esgotat la capacitat de la

presa, ja no podras utilitzar la energia hidràulica!", "Alerta", 346. MessageBoxButtons.OK, 347. MessageBoxIcon.Exclamation) = DialogResult.OK Then 'Si pulsan

ok entonces: 348. VHidro = 0 'La energia generada por Hidro es 0 349. CallVAlertaCap = True 'Indicamos que hemos ya hemos

mostrado el mensaje 350. Refrescar() 351. ContEGenHidro.Text = VHidro 352. Prueba.Abort() 'paramos la ejecucion en paralelo 353. End If

Page 30: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

29

354. 355. End If 356. End Sub 357. Private Sub BEol_Click(sender As Object, e As EventArgs) Handles

BEol.Click 358. 'Para evitar que cada vez que sellame a FEol, su label que

indica el valor de energia 359. 'sea 0, se indica que LabelEol tome el ultimo valor del Valor

de energia (VEol) 360. FEol.LabelEol.Text = VEol & " kWh" 361. FEol.TrackBarEol.Value = TBEol 'Cargamos el último valor del

trackbar de FEol 362. FEol.LabelVViento.Text = Int(Viento) & " m/s" 363. VViento_Sub() 364. FEol.Show() 'Invocamos a FEol 365. End Sub 366. Private Sub BSolar_Click(sender As Object, e As EventArgs) Handles

BSolar.Click 367. 'Para evitar que cada vez que sellame a FSol su label que

indica el valor de energia 368. 'sea 0, se indica que LabelSol tome el ultimo valor del Valor

de energia (VSol) 369. FSol.LabelSol.Text = VSol & " kWh" 370. FSol.TrackBarSol.Value = TBSol 'Cargamos el último valor del

trackbar de FSol 371. Climatologia_Sub() 372. FSol.Show() 'Invocamos a FSol 373. End Sub 374. Private Sub BNuc_Click(sender As Object, e As EventArgs) Handles

BNuc.Click 375. FNuc.ProgressBar1.Value = PBNuc 376. FNuc.LabelNuc.Text = VNuc & "kWh" 377. FNuc.Label2.Text = PBNuc 378. FNuc.ProgressBar1.Value = PBNuc 379. FNuc.Show() 'Invocamos a FNuc 380. End Sub 381. Private Sub BHidro_Click(sender As Object, e As EventArgs) Handles

BHidro.Click 382. FHidro.ContPresa.Text = Capacidad & " %" 'Actualizamos el

valor de la capcidad de la presa 383. FHidro.TrackBarHidro.Value = TBHidro 'Mantenemos el valor

del TrackBar 384. FHidro.LabelHidro.Text = VHidro & " kWh" 'Mantenemos el valor

en el label 385. If Estado Then 'Para evitar problemas a la hora del primer

inicio del programa, ya que estariamos parando algo ya parado 386. Prueba.Abort() 387. End If 388. If Capacidad <= 10 Then 389. FHidro.TrackBarHidro.Value = 0 'Ponemos todos los

valores a 0 390. FHidro.LabelHidro.Text = 0 391. FHidro.TrackBarHidro.Enabled = False 'Bloqueamos el

control por falta de capacidad 392. FHidro.LabelBloq.Visible = True 393. End If 394. FHidro.Show() 'Invocamos a FHidro 395. End Sub 396. Private Sub BCicle_Click(sender As Object, e As EventArgs) Handles

BCicle.Click 397. FCicle.LabelCicle.Text = VCicle & " kWh"

Page 31: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

30

398. FCicle.TrackBarCicle.Value = TBCicle 'Cargamos el último valor del trackbar de FEol

399. FCicle.Show() 'Invocamos a FEol 400. End Sub 401. Private Sub TimerNuc_Tick(sender As Object, e As EventArgs)

Handles TimerNuc.Tick 402. If Not Facil Then 'Desactivado para el nivel Facil 403. If ((PBNuc Mod 10) = 0) And PBNuc <> 100 Then 'Si

vajamos un 10% el mantenimiento penalizamos 404. VNuc = VNuc - 150 405. End If 406. End If 407. Refrescar() 'Vamos actualizando los labels 408. PBNuc = PBNuc - 1 'Reducimos el mantenimiento 409. If FNuc.Enabled = True Then 'En caso de que este activa la

form, actualizamos sus valores 410. FNuc.Label2.Text = PBNuc & "%" 411. FNuc.ProgressBar1.Value = PBNuc 412. End If 413. Labeldesgastnuc.Text = PBNuc & "%" 414. ProgressBarNuc.Value = PBNuc 415. If PBNuc = 10 Then 416. TimerNuc.Stop() 417. TimerNucRep.Start() 418. 419. MessageBox.Show("La central nuclear no pot continuar

aixi!! L'estat t'obliga a fer el manteniment de la cental.", "Alerta", 420. MessageBoxButtons.OK, 421. MessageBoxIcon.Exclamation) 422. End If 423. End Sub 424. Private Sub TimerNucRep_Tick(sender As Object, e As EventArgs)

Handles TimerNucRep.Tick 425. VNuc = 0 'En reparaciones no se genera 426. PBNuc = PBNuc + 1 'Aumentamos el valor de fiabilidad 427. ProgressBarNuc.Value = PBNuc 428. Refrescar() 429. Labeldesgastnuc.Text = PBNuc & "%" 430. RepNucTim = True 431. If FNuc.Enabled = True Then 432. FNuc.Label2.Text = PBNuc & "%" 433. FNuc.ProgressBar1.Value = PBNuc 434. FNuc.LabelNuc.Text = VNuc & " kWh" 435. End If 436. If PBNuc = 100 Then 437. TimerNuc.Start() 438. FNuc.LabelNuc.Text = 4050 & " kWh" 439. VNuc = 4050 440. TimerNucRep.Stop() 441. RepNucTim = False 442. End If 443. End Sub 444. Private Sub TimerHora_Tick(sender As Object, e As EventArgs)

Handles TimerHora.Tick 445. Minutos = Minutos + 15 'Aumentamos 15 minutos el temporizador 446. If Minutos = 60 Then 'Si ha pasado una hora 447. Minutos = "0" & 0 'Para que se vea 00 en minutos 448. Hora = Hora + 1 'Aumentamos una hora 449. If Hora = 24 Then 450. Hora = 0 451. End If 452. End If

Page 32: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

31

453. LabelHora.Text = "Actual: " & Hora & ":" & Minutos 454. If (Hora = 7 Or Hora = 21) And Minutos = 0 Then 'Sies la hora

de anochecer (21) o la del amanecer(7) 455. Climatologia() 456. End If 457. 'Ya han pasado las 4 horas, comprobamos: 458. If Hora = HoraSiguiente And Minutos = 0 Then 459. Comprobar() 460. GraficHores(Vuelta) = Hora 'Añadimos la hora 461. Vuelta = Vuelta + 1 462. End If 463. If Vuelta > 2 Then 464. TimerHora.Interval = 1875 'Aumentamos la velocidad 465. ElseIf Vuelta > 0 Then 466. TimerHora.Interval = 2815 'Aumentamos la velocidad del

juego 467. End If 468. If Vuelta = 6 Then 'Ya hemos hecho todo el ciclo 469. Final.Show() 470. Me.Close() 471. If FHidro.Enabled Then 472. FHidro.Close() 473. End If 474. If FNuc.Enabled Then 475. FNuc.Close() 476. End If 477. If FSol.Enabled Then 478. FSol.Close() 479. End If 480. If FCicle.Enabled Then 481. FCicle.Close() 482. End If 483. End If 484. 485. End Sub 486. Public Sub BaseDatos() 'La energia absorvida para cada hora 487. Select Case HoraSiguiente 488. Case 0 489. EnergiaAbs = 31896 490. Case 1 491. EnergiaAbs = 28405 492. Case 2 493. EnergiaAbs = 26890 494. Case 3 495. EnergiaAbs = 25902 496. Case 4 497. EnergiaAbs = 25020 498. Case 5 499. EnergiaAbs = 24500 500. Case 6 501. EnergiaAbs = 25020 502. Case 7 503. EnergiaAbs = 26908 504. Case 8 505. EnergiaAbs = 28701 506. Case 9 507. EnergiaAbs = 29910 508. Case 10 509. EnergiaAbs = 32000 510. Case 11 511. EnergiaAbs = 34700 512. Case 12

Page 33: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

32

513. EnergiaAbs = 35631 514. Case 13 515. EnergiaAbs = 36082 516. Case 14 517. EnergiaAbs = 37152 518. Case 15 519. EnergiaAbs = 36290 520. Case 16 521. EnergiaAbs = 36286 522. Case 17 523. EnergiaAbs = 35900 524. Case 18 525. EnergiaAbs = 35480 526. Case 19 527. EnergiaAbs = 34800 528. Case 20 529. EnergiaAbs = 34100 530. Case 21 531. EnergiaAbs = 33684 532. Case 22 533. EnergiaAbs = 32800 534. Case 23 535. EnergiaAbs = 30820 536. End Select 537. EnergiaAbs = EnergiaAbs - (ReduccionConsumo / 100) *

(EnergiaAbs) 538. GraficAbs(Vuelta) = EnergiaAbs 539. End Sub 540. Public Sub Comprobar() 541. '/////Comprobacion de energia total///////////// 542. Dim total As Integer 543. If Noche Then 544. If Viento > 25 Then 545. total = (FCicle.TrackBarCicle.Maximum) +

(FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc) 546. ElseIf Viento > 12 Then 547. total = (FCicle.TrackBarCicle.Maximum) +

(FEol.TrackBarEol.Maximum * 0.005 * AuxEol ^ 3 + (AumentoEolica / 100) * (FEol.TrackBarEol.Maximum * 0.0036 * AuxEol ^ 3)) + (FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc)

548. ElseIf Viento > 4 Then 549. total = (FCicle.TrackBarCicle.Maximum) +

(FEol.TrackBarEol.Maximum * 0.0036 * AuxEol ^ 3 + (AumentoEolica / 100) * (FEol.TrackBarEol.Maximum * 0.0036 * AuxEol ^ 3)) + (FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc)

550. Else 551. total = (FCicle.TrackBarCicle.Maximum) +

(FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc) 552. End If 553. Else 554. If Viento > 25 Then 555. total = (FCicle.TrackBarCicle.Maximum) +

(FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc) 556. ElseIf Viento > 12 Then 557. total = (FCicle.TrackBarCicle.Maximum) +

(FEol.TrackBarEol.Maximum * 0.005 * AuxEol ^ 3 + (AumentoEolica / 100) * (FEol.TrackBarEol.Maximum * 0.0036 * AuxEol ^ 3)) + (FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc) + (FSol.TrackBarSol.Maximum + (AumentoSolar / 100) * (FSol.TrackBarSol.Maximum))

558. ElseIf Viento > 4 Then 559. total = (FCicle.TrackBarCicle.Maximum) +

(FEol.TrackBarEol.Maximum * 0.0036 * AuxEol ^ 3 + (AumentoEolica / 100) *

Page 34: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

33

(FEol.TrackBarEol.Maximum * 0.0036 * AuxEol ^ 3)) + (FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc) + (FSol.TrackBarSol.Maximum + (AumentoSolar / 100) * (FSol.TrackBarSol.Maximum))

560. Else 561. total = (FCicle.TrackBarCicle.Maximum) +

(FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc) + (FSol.TrackBarSol.Maximum + (AumentoSolar / 100) * (FSol.TrackBarSol.Maximum))

562. End If 563. End If 564. 565. If total < EnergiaAbs Then 566. MessageBox.Show("Sembla que no pots arribar. Però

tranquil els veïns estan per això. La ciutat veïna et deixa elèctricitat.", "Oh oh", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

567. GraficEnergia(Vuelta) = EnergiaAbs 568. Else 569. If VTotal > (EnergiaAbs - (EnergiaAbs * 5 / 100)) And

VTotal < (EnergiaAbs + (EnergiaAbs * 5 / 100)) Then 570. MsgBox("Quina precisió !!!") 571. ElseIf VTotal > (EnergiaAbs - (EnergiaAbs * 10 / 100))

And VTotal < (EnergiaAbs + (EnergiaAbs * 10 / 100)) Then 572. MsgBox("Perfecte, continua !") 573. ElseIf VTotal > (EnergiaAbs - (EnergiaAbs * 15 / 100))

And VTotal < (EnergiaAbs + (EnergiaAbs * 15 / 100)) Then 574. MsgBox("Molt bé, continua aixi!") 575. ElseIf VTotal > (EnergiaAbs - (EnergiaAbs * 20 / 100))

And VTotal < (EnergiaAbs + (EnergiaAbs * 20 / 100)) Then 576. MsgBox("Pots ajustar una mica més, però no et

desanimis!") 577. Else 578. MsgBox("Intenta-ho amb més ganes!") 579. End If 580. GraficEnergia(Vuelta) = VTotal 581. End If 582. 'Volvemos a generar los valores aleatorios 583. VViento() 'Cambiamos el viento 584. LabelVViento.Text = "Velocitat vent: " & Int(Viento) & " m/s" 585. FEol.ComprovarMaximo() 'comprovamos si esta en saturacion 586. '////Generacion dependiendo de la velocidad del viento 587. If Viento < 12 Then 'Velocidades lentas 588. VEol = TBEol * 0.005 * AuxEol ^ 3 + (AumentoEolica / 100)

* (TBEol * 0.005 * AuxEol ^ 3) 'Multiplicamos el valor del trackbar por una constante y por

589. 'la razón cúbica de la velocidad del viento 590. Else 'Velocidad rápida 591. VEol = TBEol * 0.0036 * AuxEol ^ 3 + (AumentoEolica / 100)

* (TBEol * 0.0036 * AuxEol ^ 3) 'Multiplicamos el valor del trackbar por una constante y por

592. 'la razón cúbica de la velocidad del viento 593. End If 594. Climatologia() 'Tiempo aleatorio 595. 'Ajustamos la hora 596. If Hora = 20 Then 597. HoraSiguiente = 0 598. ElseIf Hora = 21 Then 599. HoraSiguiente = 1 600. ElseIf Hora = 22 Then 601. HoraSiguiente = 2 602. ElseIf Hora = 23 Then 603. HoraSiguiente = 3 604. Else 605. HoraSiguiente = Hora + 4

Page 35: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

34

606. End If 607. LabelHoraSeg.Text = "Revisió: " & HoraSiguiente & ":00" 608. BaseDatos() 'Miramos que energia absorve para esa hora 609. ContECons.Text = EnergiaAbs & " kWh" 610. 611. 612. End Sub 613. Private Sub TimerEventos_Tick(sender As Object, e As EventArgs)

Handles TimerEventos.Tick 614. NumPregunta = NumPregunta + 1 615. PreguntasActivas = True 616. If NumPregunta < 8 Then 'Total de 7 preguntas 617. 'Si la siguiente pregunta es la 3 tendremos que llamar a

otra funcion 618. If NumPregunta = 3 Then 619. FEventosImagenes.Show() 620. ElseIf NumPregunta = 6 And Facil Then 621. FEventosImagenes.Show() 622. Else 623. FEventos.Show() 624. End If 625. '//////Detenemos todas las rutinas/////// 626. If RepNucTim Then 627. TimerNucRep.Stop() 628. Else 629. TimerNuc.Stop() 630. End If 631. If LluviaTim Then 632. Timerlluvia.Stop() 633. Else 634. If Estado Then 635. Prueba.Abort() 636. End If 637. End If 638. TimerHora.Stop() 639. TimerEventos.Stop() 640. 'Cerramos todos los subforms 641. If FHidro.Enabled Then 642. FHidro.Close() 643. End If 644. If FNuc.Enabled Then 645. FNuc.Close() 646. End If 647. If FSol.Enabled Then 648. FSol.Close() 649. End If 650. If FCicle.Enabled Then 651. FCicle.Close() 652. End If 653. Else 654. TimerEventos.Stop() 'Si hemos hecho todas las preguntas

paramos 655. End If 656. End Sub 657. Private Sub Form1_Closing(sender As Object, e As

System.ComponentModel.CancelEventArgs) Handles MyBase.Closing 658. If Vuelta <> 6 Then 659. If FSalir.ShowDialog() =

System.Windows.Forms.DialogResult.Abort Then 660. e.Cancel = True 661. End If 662. End If

Page 36: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

35

663. End Sub 664. Private Sub Timerlluvia_Tick(sender As Object, e As EventArgs)

Handles Timerlluvia.Tick 665. If Capacidad = 98 Then 666. Timerlluvia.Stop() 'paramos la lluvia 667. LluviaTim = False 668. Else 669. LluviaTim = True 670. Capacidad = Capacidad + 1 'Aumentamos las reservas de agua

a causa de la lluvia 671. End If 672. 673. 674. End Sub 675. End Class

9.2. FInicio

Public Class FInicio Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick ProgressBar1.Value = ProgressBar1.Value + 2 If ProgressBar1.Value = 100 Then Timer1.Stop() ProgressBar1.Visible = False FInfo1.Show() Me.Close() End If End Sub End Class

9.3. FCicle

Public Class FCicle Private Sub BSCicle_Click(sender As Object, e As EventArgs) Handles BSCicle.Click Me.Close() End Sub Private Sub TrackBarCicle_Scroll(sender As Object, e As EventArgs) Handles TrackBarCicle.Scroll VCicle = TrackBarCicle.Value TBCicle = TrackBarCicle.Value 'Guardamos el valor del trackbar LabelCicle.Text = VCicle & " kWh" Form1.Refrescar() End Sub End Class

9.4. FEol

Public Class FEol Public Sub ComprovarMaximo() AuxEol = Viento If Viento > 15 Then AuxEol = 15 'Con viento de 15m/s se satura la produccion End If End Sub Private Sub BSEol_Click(sender As Object, e As EventArgs) Handles BSEol.Click Me.Close() 'Volvemos al principal End Sub

Page 37: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

36

Private Sub TrackBarEol_Scroll(sender As Object, e As EventArgs) Handles TrackBarEol.Scroll ComprovarMaximo() '////Generacion dependiendo de la velocidad del viento If Viento < 12 Then 'Velocidades lentas VEol = TrackBarEol.Value * 0.005 * AuxEol ^ 3 + (AumentoEolica / 100) * (TrackBarEol.Value * 0.005 * AuxEol ^ 3) 'Multiplicamos el valor del trackbar por una constante y por 'la razón cúbica de la velocidad del viento Else 'Velocidad rápida VEol = TrackBarEol.Value * 0.0036 * AuxEol ^ 3 + (AumentoEolica / 100) * (TrackBarEol.Value * 0.0036 * AuxEol ^ 3) 'Multiplicamos el valor del trackbar por una constante y por 'la razón cúbica de la velocidad del viento End If LabelEol.Text = VEol & " kWh" 'Indicamos que Label tome el valor de VEol Form1.ContEGenEol.Text = VEol 'Indicamos que el label que muestra el valor de energia de Eol ' en el programa principal, se actualice al que ahora le estamos dando Form1.Refrescar() TBEol = TrackBarEol.Value 'Guardamos el valor del trackbar End Sub End Class

9.5. FHidro

Imports System.Threading 'Importem les preferencies per poder executar en paral·lel Public Class FHidro Public Sub EndThread() 'Para poder parar la subrutina que resta la capacidad Prueba.Abort() 'Paramos la subrutina End Sub Private Sub BSHidro_Click(sender As Object, e As EventArgs) Handles BSHidro.Click Me.Close() 'Cerramos FHidro End Sub Private Sub FHidro_FormClosing(sender As Object, e As EventArgs) Handles Me.FormClosing 'If (FEventosResp.Enabled = False) Or (FEventosImagenes.Enabled = False) Then If Not PreguntasActivas Then Prueba = New Thread(AddressOf Form1.ThreadTask) 'Definimos prueba como una variable Thread '(para ejecutar en paralelo)' Prueba.IsBackground = True 'Ralizacion de fondo Prueba.Start() 'llamamos al procedimiento End If End Sub Private Sub TrackBarHidro_Scroll(sender As Object, e As EventArgs) Handles TrackBarHidro.Scroll If TrackBarHidro.Value = 0 Then 'Por tal de que restemos la capacidad de la presa solo cuando 'la hemos activado AuxHidro = 0 'Si el valor del trackbar es 0, no restaremos Else AuxHidro = 1 'Si es diferente de 0 restaremos 1 End If TBHidro = TrackBarHidro.Value 'Guardamos el valor del trackbar VHidro = TrackBarHidro.Value * 10.35 'Multiplicamos el valor del trackbar por 10.35 para adecuarlo a 'la energia que generaria un sistema hidráulico LabelHidro.Text = VHidro 'Indicamos que Label tome el valor de VHidro

Page 38: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

37

Form1.ContEGenHidro.Text = VHidro 'Indicamos que el label que muestra el valor de energia de Hidro ' en el programa principal, se actualice al que ahora le estamos dando Form1.Refrescar() End Sub End Class

9.6. FSol

Public Class FSol Private Sub BSSol_Click(sender As Object, e As EventArgs) Handles BSSol.Click Me.Close() 'Volvemos al principal End Sub Private Sub TrackBarSol_Scroll(sender As Object, e As EventArgs) Handles TrackBarSol.Scroll VSol = TrackBarSol.Value + (AumentoSolar / 100) * (TrackBarSol.Value) 'Multiplicamos el valor del trackbar por 16 para adecuarlo a 'la energia que generaria un sistema fotovoltaico LabelSol.Text = VSol & " kWh" 'Indicamos que Label tome el valor de VSol Form1.ContEGenSol.Text = VSol 'Indicamos que el label que muestra el valor de energia de Sol ' en el programa principal, se actualice al que ahora le estamos dando Form1.Refrescar() TBSol = TrackBarSol.Value 'Guardamos el valor del trackbar End Sub End Class

9.7. FNuc

Public Class FNuc Private Sub BSNuc_Click(sender As Object, e As EventArgs) Handles BSNuc.Click Me.Close() End Sub Private Sub BNucRep_Click(sender As Object, e As EventArgs) Handles BNucRep.Click PBNuc = ProgressBar1.Value Form1.TimerNuc.Stop() Form1.TimerNucRep.Start() LabelNuc.Text = VNuc End Sub End Class

9.8. FSalir

Public Class FSalir Private Sub BSi_Click(sender As Object, e As EventArgs) Handles BSi.Click If Estado Then Prueba.Abort() End If Me.Close() End Sub Private Sub BNo_Click(sender As Object, e As EventArgs) Handles BNo.Click Me.Close() DialogResult = DialogResult.Abort End Sub End Class

Page 39: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

38

9.9.FEventos

Public Class FEventos Public Sub CargaPreguntas() Select Case NumPregunta 'Seleccionamos en que pregunta estamos Case 1 LabelPregunta.Text = "D'on s'obté principalment la biomassa?" RadioButton1.Text = "Dels Iogurs amb bífidus" RadioButton2.Text = "De les restes de plàstic de la brossa" RadioButton3.Text = "De les restes de residus forestals i agrícoles" Case 2 LabelPregunta.Text = "Les xarxes intel·ligents (smart grids) són..." RadioButton1.Text = "xarxes que milloraran l'eficiència elèctrica" RadioButton2.Text = "xarxes formadess per smartphones" RadioButton3.Text = "tecnologies que encara no han arribat a Europa" Case 4 LabelPregunta.Text = "Quin creus que és el nom correcte d'una central elèctrica marina? (Bouy significa boia)." RadioButton1.Text = "Power Buoy" RadioButton2.Text = "Turbo Buoy" RadioButton3.Text = "Electrical-Marine Buoy" Case 5 LabelPregunta.Text = "En quina orientació col·locaries unes plaques solars per aprofitar al màxim el sol?" RadioButton1.Text = "Orientació Nord" RadioButton2.Text = "Orientació Sud" RadioButton3.Text = "És indiferent" Case 6 LabelPregunta.Text = "Què creus que és una central de cicle combinat?" RadioButton1.Text = "Una central on es crema les restes de residus urbans" RadioButton2.Text = "Una combinació d'una central tèrmica i una nuclear" RadioButton3.Text = "Una central tèrmica que aprofita al màxim el combustible" Case 7 LabelPregunta.Text = "En què es basa l'energia geotèrmica?" RadioButton1.Text = "En aprofitar l'energia de les fonts termals" RadioButton2.Text = "En aprofitar l'escalfor dels raigs solars" RadioButton3.Text = "En aprofitar l'energia tèrmica de la Terra" End Select End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles ButtonComprova.Click '///////Diferenciamos entre todas las posibles respuestas///// If NumPregunta = 1 Or NumPregunta = 6 Or NumPregunta = 7 Then If RadioButton3.Checked = True Then RespCorrecta = "Correcte" Else RespCorrecta = "Incorrerte" End If FEventosResp.CargarRespuestas() FEventosResp.Show() ElseIf NumPregunta = 2 Or NumPregunta = 4 Then If RadioButton1.Checked = True Then RespCorrecta = "Correcte" Else

Page 40: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

39

RespCorrecta = "Incorrerte" End If FEventosResp.CargarRespuestas() FEventosResp.Show() Else If RadioButton2.Checked = True Then RespCorrecta = "Correcte" Else RespCorrecta = "Incorrerte" End If FEventosResp.CargarRespuestas() FEventosResp.Show() End If Me.Close() End Sub Private Sub FEventos_Load(sender As Object, e As EventArgs) Handles MyBase.Load CargaPreguntas() End Sub End Class

9.10. FEventosImagenes

Imports System.Threading Public Class FEventosImagenes Dim respuesta = 0 '/////Cargamos la pregunta//////////// Private Sub FEventosImagenes_Load(sender As Object, e As EventArgs) Handles MyBase.Load CargarPreguntas() End Sub Public Sub CargarPreguntas() If NumPregunta = 6 Then RadioButton1.Visible = False RadioButton2.Visible = False RadioButton3.Visible = False PictureBox1.BackgroundImage = ControlE.My.Resources._450px_Centrale_Eolica_Frigento PictureBox2.BackgroundImage = ControlE.My.Resources._800px_Ciclo_combinado_Plana_del_Vent PictureBox3.BackgroundImage = ControlE.My.Resources._800px_Placas_solares_en_Vilalba Label1.Text = "Quina de les següents imatges correspon a una central eòlica?" Label2.Text = "Central eòlica" Label3.Text = "Central de Cicle Combinat" Label3.ForeColor = Color.Red Label4.Text = "Central Solar" Label4.ForeColor = Color.Red ElseIf NumPregunta = 3 Then Label1.Text = "Quin tipus de molí eòlic és d'eix horitzontal?" RadioButton1.Visible = True RadioButton2.Visible = True RadioButton3.Visible = True TableLayoutPanel1.Controls.Remove(TableLayoutPanel2) TableLayoutPanel1.Controls.Add(PictureBox1, 1, 2) PictureBox1.BackgroundImage = Nothing PictureBox1.Image = My.Resources.Molinos PictureBox1.SizeMode = PictureBoxSizeMode.Zoom PictureBox1.Dock = DockStyle.Fill End If End Sub

Page 41: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

40

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click PreguntasActivas = False If NumPregunta = 6 Then If respuesta = 1 Then MsgBox("Correcte! +10 % de generació eòlica!!") AumentoEolica = AumentoEolica + 10 If Viento < 12 Then 'Velocidades lentas VEol = TBEol * 0.005 * AuxEol ^ 3 + (AumentoEolica / 100) * (TBEol * 0.0036 * AuxEol ^ 3) 'Multiplicamos el valor del trackbar por una constante y por 'la razón cúbica de la velocidad del viento Else 'Velocidad rápida VEol = TBEol * 0.0036 * AuxEol ^ 3 + (AumentoEolica / 100) * (TBEol * 0.0036 * AuxEol ^ 3) 'Multiplicamos el valor del trackbar por una constante y por 'la razón cúbica de la velocidad del viento End If Else MsgBox("Incorrecte!") End If Label2.Visible = True Label3.Visible = True Label4.Visible = True End If If NumPregunta = 3 Then If respuesta = 2 Then MsgBox("Correcte! HAWT = Horitzontal Axis Wind Turbine +10 % de generació eòlica!!") AumentoEolica = AumentoEolica + 10 If Viento < 12 Then 'Velocidades lentas VEol = TBEol * 0.005 * AuxEol ^ 3 + (AumentoEolica / 100) * (TBEol * 0.0036 * AuxEol ^ 3) 'Multiplicamos el valor del trackbar por una constante y por 'la razón cúbica de la velocidad del viento Else 'Velocidad rápida VEol = TBEol * 0.0036 * AuxEol ^ 3 + (AumentoEolica / 100) * (TBEol * 0.0036 * AuxEol ^ 3) 'Multiplicamos el valor del trackbar por una constante y por 'la razón cúbica de la velocidad del viento End If Else MsgBox("Incorrecte! VAWT = Vertical Axis Wind Turbine, podràs veure una en l'edifici de laboratoris de la universitat a prop de l'escola d'art.") End If End If Me.Enabled = False TimerClose.Start() End Sub '/////////Para la pregunta numero 6//////////////////// Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click If NumPregunta = 6 Then respuesta = 1 '/////Resaltamos el color del fondo/////// If PictureBox2.BackColor = Color.Silver Then PictureBox2.BackColor = Color.Transparent End If If PictureBox3.BackColor = Color.Silver Then PictureBox3.BackColor = Color.Transparent End If

Page 42: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

41

PictureBox1.BackColor = Color.Silver End If End Sub Private Sub PictureBox2_Click(sender As Object, e As EventArgs) Handles PictureBox2.Click respuesta = 2 If PictureBox1.BackColor = Color.Silver Then PictureBox1.BackColor = Color.Transparent End If If PictureBox3.BackColor = Color.Silver Then PictureBox3.BackColor = Color.Transparent End If PictureBox2.BackColor = Color.Silver End Sub Private Sub PictureBox3_Click(sender As Object, e As EventArgs) Handles PictureBox3.Click respuesta = 3 If PictureBox1.BackColor = Color.Silver Then PictureBox1.BackColor = Color.Transparent End If If PictureBox2.BackColor = Color.Silver Then PictureBox2.BackColor = Color.Transparent End If PictureBox3.BackColor = Color.Silver End Sub '////////Para la pregunta 3/////////////////////// Private Sub RadioButton2_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton2.CheckedChanged respuesta = 2 End Sub Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged respuesta = 1 End Sub Private Sub RadioButton3_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton3.CheckedChanged respuesta = 3 End Sub Private Sub FEventosImagenes_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing '////////Reactivamos todos los temporizadores///////// If RepNucTim Then Form1.TimerNucRep.Start() Else Form1.TimerNuc.Start() End If If LluviaTim Then Form1.Timerlluvia.Start() End If Prueba = New Thread(AddressOf Form1.ThreadTask) 'Definimos prueba como una variable Thread '(para ejecutar en paralelo)' Prueba.IsBackground = True 'Ralizacion de fondo Prueba.Start() 'llamamos al procedimiento Form1.TimerHora.Start() Form1.TimerEventos.Start() End Sub Private Sub TimerClose_Tick(sender As Object, e As EventArgs) Handles TimerClose.Tick TimerClose.Stop()

Page 43: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

42

Me.Close() End Sub End Class

9.11. FEventosResp

Imports System.Threading Public Class FEventosResp Public Sub CargarRespuestas() Select Case NumPregunta Case 1 If RespCorrecta = "Correcte" Then Label1.Text = RespCorrecta & ", tota resta orgànica es pot transformar en biomassa, per després utilitzar-la com a combustible sent una molt bona opció com a energia renovable. Es Es redueix el consum de la teva ciutat un 2%!!" ReduccionConsumo = ReduccionConsumo + 2 Else Label1.Text = RespCorrecta & ", tota resta orgànica es pot transformar en biomassa, per després utilitzar-la com a combustible sent una molt bona opció com a energia renovable." End If PictureBox1.BackgroundImage = ControlE.My.Resources.Pellets Case 2 If RespCorrecta = "Correcte" Then Label1.Text = RespCorrecta & ", les Smart Grids permeten que els habitatges i els negocis puguin convertir-se en generadors fent que ja no es depengui tant de grans centrals Es redueix el consum de la teva ciutat un 2%!!" ReduccionConsumo = ReduccionConsumo + 2 Else Label1.Text = RespCorrecta & ", les Smart Grids permeten que els habitatges i els negocis puguin convertir-se en generadors fent que ja no es depengui tant de grans centrals" End If PictureBox1.BackgroundImage = ControlE.My.Resources.Smartcity Case 4 If RespCorrecta = "Correcte" Then Label1.Text = RespCorrecta & ", la POWER BUOY aprofita el moviment de les ones, per generar electricitat en el seu eix vertical, com si d'una manxa de bici es tractés. Tindràs una generació extra de 1500 kWh per aquest descobriment!!" EnergiaBase = EnergiaBase + 1500 Else Label1.Text = RespCorrecta & ", la POWER BUOY aprofita el moviment de les ones, per generar electricitat en el seu eix vertical, com si d'una manxa de bici es tractés." End If PictureBox1.BackgroundImage = ControlE.My.Resources.powerbuoy Case 5 If RespCorrecta = "Correcte" Then Label1.Text = RespCorrecta & ", en orientació SUD s'aprofita millor les hores de sol. Les cases orientades al sud necessiten menys energia per escalfar-se. Tindràs un augment d'un 10 % en la generació solar" AumentoSolar = 10 VSol = TBSol + (AumentoSolar / 100) * (TBSol) Else

Page 44: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

43

Label1.Text = RespCorrecta & ", en orientació SUD s'aprofita millor les hores de sol. Les cases orientades al sud necessiten menys energia per escalfar-se." End If PictureBox1.BackgroundImage = ControlE.My.Resources.rosewind Case 6 If RespCorrecta = "Correcte" Then Label1.Text = RespCorrecta & ", hi ha un primer cicle de combustió, i amb els gasos d'aquesta, es fa una segona combustió. Com si aprofitessis els gasos d'escapament del cotxe per extreure més energia. La central de la imatge està a prop de Vandellòs. Tindràs una generació extra de 1500 kWh per aquest descobriment!!" Else Label1.Text = RespCorrecta & ", hi ha un primer cicle de combustió, i amb els gasos d'aquesta, es fa una segona combustió. Com si aprofitessis els gasos d'escapament del cotxe per extreure més energia. La central de la imatge està a prop de Vandellòs." End If PictureBox1.BackgroundImage = ControlE.My.Resources._800px_Ciclo_combinado_Plana_del_Vent Case Else If RespCorrecta = "Correcte" Then Label1.Text = RespCorrecta & ", el nucli de la Terra es troba a prop dels 6700ºC, una part d'aquesta calor es pot aprofitar per generar electricitat, però només en llocs especials (amb activitat volcànica). Tindràs una generació extra de 1500 kWh per aquest descobriment!!" EnergiaBase = EnergiaBase + 1500 Else Label1.Text = RespCorrecta & ", el nucli de la Terra es troba a prop dels 6700ºC, una part d'aquesta calor es pot aprofitar per generar electricitat, però només en llocs especials (amb activitat volcànica)." End If PictureBox1.BackgroundImage = ControlE.My.Resources._800px_GeysirEruptionNear End Select End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click PreguntasActivas = False Me.Close() '////////Reactivamos todos los temporizadores///////// If RepNucTim Then Form1.TimerNucRep.Start() Else Form1.TimerNuc.Start() End If If LluviaTim Then Form1.Timerlluvia.Start() End If Prueba = New Thread(AddressOf Form1.ThreadTask) 'Definimos prueba como una variable Thread '(para ejecutar en paralelo)' Prueba.IsBackground = True 'Ralizacion de fondo Prueba.Start() 'llamamos al procedimiento Form1.TimerHora.Start() Form1.TimerEventos.Start() End Sub End Class

Page 45: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

44

9.12. FInfo1

Public Class FInfo1 Private Sub ButtonMig_Click(sender As Object, e As EventArgs) Handles ButtonMig.Click Facil = False 'Ha escogido el nivel dificil FInfo2.Show() Me.Close() End Sub Private Sub ButtonFacil_Click(sender As Object, e As EventArgs) Handles ButtonFacil.Click Facil = True 'Ha escogido el nivel facil FInfo2.Show() Me.Close() End Sub End Class

9.13. Finfo2

Public Class FInfo2 Dim cops = 0 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Select Case cops Case 0 TableLayoutPanel1.BackgroundImage = ControlE.My.Resources._2 Label1.Visible = False Label2.Visible = True Case 1 TableLayoutPanel1.BackgroundImage = ControlE.My.Resources._3 Label2.Visible = False Label1.Text = "Aquest és el rellotge. Quan arribi l'hora de revisió es comprovarà quina és l'energia que es genera s'assembli amb la que es gasta. Intenta ajustar-te el màxim possible!" Label1.Visible = True Case 2 TableLayoutPanel1.BackgroundImage = ControlE.My.Resources._4 Label3.Visible = True Label1.Visible = False Case 3 TableLayoutPanel1.BackgroundImage = ControlE.My.Resources._5 Label3.Visible = False Label5.Visible = True Case 4 TableLayoutPanel1.BackgroundImage = ControlE.My.Resources._6 Label4.Text = "El vent et limitarà la producció d'energia eòlica. Si fa massa, o massa poc vent, no podràs produir." Label4.Visible = True Label5.Visible = False Case 5 TableLayoutPanel1.BackgroundImage = ControlE.My.Resources._7 Label4.Text = "El pantà té una quantitat limitada d'aigua. Tindràs que RESERVAR un 10% per què la gent pugui tenir aigua a les seves cases. La pluja omplirà el pantà. Troba l'equilibri entre la producció i el consum d'aigua!" Case 6 TableLayoutPanel1.BackgroundImage = ControlE.My.Resources._8 Label4.Visible = False Label6.Visible = True If Facil Then

Page 46: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

9. Código

45

Label6.Text = "La central nuclear produirà contínuament, però hauràs de fer revisions per assegurar-te que funcioni correctament. En reparacions no generarà RES." End If Case 7 TableLayoutPanel1.BackgroundImage = ControlE.My.Resources._9 Button1.Text = "COMENÇAR" Label6.Visible = False TableLayoutPanel1.Controls.Remove(Label2) Label3.Text = "¡¡¡¡¡¡¡El joc ara comença!!!!!!!" TableLayoutPanel1.Controls.Remove(Label4) TableLayoutPanel1.Controls.Remove(Label5) TableLayoutPanel1.Controls.Remove(Label6) TableLayoutPanel1.ColumnStyles.RemoveAt(0) Label1.Text = "Intenta utilitzar al màxim les centrals renovables, ja que són les que no et generaran cap perjudici. Se't faran preguntes durant el joc, si contestes bé tindràs beneficis, però tranquil mentre et pregunti es pararà el temps." Label1.Visible = True Label3.Visible = True Case Else Form1.TimerHora.Start() Form1.TimerNuc.Start() Form1.SecuenciaInicial() Form1.Show() Me.Close() End Select cops = cops + 1 End Sub End Class

9.14. Final

Public Class Final Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click Chart1.Series.Clear() InicializaLeyenda() End Sub Private Sub InicializaLeyenda() Chart1.Series.Add("Energia Abs") Chart1.Series.Add("Energia Gen") Chart1.Series("Energia Abs").ChartType = DataVisualization.Charting.SeriesChartType.Spline Chart1.Series("Energia Gen").ChartType = DataVisualization.Charting.SeriesChartType.Spline 'System.Windows.Forms. For counter = 0 To 6 Chart1.Series("Energia Gen").Points.AddXY(GraficHores(counter).ToString(), GraficEnergia(counter)) Chart1.Series("Energia Abs").Points.AddXY(GraficHores(counter).ToString(), GraficAbs(counter)) Next End Sub Private Sub Final_Load(sender As Object, e As EventArgs) Handles MyBase.Load Chart1.Series.Clear() InicializaLeyenda() End Sub End Class

Page 47: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

10. Interfaz Gráfica

46

10. Interfaz Gráfica

Seguidamente, se muestra cual es la interfaz visual que podrá ver el usuario en las

diferentes etapas del juego. En la figura 10.0. se puede ver el diagrama de flujo que sigue el

programa

FinicioFigura 10.1

FInfo1Figura 10.3

FInfo2Figura 10.4

Form1Figura 10.5

FSalirFigura 10.2

FCicleFigura 10.6

FEolFigura 10.7FHidro

Figura 10.8

FNucFigura 10.9

FSolFigura 10.10

FEventosFigura 10.11

FEventosImagenesFigura 10.13

FEventosRespFigura 10.12

FinalFigura 10.14

Se cierra el programa

Evento temporizado

Elección usuario

Pasadas 24 horas

Figura 10.0. Diagrama de flujo

Page 48: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

10. Interfaz Gráfica

47

10.1. FInicio

10.2. FSalir

Figura 10.1. FInicio

Figura 10.2. FSalir

Page 49: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

10. Interfaz Gráfica

48

10.3.FInfo1

Figura 10.3. FInfo1

Page 50: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

10. Interfaz Gráfica

49

10.4.Finfo2

Figura 10.4. FInfo2

Page 51: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

10. Interfaz Gráfica

50

10.5. Form1

Figura 10.5. Form1

Page 52: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

10. Interfaz Gráfica

51

10.6. FCicle

Figura 10.6. FCicle

Page 53: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

10. Interfaz Gráfica

52

10.7. FEol

Figura 10.7. FEol

Page 54: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

10. Interfaz Gráfica

53

10.8. FHidro

Figura 10.8. FHidro

Page 55: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

10. Interfaz Gráfica

54

10.9. FNuc

Figura 10.9. FNuc

Page 56: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

10. Interfaz Gráfica

55

10.10. FSol

Figura 10.10. FSol

Page 57: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

10. Interfaz Gráfica

56

10.11. FEventos

10.12. FeventosResp

Figura 10.11. FEventos

Figura 10.12. FEventosResp

Page 58: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

10. Interfaz Gráfica

57

10.13. FEventosImagenes

10.14. Final

Figura 10.14. Final

Figura 10.13. FEventosImagenes

Page 59: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

58

11. Modelo Matemático

Pese a ser un trabajo de programación, eso no significa que no tenga un modelo matemático

en el cual se base. Se ha intentado basar el comportamiento de ciertas variables como

la velocidad del viento en modelos probabilísticos reales.

11.1. Energia Consumida Programada

La energía consumida, es decir, la que el usuario tiene que conseguir igualar, se basa

en la demanda real de todo el sistema eléctrico español. A partir de la información obtenida

en la página web de Red Eléctrica de España (REE) y eligiendo un día cualquiera del año,

que en este caso fue el día 18 de abril de 2016, se guardan los valores de la energía consumida

durante ese día, y se asignan a su hora correspondiente. Esto queda reflejado en la función

BaseDatos() en el Form1, como se puede ver en el código 1:

Public Sub BaseDatos()

Select Case Hora

Case 0

EnergiaAbs = 31896

Case 1

EnergiaAbs = 28405

Case 2

EnergiaAbs = 26890

Case 3

EnergiaAbs = 25902

Case 4

EnergiaAbs = 25020

Case 5

EnergiaAbs = 24500

Case 6

EnergiaAbs = 25020

Case 7

EnergiaAbs = 26908

Case 8

EnergiaAbs = 28701

Case 9

EnergiaAbs = 29910

Case 10

EnergiaAbs = 32000

Case 11

EnergiaAbs = 34700

Case 12

EnergiaAbs = 35631

Case 13

EnergiaAbs = 36082

Case 14

EnergiaAbs = 37152

Page 60: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

59

Case 15

EnergiaAbs = 36290

Case 16

EnergiaAbs = 36286

Case 17

EnergiaAbs = 35900

Case 18

EnergiaAbs = 35480

Case 19

EnergiaAbs = 34800

Case 20

EnergiaAbs = 34100

Case 21

EnergiaAbs = 33684

Case 22

EnergiaAbs = 32800

Case 23

EnergiaAbs = 30820

End Select

End Sub

Código 1. Código de la función BaseDatos()

En este caso, se usó la función Select Case, donde cada hora tiene su valor concreto de

energía.

11.2. Cuotas de Generación

En cuanto a la capacidad de cada fuente de energía se basó en el Informe del Sistema

Eléctrico Español de 2014 de REE[1]. Si nos fijamos en la Figura 11.1. podemos ver cómo

se reparte la potencia instalada del sistema eléctrico peninsular.

[1] http://www.ree.es/es/estadisticas-del-sistema-electrico-espanol/informe-anual/informe-del-sistema-

electrico-espanol-2014

Page 61: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

60

Para simplificar, se redujo a las siguientes fuentes de energía:

Ciclo combinado

Nuclear

Hidráulica

Eólica

Solar (sin distinguir entre fotovoltaica o térmica)

Figura 11.1. Potencia instalada en la península.

Page 62: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

61

Con el siguiente reparto:

Si se observa el apartado 11.1. se puede ver que en ningún momento se pasa de 40000

kWh, pero para que el usuario le sea más fácil, el total de la generación será de 50000 kWh,

con el siguiente reparto:

Ciclo combinado .................................................................................... 17000 kWh

Nuclear ..................................................................................................... 4500 kWh

Hidráulica ............................................................................................... 11500 kWh

Eólica ...................................................................................................... 13500 kWh

Solar (sin distinguir entre fotovoltaica o térmica) .................................... 3500 kWh

Teniendo en cuenta que hay fenómenos como las nubes, la variación de la velocidad

del viento, o los beneficios de responder bien a las preguntas, que harán variar estos números.

Figura 11.2. Potencia instalada en el juego.

Ciclo Combinado

34%

Nuclear9%Hidráulica

23%

Eólica27%

Solar7%

GENERACIÓN (%)

Page 63: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

62

11.3. Generación Eólica

La generación eólica sigue una razón cúbica, de acuerdo a la expresión:

𝑃𝑇 = 𝐶𝑝1

2𝜌𝐴𝑣3 (1)

Siendo:

PT: potencia mecánica transformada por la turbina en W.

Cp: coeficiente de potencia de la turbina.

ρ: densidad del aire en kg/m3.

A: Área abarcada por las aspas en m2.

v: velocidad del viento en m/s.

Para implementar esta fórmula en el software, se consideró una única variable: la

velocidad del viento, por ser la que presenta más variabilidad y ser más fácil de plasmar

visualmente. Dado que estadísticamente, (ver apartado 11.4.) las velocidades del viento

suelen ser inferiores a 9 m/s, se decide diferenciar entre dos situaciones. La primera, se trata

de velocidades inferiores a 9 m/s y la segunda para velocidades mayores. La razón de

diferenciar entre estas dos situaciones, se debe a que, al tratarse de una multiplicación al

cubo, para velocidades bajas, solo se genera unos cientos de kWh, haciendo difícil que el

usuario llegue a los valores requeridos. La forma de implementación, se puede ver en el

código 2:

If Viento < 9 Then 'Velocidades lentas

VEol = TrackBarEol.Value * 0.0123456 * AuxEol ^ 3 + (AumentoEolica / 100) * (TrackBarEol.Value * 0.0123456 * AuxEol ^ 3)

Else 'Velocidad rápida

VEol = TrackBarEol.Value * 0.0078125 * AuxEol ^ 3 + (AumentoEolica / 100) * (TrackBarEol.Value * 0.0078125 * AuxEol ^ 3)

End If Código2. Cálculo de la energía eólica.

Siendo:

VEol: el valor de energía generada (PT en (1)).

TrackBarEol.Value: el valor que el usuario quiere utilizar siendo un tanto por

mil.

0.0123456/ 0.0078125: una constante para que el valor máximo sea de 13500

kWh.

Page 64: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

63

AuxEol: la velocidad del viento.

También se ha tenido en cuenta que los aerogeneradores no pueden generar a cualquier

velocidad de viento, tienen un mínimo y un máximo, tal y como se puede ver en la Figura

11.3.

Este rango queda reflejado en el código 3 y el código 4:

Sub VViento_Sub()

If Viento < 4 Then 'Con ningun viento

FEol.PBViento.Image = ControlE.My.Resources.Resources.Viento0

'Cambiamos el gif

FEol.LabelAvisoEol.Text = " Molins parats"

FEol.TrackBarEol.Enabled = False

ElseIf Viento < 10 Then 'Con poco viento

FEol.PBViento.Image =

ControlE.My.Resources.Resources.Viento40 'Cambiamos el gif

FEol.LabelAvisoEol.Text = ""

ElseIf Viento < 25 Then 'Con viento

FEol.PBViento.Image =

ControlE.My.Resources.Resources.Viento75 'Cambiamos el gif

FEol.LabelAvisoEol.Text = ""

Else 'Con mucho viento

FEol.PBViento.Image =

ControlE.My.Resources.Resources.Viento100 'Cambiamos el gif

FEol.LabelAvisoEol.Text = "Molins parats per seguretat"

FEol.TrackBarEol.Enabled = False

End If

End Sub

Código3. Limitación de la generación eólica.

AuxEol = Viento

If Viento > 15 Then

AuxEol = 15 'Con viento de 15m/s se satura la produccion

Figura 11.3. Rango de funcionamiento de un aerogenerador.

Page 65: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

64

End If

Código4. Saturación de la generación eólica.

En el código 3 se limita la generación a una velocidad de viento de 4 m/s y una máxima

de 25 m/s, mostrando mensajes de aviso al usuario de que la energía eólica está en desuso

por superar estos límites.

El código 4 intenta imitar el comportamiento de la saturación de la curva que podíamos

ver en la figura 11.3. donde a partir de los 13 m/s se satura la generación.

11.4. Velocidad del Viento

La velocidad del viento, como cualquier otro fenómeno meteorológico, tiene una cierta

probabilidad difícil de predecir, pero que con datos históricos, se puede determinar cuál es

la probabilidad de una determinada velocidad de viento, tal y como se ve en la figura 11.4.

A partir de la Figura 11.4. se genera la Tabla 11.4. donde se entrelazan los valores de

probabilidad para cada velocidad de viento:

Velocidad viento (m/s) Probabilidad (%)

0 1,1

0,5 1,3

1 2,4

1,5 4,05

Figura 11.4. Histograma de frecuencias relativas de las velocidades del viento

Page 66: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

65

2 5,2

2,5 5,7

3 6,2

3,5 6,3

4 6,2

4,5 6,15

5 6,25

5,5 5,9

6 5,5

6,5 5,1

7 4,5

7,5 4,4

8 3,9

8,5 3,4

9 2,8

9,5 2,4

10 1,7

10,5 1,3

11 1,2

11,5 0,95

12 0,7

12,5 0,7

13 0,5

13,5 0,6

14 0,5

14,5 0,4

15 0,4

15,5 0,35

16 0,3

16,5 0,3

17 0,3

17,5 0,2

18 0,2

Page 67: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

66

18,5 0,15

19 0,1

19,5 0,1

20 0,075

20,5 0,05

21 0,05

21,5 0,03

22 0,03

22,5 0,02

23 0,01

23,5 0,01

24 0,005

24,5 0,005

25 0,005

25,5 0,005

26 0,005

Tabla 11.4. Probabilidad de velocidad del viento.

Para trasladar estos valores de velocidad de viento al programa, se crea una variable

aleatoria llamada Probabilidad, que toma un valor entre 0 y 100. En función de este valor se

le asigna una velocidad de viento ponderada por su peso probabilístico, tal y como se puede

ver en el código 5:

Sub RandomViento()

Randomize() 'Para que los numeros no sean los mismos cada vez

que se inicia el programa

'Sumaremos todas las probabilidades para que salga un numero

Probabilidad = (Rnd() * 100)

Select Case Probabilidad 'Segun la probabilidad habrá una

velocidad de viento

Case > 97.6

Viento = 1

Case > 91.15

Viento = 2

Case > 80.25

Viento = 3

Case > 67.75

Viento = 4

Case > 55.4

Viento = 5

Case > 43.25

Page 68: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

67

Viento = 6

Case > 32.65

Viento = 7

Case > 23.75

Viento = 8

Case > 16.45

Viento = 9

Case > 11.25

Viento = 10

Case > 8.25

Viento = 11

Case > 6.1

Viento = 12

Case > 4.7

Viento = 13

Case > 3.6

Viento = 14

Case > 2.7

Viento = 15

Case > 1.95

Viento = 16

Case > 1.35

Viento = 17

Case > 0.85

Viento = 18

Case > 0.5

Viento = 19

Case > 0.3

Viento = 20

Case > 0.175

Viento = 21

Case > 0.095

Viento = 22

Case > 0.045

Viento = 23

Case > 0.025

Viento = 24

Case > 0.015

Viento = 25

Case > 0.005

Viento = 26

Case > 0

Viento = 27

End Select

End Sub

Código 5. Probabilidad de velocidad

11.5. Generación Solar

Para simplificar la aplicación, se dejaron al margen los factores que determinan la

eficiencia de la generación solar y no se distingue entre los diferentes tipos de generación de

Page 69: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

68

energía eléctrica con energía solar. Se distinguieron tres casos: si había sol y cielo despejado,

si había sol con cielo nublado o si era de noche. Para distinguir entre noche y día se utiliza

la hora, siendo de día de las 7:00 a las 21:00.

En cambio, para determinar cuál es la probabilidad real de que haya nubosidad que

puedan afectar a la producción de energía solar, se utilizan los datos de la Agencia Estatal

de Meteorología de España, en concreto, los valores climatológicos normales del Aeropuerto

de Reus, datos reflejados en la Tabla 11.5.

Mes T TM Tm R H DR DN DT DF DH DD I

Enero 9.0 14.1 3.9 29 70 4.0 0.2 0.2 0.3 5.7 7.2 157

Febrero 9.7 14.9 4.5 28 68 3.5 0.1 0.1 1.3 2.9 5.4 162

Marzo 11.9 17.1 6.6 28 67 3.8 0.1 0.3 1.9 0.8 6.0 197

Abril 13.8 19.0 8.6 37 66 5.0 0.0 0.5 0.8 0.0 3.9 222

Mayo 17.2 22.2 12.1 54 66 5.4 0.0 1.5 0.4 0.0 4.2 251

Junio 21.2 26.3 16.1 25 63 3.1 0.0 1.4 0.2 0.0 6.3 274

Julio 24.2 29.3 19.1 15 63 2.0 0.0 1.3 0.1 0.0 9.4 306

Agosto 24.6 29.4 19.7 42 66 3.6 0.0 2.6 0.2 0.0 6.2 265

Septiembre 21.5 26.3 16.6 77 70 5.1 0.0 3.1 0.2 0.0 4.8 209

Octubre 17.5 22.3 12.7 75 73 6.0 0.0 1.9 0.4 0.0 3.9 182

Noviembre 12.6 17.5 7.6 53 72 4.4 0.0 0.6 0.3 1.3 5.4 157

Diciembre 9.7 14.6 4.7 36 72 4.1 0.0 0.3 0.7 3.6 5.7 145

Año 16.1 21.1 11.1 500 68 49.8 0.4 13.9 6.7 12.5 68.3 -

Tabla 11.5. Probabilidades meteorológicas [2]

Siendo:

T Temperatura media mensual/anual (°C)

TM Media mensual/anual de las temperaturas máximas diarias (°C)

Tm Media mensual/anual de las temperaturas mínimas diarias (°C)

R Precipitación mensual/anual media (mm)

H Humedad relativa media (%)

DR Número medio mensual/anual de días de precipitación superior o igual a 1

mm

DN Número medio mensual/anual de días de nieve

DT Número medio mensual/anual de días de tormenta

DF Número medio mensual/anual de días de niebla

[2] http://www.aemet.es/es/serviciosclimaticos/datosclimatologicos/valoresclimatologicos?l=0016A&k=cat

Page 70: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

69

DH Número medio mensual/anual de días de helada

DD Número medio mensual/anual de días despejados

I Número medio mensual/anual de horas de sol

A partir de estos datos, se suman todos los días que no se consideran despejados, es

decir DR, DN, DT,DF y DH, que en total suman 83,3 días al año de media.

Lo cual hace una probabilidad del 22,82 % de que un día no tenga las condiciones de

máxima radiación solar. Teniendo en cuenta lo anterior, se establece una probabilidad del

23 % de que cuando el programa realice la serie climatológica, el usuario se vea afectado

por el evento “Nubes”, con lo cual se reduce la producción de energía solar un 30 % , tal y

como se ve en el código 6:

Sub Climatologia() 'Funcion que permite dar un clima aleatorio

Randomize()

Clima = Rnd() * 100 'Le damos un valor aleatorio a la variable

Clima

'Según el valor aleatorio distinguimos entre dos situaciones

If Hora >= 21 Or Hora < 7 Then 'Segun la hora sera de noche

o día

Noche = True

Else

Noche = False

End If

If Noche Then

LabelNubes.Visible = False

PBClima.Image = ControlE.My.Resources.Resources.Noche

TBSol = 0

VSol = 0

Refrescar()

ContEGenSol.ForeColor = Color.Red

LastClim = Clima

Timerlluvia.Stop()

ElseIf Clima < 77 Then 'Probabilidad de sol 77%

ContEGenSol.ForeColor = Color.White

PBClima.Image = ControlE.My.Resources.Resources.Sol

LabelNubes.Visible = False

If LastClim >= 77 Then 'Si el anterior clima fue nubes

TBSol = TBSol + TBSol * 42.874 / 100 'Actualizamos

el valor automaticamente

VSol = VSol + VSol * 42.874 / 100

Timerlluvia.Stop() 'Detenemos la lluvia

If VSol > 3150 Then 'Para evitar valores superiores

al máximo

VSol = 3150

TBSol = 3150

End If

Refrescar()

Page 71: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

70

End If

LastClim = Clima

Else 'Evento Nubes

ContEGenSol.ForeColor = Color.White

PBClima.Image = ControlE.My.Resources.Resources.nubes

If LastClim < 77 Then 'Si el anterior clima fue sol

TBSol = TBSol - TBSol * 30 / 100

VSol = VSol - VSol * 30 / 100

Refrescar()

End If

LabelNubes.Visible = True 'Mostramos informacion de que

se ha reducido VSol

LastClim = Clima

Timerlluvia.Start() 'La lluvia rellena la presa

End If

End Sub

Código 6. Probabilidad de nubes

11.6. Generación Hidráulica

Para agilizar la aplicación, la generación hidráulica solo depende de lo que el usuario

decida. Para ello se incluye un control deslizante, que tiene un valor entre uno y mil. Cuanto

mayor sea el valor, de forma lineal, más alta es la generación.

Sin embargo, no es un recurso ilimitado, ya que el usuario empieza con una

determinada cantidad de agua, siendo un tanto por ciento del pantano, en concreto el 93%.

Mediante código, se crea una ejecución en paralelo que disminuye la capacidad la presa en

función del valor del control deslizante.

No obstante, para facilitar el transcurso de la aplicación, en el caso de que surja el

evento climatológico “Nubes”, se llenara el pantano, dando a entender al usuario que la

energía hidráulica es una fuente renovable, pero a la vez dependiente de diferentes factores.

En el Código 7 se puede ver cómo funciona la ejecución en paralelo:

Private Sub TimerHidro_Tick(sender As Object, e As EventArgs) Handles

TimerHidro.Tick

If Capacidad <= 10 Then 'Mostramos un mensaje si la capacidad

disminuye demasiado

VAlertaCap()

Else

Capacidad = Capacidad - AuxHidro 'Vamos restando valor a la

capacidad con auxhidro, que es 0 en caso de

'que no haya empezado el programa

Page 72: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

71

ContPresa.Text = Capacidad & " %" 'Actualizamos los labels

con cada vuelta

FHidro.ContPresa.Text = Capacidad & " %"

RefCapacidad()

If Facil Then

TimerHidro.Interval = (3000 - VHidro / 13) 'En funcion

de lo que generen se reduce mas rapido

Else

TimerHidro.Interval = (3000 - VHidro / 10)

End If

End If

End Sub

Código 7. Ejecución en paralelo

11.7. Generación Nuclear

Para mostrar que la energía nuclear es una central de base que tiene una generación

más o menos constante, la central está siempre activa. El usuario no puedo controlar su

generación, sin embargo, el usuario tendrá que realizar un “mantenimiento” cada cierto

tiempo, para asegurar ese valor de generación. Cuando se realiza el mantenimiento de la

central, su generación será 0. Ver Código 8.

Por tanto el usuario tendrá que anticiparse, ya que si el valor de mantenimiento de la

central llega al 10 %, se reparará sola, pudiendo afectar a su partida.

Private Sub TimerNuc_Tick(sender As Object, e As EventArgs) Handles

TimerNuc.Tick

If Not Facil Then 'Desactivado para el nivel Facil

If ((PBNuc Mod 10) = 0) And PBNuc <> 100 Then 'Si vajamos

un 10% el mantenimiento penalizamos

VNuc = VNuc - 150

End If

End If

Refrescar() 'Vamos actualizando los labels

PBNuc = PBNuc - 1 'Reducimos el mantenimiento

If FNuc.Enabled = True Then 'En caso de que este activa la form,

actualizamos sus valores

FNuc.Label2.Text = PBNuc & "%"

FNuc.ProgressBar1.Value = PBNuc

End If

Labeldesgastnuc.Text = PBNuc & "%"

ProgressBarNuc.Value = PBNuc

Page 73: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

72

If PBNuc = 10 Then

TimerNuc.Stop()

TimerNucRep.Start()

MessageBox.Show("La central nuclear no pot continuar aixi!!

L'estat t'obliga a fer el manteniment de la cental.", "Alerta",

MessageBoxButtons.OK,

MessageBoxIcon.Exclamation)

End If

End Sub

Código 8. Reducción del mantenimiento de la central nuclear.

11.8. Generación Térmica

En este caso, solo se tiene en cuenta las centrales de ciclo combinado, por ser más

eficientes que los otros tipos de centrales térmicas. Para mostrar que las centrales térmicas

pueden ser utilizadas como centrales de rápida entrada y salida del sistema de generación, la

energía generada se determina por un control deslizante sobre el cual actúa el usuario.

11.9. Funciones didácticas

Para no saturar al usuario con información, en esta aplicación se realizan preguntas

relacionadas con las energías renovables cada cierto tiempo. Las preguntas son de tipo

multirespuesta. Si el usuario acierta, obtendrá importantes beneficios que le ayudarán en el

transcurso de la aplicación, si se equivoca no recibirá ningún efecto negativo.

La intención es que el usuario reciba información de una forma más discreta,

intentando crear un dialogo entre el usuario y el programa. En el Código 9, se puede ver un

extracto de las diferentes preguntas y en el Código 10, sus respectivas respuestas.

Public Sub CargaPreguntas()

Select Case NumPregunta 'Seleccionamos en que pregunta estamos

Case 1

LabelPregunta.Text = "D'on s'obté principalment la

biomassa?"

RadioButton1.Text = "Dels Iogurs amb bífidus"

RadioButton2.Text = "De les restes de plàstic de la

brossa"

RadioButton3.Text = "De les restes de residus forestals i

agrícoles"

Case 2

LabelPregunta.Text = "Les xarxes intel·ligents (smart

grids) són..."

RadioButton1.Text = "xarxes que milloraran l'eficiència

elèctrica"

Page 74: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

73

RadioButton2.Text = "xarxes formadess per smartphones"

RadioButton3.Text = "tecnologies que encara no han

arribat a Europa"

Case 4

LabelPregunta.Text = "Quin creus que és el nom correcte

d'una central elèctrica marina? (Bouy significa boia)."

RadioButton1.Text = "Power Buoy"

RadioButton2.Text = "Turbo Buoy"

RadioButton3.Text = "Electrical-Marine Buoy"

Case 5

LabelPregunta.Text = "En quina orientació col·locaries

unes plaques solars per aprofitar al màxim el sol?"

RadioButton1.Text = "Orientació Nord"

RadioButton2.Text = "Orientació Sud"

RadioButton3.Text = "És indiferent"

Case 6

LabelPregunta.Text = "Què creus que és una central de

cicle combinat?"

RadioButton1.Text = "Una central on es crema les restes

de residus urbans"

RadioButton2.Text = "Una combinació d'una central tèrmica

i una nuclear"

RadioButton3.Text = "Una central tèrmica que aprofita al

màxim el combustible"

Case 7

LabelPregunta.Text = "En què es basa l'energia

geotèrmica?"

RadioButton1.Text = "En aprofitar l'energia de les fonts

termals"

RadioButton2.Text = "En aprofitar l'escalfor dels raigs

solars"

RadioButton3.Text = "En aprofitar l'energia tèrmica de la

Terra"

End Select

End Sub

Código 9. Preguntas

Public Sub CargarRespuestas()

Select Case NumPregunta

Case 1

If RespCorrecta = "Correcte" Then

Label1.Text = RespCorrecta & ", tota resta orgànica

es pot transformar en biomassa, per després utilitzar-la com a

combustible sent una molt bona opció com a energia renovable.

Es Es redueix el consum de la teva ciutat un 2%!!"

ReduccionConsumo = ReduccionConsumo + 2

Else

Label1.Text = RespCorrecta & ", tota resta orgànica

es pot transformar en biomassa, per després utilitzar-la com a

combustible sent una molt bona opció com a energia renovable."

End If

Page 75: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

74

PictureBox1.BackgroundImage =

ControlE.My.Resources.Pellets

Case 2

If RespCorrecta = "Correcte" Then

Label1.Text = RespCorrecta & ", les Smart Grids

permeten que els habitatges i els negocis puguin convertir-se en

generadors fent que ja no es depengui tant de grans centrals

Es redueix el consum de la teva ciutat un 2%!!"

ReduccionConsumo = ReduccionConsumo + 2

Else

Label1.Text = RespCorrecta & ", les Smart Grids

permeten que els habitatges i els negocis puguin convertir-se en

generadors fent que ja no es depengui tant de grans centrals"

End If

PictureBox1.BackgroundImage =

ControlE.My.Resources.Smartcity

Case 4

If RespCorrecta = "Correcte" Then

Label1.Text = RespCorrecta & ", la POWER BUOY

aprofita el moviment de les ones, per generar electricitat en el seu eix

vertical, com si d'una manxa de bici es tractés.

Tindràs una generació extra de 1500 kWh per aquest descobriment!!"

EnergiaBase = EnergiaBase + 1500

Else

Label1.Text = RespCorrecta & ", la POWER BUOY

aprofita el moviment de les ones, per generar electricitat en el seu eix

vertical, com si d'una manxa de bici es tractés."

End If

PictureBox1.BackgroundImage =

ControlE.My.Resources.powerbuoy

Case 5

If RespCorrecta = "Correcte" Then

Label1.Text = RespCorrecta & ", en orientació SUD

s'aprofita millor les hores de sol. Les cases orientades al sud

necessiten menys energia per escalfar-se.

Tindràs un augment d'un 10 % en la generació solar"

AumentoSolar = 10

VSol = TBSol + (AumentoSolar / 100) * (TBSol)

Else

Label1.Text = RespCorrecta & ", en orientació SUD

s'aprofita millor les hores de sol. Les cases orientades al sud

necessiten menys energia per escalfar-se."

End If

PictureBox1.BackgroundImage =

ControlE.My.Resources.rosewind

Case 6

If RespCorrecta = "Correcte" Then

Label1.Text = RespCorrecta & ", hi ha un primer cicle

de combustió, i amb els gasos d'aquesta, es fa una segona combustió. Com

si aprofitessis els gasos d'escapament del cotxe per extreure més

energia. La central de la imatge està a prop de Vandellòs.

Tindràs una generació extra de 1500 kWh per aquest descobriment!!"

Else

Label1.Text = RespCorrecta & ", hi ha un primer cicle

de combustió, i amb els gasos d'aquesta, es fa una segona combustió. Com

Page 76: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

75

si aprofitessis els gasos d'escapament del cotxe per extreure més

energia. La central de la imatge està a prop de Vandellòs."

End If

PictureBox1.BackgroundImage =

ControlE.My.Resources._800px_Ciclo_combinado_Plana_del_Vent

Case Else

If RespCorrecta = "Correcte" Then

Label1.Text = RespCorrecta & ", el nucli de la Terra

es troba a prop dels 6700ºC, una part d'aquesta calor es pot aprofitar

per generar electricitat, però només en llocs especials (amb activitat

volcànica).

Tindràs una generació extra de 1500 kWh per aquest descobriment!!"

EnergiaBase = EnergiaBase + 1500

Else

Label1.Text = RespCorrecta & ", el nucli de la Terra

es troba a prop dels 6700ºC, una part d'aquesta calor es pot aprofitar

per generar electricitat, però només en llocs especials (amb activitat

volcànica)."

End If

PictureBox1.BackgroundImage =

ControlE.My.Resources._800px_GeysirEruptionNear

End Select

End Sub

Código 10. Respuestas

11.10. Excepción

Debido a que los factores climatológicos pueden provocar que el usuario no pueda

llegar a la energía demandada, en el programa se genera una excepción. Cuando surge esa

excepción, se muestra un mensaje al usuario, alertándole de que no se puede llegar a la

energía demandada, y se avisa de que la ciudad vecina le prestará energía, intentando hacer

un símil a la interconexión eléctrica que existe entre España y los países colindantes. Esta

excepción se puede ver en el Código 11.

'/////Comprobacion de energia total/////////////

Dim total As Integer

If Noche Then

If Viento > 25 Then

total = (FCicle.TrackBarCicle.Maximum) +

(FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc)

ElseIf Viento > 12 Then

total = (FCicle.TrackBarCicle.Maximum) +

(FEol.TrackBarEol.Maximum * 0.005 * AuxEol ^ 3 + (AumentoEolica / 100) *

(FEol.TrackBarEol.Maximum * 0.0036 * AuxEol ^ 3)) +

(FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc)

ElseIf Viento > 4 Then

total = (FCicle.TrackBarCicle.Maximum) +

(FEol.TrackBarEol.Maximum * 0.0036 * AuxEol ^ 3 + (AumentoEolica / 100) *

(FEol.TrackBarEol.Maximum * 0.0036 * AuxEol ^ 3)) +

(FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc)

Else

Page 77: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

11. Modelo Matemático

76

total = (FCicle.TrackBarCicle.Maximum) +

(FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc)

End If

Else

If Viento > 25 Then

total = (FCicle.TrackBarCicle.Maximum) +

(FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc)

ElseIf Viento > 12 Then

total = (FCicle.TrackBarCicle.Maximum) +

(FEol.TrackBarEol.Maximum * 0.005 * AuxEol ^ 3 + (AumentoEolica / 100) *

(FEol.TrackBarEol.Maximum * 0.0036 * AuxEol ^ 3)) +

(FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc) +

(FSol.TrackBarSol.Maximum + (AumentoSolar / 100) *

(FSol.TrackBarSol.Maximum))

ElseIf Viento > 4 Then

total = (FCicle.TrackBarCicle.Maximum) +

(FEol.TrackBarEol.Maximum * 0.0036 * AuxEol ^ 3 + (AumentoEolica / 100) *

(FEol.TrackBarEol.Maximum * 0.0036 * AuxEol ^ 3)) +

(FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc) +

(FSol.TrackBarSol.Maximum + (AumentoSolar / 100) *

(FSol.TrackBarSol.Maximum))

Else

total = (FCicle.TrackBarCicle.Maximum) +

(FHidro.TrackBarHidro.Maximum * 10.35) + (VNuc) +

(FSol.TrackBarSol.Maximum + (AumentoSolar / 100) *

(FSol.TrackBarSol.Maximum))

End If

End If

If total < EnergiaAbs Then

MessageBox.Show("Sembla que no pots arribar. Però tranquil

els veïns estan per això. La ciutat veïna et deixa electricitat.", "Oh

oh", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

GraficEnergia(Vuelta) = EnergiaAbs

Código 11. Control de excepción

11.11. Finalización Programa

En cuanto han pasado 6 ciclos de programa (24 horas), se cierra el programa principal,

y el usuario puede ver los valores de generación y los de consumo en función de la hora del

día.

La finalidad es la de establecer una relación entre las curvas de energía programada y

energía generada, para que el usuario pueda ver como la energía va fluctuando a lo largo de

un día, y que pueda intuir las denominadas horas pico y horas valle.

Page 78: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

12. Conclusiones

77

12. Conclusiones

Para finalizar, es necesario revisar el cumplimiento de los objetivos marcados:

Hacer el programa más interactivo: el programa es mucho más intuitivo, dinámico

y ameno.

Utilizar un lenguaje más accesible para los usuarios: Visual Basic permite que todo

usuario de Windows puede acceder a este programa y la modificación del código del mismo

sea más fácil.

Implementar diferentes niveles de dificultad: los diferentes niveles aseguran que el

juego sea ameno para diferentes niveles de conocimientos.

Adaptarse a diferentes resoluciones de pantalla: el programa funciona con

resoluciones de pantalla a partir de 800x600 píxeles en adelante.

No infringir derechos de imágenes: en todo el programa solo se han usado imágenes

con derechos Creative Commons o hechas por mí, por tanto, no infringen ningún derecho,

asegurando que el programa pueda distribuirse libremente, ya que los derechos de este

trabajo pertenecen a la universidad.

Continuar con la divulgación de la ingeniería eléctrica: al final se consigue que

usuarios sin conocimientos en ingeniería, aprendan datos curiosos acerca de la misma.

Por tanto, se han cumplido todos los objetivos marcados al principio de este proyecto.

En mi opinión, la única carencia es la de un equipo externo para mejorar el atractivo del

juego, parecido a una maqueta con diferentes dispositivos de entrada y salida, como pueden

ser leds o botones.

Finalmente me gustaría concluir este trabajo diciendo que ha sido uno de los más

completos que he tenido ocasión de realizar. He podido llevar a la práctica muchas de las

enseñanzas adquiridas a lo largo de la carrera.

Page 79: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

13. Bibliografía

78

13. Bibliografía

J.A. Barrado, Apuntes de la Asignatura Energías Renovables 2014-2015.

Aprenda Microsoft Visual Basic 6.0 ya ,Michael Halvorson, McGrawHill, 1998.

Microsoft Visual Basic 2010: step by step, Michael Halvorson, , Microsoft Press, 2010.

http://www.ni.com/labview/esa/. [Info LabView] 2016

https://es.wikipedia.org/wiki/LabVIEW [Info LabView] 29/04/2016

https://msdn.microsoft.com/es-es/library/zkxk2fwf(v=vs.90).aspx. [Info C#] 11/2007

https://es.wikipedia.org/wiki/C_Sharp.[Info C#] 21/06/2016

https://msdn.microsoft.com/es-es/library/2x7h1hfk.asp.[Info Visual Basic] 2015

https://es.wikipedia.org/wiki/Visual_Basic [Info visual Basic] 08/07/2016

https://msdn.microsoft.com/es-es/library/3xdhey7w(v=vs.100).aspx[Controles Visual Basic] 2010

http://wwf.moccu.com/game.php?lang=es. [Juego WWF]

http://proyectoislarenovable.iter.es/recursos/juegos/.[Información Juegos]

http://xogo.climantica.org/es/index.html.[Juego CLMTK]

http://www.sustainabilitygame.iberdrola.com/index.php.[Juego Iberdrola] 2013

http://www.electrocity.co.nz/Game/game.aspx[Juego ElectroCity] 2016

http://wwww.ree.es/educacion/controla/. [Juego REE]

https://demanda.ree.es/demanda.html[Demanda REE]

https://commons.wikimedia.org/wiki/File:Sarnia_Solar-06.JPG [Imagen Solar]

https://commons.wikimedia.org/wiki/File:Weather-m-clear.svg [Icono Sol]

https://commons.wikimedia.org/wiki/File:Weather-sun-unsettled.svg [Icono Sol y Nubes]

https://commons.wikimedia.org/wiki/File:Gnome-weather-clear-night.svg[Icono Luna]

https://commons.wikimedia.org/wiki/File:Asc%C3%B3_nuclear_power_plant_-

_smokestack.JPG[Imagen central nuclear]

Page 80: Ivan Bellanco Bellanco PROGRAMA INFORMÁTICO …deeea.urv.cat/public/PROPOSTES/pub/pdf/2369pub.pdf · Recomendado para sistemas de hardware y software de pruebas, ... C# . C# (pronunciado

13. Bibliografía

79

https://commons.wikimedia.org/wiki/File:Ciclo_combinado_Plana_del_Vent.jpg[Ciclo

Combinado]

https://commons.wikimedia.org/wiki/File:Icon_tools.svg[Icono Herramienta]

https://commons.wikimedia.org/wiki/File:Flecha_arriba.svg[Icono Flecha]

https://commons.wikimedia.org/wiki/File:IoTnabled_Smart_City_Framework_White_Paper_Image

_2.png [Imagen Smart City]

https://commons.wikimedia.org/wiki/File:Biomass_Pellets_from_India_-_White_coal..jpg[Imagen

pellets]

https://commons.wikimedia.org/wiki/File:Optbuoy.jpg[Imagen Power Buoy]

https://commons.wikimedia.org/wiki/File:Jorge_Aguiar_Wind_rose.jpg[Imagen Rosa de los

Vientos]

https://commons.wikimedia.org/wiki/File:GeysirEruptionNear.jpg[Imagen Geiser]