Título: Desarrollo de componentes gráficos para el módulo de visualización del SCADA Nacional.
Trabajo de Diploma para optar por el título de Ingeniero Informático
Autor(es): María Mercedes Bornot Rivero Alexei Rivera Acosta
Tutores: Ing. Roberto Cárdenas Ing. Raudi Agdel Bacallao S.
Co-tutor: Ing. Ariel Guerra
Consultante: Ing. Ernesto Leyva Barrero
Mayo, 2010
Declaramos ser autores de la presente tesis y reconocemos a la Universidad de las Ciencias Informáticas los derechos patrimoniales de la misma, con carácter exclusivo.
Para que así conste firmo la presente a los ____ días del mes de junio del año 2010.
María Mercedes Bornot Alexei Rivera Acosta
______________ ______________
Firma del Autor Firma del Autor
Raudi Agdel Bacallao S Roberto Cárdenas Isla
______________ ______________
Firma del Tutor Firma del Tutor
I AGRADECIMIENTOS
Les agradecemos a la Revolución por darnos la oportunidad de formarnos como profesionales, especialmente a nuestro Comandante en Jefe por la genial idea de crear esta universidad. A nuestras familias por la educación recibida, por fomentar el amor al estudio.
Además a nuestros tutores Raudi Agdel Bacallao S, Roberto Cárdenas Isla y al profesor Ernesto Leyva Barrero, por aclararnos las dudas presentadas en el desarrollo de este trabajo.
A nuestros colegas de estudio por apoyarnos cuando lo necesitamos. A todas aquellas
personas que nos apoyaron y guiaron en todo momento.
II DEDICATORIA
Mercy:
Le dedico este trabajo especialmente a mi mama (mi tay), la persona que siempre a confiado en mí, me ha guiado en todo momento cuando más lo he necesitado, es lo más grande que tengo en la vida.
A mi familia que siempre me ha apoyado, mi papá Iraldo con sus consejos y locuras.
A mi mamá Martica con ese cariño con que siempre me crió como si fuese su hija al igual que mi papi corazón.
A mis hermanitos el gordo y el flaco como yo le digo, para los cuales tengo que ser su ejemplo.
A mi abuelita linda y a una personita llamada Kamy.
No podía faltar alguien muy especial para mí, mi tyto que con su amor me ha enseñado las cosas que son realmente bellas.
A mis suegros Vere y Morejon que me han hecho sentir parte de su familia.
A mi compañero de tesis por ayudarme tanto y soportarme todo este tiempo.
III Ale:
A mis padres Angela y Emilio por ser los mejores del mundo, por hacer que todo fuera posible, por la educación recibida, por el consejo, por el cariño, por la confianza, por la familia que me han creado, simplemente por todo.
A mis hermanos Rudy y Elieser por su amor, ayuda, apoyo y convivencia de todos estos años.
A mis amigos Papín y Leo por la amistad, por el apoyo brindado estos años lejos de casa, por ser mis consejeros, por estar presentes.
A mis amigos Orlandito y Daril por la amistad de varios años, por ayudarme a pesar de la distancia.
A mi Rita por ser parte de mi vida estos últimos 19 meses, por ser mi apoyo, mi compañera, por su fe en mí, por levantarme el ánimo cuando estuvo caído, por todos los recuerdos.
A mi familia por interesarse en mis estudios, por ayudarme en lo que han podido.
A mis compañeros de estudios, a los de la universidad por ayudarme a pasar estos años en este colegio, por ayudarme con las materias; a los de etapas anteriores por creer en mí.
A esta revolución que me ha formado, en la que creo y defiendo.
A mi compañera de tesis por ayudarme en todo lo que pudo.
A todas aquellas personas que han hecho posible hacer de mí un ingeniero, un profesional, de
alguna u otra manera.
IV RESUMEN
Diversas industrias emplean para la automatización de sus procesos productivos los sistemas SCADA, acrónimo de Supervisory Control and Data Acquisition (Control, Supervisión y Adquisición de Datos). Una de las prestaciones principales de un SCADA es la visualización mediante el módulo HMI, acrónimo de Human Machine Interface (Interfaz Hombre-Máquina), proporcionando una interfaz gráfica que permite al operador interactuar con el sistema. Actualmente se está creando un nuevo módulo de visualización del SCADA Cubano con el framework Qt. El editor de despliegues o ambiente de configuración, deberá contar con una biblioteca gráfica en la cual se encuentran componentes gráficos, los cuales serán utilizados para realizar los diferentes despliegues operacionales.
El objetivo de este trabajo, es el desarrollo de componentes gráficos reutilizables, con nuevas funcionalidades, que puedan ser configurados en cualquier editor gráfico que soporte Qt, y que puedan ser modificadas sus propiedades en ambiente de configuración. Para cumplir este objetivo se hizo un estudio de los conceptos, herramientas y tecnologías existente acerca del desarrollo de componentes gráficos para la visualización de procesos industriales. Se brinda además una descripción de la solución propuesta y las pruebas realizadas para validarla. Al término del mismo, se obtuvieron varios widgets Qt para el nuevo módulo de visualización, se reafirmó la potencia del framework Qt, para la creación de widgets e interfaces gráficas, así como la importancia del uso de software libre, al permitir la reutilización de código.
PALABRAS CLAVE
SCADA, HMI, Qt, widget
V TABLA DE CONTENIDOS
AGRADECIMIENTOS ... I DEDICATORIA ... II RESUMEN ... IV
INTRODUCCIÓN... 1
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA ... 4
1.1 Introducción ... 4
1.2 Definición de SCADA ... 4
1.2.2 Módulos de un SCADA ... 5
1.3 Módulo HMI ... 5
1.4 Editor Gráfico... 6
1.4.1 Ejemplos de editores gráficos ... 7
1.4.1.1 QT Designer ... 7
1.4.1.2 Editor HMI ... 8
1.4.2 Widgets ... 9
1.4.2.2 Área de herramientas gráficas del Editor HMI ... 11
1.5 Ambiente de ejecución ... 13
1.6 Tendencias y Tecnologías ... 14
1.7 Biblioteca ... 14
1.7.1 Biblioteca Estática ... 15
1.7.2 Biblioteca Dinámica ... 15
1.7.3 Bibliotecas Gráficas ... 15
1.7.3.1 Biblioteca GTK+ ... 15
1.7.3.2 Biblioteca Qt ... 16
1.7.3.3 Biblioteca Qwt ... 18
1.8 Metodologías de desarrollo ... 19
1.8.1 Metodología de desarrollo de Software OpenUP ... 19
1.8.2 Metodología de desarrollo de Software RUP ... 20
1.9 Herramientas ingeniería asistida por computadora ... 20
1.9.1 Umbrello ... 21
1.9.2 Visual Paradigm ... 21
1.10 Conclusiones del Capítulo ... 21
CAPÍTULO 2: DESCRIPCIÓN DE LA SOLUCIÓN ... 22
2.1 Introducción ... 22
2.2 Selección de la tecnología a utilizar ... 22
2.2.1 Software Libre. GNU/Linux ... 22
2.2.2 Eclipse ... 23
2.2.3 Biblioteca Qt ... 23
2.2.4 Lenguaje de programación C++ ... 25
VI
2.2.5 Metodología OpenUP ... 25
2.2.6 Visual Paradigm ... 25
2.2.7 Framework QTestLib ... 26
2.3 Selección de los componentes gráficos a desarrollar ... 27
2.4 Requerimientos funcionales ... 28
2.5 Diagrama de clases del componente gráfico Knob ... 32
2.5.1 Descripción de las principales clases que intervienen en el componente Knob ... 34
2.5.2 Fragmento de Código de la clase CustomKnob ... 39
2.6 Diagrama de clases del componente gráfico Slider ... 41
2.6.1 Descripción de las principales clases que intervienen en el componente Slider ... 42
2.6.2 Fragmentos de Código de la clase CustomSlider ... 49
2.7 Diagrama de clases del componente gráfico Termómetro ... 52
2.7.1 Descripción de las principales clases que intervienen en el componente Termómetro ... 53
2.7.2 Fragmento de Código de la clase CustomThermo ... 60
2.8 Diagrama de clases del componente gráfico Dial ... 61
2.8.1 Descripción de las principales clases que intervienen en el componente Dial ... 62
2.8.2 Fragmento de Código de la clase CustomDial ... 70
2.9 Conclusiones del Capítulo ... 71
CAPÍTULO 3: VALIDACIÓN DE LA SOLUCIÓN ... 72
3.1 Introducción ... 72
3.2 Fase de prueba ... 72
3.2.1 Prueba unitaria ... 72
3.2.1.1 Prueba de unidad en el contexto OO ... 73
3.3 Recursos empleados en la realización de las pruebas ... 74
3.4 Pruebas desarrolladas ... 74
3.4.1 Pruebas realizadas a la clase CustomKnob ... 74
3.4.1.1 Casos de prueba del método: void setMinValue (double m) ... 74
3.4.1.2 Casos de prueba del método: void setEditHotZones(bool tf) ... 75
3.4.1.3 Casos de prueba del método: void setEndZone1(double v) ... 76
3.4.2 Pruebas realizadas a la clase CustomSlider ... 77
3.4.2.1 Casos de prueba del método: void setCustomValue(double v) ... 77
3.4.2.2 Casos de prueba del método: void setWidthFill(int v) ... 78
3.4.2.3 Casos de prueba del método: void setCustomMargins(QPoint p) ... 79
3.4.3 Pruebas realizadas a la clase CustomThermo ... 80
3.4.3.1 Casos de prueba del método: void setScaleStep(double m) ... 80
3.4.3.2 Casos de prueba del método: void setColorZone3(QColor c) ... 81
3.3.3.3 Casos de prueba del método: void setEndHotZone1(double v) ... 81
3.4.4 Pruebas realizadas a la clase CustomDial ... 82
3.4.4.1 Casos de prueba del método: void setFillHeight(double v) ... 82
3.4.4.2 Casos de prueba del método: void setLabelText(QString l) ... 84
3.4.4.3 Casos de prueba del método: void setLabelPosition(LabelPosition lp) ... 85
3.5 Conclusiones del Capítulo ... 85
CONCLUSIONES ... 86
VII
RECOMENDACIONES ... 87
BIBLIOGRAFÍA ... 88
ANEXOS ... 90
Anexo 1 Imagen de los componentes gráficos en el editor Qt Designer ... 90
Anexo 2 Imagen de los componentes gráficos en el Editor HMI ... 91
GLOSARIO DE TÉRMINOS ... 92
1 INTRODUCCIÓN
Debido a los avances tecnológicos que ha tenido la humanidad, los procesos industriales son cada vez más complejos y difíciles de manejar, llevan consigo una gran cantidad de operaciones que deben ser controladas a tiempo completo. Con el desarrollo de la informática, se ha hecho posible desarrollar software capaces de automatizar estos procesos, marcando una notable diferencia en eficiencia y resultados de las industrias. La informática industrial es la rama de esta ciencia encargada del tratamiento automático de la información proveniente de los procesos industriales, utilizando para ello computadoras. Los datos son introducidos a un ordenador, adquiriendo significado cuando se hace una interpretación de los mismos.
En la actualidad diversas industrias emplean para la automatización de sus procesos productivos los sistemas SCADA, acrónimo de Supervisory Control and Data Acquisition (Control, Supervisión y Adquisición de Datos). Se trata de una aplicación software especialmente diseñada para el control de producción, proporcionando comunicación con los dispositivos de campo (controladores autónomos, autómatas programables, instrumentos inteligentes, etc.), controlando el proceso de forma automática desde la pantalla del ordenador. Una de las prestaciones de un SCADA es la visualización, mediante los gráficos del equipamiento actualizado para reflejar datos del campo, dentro de su estructura encontramos el módulo HMI, acrónimo de Human Machine Interface (Interfaz Hombre- Máquina), que no es más que la interfaz gráfica para la visualización del estado del proceso mediante objetos animados, gráficos, textos, listados, ventanas múltiples, entre otros.
Una de las empresas que utiliza varios SCADA es PDVSA (Petróleos de Venezuela S.A).Esta empresa sufrió entre diciembre del 2002 y enero del 2003 un sabotaje que implicó la paralización de varias de sus actividades, trayendo consecuencias negativas para la economía de ese país, por lo que decidieron buscar soluciones orientadas a la soberanía tecnológica, encaminadas al uso de software libre en las aplicaciones técnicas utilizadas. En la Universidad de las Ciencias Informáticas (UCI), específicamente en el antiguo polo de hardware y automática de la facultad 5, se creó el proyecto productivo Guardián del ALBA (GALBA), el cual asumió la tarea de dar solución al desarrollo de un SCADA en conjunto con la empresa PDVSA, con el objetivo de lograr tal soberanía tecnológica.
El SCADA desarrollado para el cliente PDVSA, no se adapta totalmente a las necesidades del proceso industrial cubano, el cual no es tan complejo y se desea automatizar con el objetivo de mejorar la eficiencia y desarrollo en la producción del país, política que exige el máximo apoyo de las tecnologías para salir adelante. Debido a la variedad de necesidades de los negocios y requerimientos de los clientes, se hace difícil con el anterior SCADA realizado (SCADA GALBA) brindar una solución a éstos de una manera ágil, pues conceptos como los widgets y su especificación para cada negocio
2
atrasaría el desarrollo de dichas soluciones que se desean dar en un tiempo de corto plazo. Se hace necesario mejorar varios de los módulos existentes, aprovechando así, al máximo la experiencia acumulada. Por esta razón se está creando actualmente un nuevo SCADA para el Centro de Informática Industrial.Entre los módulos a perfeccionar se encuentra el HMI y como uno de sus principales elementos su editor de configuración. El mismo es el encargado de brindar la funcionalidad de configurar de manera sinóptica todo el proceso industrial.
El módulo de visualización del SCADA cuenta con componentes gráficos totalmente dependientes de la aplicación, su portabilidad es pobre y el proceso de reutilización de los mismos se hace complejo. Otra característica es la dificultad de su mantenimiento, implicando un enorme esfuerzo para realizar cualquier cambio por mínimo que sea. Por estos motivos se está creando un nuevo módulo de visualización con el framework Qt, el cual no cuenta con los componentes gráficos necesarios que permita configurar los despliegues; siendo necesaria la rapidez del desarrollo de los mismos.
Ante la situación problemática antes planteada se define el siguiente problema científico:
¿Cómo proveer al módulo de visualización del SCADA Nacional de los componentes gráficos necesarios para su eficiente funcionamiento?
Se plantea como objeto de investigación: componentes gráficos para la visualización de procesos industriales.
El objeto de estudio delimita el campo de acción: componentes gráficos para el módulo de visualización del SCADA Nacional.
Por tanto se define como objetivo general: desarrollar componentes gráficos para el módulo de visualización del SCADA Nacional.
Se tiene la siguiente idea a defender: Si se cuenta con componentes gráficos creados con el framework Qt, el módulo de visualización del SCADA Nacional poseerá componentes reutilizables, con nuevas funcionalidades, que le permitirán ser más robusto.
Para llevar a cabo este trabajo se concibieron las siguientes tareas:
Revisión de la bibliografía referente al módulo de visualización de los SCADA, para la adquisición de información sobre el desarrollo de componentes.
Definición de las herramientas y tecnologías a utilizar enfocadas a aplicaciones técnicas para usar las más adecuadas en nuestro software.
Definición de los componentes gráficos a desarrollar y sus características.
3
Implementación de los componentes gráficos.Integración con la herramienta de configuración, para probar las funcionalidades de los componentes.
Realización de las pruebas, para encontrar los errores de la implementación.
Valoración de los resultados obtenidos, para saber hasta qué punto se alcanzó el objetivo de este trabajo.
Se emplean los siguientes métodos teóricos:
Analítico-Sintético: Para la consulta de la documentación existente acerca de los componentes gráficos del módulo de visualización de los SCADA, y el estudio de los conceptos empleados en el tema en cuestión.
Análisis Histórico-Lógico: Para disponer de información sobre las tendencias actuales de los SCADA y de sus módulos de visualización.
El presente documento está estructurado en tres capítulos:
En el Capítulo 1 se realiza un esbozo teórico centrado en temáticas como sistemas SCADA, módulo de Visualización, componente gráfico, las principales tendencias y tecnologías actuales que sirven de apoyo a todo el trabajo desarrollado.
En el Capítulo 2 se describe la solución propuesta, mostrando la tecnología seleccionada, los requerimientos funcionales y la descripción de las principales clases.
El Capítulo 3 se dedica a las pruebas de unidad realizadas para validar la solución propuesta.
4 CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA
1.1 Introducción
En este capítulo se presentan los conceptos y definiciones que ayudan en el desarrollo y comprensión de los componentes gráficos. Se describe la concepción general de un SCADA, los módulos que posee, haciendo énfasis en la visualización de los componentes. Además se mencionan las tecnologías que se emplean en la actualidad para el desarrollo de widgets así como las bibliotecas gráficas más empleadas.
1.2 Definición de SCADA
El sistema más utilizado en la automatización de los procesos industriales es el SCADA, acrónimo de Supervisory Control And Data Acquisition (Supervisión, Control y Adquisición de Datos).
Aquellos programas necesarios, y en su caso el hardware adicional que se necesite, se denomina en general sistema SCADA.
Estos sistemas utilizan las tecnologías de comunicación para monitorear y controlar los procesos industriales. Además son partes integrales de la mayoría de los ambientes industriales complejos o muy geográficamente dispersos, proporcionando comunicación con los dispositivos de campo (controladores autónomos, autómatas programables, etc.) recolectando información de una gran cantidad de fuentes muy rápidamente, y presentándola a un operador en una forma amigable, en la pantalla del ordenador.
Los SCADA mejoran la eficacia del proceso de monitoreo y control proporcionando la información oportuna para poder tomar decisiones operacionales apropiadas, provee de toda la información que se genera en el proceso productivo a diversos usuarios, tanto del mismo nivel como de otros supervisores dentro de la empresa: control de calidad, supervisión, mantenimiento, etc (1).
En este tipo de sistemas usualmente existe un ordenador, que efectúa tareas de supervisión y gestión de alarmas, así como tratamiento de datos y control de procesos. La comunicación se realiza mediante buses especiales o redes LAN. Todo esto se ejecuta normalmente en tiempo real, y están diseñados para dar al operador de planta la posibilidad de supervisar y controlar dichos procesos. El SCADA cuenta con tres funciones principales que debe cumplir, ellas son:
5
Adquisición de datos: para recoger, procesar y almacenar la información recibida.Supervisión: para observar desde el monitor la evolución de las variables del proceso.
Control: para modificar la evolución del proceso, actuando bien sobre los reguladores autónomos básicos (alarmas, menús, etc.), o directamente sobre el proceso mediante las salidas conectadas.
1.2.2 Módulos de un SCADA
Los sistemas SCADA están compuestos por módulos o bloques software que permiten las actividades de adquisición, supervisión y control, son los siguientes:
Configuración: permite al usuario definir el entorno de trabajo de su SCADA, adaptándolo a la aplicación particular que se desea desarrollar.
Interfaz gráfico del operador: proporciona al operador las funciones de control y supervisión de la planta. El proceso se representa mediante sinópticos gráficos almacenados en el ordenador de proceso y generados desde el editor incorporado en el SCADA o importados desde otra aplicación durante la configuración del paquete.
Módulo de proceso: ejecuta las acciones de mando pre programadas a partir de los valores actuales de variables leídas.
Gestión y archivo de datos: se encarga del almacenamiento y procesado ordenado de los datos, de forma que otra aplicación o dispositivo pueda tener acceso a ellos.
Comunicaciones: se encarga de la transferencia de información entre la planta y la arquitectura hardware que soporta el SCADA, y entre ésta y el resto de elementos informáticos de gestión (2).
1.3 Módulo HMI
Human Machine Interface (HMI) ó Interfaz Hombre-Máquina, es uno de los módulos de un SCADA, y es el encargado de presentar la información en forma de sinópticos gráficos. Como su nombre lo indica, es la interfaz que permite al operador interactuar con el sistema. Existen diferentes
6
tipos de HMI, de los cuales se pueden reconocer claramente dos de ellos: Interfaces Gráficas de Usuario (GUI) e Interfaces de Usuario basadas en la Web.Existen varios tipos de interfaces que actualmente son utilizadas en menor escala, entre ellas están las basadas en líneas de comandos, las táctiles basadas en gestos, las multi-pantallas y las basadas en texto.
En un SCADA el módulo de HMI es el encargado de representar los procesos que ocurren en el campo en tiempo real, muestra los componentes implicados, los sensores, las estaciones remotas, y el sistema de comunicación dándole al operador total control. Además este módulo permite al operador estar en contacto directo con el sistema, realizar la supervisión y el control del proceso en general.
En el SCADA Nacional el módulo HMI estará dividido en dos sub-módulos, el ambiente de configuración y el ambiente de ejecución. El ambiente de configuración engloba las utilidades relacionadas con la creación y edición de los elementos que compondrán el sistema, permite además la creación de una aplicación para un proceso en particular; mientras que el ambiente de ejecución o
runtime es el encargado de mostrar al operador la aplicación creada.
El sub-módulo de configuración perteneciente al módulo HMI del SCADA Nacional, cuenta con una herramienta que permite a los usuarios configurar el sistema para un determinado proceso y mostrar esta configuración en un ambiente de ejecución.
1.4 Editor Gráfico
El editor gráfico o ambiente de configuración, permite configurar los procesos, definir y gestionar las variables, editar los controladores, los comandos, las alarmas y variadas opciones adicionales. Detalladamente, el editor de configuración es el que permite a un mantenedor definir el ambiente de trabajo del SCADA, adaptándolo mejor a la aplicación particular que se desea desarrollar.
Por otra parte, la edición gráfica proporciona al operador las funciones de control y supervisión de la planta .El proceso se representa mediante sinópticos, almacenados en el ordenador en el SCADA o bien importados desde otras aplicaciones durante la configuración del paquete de software (3).
En algunos sistemas también se indica en la configuración del SCADA las variables que después se visualizarán, procesarán y/o controlarán en forma de lista o tablas, donde pueden definirse
7
etiquetas o nombres para hacer referencia directa a estas variables, y facilitando la posterior programación (4).Algunas de las características que debe tener un editor gráfico, son las siguientes:
Asociación de señales a sus gráficos.
Utilizar colores que señalen situaciones con claridad: preferentemente verde para indicar normalidad, amarillos para señalar atención por parte del operador y rojos para situaciones o estados de peligro.
Añadir texto y audio a las alarmas e intermitencias.
Poder hacer zooms de parte del sinóptico del proceso para ampliar la información según sub- sinópticos, ya sea a voluntad del usuario o por indicación del propio SCADA.
1.4.1 Ejemplos de editores gráficos
Existen un gran número de editores gráficos, cada uno con las características específicas para lo cual fueron creados, a continuación se muestran algunos ejemplos de dichos editores.
1.4.1.1 QT Designer
QT Designer es una herramienta para el desarrollo de formularios y presentaciones gráficas para las aplicaciones. Permite acelerar el desarrollo de interfaces de alto rendimiento, a la vez que proporciona una forma fácil de diseñar interfaces gráficas de usuario avanzadas generando el código fuente para las mismas, lo que permite al desarrollador ajustarlo a sus necesidades.
El QT Designer utiliza como base la librería gráfica de QT, que ha sido transportada a diversas plataformas, lo que permite que el código generado por el QT Designer pueda ser utilizado en diversas plataformas. Además, el QT Designer funciona sólo o asociándose a algunos entornos de desarrollo integrado como Visual Studio .Net o Eclipse. Esta herramienta provee características muy poderosas como la pre visualización de la interfaz, soporte para widgets y un editor de propiedades bastante poderoso.
8
Imagen 1 Diseñador de interfaces Qt1.4.1.2 Editor HMI
El editor al que se hacía referencia en la introducción, es decir, el editor del GALBA, es conocido como Editor HMI. El mismo se ajusta a los estándares de usabilidad y diseño de interfaces gráficas de usuario presentes en otras áreas de la industria del software.
El ambiente de configuración del editor HMI permite a un mantenedor definir el ambiente de trabajo SCADA, adaptándolo mejor a la aplicación particular que se desee desarrollar. En el ambiente de configuración actual se pueden crear varios nodos y cada nodo puede contar con varios módulos, como módulos HMI donde se crean los despliegues sobre los cuales se configuran los widgets necesarios para representar la información al operador. Se lleva a cabo también la asociación de estos widgets con las variables que representan y se permite modificar las propiedades de los elementos gráficos y los despliegues. Se configuran los módulos de históricos. Los de bases de Datos en tiempo real, que incluyen canales, subcanales, dispositivos, y los distintos tipos de puntos y alarmas con las que cuenta el sistema que representan toda la información de configuración necesaria para este módulo. También se configura el módulo de configuración donde se especifica la forma en que debe
9
trabajar el servicio que distribuye la configuración centralizada que se encarga de distribuir los datos necesarios para el funcionamiento de todos los módulos de forma individual (5).Imagen 2 Editor HMI
1.4.2 Widgets
Los editores gráficos contienen componentes u objetos gráficos, estos son, aspectos visibles de la interfaz, por ejemplo: botones, etiquetas, campos de texto, imágenes, ilustraciones, iconos, tipografía, bordes, fondos, líneas etc. Básicamente se trata de cualquier tema que sea usado en el diseño. Los componentes gráficos también son llamados widgets.
"Widget" es la abreviatura de "gadget ventana”, también conocido como componente. El término fue aplicado por primera vez a elementos de la interfaz de usuario durante el proyecto Athena, en 1988. En programación, un widget (o control) es un elemento de una interfaz de usuario gráfica (GUI) que muestra una organización de la información modificable por el usuario, ejemplos: una ventana, una barra de tareas o una caja de texto. La característica definitoria de un widget es proporcionar un único punto de interacción para la manipulación directa de un determinado tipo de datos. En otras palabras,
10
los widgets son bloques de construcción básicos de la vista que, combinados en una aplicación, mantenga todos los datos procesados por la aplicación y las interacciones disponibles en estos datos.Los widgets son a veces calificados como virtuales para distinguirlos de los de sus equivalentes físicos, por ejemplo, los botones virtuales que se puede hacer clic con el cursor del ratón, frente a los botones físicos que pueden ser presionados con un dedo.
Por regla general, suelen reunirse varios widgets en juegos de herramientas de widgets. Los programadores los usan para construir interfaces gráficas de usuario.
Muchos de los widgets, pueden ser creados con unas cuantas imágenes y con pocas líneas de código, en lenguajes que van desde XML, pasando por JavaScript a Perl, C#, C++, entre otros.
Los widgets aparecieron originalmente en el ambiente del sistema de accesorios de escritorio de Mac OS X, actualmente Yahoo ofrece una colección muy amplia de widgets para Windows XP y Mac OS X; a la vez que existe una creciente creación de widgets para Windows Vista que aprovechan del nuevo motor gráfico de este sistema conocido como WinFX, una biblioteca de tecnologías para Windows Vista también disponible sin costo alguno para Windows 2000, XP, Windows 2003.
También los hay para GNU/Linux; su facilidad de programación es sorprendente y al ser de código abierto cualquier usuario puede personalizarlo a su gusto. Ejemplos de bibliotecas usadas para la creación de widgets: GTK+, Qt, SWT, Swing, etc. También existen librerías de widgets tal es el caso de Widget toolkit.
Widget toolkit, librería de widgets, o juego de herramientas GUI es un conjunto de widgets para usar en el diseño de aplicaciones con interfaces gráficas de usuario (GUI). El kit de herramientas en sí es una pieza de software que suele ir provisto de un sistema de ventanas, o gestor de ventanas que ofrece programas con una interfaz de programación de aplicaciones (API), lo que les permite hacer uso de widgets. Los widgets que son proporcionados por un conjunto de instrumentos típicamente se adhieren a la especificación de diseño unificado, incluyendo la estética, para dar un sentido de cohesión global entre las diversas partes de la solicitud y entre diversas aplicaciones dentro de la interfaz gráfica de usuario.
La interfaz gráfica de usuario de un programa comúnmente se construye en modo de cascada, con widgets que se añaden directamente a la parte superior de los widgets existentes. En muchas ocasiones se agregan directamente en el escritorio por el administrador de ventanas, y se pueden
11
apilar en capas una encima de otras a través de diversos medios. Cada ventana está asociada con una aplicación particular que controla los widgets añadidos al canvas, el cual puede ser visto y modificado por sus aplicaciones asociadas.1.4.2.1 Tipos de widget
Existen cuatro tipos de widgets: de escritorio, para la Web, para los móviles y los físicos:
Los widgets de escritorio, son los más conocidos. Se trata de herramientas interactivas descargables que se insertan en el escritorio del ordenador. Por ejemplo, los usuarios de Windows Vista disponen de varios de ellos instalados en el escritorio. Los más comunes son aplicaciones para informarse del tiempo, un reloj, un buscador, etc.
Los Web widgets son partes de código que representan funcionalidades o contenidos y que pueden ser instalados y ejecutados en tu página de una manera muy sencilla. Esa parte del código puede programarse en código JavaScript, Flash, Silverlight, Windows Media Player, etc., y normalmente está alojado en la página Web de su creador, aunque sus contenidos pueden importarse fácilmente a tu página Web. Su objetivo es enriquecer los contenidos y funcionalidades de la Web sin necesidad de programar y crear nuevos contenidos. La mayoría de los Web widgets están pensados para las redes sociales, por lo que se caracterizan por su alto potencial de ser distribuidos viralmente.
Los widgets para móviles son similares a los de escritorio, pero, en este caso, para la interfaz del teléfono. A pesar de lo pequeña que pueda ser su pantalla, los widgets se adaptan perfectamente a la misma y prestan servicios interactivos de gran calidad.
Finalmente, los widgets físicos son mecanismos compactos interactivos que integran varias funciones típicas de los Widgets utilizados en un ordenador. Sus funcionalidades más comunes pueden ser alarmas despertador, información del tiempo, de Internet, etc (6).
1.4.2.2 Área de herramientas gráficas del Editor HMI
En el ámbito de un SCADA, un objeto gráfico es aquel componente o control, con el cual el usuario interactúa y puede contener gráficos vectoriales o imágenes de mapas de bits y presentar un conjunto de propiedades que deben ser editadas y asociadas a puntos (variables) del SCADA o a expresiones que contengan variables del sistema. Por medio de los objetos gráficos se crean
12
animaciones en función de los valores de los puntos asociados. Estos objetos se agrupan para formar nuevos objetos gráficos más complejos (5).El editor HMI cuenta con un grupo de componentes gráficos que se clasifican según su funcionalidad y características, entre ellos están los Básicos y los Avanzados.
Básicos: se incluyen en estos objetos básicos los gráficos: líneas, rectángulos, textos, elipse y polígonos. Estas formas presentan propiedades visuales estáticas y dinámicas que son asociadas a expresiones de variables del SCADA y reciben eventos de usuarios como los del mouse, pero estas acciones sólo son manipuladas por medio de scripts1 de programación. Como su nombre indica, básicamente están hechos para animación respecto a variables del sistema y para dar funcionalidades avanzadas por medio de scripts a programadores de aplicaciones avanzadas.
Avanzados: son objetos gráficos que presentan todas las funcionalidades de un objeto gráfico básico, pero pueden ejecutar funcionalidades específicas de un SCADA. Algunos ejemplos son: tablas, listados de alarmas, diagramas de tendencias, etc.
Cada componente gráfico tiene una serie de atributos configurables a los cuales se acceden mediante clic derecho sobre el componente una vez este se haya colocado en el despliegue (3).
1 “En informática, un script es un conjunto de instrucciones que permiten automatizar tareas creando pequeñas utilidades .Por lo general son interpretadas y editadas como archives de texto.” (Villareal ,2007)
13
Imagen 3 Área de herramientas gráficas del Editor HMI
1.5 Ambiente de ejecución
El ambiente de ejecución, es otro de los sub-módulos del módulo de HMI, también conocido como RunTime, se encarga de visualizar las animaciones y los objetos definidos en el editor, muestra lo que está ocurriendo en el campo en tiempo real, es el que envía los comandos a las estaciones remotas, quién recibe los valores de las variables, interactúa con la mayoría de los operadores pues se emplea para supervisar el proceso de manera directa. Al ser el módulo que se encarga de brindar el control total sobre el proceso de producción, la interfaz de usuario brinda un conjunto de funcionalidades primarias, entre ellas la generación de reportes, impresión, análisis de variables, visualización de la tendencia de indicadores, configuración de los manejadores para la comunicación y acceso a las alarmas (3).
14
1.6 Tendencias y TecnologíasEn la actualidad la tendencia de muchas empresas, instituciones y personas civiles, es hacer uso de la tecnología, que creen que cumple de forma soberana y equitativa los conceptos más importantes para los usuarios, como son libre distribución, código abierto, entre otros.
Es por ello que cada día crece el uso de Software Libre a nivel mundial, pues en la medida de que nos damos cuenta que los software realizados sobre plataformas propietarias, se ven abarrotados de licencias, no muestran su código fuente, y el proceso de mantenimiento o cambio de versiones es realizado puramente por la compañía propietaria y en todos estos procesos se invierten grandes sumas de dinero para poder adquirir y mantener un producto determinado, por lo que la mejor opción es hacer uso de la tecnología antes mencionada, dada las características de las posibilidades económicas de nuestro país, y las posibilidades que brindan el uso Software Libre.
El desarrollo de los componentes gráficos, se hará sobre plataforma libre, esto es primeramente garantía de que el producto final podrá ser modificado por quien lo desee y de esta manera se le podrán hacer las adaptaciones o mejoras que se estimen convenientes, para ello es necesario utilizar herramientas, lenguajes de programación, bibliotecas gráficas, etc.
1.7 Biblioteca
En informática, una biblioteca es un conjunto de subprogramas utilizados para desarrollar un software. Las bibliotecas contienen código y datos, que proporcionan servicios a programas independientes, es decir, pasan a formar parte de éstos. De esta forma, se utiliza lo que ya está implementado en las bibliotecas, ahorrándose así tiempo y recursos, pues no se crea lo que ya existe y está probado, además esto permite que el código y los datos se compartan y puedan modificarse de forma modular. Algunos programas ejecutables pueden ser a la vez programas independientes y bibliotecas, pero la mayoría de éstas no son ejecutables. Ejecutables y bibliotecas hacen referencias entre sí a través de un proceso conocido como enlace, que por lo general es realizado por un software denominado enlazador.
La mayoría de los sistemas operativos modernos proporcionan bibliotecas que implementan la mayoría de los servicios del sistema. De esta manera, estos servicios se convierten en una "materia
15
prima" que cualquier aplicación moderna espera que el sistema operativo ofrezca. Como tal, la mayor parte del código utilizado por las aplicaciones modernas se ofrece en estas bibliotecas.Las bibliotecas pueden ser estáticas o dinámicas.
1.7.1 Biblioteca Estática
Una biblioteca estática, también conocido como archivo, consiste en un conjunto de rutinas que son cargadas en un programa en tiempo de compilación, y se convierten en archivos que se unen al fichero ejecutable del programa principal.
1.7.2 Biblioteca Dinámica
Enlace dinámico significa que las subrutinas de una biblioteca son cargadas en un programa en tiempo de ejecución, en lugar de ser enlazadas en tiempo de compilación, y se mantienen como archivos independientes separados del fichero ejecutable del programa principal. El enlazador realiza una mínima cantidad de trabajo en tiempo de compilación, registra qué rutinas de la biblioteca necesita el programa y el índice de nombres o números de las rutinas en la biblioteca. La mayor parte de la labor de enlazado se realiza en el momento en que la aplicación se carga (tiempo de carga) o durante la ejecución (tiempo de ejecución). El necesario código enlazado, llamado por el cargador, es de hecho parte del sistema operativo subyacente. En el momento adecuado el cargador localiza las bibliotecas en el disco y añade los datos relevantes de éstas en el espacio de memoria del proceso.
1.7.3 Bibliotecas Gráficas
Como su nombre lo indica, son aquellas bibliotecas que se emplean en el desarrollo de aplicaciones con interfaz de usuario gráfica. Las mismas pueden ser a su vez dinámicas o estáticas.
Existen varias, pero dos de las más usadas en la actualidad son GTK+ y Qt.
1.7.3.1 Biblioteca GTK+
GTK+ es un grupo importante de bibliotecas o rutinas para desarrollar interfaces gráficas de usuario principalmente para los entornos gráficos GNOME, XFCE Y ROX de sistemas Linux. GTK+ es la abreviatura de GIMP toolkit (conjunto de rutinas para GIMP). Es software libre (bajo la licencia LGPL), multiplataforma y parte importante del proyecto GNU (7). Actualmente es muy usada por muchos programas en los sistemas GNU/Linux. GTK+ se ha diseñado para permitir programar con lenguajes como C, C++ (gtkmm), C#, Java, Perl, PHP o Python (8).
16
GTK+ se basa en varias bibliotecas del equipo de GTK+ y de GNOME (GTK):GTK. Biblioteca la cual realmente contiene los objetos y funciones para crear la interfaz de usuario. Maneja widgets como ventanas, botones, menús, etiquetas, deslizadores, pestañas, etc.
GDK. Biblioteca que actúa como intermediario entre gráficos de bajo nivel y gráficos de alto nivel.
ATK. Biblioteca para crear interfaces con características de una gran accesibilidad muy importante para personas discapacitadas o minusválidas. Pueden usarse utilerías como lupas de aumento, lectores de pantalla, o entradas de datos alternativas al clásico teclado y mouse.
Pango. Biblioteca para el diseño y renderizado de texto, hace hincapié especialmente en la internacionalización. Es el núcleo para manejar las fuentes y el texto de GTK+2.
Cairo. Biblioteca para gráficos en 2D con soporte para múltiples dispositivos de salida (incluyendo el sistema X Windows, Win32) mientras aprovecha la aceleración del hardware si está disponible.
GLib. Biblioteca de bajo nivel, estructura básica de GTK+ y GNOME. Proporciona manejo de estructura de datos para C, portabilidad, interfaces para funcionalidades de tiempo de ejecución como ciclos, hilos, carga dinámica o un sistema de objetos.
1.7.3.2 Biblioteca Qt
Qt es un framework multiplataforma para el desarrollo del esqueleto de aplicaciones GUI, también para el desarrollo de programas sin interfaz gráfica como servidores; escritas en código C++
(8). Qt además está completamente orientado a objetos. Qt es un producto de la empresa noruega de software Trolltech AS, esta empresa se dedica a desarrollar bibliotecas y herramientas de desarrollo de software, además es experta en servicios de consultoría. Desde junio de 2008 es propiedad de Nokia.
Qt comenzó a distribuirse comercialmente en 1996 y desde entonces ha sido la base para numerosas aplicaciones incluyendo la popular interfaz gráfica para Linux llamada KDE, disponible en
17
todas las grandes distribuciones de Linux o FreeBSD. Funciona en todas las principales plataformas, y tiene un amplio apoyo.Características:
QT es una biblioteca para la creación de interfaces gráficas. Se distribuye bajo una licencia libre GPL (o QPL), además de la LGPL, que nos permite incorporar las QT en nuestras aplicaciones open-source.
Se encuentra disponible para una gran número de plataformas: Linux, MacOs X, Solaris, HP- UX, UNIX con X11, Windows. Además, existe también una versión para sistemas empotrados.
Es orientado a objetos, lo que facilita el desarrollo de software. El lenguaje para el que se encuentra disponible es C++ aunque han aparecido versiones (conocidas como bindings) para C, Python (PyQt), Java (Qt Jambi), Perl (PelrQt), entre otros.
Es una biblioteca que se basa en los conceptos de widgets (objetos), Señales-Slots y Eventos (Ej.: clic del ratón).
Las señales y los slots es el mecanismo para que unos widgets se comuniquen con otros.
Los widgets pueden contener cualquier número de hijos. El widget superior (también conocido como top-level), puede ser cualquiera, sea ventana, botón, etc.
Algunos atributos, como el texto de etiquetas, se modifican de modo similar al lenguaje HTML.
QT proporciona además otras funcionalidades:
Librerías básicas de Entrada/Salida, Manejo de Red, XML.
Interface con bases de datos Oracle, MySQL, PostgreSQL, ODBC.
Plugins, bibliotecas dinámicas (Imágenes, formatos, ...)
Unicode, Internacionalización.
El API de la biblioteca cuenta con una API multiplataforma unificada para la manipulación de
18
archivos y una multitud de otros para el manejo de ficheros, además de estructuras de datos tradicionales.Con todo lo anterior expuesto se puede decir que Qt dispone de tres grandes ventajas ante las librerías de ventanas rivales:
Qt es completamente gratuito para aplicaciones de código abierto, y una de las licencias mencionadas anteriormente, la LGPL, permite que se utilice gratuitamente con fines comerciales.
Las herramientas, librerías y clases están disponibles para casi todas las plataformas Unix y sus derivados (como Linux, MacOS X, Solaris, etc.) como también para la familia Windows, por lo que una aplicación puede ser compilada y utilizada en cualquier plataforma sin necesidad de cambiar el código y la aplicación se verá y actuará mejor que una aplicación nativa.
Qt tiene una extensa librería con clases y herramientas para la creación de aplicaciones con interfaz de usuario enriquecidas. Estas librerías y clases están bien documentadas, son muy fáciles de usar y tienen una gran herencia de programación orientada a objetos lo cual hace de la programación de interfaces gráficas un trabajo más ameno.
1.7.3.3 Biblioteca Qwt
La biblioteca Qwt contiene componentes Qt GUI y clases de utilidad que son principalmente utilizadas por programas con un trasfondo técnico. Proporciona escalas, deslizadores, diales, brújulas, termómetros, ruedas y botones, para controlar o mostrar valores, listas o rangos de tipo doble. Está basada en la biblioteca Qt, por lo que aprovecha todas las características de esta, como son el sistema de señales y slots.
Qwt se distribuye bajo los términos de la Licencia de Qwt, versión 1.0. Además esta biblioteca no distribuye paquetes binarios, pero en la actualidad todos los principales distribuidores de Linux ofrecen uno. Hay que tener en cuenta que estos paquetes a menudo no incluyen los ejemplos. Existen bindings o versiones, para Python (PyQwt) y para Ruby (Korundum / QtRuby). Ejemplos de aplicaciones desarrolladas con Qwt son LabView y TestPoint (9).
19
El uso de esta biblioteca ahorra una enorme cantidad de tiempo y esfuerzo, pues de lo contrario se tendrían que desarrollar algunos componentes desde el inicio. Solo se debe adaptar los widgets que proporciona a los requisitos funcionales que deben poseer los del editor que se desea desarrollar.1.8 Metodologías de desarrollo
Las metodologías de desarrollo surgen por la necesidad de evitar problemas que se presentan en la producción de un software por no seguir normas específicas. Son un conjunto de procedimientos, técnicas y ayudas para el desarrollo de productos software. Cubren todo el ciclo de desarrollo del producto, estableciendo etapas y controles a aplicar en cada momento. Estas recopilan un conjunto de técnicas y procedimientos en cada una de las fases que las componen (10).
1.8.1 Metodología de desarrollo de Software OpenUP
El OpenUP es un Proceso Unificado que aplica propuestas de gestión ágil como son desarrollo iterativo e incremental dentro del ciclo de vida, tratando de ser manejable en relación con el RUP, ya que mantiene sus características esenciales. OpenUP es un proceso de desarrollo de software completo debido a que puede ser manifestado como todo el proceso para construir un sistema. Es extensible ya que en el proceso se puede agregar o adaptar según lo vayan requiriendo los sistemas.
OpenUP es ligero y proporciona una comprensión detallada del proyecto, beneficiando a clientes y desarrolladores sobre productos a entregar y su formalidad.
Su desarrollo es dirigido por casos de uso. OpenUP como metodología de desarrollo es conducida por el principio de colaboración para alinear intereses y para compartir su comprensión. Es un proceso para pequeños equipos de desarrollo que valoran los beneficios de la colaboración y de los involucrados con el resultado del proyecto, por encima de formalidades innecesarias (11).
Imagen 4 Ciclo de vida OpenUP
20
1.8.2 Metodología de desarrollo de Software RUPEl Proceso Unificado de Software o RUP, acrónimo de Rational Unified Process, es una metodología tradicional para el desarrollo de productos de software que permite la realización del análisis y el diseño orientado a objetos. Esta además de ser un proceso, es un marco de trabajo extensible, ya que puede ser adaptado a proyectos y organizaciones específicas. A través de una serie de actividades transforma los requerimientos de los usuarios de forma tal que se obtiene un sistema de software que satisfaga los mismos (12).
Características principales de RUP:
RUP está dirigido y guiado por casos de uso.
Centrado en la arquitectura.
Iterativo e incremental.
El ciclo de vida de RUP cuenta con 4 fases fundamentales: inicio, elaboración, construcción y transición.
Imagen 5 Ciclo de vida de RUP
1.9 Herramientas ingeniería asistida por computadora
Hoy en día es muy común utilizar en el desarrollo de software las herramientas CASE, acrónimo de Computer Aided Software Engineering, con el fin de automatizar los aspectos clave de todo el proceso de desarrollo del sistema. CASE proporciona un conjunto de herramientas automatizadas que están desarrollando una cultura de ingeniería. Uno de los objetivos más importante a largo plazo es conseguir la generación automática de programas desde una especificación a nivel de diseño (13).
21
1.9.1 UmbrelloUmbrello UML Modeller es una herramienta de diagramas que ayuda en el proceso del desarrollo de software. Umbrello facilita la creación de un producto de alta calidad, también puede usarse para documentar diseños de software ayudando así a los desarrolladores. Originalmente llamado UML Modeller, en septiembre de 2002, el proyecto cambió el nombre de UML Modeller a Umbrello, por ser un nombre muy genérico. En Febrero del 2004 el proyecto se incorpora a la suite de KDE, permitiendo la inclusión de más desarrolladores en el mismo. Actualmente Umbrello permite instalarse en diferentes plataformas y posee más de 30 idiomas diferentes, gracias a su licencia original GPL.
Cuenta con una Interfaz Gráfica que posee tres áreas, estas áreas reciben el nombre de: vista en árbol, área de trabajo y ventana de documentación.
Umbrelo UML Modeller incluye soporte para los siguientes lenguajes: C++, Java, C#, PHP, JavaScript, SQL, Pascal, Python, etc. Soporta un gran número de diagramas como: diagrama de casos de uso, diagrama de componentes, diagrama de despliegue, diagrama de clases, entre otros (14).
1.9.2 Visual Paradigm
Visual Paradigm para UML es una herramienta UML profesional que soporta el ciclo de vida completo del desarrollo de software: análisis y diseño orientados a objetos, construcción, pruebas y despliegue. El software de modelado UML ayuda a una más rápida construcción de aplicaciones de calidad, mejores y a un menor coste. Permite dibujar todos los tipos de diagramas de clases, código inverso, generar código desde diagramas y generar documentación. La herramienta UML CASE también proporciona abundantes tutoriales de UML, demostraciones interactivas de UML y proyectos UML. Cuenta con una licencia gratuita y comercial, es un producto de calidad (15).
1.10 Conclusiones del Capítulo
En este capítulo se realizó un esbozo de las principales características de los sistemas SCADA, haciendo énfasis en el módulo de visualización y los componentes gráficos del mismo. Además se presentan las posibles tecnologías a utilizar en el desarrollo de la propuesta de solución y algunos conceptos importantes. A partir de estos puntos se comenzará el desarrollo de la propuesta de solución.
22 CAPÍTULO 2: DESCRIPCIÓN DE LA SOLUCIÓN
2.1 Introducción
En este capítulo se abordarán las características de las tecnologías seleccionadas para el desarrollo de los componentes gráficos del módulo de Visualización del SCADA Nacional. Además tendremos los requisitos para cada uno de los componentes a desarrollar. Se describen las clases y métodos más importantes. También se muestran los diagramas de clases de los componentes más significativos así como fragmentos de código de la implementación.
2.2 Selección de la tecnología a utilizar
La selección de la tecnología a utilizar se realiza mediante un estudio de las diferentes opciones existentes. Parte de este estudio, fue realizado en años anteriores, por parte de la dirección del proyecto, por lo que el desarrollo del presente trabajo, sigue la línea trazada. Dos ejemplos son la selección del IDE y el sistema operativo a utilizar.
2.2.1 Software Libre. GNU/Linux
El Software libre brinda libertad a los usuarios sobre el producto adquirido y por tanto, el mismo puede ser usado, copiado, estudiado, modificado y redistribuido libremente. El software libre se refiere a la libertad de los usuarios para ejecutar, copiar, distribuir, estudiar, cambiar y mejorar el software; de modo más preciso, se refiere a cuatro libertades de los usuarios del software: la libertad de usar el programa, con cualquier propósito; de estudiar el funcionamiento del programa, y adaptarlo a las necesidades; de distribuir copias, con lo que puede ayudar a otros; de mejorar el programa y hacer públicas las mejoras, de modo que toda la comunidad se beneficie (para la segunda y última libertad mencionadas, el acceso al código fuente es un requisito previo).
Una distribución de Linux es una variante de ese sistema operativo (SO) que incorpora determinados paquetes de software para satisfacer las necesidades de un grupo específico de usuarios, dando así origen a ediciones hogareñas, empresariales y para servidores. Pueden ser exclusivamente de software libre, o también incorporar aplicaciones o controladores propietarios.
Una gran parte de las herramientas básicas que completan el sistema operativo, vienen del proyecto GNU (acrónimo que significa GNU No es Unix); de ahí el nombre: GNU/Linux (16).
23
La distribución de Linux seleccionada es Ubuntu, específicamente la versión 9.10 Karmic Koala.Ubuntu es una distribución Linux basada en Debian GNU/Linux que proporciona un sistema operativo actualizado y estable para el usuario promedio, con un fuerte enfoque en la facilidad de uso y de instalación del sistema. Se compone de múltiples paquetes de software normalmente distribuidos bajo una licencia libre o de código abierto.
2.2.2 Eclipse
Eclipse fue el ambiente de desarrollo integrado seleccionado. Ha sido utilizado para desarrollar todo tipo de aplicaciones, y altamente probado en cualquier ambiente, ya sea en la construcción de Servicios Web, aplicaciones de escritorio, juegos, etc. El Eclipse es una gran estructura formada por un núcleo y muchos plugins que van conformando la funcionalidad final. La forma en que los plugins interactúan es mediante interfaces o puntos de extensión; así, las nuevas aportaciones se integran sin dificultad y sin conflictos. Como se refleja en lo anterior el Eclipse tiene una gran capacidad y versatilidad, lo cual es permitido por su arquitectura. La web oficial de Eclipse define al mismo como
“una plataforma (IDE), abierta para todo y para nada en particular”. Eclipse es una plataforma porque no se encuentra acabada en su totalidad, pero está diseñado para que sea extensible indefinidamente con la adecuada implementación de plugins. La característica clave de Eclipse es la extensibilidad (17).
Quizás lo más interesante de Eclipse es ser completamente neutral a la plataforma y al lenguaje. Qt ha lanzado un módulo con el que es posible integrar Qt en Eclipse. Incluye opciones integradas de depuración, integración con Qt Designer, editor de archivos de proyectos e incluso un editor de recursos. La integración de Qt con este IDE funciona muy bien, sin embargo el gran consumo de recursos necesarios para su correcto funcionamiento es su mayor punto negativo.
2.2.3 Biblioteca Qt
Además de las características expuestas en el capítulo 1, la selección de esta biblioteca gráfica se fundamenta en lo siguiente:
El Framework Graphics View. Este framework proporciona una superficie para la gestión e interacción con un gran número de elementos gráficos en 2D, y un widget para la visualización de los elementos con soporte para el zoom y la rotación.
24
Incluye además una arquitectura de propagación de eventos que permite la interacción precisa con los objetos en la escena. Los objetos se pueden manejar por eventos del teclado y del mouse.El framework usa un árbol BSP, acrónimo de Binary Space Partitioning, para proveer un rápido descubrimiento de los objetos, y como resultado de esto, puede visualizar grandes escenas en tiempo real. Fue introducido en la versión 4.2 de Qt, reemplazando a su predecesor QCanvas.
El Sistema de Plugins. Qt proporciona dos Interfaces de Programación de Aplicaciones (API) para la creación de plugins:
Una API de alto nivel para crear extensiones de QT mismo: drivers personalizados para base de datos, formatos de imágenes, codecs de textos, etc.
Crear un plugin que extienda al mismo QT, o sea, las funcionalidades de este, se logra heredando de la clase base de plugins apropiada, implementando algunas funciones y adicionando una macro. Existen varias clases bases de plugins. Los plugins derivados son almacenados por defecto en subdirectorios del directorio de plugins estándar, Qt no encontrará los plugins si estos no están almacenados en la carpeta correcta.
Una API de bajo nivel para extender aplicaciones Qt. No sólo Qt mismo puede ser extendido, sino que las aplicaciones Qt pueden ser extendidos a través de plugins. Esto requiere que la aplicación detecte y cargue los plugins usando QPluginLoader. En ese contexto, los plugins pueden proporcionar funcionalidades arbitrarias y no estar limitadas a drivers personalizados para base de datos, formatos de imágenes, codecs de texto y otros tipos de plugins que extienden las funcionalidades de Qt.
El sistema de propiedades. Qt proporciona un sofisticado sistema de propiedades, similar a las suministradas por algunos proveedores de compiladores. Sin embargo no depende de las características de un compilador no estándar como __property ó [property].
L
a solución de Qt funciona con cualquier compilador estándar de C++, en cualquier plataforma en la que se pueda usar Qt. Está basado en el sistema Meta-Object que también permite la comunicación entre objetos mediante las señales y los slots.25
2.2.4 Lenguaje de programación C++C++ fue diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido. Posteriormente se añadieron facilidades programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje multi-paradigma.
Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, tales como ROOT. Una particularidad del C++ es la posibilidad de redefinir los operadores (sobrecarga de operadores), y de poder crear nuevos tipos que se comporten como tipos fundamentales. C++ permite trabajar tanto a alto como a bajo nivel (18).
2.2.5 Metodología OpenUP
OpenUP es la metodología de desarrollo seleccionada. Es un proceso de desarrollo iterativo del software que es mínimo porque solo incluye el contenido del proceso fundamental; completo debido a que el mismo puede ser manifestado como proceso entero para construir un sistema; y extensible ya que puede ser utilizado como base para agregar o para adaptar más procesos (19).
OpenUp es la metodología utilizada por desarrolladores de alto nivel en casi todo el mundo por sus altas cualidades administrativas. Entre sus beneficios se encuentran: permitir disminuir las probabilidades de fracaso, incrementar las probabilidades de éxito y permitir detectar errores tempranos a través de un ciclo iterativo (11).
2.2.6 Visual Paradigm
La herramienta CASE seleccionada es Visual Paradigm. Es una herramienta CASE profesional que soporta el ciclo de vida completo del desarrollo de software: análisis y diseño orientados a objetos, construcción, pruebas y despliegue.
Algunas de las funcionalidades que ofrece VP son:
Uso de un lenguaje estándar común a todo el equipo de desarrollo que facilita la comunicación.
Capacidades de ingeniería directa en su versión profesional, e inversa.
26
Modelo y código que permanece sincronizado en todo el ciclo de desarrollo.Disponibilidad de múltiples versiones, para cada necesidad.
Disponibilidad de integrarse en los principales IDE.
Disponibilidad en las plataformas Windows y Linux (15).
2.2.7 Framework QTestLib
El framework QTestLib fue la herramienta seleccionada para la realización de las pruebas. La misma, es una herramienta para hacer pruebas unitarias a aplicaciones y bibliotecas basadas en Qt.
Provee todas las funcionalidades comúnmente encontradas en frameworks para pruebas unitarias además de las extensiones para pruebas de interfaces de usuario.
QTestLib está diseñado para facilitar la escritura de pruebas unitarias para aplicaciones y bibliotecas basadas en Qt:
Peso ligero: Consiste en cerca de 6000 líneas de código y 60 símbolos exportados.
Autónomo: Requiere sólo un pocos símbolos del núcleo de la biblioteca Qt para pruebas que no sean de interfaz de usuario.
Realización de pruebas rápida: No necesita condiciones especiales para correr ni registros especiales para las pruebas.
Pruebas de datos: Una prueba puede ser ejecutada varias veces con diferentes juegos de datos.
Pruebas básicas para GUI: Ofrece funcionalidades para la simulación de mouse y teclado.
Puntos de referencias: Apoya la creación de puntos de referencia y proporciona varias mediciones para back-ends.
Amigable con el IDE: Permite la salida de mensajes que pueden ser interpretados por varios IDE de desarrollo.
Libre de amenazas: El reporte de errores está libre de amenaza y atómico.
27
Uso de tipos personalizados seguro: El uso de plantillas previene errores introducidos por laconversión de tipos implícita.
Fácilmente extensible: Los tipos personalizados pueden ser fácilmente adicionados a los datos de prueba y a la salida de la misma.
QTestLib API
Todos los métodos públicos están en el namespace QTest. Además, la clase QSignalSpy proporciona introspección fácil para las señales y slots de Qt.
2.3 Selección de los componentes gráficos a desarrollar
Los componentes gráficos o widgets fueron divididos en dos grupos: básicos y avanzados, según “la complejidad” de su desarrollo. Los widgets básicos son los siguientes: PushButton, RadioButton, SpinBox, LineEdit, CheckButton, Label y el ListView; mientras que los avanzados son: el Knob, Slider, Termómetro y el Dial.
Después de un estudio se tomó la decisión de utilizar como widgets básicos los que brinda la biblioteca Qt, puesto que cuentan con todas las funcionalidades requeridas para el módulo de visualización, demostrando la importancia del software libre al permitir la reutilización de código.
Debido a que van a ser utilizados básicamente sin modificación alguna, en este trabajo no se va a hacer énfasis en los mismos. Toda la documentación necesaria para estudiar estos widgets puede ser encontrada en la herramienta de ayuda de Qt QtAssistant.
Para el desarrollo de los widgets avanzados se utilizó la biblioteca Qwt, la cual provee widgets Qt para aplicaciones con trasfondo técnico. Los mismos poseen varias de las funcionalidades requeridas para este trabajo, aunque no las suficientes, por lo que fue necesario incorporar las que faltaban. Nuevamente se puso de manifiesto la importancia y utilidad del software libre, pues para el desarrollo de estos widgets desde cero, se hubiera requerido mucho más tiempo de estudio e implementación.
28
2.4 Requerimientos funcionalesLos requisitos funcionales son capacidades o condiciones que los componentes gráficos deben cumplir, los dividimos en requerimientos generales y específicos por cada uno de los componentes gráficos:
Tabla Requisitos funcionales.
Requisitos funcionales Descripción
General Los requisitos generales son aquellos que deben cumplir todos los componentes, sean básicos ó avanzados.
RF 1 Modificar el nombre del componente.
Definir Nombre del componente gráfico.
RF 2 Definir la posición de los componentes.
Definir la posición de los componentes, determinada por las coordenadas X, Y; así como el ancho y el alto del componente.
RF 3 Modificar el formato de los textos.
Modificar el formato de los textos asociados al componente, específicamente el tipo de letra, el tamaño, el color y la alineación del mismo.
RF 4 Definir un texto a mostrar.
Definir un texto o descripción a mostrar cuando el cursor pasa por encima del componente.
RF 5 Definir atributos del borde.
Brindar la posibilidad de definir atributos del borde y texto (no animaciones). Definir el tipo de borde y sus propiedades: definir color, grosor, si tendrá borde y el estilo del mismo.
RF 6 Definir la posibilidad de que el control responda a eventos del mouse.
Determinar una acción a ejecutar cuando se realice un evento del mouse.
Medidores
Entre los medidores se proporcionarán termómetros o barras escaladas y medidores circulares.
RF 1 Dar la posibilidad de definir Seleccionar la variable asociada al medidor.