Un sistema de control inteligente de entrada/salida de humanos a un recinto siguiendo la metodología VigilAgent Tomás de Teresa Trancón Tomás de Teresa Trancón, Un sistema de control inteligente de entrada/salida de humanos a un recinto siguiendo la metodología VigilAgent. Proyecto fin de carrera, Departamento de Sistemas Informáticos, Universidad de Castilla-La Mancha, 2010. I Este documento puede descargarse desde: http://deteresa.com/pfc/ II UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INGENIERÍA INFORMÁTICA Departamento de Sistemas Informáticos PROYECTO FIN DE CARRERA Un sistema de control inteligente de entrada/salida de humanos a un recinto siguiendo la metodología VigilAgent Autor: Tomás de Teresa Trancón Directores: Antonio Fernández-Caballero José Manuel Gascueña Noheda Septiembre, 2010 III IV Resumen Los sistemas de control de entrada/salida de humanos basan su funcionamiento en la identificación de usuarios y el uso de barreras para impedir el paso a usuarios no autorizados. Muchas veces los mecanismos de identificación y las barreras no son suficientes para evitar situaciones no deseadas, por lo que en ocasiones los sistemas se complementan con vigilantes de seguridad. En este proyecto se propone como alternativa utilizar un Sistema Multi-Agente para solucionar los problemas de identificación, control y detección de situaciones anómalas en sistemas de control de entrada/salida de humanos. A lo largo de la presente memoria se describe el proceso llevado a cabo para modelar e implementar un sistema inteligente que simula la colaboración necesaria para controlar automáticamente la entrada/salida de humanos a/de un recinto cerrado. Este proceso sigue las fases de la metodología VigilAgent, específica para la creación de sistemas de seguridad basados en organizaciones de agentes. VigilAgent se basa en dos metodologías de agentes suficientemente maduras, Prometheus e INGENIAS, con el fin de guiar al desarrollador en las fases de análisis, diseño e implementación. Durante las dos primeras fases de la metodología se obtiene un modelo conforme a Prometheus, que posteriormente se transforma en otro modelo expresado con el lenguaje utilizado en INGENIAS. Para la fase de implementación, se genera automáticamente código para la infraestructura ICARO-T, tomando como base el modelo desarrollado finalmente en INGENIAS. Por último, se completa el código referente a la interacción entre entidades y se crean los interfaces gráficos pertinentes. V VI A mis padres. VII VIII Agradecimientos En primer lugar, Antonio Fernández-Caballero y a José M. Gascueña, por brindarme la oportunidad de realizar este proyecto, por la ayuda prestada a lo largo de todo este tiempo y por los conocimientos compartidos conmigo. Su dedicación y paciencia han sido fundamentales para la finalización de este trabajo. A mis padres, por todo lo que me han ayudado durante estos años, especialmente a mi madre, por su confianza y por el ánimo que me ha dado en todo momento. Por último y no menos importante, a Olaya, por haber sido para mi una fuente inagotable de inspiración. De otra manera no habría llegado este momento. IX X ÍNDICE 1. INTRODUCCIÓN .................................................................................................. 1 1.1. Motivación ......................................................................................................... 1 1.2. Objetivos y límites del proyecto ........................................................................ 2 1.3. Estructura de la memoria ................................................................................... 4 2. ESTADO DEL ARTE ............................................................................................. 5 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. Metodología Prometheus ................................................................................... 7 Metodología INGENIAS ................................................................................. 10 Metodología VigilAgent .................................................................................. 12 ICARO-T ......................................................................................................... 16 Sistemas de control de acceso de entrada/salida.............................................. 20 Sensores ........................................................................................................... 21 Metodología de desarrollo de redes de sensores mediante SMA .................... 22 3. MODELADO DEL SISTEMA ............................................................................ 25 3.1. Descripción del problema ................................................................................ 25 3.2. Fase de especificación del sistema .................................................................. 28 3.2.1. Identificación de la interacción del sistema con el entorno .................. 28 3.2.2. Desarrollo de escenarios ....................................................................... 29 3.2.3. Especificación de objetivos del sistema................................................ 33 3.2.4. Descripción de roles.............................................................................. 34 3.3. Fase de diseño arquitectónico .......................................................................... 35 3.3.1. Identificación de tipos de agentes ......................................................... 35 3.3.2. Especificación de acoplamiento de datos ............................................. 35 3.3.3. Descripción de las interacciones ........................................................... 36 3.3.4. Descripción de la arquitectura global del sistema ................................ 41 3.4. Fase de diseño detallado .................................................................................. 43 3.4.1. Transformación de estructuras de Prometheus a INGENIAS .............. 43 3.4.2. Identificación de tareas ......................................................................... 54 3.4.3. Especificación del modelo de comportamiento de los agentes............. 59 3.4.4. Crear diagrama de componentes ........................................................... 73 3.4.5. Crear diagrama de despliegue ............................................................... 74 4. IMPLEMENTACIÓN .......................................................................................... 77 4.1. Fase de generación de código ........................................................................ 77 4.2. Mejora de la aplicación .................................................................................... 88 4.3. Pruebas............................................................................................................. 94 XI 5. CONCLUSIONES Y TRABAJOS FUTUROS .................................................. 95 5.1. Métricas ........................................................................................................... 95 5.2. Conclusiones .................................................................................................... 98 5.3. Trabajos futuros ............................................................................................. 100 6. ANEXO: CONFIGURACIÓN Y USO .............................................................. 101 6.1. Configuración de la aplicación ...................................................................... 101 6.2. Uso de la aplicación ....................................................................................... 102 7. BIBLIOGRAFÍA ................................................................................................. 105 XII ÍNDICE DE FIGURAS Figura 2.1. Modelo de agente ......................................................................................... 5 Figura 2.2. Ventana de la herramienta PDT ................................................................... 9 Figura 2.3. Ventana de la herramienta IDK .................................................................. 12 Figura 2.4. Fases de la metodología VigilAgent .......................................................... 15 Figura 2.5. Ciclo de trabajo básico de un agente reactivo ............................................ 17 Figura 2.6. Capas de una aplicación ICARO-T ............................................................ 19 Figura 2.7. MDD de aplicaciones ICARO-T utilizando IDK ....................................... 20 Figura 2.8. Proceso de desarrollo en redes de sensores ................................................ 23 Figura 3.1. Vista general ............................................................................................... 26 Figura 3.2. Módulo de entrada ...................................................................................... 26 Figura 3.3. Diagrama de visión general del análisis ..................................................... 29 Figura 3.4. Diagrama de escenarios .............................................................................. 30 Figura 3.5. Escenario Controlar Entrada scenario ........................................................ 31 Figura 3.6. Escenario Controlar Salida scenario........................................................... 31 Figura 3.7. Escenario Bloquear Puerta scenario ........................................................... 32 Figura 3.8. Escenario Tailgating scenario .................................................................... 32 Figura 3.9. Escenario Deshabilitar Modulo scenario .................................................... 33 Figura 3.10. Diagrama de visión general de objetivos ................................................. 33 Figura 3.11. Diagrama de roles del sistema .................................................................. 34 Figura 3.12. Diagrama de agrupamiento Agente-Rol ................................................... 35 Figura 3.13. Diagrama de acoplamiento de datos ......................................................... 36 Figura 3.14. Protocolo PI Identificación ....................................................................... 37 Figura 3.15. Protocolo PI Acceso ................................................................................. 39 Figura 3.16. Protocolo PI Tailgating ............................................................................ 40 Figura 3.17. Protocolo PI Puerta Bloqueada Usuario ................................................... 41 Figura 3.18. Diagrama de visión general del sistema ................................................... 42 Figura 3.19. Diagrama de comunicación de agentes .................................................... 42 Figura 3.20. Transformación de una percepción .......................................................... 44 Figura 3.21. Transformación de una acción ................................................................. 44 Figura 3.22. Transformación de un mensaje................................................................. 45 Figura 3.23. Transformación de un dato ....................................................................... 45 Figura 3.24.a. Diagrama de entorno ............................................................................. 51 Figura 3.24.b. Diagrama de entorno ............................................................................. 52 Figura 3.25.a. Diagrama de interacción ........................................................................ 53 Figura 3.25.b. Diagrama de interacción ........................................................................ 54 Figura 3.26. Comportamiento de un agente .................................................................. 59 Figura 3.27.a. Autómata del agente agLector obtenido en INGENIAS ....................... 60 Figura 3.27.b. Autómata del agente agLector ............................................................... 61 Figura 3.28.a. Autómata del agente agPuerta obtenido en INGENIAS ....................... 62 XIII Figura 3.28.b. Autómata del agente agPuerta ............................................................... 62 Figura 3.29.a. Autómata del agente agSensorInfrarrojo obtenido en INGENIAS ....... 64 Figura 3.29.b. Autómata del agente agSensorInfrarrojo ............................................... 64 Figura 3.30.a. Autómata del agente agSensorContacto obtenido en INGENIAS......... 66 Figura 3.30.b. Autómata del agente agSensorContacto ................................................ 67 Figura 3.31.a. Autómata del agente agTailgating obtenido en INGENIAS ................. 68 Figura 3.31.b. Autómata del agente agTailgating ......................................................... 69 Figura 3.32.a. Autómata del agente agPuertaBloqueada obtenido en INGENIAS....... 70 Figura 3.32.b. Autómata del agente agPuertaBloqueada .............................................. 71 Figura 3.33.a. Autómata del agente agIntercomunicador obtenido en INGENIAS ..... 72 Figura 3.33.b. Autómata del agente agIntercomunicador ............................................. 73 Figura 3.34. Diagrama de componentes........................................................................ 74 Figura 3.35. Diagrama de despliegue............................................................................ 75 Figura 4.1. Fragmento del fichero XML del despliegue de la aplicación ..................... 78 Figura 4.2. Descripción de una instancia del agente agSensorInfrarrojo ...................... 78 Figura 4.3. Descripción de la instancia del recurso BDD ............................................. 79 Figura 4.4. Estructura de paquetes de la aplicación ................................................. 80 Figura 4.5. Fragmento de código del autómata del agente agTailgating ...................... 80 Figura 4.6. Esqueleto generado para la acción aNotificarTailgating ............................ 81 Figura 4.7. Implementación final de la acción NotificarTailgating .............................. 82 Figura 4.8. Método cortarInfrarrojo del recurso acSensorInfrarrojo ............................ 83 Figura 4.9. Fragmento de la acción semántica ComunicarInfrarrojoCortado del agente agSensorInfrarrojo ....................................................................... 84 Figura 4.10. Paquete del recurso acSensorInfrarrojo .................................................... 84 Figura 4.11. Diagrama de clases relacionadas con el recurso acSensorInfrarrojo ........ 85 Figura 4.12. Ventana que genera la clase InterfazCentralita ........................................ 86 Figura 4.13. Ventana que genera la clase InterfazLector .............................................. 86 Figura 4.14. Ventana que genera la clase InterfazSensorInfrarrojo .............................. 87 Figura 4.15. Ventana que genera la clase InterfazSensorContacto ............................... 87 Figura 4.16. Recurso de trazas de ICARO-T ................................................................ 87 Figura 4.17. Aspecto de la aplicación tras su lanzamiento ........................................... 88 Figura 4.18. Fragmento del diagrama de entorno ......................................................... 90 Figura 4.19.a. Automáta del agente agLector en INGENIAS ...................................... 91 Figura 4.19.b. Automáta del agente agLector ............................................................... 92 Figura 4.20. Fragmento del fichero entradaLectores.xml ............................................. 93 Figura 4.21. Interfaz de la aplicación Reloj .................................................................. 93 Figura 5.1. Tiempo de desarrollo del proyecto por fases .............................................. 96 Figura 5.2. Tiempo dedicado a la implementación de cada módulo............................. 97 Figura 6.1. Estructura de directorios propuesta .......................................................... 102 Figura 6.2. Ventana CENTRALITA ........................................................................... 102 XIV Figura 6.3. Ventana L 1 .............................................................................................. 103 Figura 6.4. Ventana C1 ............................................................................................... 103 Figura 6.5. Ventana IR 1 ............................................................................................. 104 Figura 6.6. Ventana Reloj ........................................................................................... 104 Figura 6.7. Detalle del Modulo 1 ................................................................................ 104 XV XVI ÍNDICE DE TABLAS Tabla 3.1. Descripción de las entidades ........................................................................ 27 Tabla 3.2. Descripción de los roles ............................................................................... 34 Tabla 3.3. Equivalencia entre conceptos de Prometheus e INGENIAS ....................... 46 Tabla 3.4. Agentes obtenidos desde Prometheus .......................................................... 46 Tabla 3.5. Aplicaciones obtenidas a partir de los actores de Prometheus .................... 47 Tabla 3.6. Leyenda........................................................................................................ 47 Tabla 3.7. Aplicación acLector ..................................................................................... 47 Tabla 3.8. Aplicación acPuerta ..................................................................................... 47 Tabla 3.9. Aplicación acSensorInfrarrojo ..................................................................... 48 Tabla 3.10. Aplicación acSensorContacto .................................................................... 48 Tabla 3.11. Aplicación acCentralita ............................................................................. 48 Tabla 3.12. Aplicación BDD ........................................................................................ 49 Tabla 3.13. Métodos auxiliares de la aplicación acLector ............................................ 49 Tabla 3.14. Métodos auxiliares de la aplicación acSensorInfrarrojo ............................ 49 Tabla 3.15 Métodos auxiliares de la aplicación acSensorContacto .............................. 50 Tabla 3.16. Métodos auxiliares de la aplicación acCentralita ...................................... 50 Tabla 3.17. Acciones ejecutadas por el agente agLector .............................................. 55 Tabla 3.18. Acciones ejecutadas por el agente agPuerta .............................................. 55 Tabla 3.19. Acciones ejecutadas por el agente agSensorInfrarrojo .............................. 55 Tabla 3.20. Acciones ejecutadas por el agente agSensorContacto ............................... 56 Tabla 3.21. Acciones ejecutadas por el agente agTailgating ........................................ 57 Tabla 3.22. Acciones ejecutadas por el agente agPuertaBloqueada ............................. 57 Tabla 3.23. Acciones ejecutadas por el agente agIntercomunicador ............................ 58 Tabla 3.24. Eventos recibidos por el agente agLector .................................................. 60 Tabla 3.25. Eventos recibidos por el agente agPuerta .................................................. 61 Tabla 3.26. Eventos recibidos por el agente agSensorInfrarrojo .................................. 63 Tabla 3.27. Eventos recibidos por el agente agSensorContacto ................................... 66 Tabla 3.28. Eventos recibidos por el agente agTailgating ............................................ 68 Tabla 3.29. Eventos recibidos por el agente agPuertaBloqueada ................................. 70 Tabla 3.30. Eventos recibidos por el agente agIntercomunicador ................................ 71 Tabla 4.1. Aplicación Reloj .......................................................................................... 89 Tabla 4.2. Métodos añadidos a la aplicación acLector ................................................. 90 Tabla 4.3. Acciones semánticas añadidas al agente agLector ...................................... 91 Tabla 4.4. Eventos recibidos por el agente agLector .................................................... 91 XVII XVIII 1. INTRODUCCIÓN 1.1. Motivación En la actualidad se está produciendo una demanda cada vez mayor de sistemas de control de accesos para llevar a cabo la organización del tránsito humano, la gestión de diversas zonas de seguridad y el registro de sucesos en tiempo real. La mayoría de estos sistemas basan su uso en la identificación mediante tarjetas o mediante el código introducido utilizando un teclado. Generalmente, los sistemas de control de entrada/salida incorporan además una barrera, una puerta o un sistema de barreras y/o puertas para impedir el paso a usuarios no autorizados. Los costos de estos sistemas varían ampliamente en función del nivel de seguridad que son capaces de proporcionar. En muchas ocasiones, los sistemas se acompañan de presencia humana para evitar situaciones en las que los sistemas pueden fallar. Un ejemplo son las intrusiones que se producen aprovechando el acceso de usuarios autorizados. El problema en muchos casos es que la introducción de vigilantes de seguridad no compensa el perjuicio económico que tratan de evitar. Los Sistemas Multi-Agente (SMA) pueden resolver el compromiso entre pérdidas e inversión ofreciendo sistemas inteligentes más asequibles y baratos de mantener. En primer lugar, sustituyendo las costosas barreras mecánicas por puertas sencillas pero efectivas, provistas de sensores capaces de proporcionar información a los agentes. En segundo lugar, haciendo innecesaria la utilización de vigilantes en cada punto de acceso o salida, siendo suficiente con un vigilante de seguridad para supervisar todo lo que ocurre desde una centralita. Por lo tanto, el trabajo de vigilancia puede efectuarse por una organización de agentes que cooperan para detectar la intrusión de personas no autorizadas, basándose en la información proporcionada por los sensores y alertando al vigilante cuando sucedan situaciones anómalas. Un sistema de vigilancia se puede entender como una red compleja, compuesta por un gran número de sensores distribuidos por el entorno físico que producen diferentes tipos de información. Dicha información es percibida del entorno con el fin de contribuir a realizar una labor de vigilancia determinada. Los SMA pueden utilizarse para el desarrollo de este tipo de sistemas mediante el modelado flexible de entidades autónomas. El concepto de agente aplicado a sensores permite convertir a éstos en entidades inteligentes que, además de percibir el entorno, pueden reaccionar ante los cambios que se producen y comunicarse entre sí con el fin de alcanzar objetivos comunes. Por cada sensor existe un agente software que lo gestiona. Esta aproximación al problema simplifica sustancialmente la manera de controlar y coordinar los sensores, a la vez que distribuye la carga de trabajo entre los agentes que forman el sistema. Los SMA se presentan como una tecnología idónea para su uso en redes de sensores, contribuyendo a mejorar su escalabilidad y dotándolas de flexibilidad, robustez y autonomía. En resumen, debido a la analogía descrita previamente 1 entre las redes de sensores y los sistemas de vigilancia, la tecnología de los SMA también resulta adecuada para aplicarla en el desarrollo de los sistemas de vigilancia inteligentes. Actualmente no se conoce la existencia de un sistema de control de entrada/salida de humanos basado en agentes que esté implementado en un entorno complejo, como puede ser por ejemplo, en una entrada/salida al/del metro en horas punta. La aplicación de la metodología VigilAgent resulta interesante para comprobar la viabilidad del desarrollo de un sistema de control inteligente de entrada/salida porque se trata de una metodología que puede facilitar y mejorar la labor de desarrollo de SMAs orientados a la vigilancia de sistemas complejos. VigilAgent está basada en dos metodologías suficientemente maduras, Prometheus e INGENIAS, con el fin de guiar al desarrollador durante las fases de análisis, diseño e implementación, utilizando la infraestructura ICARO-T en la realización de la última fase. Este proyecto permite estudiar más a fondo la problemática asociada al control de entrada/salida, así como sentar las bases para futuros desarrollos basados en la metodología VigilAgent. El problema se abordará en un entorno simulado. 1.2. Objetivos y límites del proyecto El objetivo global que se plantea en el presente trabajo se puede resumir como sigue: “Desarrollar un sistema inteligente, siguiendo la metodología de agentes VigilAgent, capaz de detectar las situaciones anómalas que se producen en un entorno que simula la entrada y salida de humanos en un recinto cerrado”. El objetivo global mencionado anteriormente, se puede descomponer a su vez en los objetivos particulares que se detallan a continuación: 1. Estudio de los Sistemas Multi-Agente. Se estudiará la rama de la inteligencia artificial distribuida que trata los agentes y sistemas de agentes: sus características y los problemas que pueden resolver. 2. Conocimiento de la Ingeniería del Software Orientada a Agentes (AOSE). Se estudiarán diferentes metodologías para el desarrollo de software orientado a agentes, centrando especialmente la atención en aquellas en las que se basa VigilAgent. 3. Estudio de sistemas de control para la entrada y salida. Se investigará acerca de los sistemas de control de entrada/salida para adquirir los conocimientos necesarios en el tema en cuestión. 4. Investigación en sensores aplicados a la vigilancia y control automáticos. Se investigarán los tipos de sensor más utilizados en sistemas automáticos de vigilancia y control. 2 5. Prevención de situaciones anómalas en el funcionamiento del sistema. Se identificarán las situaciones anómalas que pueden alterar el funcionamiento normal del sistema. 6. Toma de decisiones y previsión de sus efectos durante las fases de diseño de software. Las decisiones de diseño se tomarán con sumo cuidado, tratando de evitar errores que puedan afectar negativamente al sistema. 7. Integración de las metodologías Prometheus e INGENIAS para el diseño de software orientado a agentes. La integración se realizará tal y cómo describe la metodología VigilAgent. 8. Conocimiento de la plataforma ICARO-T. Se aprenderán los conceptos utilizados en la infraestructura ICARO-T para implementar aplicaciones distribuidas de organizaciones de agentes. 9. Procesos de intercomunicación entre agentes. Se estudiará cómo se implementa la comunicación entre agentes en ICARO-T. 10. Implementación del software siguiendo los modelos definidos en el diseño. Se implementará el software conforme al diseño realizado. 11. Adición de nuevas funcionalidades en la aplicación. Una vez entregada la aplicación que satisface los requisitos iniciales se nos plantea la incorporación de un nuevo requisito. Para ello, se volverá a iterar en el ciclo de vida de desarrollo de software para integrar la nueva funcionalidad en la aplicación. 12. Documentación del proceso de desarrollo de software. Se detallará todo el proceso seguido para desarrollar la aplicación. Dados los objetivos del proyecto es necesario establecer unos límites para centrar la atención de la problemática concreta a abordar en el caso de estudio. No se pretende obtener un sistema aplicable al mundo real, sino un sistema que funcione en un entorno simulado. Se desea que el sistema permita la realización de múltiples pruebas, así como el estudio de la problemática abordada, con la finalidad de poder aplicarlo en el futuro al desarrollo de otros sistemas basados en la misma tecnología y cuyo fin sea su aplicación en un entorno simulado o real. Por lo tanto, las situaciones que sucedan durante la simulación pueden no ajustarse a lo esperado en casos reales. Tampoco se pretende obtener fórmulas óptimas para detectar todas las situaciones anómalas posibles que se pueden presentar en un sistema de control de entrada salida, sino tan sólo aquellas que se planteen en la descripción del problema a abordar en el presente proyecto. 3 1.3. Estructura de la memoria El capítulo 1, “Introducción”, explica el motivo por el que se ha desarrollado este proyecto así como los objetivos que se desean alcanzar. El capítulo 2, “Estado del arte”, introduce conceptos de los Sistemas Multi-Agente y describe algunas de las principales metodologías de desarrollo software orientado a agentes. En particular se detalla la metodología VigilAgent utilizada en el desarrollo de este proyecto, así como las metodologías Prometheus e INGENIAS que dieron origen a VigilAgent, y la infraestructura orientada a agentes ICARO-T. El capítulo 3, “Modelado del sistema”, explica todo el proceso de modelado del sistema siguiendo la metodología VigilAgent. Las dos primeras fases, especificación del sistema y diseño arquitectónico, se desarrollan utilizando la herramienta Prometheus Design Tool (PDT) que ofrece soporte a la metodología Prometheus. La tercera fase, diseño detallado, se desarrolla utilizando la herramienta INGENIAS Development Kit (IDK) que ofrece soporte a la metodología INGENIAS. El capítulo 4, “Implementación”, detalla el proceso de implementación del sistema a partir del diseño desarrollado en el capítulo anterior. Se detalla la generación de código obtenida utilizando la herramienta IDK y cómo se completa la implementación de la aplicación. El capítulo 5, “Conclusiones y trabajos futuros”, describe las conclusiones obtenidas tras la finalización de la aplicación, indicando sugerencias para posibles mejoras en Sistemas Multi-Agente de características similares, así como sistemas que utilicen la metodología VigilAgent. 4 2. ESTADO DEL ARTE Los agentes nacieron de la investigación en Inteligencia Artificial (IA) y más concretamente de la Inteligencia Artificial Distribuida (IAD), que integra la IA con los Sistemas Distribuidos. Un agente (véase figura 2.1) es una entidad física o abstracta que percibe su ambiente a través de sensores, es capaz de evaluar las percepciones y tomar decisiones por medio de mecanismos de razonamiento, comunicarse con otros agentes para obtener información y actuar sobre su entorno a través de efectores (Fernández-Caballero, Gascueña, 2009). EFECTOR Acción Entorno AGENTE SENSOR Percepción Figura 2.1 Modelo de agente Un agente puede trabajar solo o en cooperación con otros agentes con el fin de satisfacer uno o varios objetivos. En el segundo caso se habla de Sistemas Multi-Agente (SMA), es decir, sistemas formados por un conjunto de agentes que interaccionan entre sí para alcanzar objetivos comunes. Estos sistemas se sitúan en un entorno que proporciona a cada agente información que modifica su estado mental, activando mecanismos de razonamiento que desencadenan la ejecución de acciones y la comunicación con otros agentes para alcanzar los objetivos marcados. Integrados en el entorno, debe haber objetos de tal forma que puedan ser percibidos, creados, destruidos o modificados por los agentes. Por esto, cada agente debe disponer de un conjunto de operaciones que le permitan percibir, producir, consumir, transformar y manipular dichos objetos. Además, cada agente debe perseguir uno o varios objetivos. Por lo tanto, para poder hablar de un SMA, es necesario que el sistema reúna los siguientes elementos: un conjunto de agentes, un entorno y un conjunto de objetos. Existen varias metodologías para desarrollar estos sistemas y cada una de ellas tiene unas características particulares que la hacen más adecuada para ciertos proyectos. A continuación se describen brevemente algunas de las metodologías más utilizadas en el desarrollo de SMA. 5 - MAS-CommonKADS. Extiende al campo de los SMA la metodología CommonKADS, para sistemas expertos, utilizando estructuración orientada a objetos y lenguajes de especificación de protocolos. Gira alrededor del modelo de experiencia y está pensada para desarrollar sistemas expertos que interactúen con el usuario. Además, plantea el desarrollo de SMA integrado en el ciclo de vida software denominado espiral. - MaSE (Multi-agent systems Software Engineering). Parte del paradigma orientado a objetos y asume que un agente es la especialización de un objeto. Los agentes se coordinan unos con otros vía conversaciones y actúan proactivamente para alcanzar metas individuales y globales. El proceso de desarrollo en MaSE consta de las siguientes etapas: captura de objetivos, aplicación de casos de uso, refinamiento de roles, creación de las clases de agentes, construcción de las conversaciones, ensamblaje de las clases de agentes y diseño del sistema. La mayoría de estas fases están soportados por la herramienta AgentTool. - ZEUS. Combina distintos resultados de investigación en agentes (planificación, ontologías, asignación de responsabilidades, relaciones sociales entre agentes) en un sistema ejecutable. ZEUS propone un desarrollo en cuatro etapas: el análisis del dominio, el diseño de los agentes, la realización de los agentes y el soporte en tiempo de ejecución. Estas etapas están basadas en el uso de roles para analizar el dominio y la asignación de roles a agentes. - GAIA. Propone cómo realizar un análisis basado en los roles del SMA. El objetivo es comprender el sistema y su estructura, sin referenciar ninguna característica de la implementación, con el fin de de obtener un diseño suficientemente detallado como para poder ser implementado directamente. Esto se consigue a través de la idea de organización, la cual es una colección de roles que mantienen relaciones entre sí y toman parte en patrones institucionalizados de interacción con otros roles. Los roles agrupan cuatro aspectos: las responsabilidades del agente, los recursos que se le permite utilizar, las tareas asociadas y las interacciones. Las metodologías Prometheus e INGENIAS son de especial interés por ser la base de la metodología VigilAgent, utilizada en el desarrollo de este proyecto. En las siguientes secciones se describen detalladamente ambas metodologías. 6 2.1. Metodología Prometheus La metodología Prometheus define un proceso detallado para especificar, diseñar, implementar y probar/depurar sistemas software orientados a agentes. Propone un proceso de desarrollo iterativo que consta de tres fases: especificación del sistema, diseño arquitectónico y diseño detallado. Además, detalla cómo seguir el proceso y qué resultados se obtienen en cada fase (Padgham, Winikoff, 2004). La fase de especificación del sistema consiste en identificar los objetivos y funcionalidades básicas del sistema, desarrollar los escenarios que ilustran el funcionamiento del sistema y especificar las entradas y salidas del sistema (percepciones y acciones, respectivamente). Los objetivos son un mecanismo para especificar los requisitos del sistema, es decir, permiten identificar por qué razones se está construyendo el sistema. El proceso de especificación de objetivos se recomienda hacer en dos pasos. El primero consiste en identificar los objetivos iníciales a partir de los requisitos proporcionados. El segundo paso consiste en refinar los objetivos agrupándolos por sus similitudes, de tal modo que pueda obtenerse un grupo de objetivos por cada funcionalidad que deba soportar el sistema. Es preciso resaltar que una funcionalidad describe un fragmento del comportamiento del sistema. Los escenarios describen el funcionamiento del sistema ilustrando la ejecución normal del sistema, así como las situaciones en las que se den sucesos anormales (alternativos). Un escenario se especifica en varios pasos, haciendo evidente dónde se necesita información del entorno y dónde es necesario realizar actuaciones. La información recogida del entorno se denomina percepción en la metodología Prometheus y constituye la entrada al sistema. La fase de diseño arquitectónico toma los artefactos producidos en la fase anterior para identificar los tipos de agentes que existirán en el sistema y cómo interactuarán entre ellos para alcanzar los objetivos del sistema. Cada agente debe ser responsable de al menos una de las funcionalidades identificadas en la fase anterior. Por ello, para identificarlos se agrupan funcionalidades considerando todas las alternativas posibles de tal modo que finalmente se considere aquella agrupación que tenga una mayor cohesión y un mínimo acoplamiento. Otra tarea importante en esta fase consiste en especificar las interacciones que se producen entre agentes. En este caso, estas se describen mediante protocolos de interacción que incluyen los mensajes que se envían los agentes entre sí, qué percepciones llegan a los agentes y qué acciones efectúan sobre el entorno. Por último, la fase de diseño detallado consiste en desarrollar la estructura interna de cada agente identificado previamente y detallar cómo llevar a cabo sus tareas dentro del sistema global. Para ello, se especifican las capacidades necesarias que cada agente tiene para satisfacer sus responsabilidades, además de desarrollar los protocolos con el objetivo de indicar el procesamiento interno de cada agente individualmente. 7 Una vez especificado el sistema se utiliza la herramienta Prometheus Design Tool (PDT) (Padgham, Thangarajah, Paul) para generar el código que sirve de base para implementar la aplicación en el lenguaje de programación Jack. La herramienta PDT permite llevar a cabo el diseño de un SMA siguiendo la metodología Prometheus. Proporciona una ventana principal dividida en cuatro áreas: la lista de diagramas, la vista del diagrama, la lista de entidades y la vista de descripción de entidades (véase figura 2.2). La lista de diagramas presenta de manera ordenada cada una de las fases de la metodología (especificación del sistema, diseño arquitectónico y diseño detallado) e incluye los diferentes tipos de diagramas que se crean en cada una de ellas. La vista del diagrama permite visualizar y especificar el diagrama seleccionado en la lista de diagramas. Para ello ofrece una paleta con las entidades que pueden incluirse en el diagrama seleccionado. La lista de entidades muestra de forma ordenada todas y cada una de las entidades existentes en el diseño del sistema, es decir, muestra todos los agentes, los actores, las percepciones, las acciones, los mensajes, los roles, los datos, los escenarios y los protocolos de interacción que forman parte de cada uno de los diagramas que componen el diseño del sistema. La vista de descripción de entidades muestra una descripción detallada de la entidad seleccionada en la lista de entidades o en la vista del diagrama. Además, permite añadir o modificar cualquier detalle de la descripción. El menú de la herramienta ofrece, a parte de las opciones esperadas en una herramienta de este tipo, una opción denominada Crosscheck para comprobar la consistencia del diseño y conocer, antes de generar el código, si el diseño obtenido se ajusta por completo a lo especificado en la metodología Prometheus. Otro detalle relevante es la posibilidad de utilizar la opción Complete HTML Report para generar automáticamente un informe completo de la especificación en HTML. Por último, comentar que tras completar el diseño, comprobar la consistencia y generar el informe, se puede utilizar la opción Generate Code para generar automáticamente una base de código que permitirá iniciar la implementación del sistema en el lenguaje JACK1. 1 JACK Intelligent Agents (JACK) es un entorno de desarrollo orientado a agentes construido sobre y completamente integrado con el lenguaje de programación Java. 8 Figura 2.2. Ventana de la herramienta PDT A continuación se describen algunos conceptos fundamentales utilizados en la metodología Prometheus: - Percepción. Ítem de información del entorno recogida por algún tipo de sensor. - Acción. Aquello que hace el agente y que puede ser de dos tipos, acción externa y acción interna. Una acción externa es la que produce cambios en el entorno, mientras que una acción interna es aquella que no afecta al entorno y que necesita realizar el agente, como por ejemplo, el acceso a una base de datos. - Objetivo. Algo en lo que está trabajando el agente y hacia lo que se dirige. - Evento. Un suceso significativo al que el agente debe responder de alguna forma. Una percepción es un tipo particular de evento. - Mensaje. Unidad de interacción entre agentes, la cual se utiliza siguiendo un protocolo definido. - Protocolo: Definición de patrones de interacción permitidos. 9 2.2. Metodología INGENIAS La metodología INGENIAS (Gómez, Pavón) propone un proceso de desarrollo basado en el Proceso Unificado de Desarrollo de Software (Unified Software Development Process o RUP) para desarrollar SMA2. Durante este proceso se generan una serie de modelos que se detallan a continuación: - Modelo de organización. Describe la estructura del SMA, los roles y los flujos de trabajo (workflows). - Modelo de entorno. Describe las entidades y relaciones con el entorno del SMA. - Modelo de agente. Describe los agentes del sistema, así como sus responsabilidades, control y estado mental. - Modelo de objetivos y tareas. Identifica los objetivos y tareas generales del sistema, los cuales pueden asignarse a agentes. - Modelo de interacción. Describe las interacciones existentes entre agentes. Estos modelos se especifican en los flujos de análisis y diseño (Gómez, 2002), los cuales se dividen a su vez en tres fases, inicio, elaboración y construcción, de acuerdo al modelo iterativo RUP. La fase de análisis-inicio identifica los componentes que utilizan los agentes para interactuar con el entorno y especifica los casos de uso más relevantes. Los componentes se traducen en aplicaciones que especifican las acciones que pueden ejecutar los agentes, así como las percepciones de los agentes. La fase de diseño-inicio consiste en elaborar un prototipo del sistema que muestra cómo interactúa el usuario con la aplicación y qué tipo de resultados se esperan. En la fase de análisis-elaboración se analizan los casos de uso, obtenidos en la etapa anterior, para generar la arquitectura del sistema. Para ello se refinan los casos de uso y se asocian con modelos de interacciones. La fase de diseño-elaboración aumenta el nivel de detalle de la especificación determinando cómo se llevan a cabo los casos de uso identificados. Los resultados que se obtienen se centran en refinar los flujos de trabajo y las tareas asociadas, las interacciones, cómo es el control del agente y cómo se satisfacen los objetivos del sistema. El modelo de organización se refina asociando tareas a los flujos de trabajo. El modelo de interacción se detalla añadiendo relaciones con los flujos de trabajo. Tras desarrollar los casos de uso necesarios para determinar la arquitectura del sistema, se pasa a la fase de análisisconstrucción para identificar los casos de uso restantes sin modificar sustancialmente la visión del sistema que se tiene hasta ahora del sistema. En la fase de diseño-construcción se detallan las relaciones sociales, principalmente las relaciones de subordinación y las relaciones cliente-servidor. 2 Recientemente también se ha formalizado el proceso de acuerdo a SCRUM, pudiéndose elegir dinámicamente el proceso que mejor se adapte a las características del proyecto abordado. 10 INGENIAS Development Kit (IDK) es una colección de herramientas para especificar, verificar e implementar SMA. La primera de estas herramientas es un editor gráfico, que permite al desarrollador crear y modificar especificaciones de un SMA utilizando conceptos del lenguaje de INGENIAS. Cada entidad puede visualizarse gráficamente con la notación de UML o utilizando la notación propia definida en la metodología INGENIAS. La ventana principal del editor se divide en cuatro áreas de forma muy similar a la herramienta PDT descrita previamente (véase figura 2.3). El área de proyecto muestra en una estructura arbórea todos los diagramas del proyecto. Estos pueden ser de los tipos siguientes: modelo de entorno, modelo de organización, modelo de tareas y objetivos, modelo de interacción, modelo de agente, diagrama de componentes, diagrama de actividad, diagrama de casos de uso, diagrama de interacción AUML y diagrama de despliegue. En el área de diagramas se visualizan los diagramas seleccionados en el área del proyecto. En el área de diagramas se crea una pestaña por cada modelo visualizado y ofrece una paleta para crear las entidades específicas de cada tipo de diagrama. El área de Logs, localizada en la parte inferior del área de diagramas, se utiliza para mostrar informes de la herramienta y para mostrar los detalles descriptivos de la entidad seleccionada. El área de entidades muestra jerárquicamente todas las entidades existentes en el modelo. El segundo tipo de herramientas disponibles en el IDK son los módulos o pluggins. Estos requieren de especificaciones de SMA modelados con el lenguaje INGENIAS para verificar sus propiedades y generar automáticamente el código asociado al modelo. El soporte de este tipo de herramientas permite a los desarrolladores extender la funcionalidad de IDK creando sus propios módulos de acuerdo a sus necesidades. Este es el caso del módulo disponible para generar, automáticamente, código para la plataforma ICARO-T. Este módulo se ha utilizado en el desarrollo de este proyecto como parte de la metodología VigilAgent, la cual se describe más adelante. 11 Figura 2.3. Ventana de la herramienta IDK 2.3. Metodología VigilAgent El ciclo de vida software de VigilAgent se divide en cinco fases, tal y como se describe en (Gascueña, 2010). Dichas fases son: especificación del sistema, diseño arquitectónico, diseño detallado, implementación y despliegue (véase figura 2.4). En la fase de especificación del sistema, el analista de software identifica, a partir de la descripción proporcionada por el cliente, los requisitos del sistema y el entorno en el que va a estar situada la aplicación. Esta fase se desarrolla mediante las siguientes actividades: La primera de ellas consiste en determinar las interacciones existentes entre el sistema y el entorno. Para ello es necesario identificar, en primer lugar, los actores del sistema. Estos son cualquier entidad humana, software o hardware que interacciona con el sistema. Seguidamente deben identificarse las entradas y salidas del sistema, es decir, las percepciones y acciones, respectivamente. Estas se definen como la información del entorno que estará disponible para el sistema (percepciones) y lo que hará el sistema para interactuar sobre el entorno (acciones). Posteriormente, deben identificarse los escenarios iniciales que 12 describen el comportamiento del sistema. Por último, se establecen relaciones entre cada una de las entidades identificadas (actoracción, actorpercepción, escenarioacción y escenariopercepción). La segunda actividad consiste en desarrollar los escenarios identificados previamente. Para ello debe describirse el flujo normal de un escenario. Además, también se deben describir todas las alternativas posibles a un escenario. Cada paso del escenario está etiquetado como una acción, una percepción, un objetivo u otro escenario. La tercera actividad consiste en identificar los objetivos del sistema a partir de la descripción del problema. Un objetivo es aquello que debe poder conseguir o resolver el sistema. Es la razón por la que se construye. Por lo tanto, una vez identificados los objetivos iníciales, estos deben refinarse y reagruparse relacionando objetivos con subobjetivos. La última actividad consiste en describir los roles del sistema. Un rol es un trozo de comportamiento del sistema. Un rol se obtiene a partir de la agrupación de objetivos y debe poder describirse mediante un nombre único, pues una descripción demasiado extensa indica que el rol debe dividirse en varios roles. La fase de diseño arquitectónico consiste en determinar los tipos de agente que hay en el sistema y cómo interactúan entre ellos. Esta fase se desarrolla con las cuatro actividades siguientes: 3 4 La primera actividad consiste en especificar el acoplamiento de datos, es decir, identificar los datos necesarios, para que el sistema pueda llevar a cabo el comportamiento asociado, y establecer las relaciones de lectura/escritura entre los datos identificados y los roles obtenidos en la fase previa. La segunda actividad consiste en identificar los tipos de agente existentes en el sistema. Esta actividad se debe hacer agrupando los roles del sistema para obtener agentes independientes en su comportamiento, es decir, dos tipos de agente no deben compartir un mismo rol, por lo tanto deben evaluarse las agrupaciones obtenidas mediante criterios de cohesión3 y acoplamiento4. Se considera como mejor agrupación a aquella que tiene una mayor cohesión y un mínimo acoplamiento. A partir de la asignación de roles a un agente se obtienen los objetivos asociados al agente, las percepciones ante las que reacciona, las acciones que efectúa y los datos que consume y/o produce. La cohesión hace referencia al agrupamiento de agentes que desempeñan la misma funcionalidad. El acoplamiento hace referencia al grado de dependencia entre agentes. 13 La tercera actividad consiste en describir las interacciones entre agentes mediante protocolos de interacción. La representación gráfica se obtiene a partir de sentencias textuales. Los protocolos se desarrollan a partir de los escenarios especificados en la fase de especificación del sistema e incluyen las acciones, las percepciones y los mensajes mediante los cuales los agentes interaccionan entre sí, y éstos con sus actores asociados. La última actividad consiste en diseñar la arquitectura global del sistema para recoger en una sola vista la información recogida en las actividades previas. Se obtiene un diagrama que muestra las relaciones que hay entre los agentes y las percepciones, los agentes y las acciones, los agentes y los datos, además de incluir los protocolos de interacción obtenidos previamente. Se debe mencionar que en esta fase se genera automáticamente, a partir de la información incluida en los protocolos de interacción, un diagrama de comunicación entre agentes que muestra las relaciones de comunicación existentes entre los agentes del sistema. La fase de diseño detallado consiste en transformar los conceptos obtenidos en Prometheus en conceptos equivalentes en la metodología INGENIAS. Posteriormente se completa el diseño que servirá como entrada para la generación de código. En primer lugar debe hacerse la transformación de conceptos de una metodología a otra, prestando especial atención a la obtención de un diseño equivalente al original mediante la terminología de INGENIAS. A partir del modelo de interacción obtenido se puede deducir que por cada “evento” que recibe un agente debe haber una tarea asociada al agente para responder a la llegada de dicho “evento”. Por lo tanto, por cada mensaje y percepción recibida por un agente se crea una tarea que incluye las acciones y mensajes que ejecutará/enviará el agente a su recepción. Otra tarea consiste en refinar las aplicaciones obtenidas al aplicar la transformación. Este refinamiento consiste en añadir métodos auxiliares que reflejen las acciones que no efectúan cambios en el entorno, sino acciones internas, como por ejemplo el acceso a una base de datos. Una vez conocidas las tareas que ejecutará el agente y los mensajes que recibe se procede a especificar el autómata que describe el comportamiento del agente. La última tarea consiste en establecer, en el diagrama de componentes, una relación entre la tarea de cada agente y un componente de código. Esto es necesario para la generación de código. 14 La fase de implementación consiste en obtener el código final de la aplicación a partir del esqueleto de código generado automáticamente mediante el módulo de generación de código. Se deben completar los métodos de las aplicaciones y las tareas porque el generador únicamente genera las cabeceras. Una vez implementados los métodos se puede actualizar el diseño, concretamente los componentes de código, con el código introducido manualmente. Este paso es necesario para que el código introducido no se pierda la próxima vez que se repita el proceso de generación de código. En la figura 2.7 de la siguiente sección se describe el proceso de generación de código desde INGENIAS y el procedimiento para salvar el código generado. La fase de despliegue consta de una única tarea que consiste en la especificación del número de instancias que habrá de cada tipo de agente y aplicación al desplegar la aplicación. Esta tarea se realiza adjuntando, en un modelo del entorno, notas a los agentes y aplicaciones presentes en el diseño. Figura 2.4. Fases de la metodología VigilAgent 15 2.4. ICARO-T ICARO-T (Garijo, Polo, Spina, 2009) es una infraestructura software que tiene como objetivo el desarrollo de aplicaciones distribuidas con organizaciones de agentes. Proporciona patrones de agente a partir de los cuales pueden generarse instancias de agentes de aplicación, dotados de comportamiento en incluidos en una organización formada por agentes y recursos. Estas organizaciones persiguen unos mismos objetivos globales, mediante la coordinación de sus actividades, además de unos patrones de actividad establecidos. De esta manera, permite gestionar aplicaciones distribuidas a gran escala, pues optimiza y regula la gestión de servicios y distribución de tareas, obteniendo gran eficiencia en la consecución de los objetivos del sistema. ICARO-T proporciona tres tipos de modelos de componentes reutilizables para desarrollar una aplicación: modelos de organización de componentes para describir la estructura general del sistema, modelos de agentes basados en comportamientos reactivos y cognitivos, y modelos de recursos para encapsular las entidades computacionales que ofrecen servicios a los agentes. Además proporciona componentes más elementales como son los patrones software utilizados para construir los modelos de agentes y los modelos de recursos. El patrón de agentes provee a los agentes de interfaces externos y estructuras internas comunes, facilitando su desarrollo, su evolución y la inclusión de los mismos dentro de aplicaciones ya desarrolladas. La arquitectura del agente reactivo se basa en tres componentes incluidos en el patrón de agente de ICARO-T: percepción, control y actuación. El agente recibe eventos a través de la percepción, los cuales se entregan al control bajo demanda. El control está definido mediante un autómata de estados finitos que consume los eventos almacenados en la percepción, provocando transiciones de estado y la ejecución de acciones por parte del componente de actuación. Las acciones generan cambios en el entorno que son de nuevo percibidas por los agentes provocando cambios en el autómata y la ejecución de nuevas acciones. Los mecanismos de percepción y control se encuentran definidos en el patrón de agente que ofrece ICARO-T. El patrón le permite al desarrollador definir el comportamiento de un agente reactivo mediante una tabla de transiciones localizada en un fichero XML y el modelo de ejecución mediante una clase de acciones semánticas. El ciclo de trabajo de un agente reactivo se muestra en figura 2.5 (Gascueña, Fernández-Caballero, Garijo, 2010). El agente recibe eventos, procedentes de agentes y recursos a través de su interfaz de uso, que son encolados en su interfaz para su posterior consumo. Cuando el componente de control solicita un nuevo evento, el componente de percepción se lo proporciona a través de su interfaz de consumo. En ese momento el control del agente procesa el evento para obtener la información que contiene el evento y 16 provocar cambios internos en el autómata que describe su comportamiento. Estos cambios consisten en transiciones de estado, las cuales, al consumir un evento, provocan la ejecución de acciones semánticas por parte del componente de actuación. Una vez iniciada la acción, el agente espera a que ésta finalice para solicitar un nuevo evento a través del control. Figura 2.5. Ciclo de trabajo básico de un agente reactivo 17 Los agentes necesitan interactuar con el entorno para satisfacer sus objetivos. Para ello se utilizan unas entidades llamadas recursos, las cuales ofrecen información del entorno a los agentes y les permiten efectuar acciones sobre este. Los recursos de aplicación se encuentran encapsulados en componentes que aíslan su estructura interna. Además, al igual que los agentes, ofrecen interfaces bien definidas para su uso y gestión. Una aplicación en ICARO-T se modela como una organización formada por los componentes de control y los recursos de aplicación. Esta organización se estructura en tres capas (véase figura 2.6): la capa de control está formada por los componentes de control, es decir, los agentes; la capa de recursos está formada por los componentes que sirven información o proveen de funcionalidad a los agentes para alcanzar sus objetivos; la capa de información contiene las entidades de información necesarias para modelar los datos de las aplicaciones (ontologías, clases, etc.). El usuario arranca una aplicación pasando como parámetro la descripción de la organización de la aplicación. Esta descripción, denominada despliegue, consiste en un fichero XML. Su estructura se detallará posteriormente en el capítulo de implementación. En ese momento se crean tres componentes: el recurso de trazas, el componente de configuración y el repositorio de interfaces. El recurso de trazas es una interfaz gráfica que muestra los componentes de la organización, tanto recursos como agentes, y permite visualizar en un cuadro de texto toda la traza de ejecución de la aplicación. El componente de configuración interpreta la configuración que describe el fichero de despliegue y ordena la creación del agente gestor de la configuración, encargado de controlar la creación del agente gestor de recursos y del agente gestor de agentes. Estos últimos toman el control para crear y gestionar los recursos y agentes de aplicación, respectivamente. Por último, resaltar que cada entidad de la organización informa de su estado a la entidad que lo creó, la cual se encarga de tomar decisiones en función de la información recibida. Así, los agentes de aplicación informan al gestor de agentes, los recursos de aplicación al gestor de recursos y estos últimos informan al gestor de la organización. 18 Figura 2.6. Capas de una aplicación ICARO-T En figura 2.7 se muestra el Desarrollo Dirigido por Modelos (Model Driven Development o MDD) de aplicaciones ICARO-T utilizando IDK (Gascueña, 2009). En primer lugar se crea un proyecto nuevo sobre el que poder trabajar (fase 1). Una vez creado el proyecto, se ejecuta el entorno IDK y se modela la aplicación utilizando el perfil específico para ICARO-T, el cual sólo permite utilizar entidades válidas para el desarrollo en ICARO-T (fase 2). Una vez finalizado el proceso de modelado se genera el código asociado el modelo obtenido (fase 3) para posteriormente modificar el código en Eclipse (fase 4). Si fuera necesario, se puede salvaguardar el código modificado en Eclipse para realizar cambios en el modelo (fase 5). Una vez realizados estos cambios se puede volver a generar el código, el cual incluirá las modificaciones realizadas anteriormente en Eclipse. Este proceso se puede repetir las veces que sea necesario. Para conocer otros proyectos desarrollados con ICARO-T pueden consultarse (Benito, Valerón, 2009), (Fernández de Alba, 2009) y (Rodríguez, 2009). 19 Figura 2.7. MDD de aplicaciones ICARO-T utilizando IDK 2.5. Sistemas de control de acceso de entrada/salida El control de acceso de humanos de entrada/salida tiene como objetivo proteger de accesos no autorizados a zonas de seguridad, gestionando el tráfico de personas e impidiendo el paso a individuos no autorizados. Los sistemas de control de acceso de humanos de entrada/salida son una solución difundida ampliamente: se utilizan en metros, bancos, hoteles, instituciones oficiales, centros de trabajo y todo tipo de áreas restringidas localizadas en hospitales, universidades y zonas militares, entre otras. Su configuración es amplia y variada, dependiendo de las necesidades de cada caso particular, aunque suelen compartir dos elementos comunes: por un lado, constan de un medio lógico para identificar al usuario en el sistema y, por otro lado, de un medio físico que impide o permite el acceso. Además, dichos elementos se utilizan conjuntamente con un componente de control encargado de comparar la información obtenida del usuario con la información almacenada de una base de datos. En caso de coincidir ordena la apertura del medio utilizado como barrera. En muchos casos este componente se encarga también de registrar información relativa al usuario, el momento y el acceso utilizado. 20 La identificación de usuarios en el sistema se realiza mediante uno o varios medios combinados. La utilización de uno u otro depende del nivel de seguridad y control deseado. Uno de los métodos más comunes es la identificación basada en la información codificada en la banda magnética de una tarjeta. Es un método similar al de los tickets, salvo que cada tarjeta suele ser única e intransferible por cada usuario y permite el acceso controlado. Muchas veces se suele combinar con la utilización de un código de seguridad personal (PIN) para evitar casos de robo o extravío de la tarjeta. Los sistemas que requieren un nivel más alto de seguridad utilizan también la biometría como método de identificación. Esta tecnología gestiona el acceso a través de la identificación de la huella dactilar, el escaneo de la palma de la mano u otras características físicas individuales tales como por ejemplo el iris. Los medios físicos para controlar el acceso dependen del tipo de zona que se desea controlar. Para la entrada principal a edificios se suelen utilizar las puertas giratorias y las esclusas de seguridad. Son la solución más común en bancos e instituciones que requieren de cierto nivel de seguridad. Para áreas interiores se utilizan puertas y pasillos con tornos, los cuales pueden disponer de sensores para mayor seguridad. Estos pasillos son similares a los utilizados en los metros para el acceso de viajeros. En áreas más grandes, como pueden ser las áreas perimetrales, suelen utilizarse tornos de altura completa. La combinación de medios lógicos y físicos produce diferentes sistemas de seguridad para el control de acceso de entrada/salida. Uno de los sistemas más difundidos por su eficacia es el de puertas esclusas. Este sistema consta de un espacio delimitado entre dos puertas que previene el paso de más de una persona a la vez. El funcionamiento es el siguiente: en primer lugar el usuario se identifica en la primera puerta, la cual le da acceso a la esclusa. Posteriormente, una vez cerrada la primera puerta, el usuario se identifica de nuevo ante la segunda puerta, la cual le da acceso al área restringida. Algunos de estos sistemas constan además de un sensor por ultrasonido de forma que si dos o más personas son detectadas en la esclusa se niega el acceso (Kaba, 2010). 2.6. Sensores Un sensor es un dispositivo capaz de medir magnitudes físicas o químicas y transformar dichas medidas en variables eléctricas. Los sensores se utilizan para medir, por ejemplo, temperatura, intensidad lumínica, distancia, aceleración, presencia, color, inclinación, desplazamiento, presión, fuerza, torsión, humedad y pH. En general, convierten una señal física no eléctrica en otra eléctrica que, en alguno de sus parámetros (nivel de tensión, nivel de corriente o frecuencia) contiene la información correspondiente a su medición. Por otra parte, es necesario utilizar circuitos de acondicionamiento con el objeto de que éste genere una señal eléctrica normalizada (ya sea por el fabricante o 21 siguiendo pautas de organismos de normalización como IEC5 o IEEE6). Los sensores se pueden clasificar según múltiples características (Armesto, 2007), como son: el tipo de funcionamiento (activos y pasivos), el tipo de señal eléctrica que generan (analógicos, digitales y temporales), el rango de valores que proporcionan (de medida y todo-nada), el nivel de integración (discretos, integrados e inteligentes) y el tipo de variable física medida. Los sensores más utilizados en los sistemas de vigilancia y control están destinados a percibir la presencia de personas y comprobar el estado de los elementos del sistema. En el primer caso se utilizan sensores de presencia, sensores de proximidad, sensores acústicos, sensores ópticos y sensores de presión, entre otros. En el segundo caso se utilizan sensores de temperatura, sensores de estado, sensores de desplazamiento y sensores de humo, entre otros. Resaltar que para el presente proyecto resultan de gran interés los sensores de presencia y los sensores de estado, concretamente los sensores infrarrojos y los sensores de contacto. Estos sensores resultan de gran utilizad para detectar el paso de una persona (corte del rayo infrarrojo) y para conocer el estado de una puerta (abierta o cerrada). Ambos sensores se clasifican en el tipo todo-nada, también conocido como on-off. 2.7. Metodología de desarrollo de redes de sensores mediante SMA La red de sensores es una de las tecnologías más prometedoras para las próximas décadas gracias a la continua reducción de tamaño y precio que se está produciendo en los sensores (Vinyals, Rodríguez Aguilar, Cerquides, 2010). Se trata de un concepto relativamente nuevo en adquisición y tratamiento de datos que tiene múltiples aplicaciones en distintos campos tales como los entornos militares, la medicina, la industria, la domótica, la inteligencia ambiental y la eficiencia energética. Están formadas por un grupo de sensores dotados de capacidades sensitivas y de comunicación, los cuales permiten formar redes ad hoc7 sin una infraestructura física preestablecida ni administración central. Los SMA pueden contribuir al desarrollo de este tipo de sistemas mediante el modelado flexible de entidades autónomas. En (Fuentes-Fernández, Guijarro, Pajares, 2009) se propone un proceso para el desarrollo de redes de sensores mediante SMA. Este proceso está basado en la metodología INGENIAS, al igual que VigilAgent. En figura 2.8 se puede observar cada uno de los pasos que componen este proceso, así como los puntos de toma de decisiones. 5 International Electrotechnical Commission (IEC) Institute of Electrical and Electronics Engineers (IEEE) 7 Ad hoc se refiere a una red en la que no hay un nodo central, sino que todos los dispositivos están en igualdad de condiciones. 6 22 act Phase 1 1. Identificar contenedores y recursos 2. ¿Se deben generar más datos? [Sí] 3. Identificar datos a generar [No] 4. Identificar el equipo de procesamiento de información 5. ¿Hay recursos reemplazables? [Sí] [No] 6. Identificar recursos reemplazables 7. Identificar el equipo de balanceo de carga 8. Refinar el PIM 10. Desarrollar el Modelo de plataforma PM 9. Refinar el modelo especifico de plataforma PSM 12. Aplicar transformaciones al modelo 11. Desarrollar transformaciones 13. Aplicar modelo a las transformaciones de texto Figura 2.8. Proceso de desarrollo en redes de sensores La actividad 1 Identificar contenedores y recursos consiste en determinar los dispositivos que van a percibir información del entorno y los que van a procesar la información suministrada por los sensores. Los primeros se identifican como sensores, mientras que los segundos pueden ser un ordenador o cualquier otro dispositivo informático. Cuando la respuesta a la pregunta que se formula en la decisión 2 “¿Se deben generar más datos?” es afirmativa, se continúa en la actividad 3 Identificar datos a generar, consistente en identificar los datos que van a ser generados por el sistema al margen de los datos que proveen los sensores. Para cada grupo de datos, la actividad 4 Identificar el equipo de procesamiento de información, asigna a cada sensor dos controladores para inicializar el sensor y permitir el acceso a los datos que genera el sensor, respectivamente. Las actividades siguientes permiten el estudio del 23 comportamiento dinámico de la red y su refinamiento. Así pues, la decisión 5 ¿Hay recursos reemplazables? conduce, en caso afirmativo, a la búsqueda de recursos que pueden fallar durante el funcionamiento del sistema, con las correspondientes modificaciones sobre el modelo (actividad 6 Identificar recursos reemplazables y actividad 7 Identificar el equipo de balanceo de carga). Una vez concluidas estas actividades se deben haber obtenido los dispositivos, los agentes y los roles que conforman el sistema, así como la información que intercambian y sus interacciones. Las actividades siguientes se centran en el proceso de desarrollo en INGENIAS, las cuales se realizan sobre el modelo obtenido mediante las actividades expuestas previamente. La actividad 8 Refinar el PIM (Modelo Independiente de la Plataforma) consiste en modificar el modelo de actores y roles con objetivos adicionales, capacidades e información. Las actividades 9 y 10 acercan el modelo al siguiente nivel de desarrollo, añadiendo componentes de código a las entidades para hacerlas más específicas (actividad 9 Refinar el modelo especifico de plataforma PSM y la actividad 10 Desarrollar el Modelo de plataforma PM). Las actividades 11, 12 y 13 realizan las transformaciones necesarias para realizar el proceso semi-automático de generación de código mediante el IDK (actividad 11 Desarrollar transformaciones, actividad 12 Aplicar transformaciones al modelo y actividad 13 Aplicar modelo a las transformaciones de texto). El proceso de desarrollo descrito cuenta con múltiples similitudes con la metodología VigilAgent. Se puede llegar a la conclusión de que las actividades 1 a 7 se asemejan a las actividades realizadas en Prometheus para la identificación de actores, agentes, roles y las interacciones posibles, además de los datos generados. Las actividades siguientes (8 a 13) se asemejan a las fases que usan INGENIAS en VigilAgent, consistentes en realizar las transformaciones necesarias al modelo de Prometheus y añadir componentes de código para realizar el proceso semi-automático de generación de código a partir del modelo final especificado en INGENIAS. 24 3. MODELADO DEL SISTEMA 3.1. Descripción del problema El caso de estudio presentado en este capítulo ilustra todo el proceso de desarrollo considerado en la metodología VigilAgent para modelar una aplicación utilizando como base tecnológica los fundamentos de los SMA. En particular, se pretende modelar un sistema inteligente que simule la colaboración necesaria para controlar, automáticamente, la entrada/salida de humanos a un recinto a través de los módulos instalados (véase figura 3.1). Cada módulo facilita la entrada o la salida en función de su configuración. Un módulo está compuesto por un dispositivo lector de tickets, una puerta de apertura y cierre automático, un sensor de contacto y un sensor de infrarrojos (véase figura 3.2). Inicialmente, el usuario introduce el ticket en el lector de un módulo y el sistema ilumina el led del lector con un determinado color para advertirle al usuario cuál ha sido el resultado de su autentificación. El led se ilumina de color rojo si se trata de un usuario no autorizado. En caso contrario, se ilumina de color verde y seguidamente se abre la puerta, dando tiempo a que el usuario la atraviese antes de que ésta se cierre. El sensor de infrarrojos se utiliza para contar el número de personas que pasan por el módulo. El sistema lleva un control de la cantidad de usuarios que atraviesan cada puerta individualmente y un control global del número total de usuarios que se encuentran en el interior del recinto en cada instante. Evidentemente, los protocolos para entrar y salir del recinto son similares, es decir, la salida del recinto se puede ver como la “entrada” al exterior desde el interior del recinto. Además, el sistema debe controlar la ocurrencia de situaciones anómalas porque cualquier usuario puede realizar acciones no autorizadas, tanto en el proceso de entrada como en el de salida. Así, por una parte, se contempla la posibilidad de que el usuario pueda bloquear una puerta, en el momento en que ésta se abra para darle paso, impidiendo que se cierre. Por otra parte, se deben detectar las situaciones de tailgating, es decir, la práctica que siguen determinados usuarios que no se autentifican para atravesar la puerta aprovechando que está abierta porque otra persona ha introducido correctamente su ticket previamente. Resaltar que el tailgating puede darse porque la puerta está bloqueada y/o aprovechando el intervalo de tiempo durante el que la puerta permanece abierta para que el usuario autorizado pueda atravesarla. Finalmente, otra funcionalidad que ofrece el sistema consiste en permitir que el vigilante de seguridad, responsable de supervisar todo el proceso de entrada y salida de usuarios al/del recinto, tenga capacidad para deshabilitar un módulo cuando su puerta esté cerrada. Además, le informa en todo momento del estado en que se encuentra cada dispositivo del sistema y las estadísticas obtenidas. Por ejemplo, el estado de una puerta, el 25 resultado de identificación de un usuario, el número de usuarios que hay dentro del recinto, etc. Entrada Salida Recinto cerrado Entrada Salida Entrada Figura 3.1. Vista general Recinto cerrado Sensor de infrarrojos Sensor de contacto Puerta de entrada Lector de tarjetas Figura 3.2. Módulo de entrada 26 El problema se ha acotado considerablemente porque simplemente se pretende realizar un estudio y proponer una solución mediante el uso de un sistema Multi-Agente. Las suposiciones de partida consideradas para abordar el caso de estudio descrito previamente son las siguientes: - Un usuario sólo podrá identificarse en un módulo cuando esté habilitado y no lo esté utilizando otro usuario que se haya identificado previamente. - La puerta se abre automáticamente cuando un usuario autorizado se autentifica en el sistema. - El usuario autentificado atraviesa la puerta, una vez abierta, y se detecta un corte del rayo infrarrojo, por parte del sensor dedicado a tal efecto, que indicará el paso del usuario autorizado a través de la puerta. Esto ocurre dentro del retardo que cada módulo introduce para que el usuario cruce la puerta. - No se contempla el caso de que un usuario pase por una puerta en sentido contrario al permitido. Un módulo sólo funciona en sentido de entrada o en sentido de salida, dependiendo de su configuración, es decir, en ningún caso se puede utilizar una puerta de entrada para salir o una de salida para entrar. - La puerta se cierra automáticamente cuando finaliza el tiempo de retardo. Esta se intentará cerrar cuando un usuario (diferente al vigilante) la haya bloqueado, pero el resultado solamente se conocerá por la información obtenida por el sensor de contacto. En este caso de estudio se ha utilizado una nomenclatura para nombrar cada tipo de entidad del sistema. En tabla 3.1 se observa que el nombre de cada tipo de entidad tiene como prefijo unas iníciales que identifican cuál es su tipo. Tabla 3.1. Descripción de las entidades Entidad Actor Agente Percepción Acción Protocolo Identificador acNombreDelActor agNombreDelAgente pNombreDeLaPercepción aNombreDeLaAcción PINombreDelProtocolo 27 3.2. Fase de especificación del sistema 3.2.1. Identificación de la interacción del sistema con el entorno La fase de especificación del sistema se inicia con el diagrama de visión general del análisis (véase figura 3.3), el cual muestra un esbozo de las interacciones que se producen entre el sistema y el entorno. Para ello, se han identificado una serie de actores que representan los dispositivos instalados en el sistema: el lector de tickets (acLector), la puerta de apertura y cierre automático (acPuerta), el sensor de contacto de la puerta (acSensorContacto), el sensor de infrarrojos (acSensorInfrarrojo) y la centralita del vigilante (acCentralita). El actor acLector representa el lector de tickets con el que interacciona el usuario. Este dispositivo puede participar en la identificación del usuario tanto a la entrada como a la salida del recinto – estos procesos se describen en los escenarios Controlar Entrada scenario y Controlar Salida scenario – mediante las acciones aIluminarLedAutorizado y aIluminarLedNoAutorizado y la percepción pIdentificaciónUsuario. La apertura y cierre de la puerta se representa mediante las acciones aAbrir y aCerrar, respectivamente, ejecutadas sobre el actor acPuerta. Además, la acción aBloquearPuerta permite al vigilante deshabilitarla, tal y como se describe en el escenario Deshabilitar Módulo scenario. El actor acSensorContacto representa al dispositivo sensor de contacto utilizado para determinar en qué estado se encuentra la puerta en un momento dado (percepciones pPuertaAbierta y pPuertaCerrada). Este dispositivo se utiliza para detectar la situación anómala en la que un usuario bloquea la puerta para impedir su cierre (Bloquear Puerta scenario). Otro dispositivo físico, representado por el actor acSensorInfrarrojo, se corresponde con el sensor de infrarrojo utilizado para detectar el paso de personas (percepción pInfrarrojoCortado) a través de la puerta. Por lo tanto, la funcionalidad de este dispositivo permite controlar el tráfico de usuarios y detectar la ocurrencia de la situación anómala de tailgating en la que varias personas pasan por la puerta utilizando un único ticket válido. Es preciso resaltar que las situaciones anómalas detectadas se notifican a la centralita mediante las acciones aNotificarPuertaBloqueadaUsuario y aNotificarTailgating ejecutadas sobre el actor acCentralita que representa la interfaz de la centralita. De esta forma el vigilante puede conocer los hechos detectados. 28 Figura 3.3. Diagrama de visión general del análisis 3.2.2. Desarrollo de escenarios Los escenarios del sistema se detallan en el diagrama de escenarios (véase figura 3.4). Un escenario es una secuencia de pasos en forma de guión que describen un posible comportamiento del sistema frente a una situación dada. Los escenarios principales, Controlar Entrada scenario y Controlar Salida scenario, describen el flujo básico de una entrada y una salida, respectivamente. Los escenarios Deshabilitar Módulo scenario, Puerta Bloqueada Usuario scenario y Tailgating scenario son variantes de estos escenarios. El primero, describe la situación en la que el vigilante de seguridad bloquea la puerta utilizando la funcionalidad ofrecida por la interfaz de la centralita. Los otras dos variantes describen las dos situaciones anómalas que es capaz de detectar el sistema: el paso a través de un módulo de más de una persona mientras éste permanece abierto (escenario Tailgating) y un usuario que bloquea la puerta para impedir su cierre automático (escenario Bloquear Puerta scenario). 29 Figura 3.4. Escenarios La secuencia de pasos que describen la entrada de un usuario en el recinto se muestra en figura 3.5. El suceso que dispara esta secuencia es la percepción pIdentificaciónUsuario que contiene el número del ticket introducido por el usuario en el lector de tickets. Notar que el sistema sólo puede leer tickets cuando la puerta está cerrada. Por lo tanto, la percepción pPuertaCerrada aparece en primer lugar para garantizar que el proceso de identificación no se produce cuando un usuario autorizado haya provocado previamente la apertura de la puerta. Una vez que el usuario introduce su ticket en el lector, se comprueba la validez del ticket (paso 3) y se comunica el resultado de esta comprobación tanto al usuario, iluminando el led del lector para notificar que se trata de un usuario autorizado (paso 4), como al vigilante que supervisa las incidencias que llegan a la pantalla de la centralita (paso5). Una vez que se ha comprobado que el usuario dispone de un ticket válido se inicia el proceso de apertura (paso 6), se monitoriza en qué estado se encuentra la puerta (paso 7) y se introduce un retardo para que se cierre de nuevo la puerta (paso 8). Mientras la puerta permanece abierta, se detecta el paso de usuarios (paso 9) y se actualiza el control del tráfico de usuarios que pasan a través de la puerta y el número de usuarios que se encuentran dentro del recinto (paso 10). Al finalizar el retardo, se inicia el proceso que cierra la puerta y se muestra el estado de la puerta en la centralita (pasos 11 y 12, respectivamente). El escenario Controlar Salida scenario muestra casi los mismos pasos que el escenario de entrada. La única diferencia se encuentra en la actualización del contador para el tráfico de salida, tal y como puede observarse en el paso 10 de figura 3.6. 30 Figura 3.5. Escenario Controlar Entrada scenario Figura 3.6. Escenario Controlar Salida scenario El escenario Bloquear Puerta scenario describe la detección de la situación anómala en la que un usuario bloquea la puerta del módulo (véase figura 3.7). Los pasos son los mismos que para los escenarios de entrada y salida hasta el paso 12, momento en el cual se detecta que la puerta sigue abierta después de haberse gestionado el proceso de cierre en el paso previo. Cuando esto ocurre se notifica a centralita la detección de la situación (paso 13). 31 Figura 3.7. Escenario Bloquear Puerta scenario El escenario Tailgating scenario describe la detección de una situación de tailgating en uno de los módulos (véase figura 3.8). Igualmente se comparten los primeros pasos con los escenarios de entrada y de salida, aunque en este caso hasta el paso 9. Una vez se ha detectado el paso de una persona mediante la percepción del infrarrojo pInfrarrojoCortado y se produce la actualización del tráfico del módulo (pasos 8 y 9, respectivamente), se vuelve a detectar el corte del infrarrojo, lo que indica el paso de otra persona (paso 10). Cuando se detecta este hecho se notifica a la centralita la detección de la situación (paso 11). Figura 3.8. Escenario Tailgating scenario En figura 3.9 se muestra el escenario Deshabilitar Modulo scenario que describe la situación excepcional en la que el vigilante deshabilita la puerta del módulo impidiendo su uso por parte de cualquier usuario. Esta situación sólo puede producirse con la puerta 32 cerrada (paso 1). Posteriormente, el vigilante bloquea la puerta a través de la interfaz que le ofrece la centralita (paso 2). El paso 2 (acción aBloquearPuerta) tiene el propósito de deshabilitar el módulo, es decir, el módulo queda fuera de servicio temporalmente hasta que se decide ponerlo en marcha de nuevo. Figura 3.9. Escenario Deshabilitar Modulo scenario 3.2.3. Especificación de objetivos del sistema Los escenarios descritos previamente están directamente relacionados con los objetivos del sistema, es decir, por cada escenario existe un objetivo relacionado. Esto significa que la consecución de dicho objetivo se produce cuando se han completado todos los pasos que componen el escenario asociado. En el diagrama de visión general de objetivos se muestran los objetivos de forma jerárquica (véase figura 3.10). El objetivo raíz Controlar Entrada/Salida se descompone en varios subobjetivos que describen cómo se alcanza el objetivo padre, es decir, tratando el comportamiento legal de los usuarios (Soportar Acceso), las situaciones anómalas (Detectar Situación Anómala) y la situación excepcional que permite al vigilante deshabilitar un módulo. A su vez, el objetivo Soportar Acceso se descompone en dos subobjetivos (Controlar entrada y Controlar Salida) y el objetivo Detectar Situación Anómala se descompone en los subobjetivos Tailgating y Bloquear Puerta. Figura 3.10. Diagrama de visión general de objetivos 33 3.2.4. Descripción de roles Los roles del sistema se obtienen agrupando objetivos y relacionando acciones y percepciones. Como resultado de estas agrupaciones se han identificado roles para cada una de las funcionalidades que se deben soportar en el sistema (véase figura 3.11). En tabla 3.2 se ofrece una breve descripción de los roles identificados. Figura 3.11. Diagrama de roles del sistema Tabla 3.2. Descripción de los roles Rol rIdentificación Usuario rControl Acceso rControl Infrarrojo rControlContacto rDetección Tailgating rDetección Puerta Bloqueada rIntercomunicación Descripción Gestiona el proceso de identificación de un usuario en el sistema para el acceso/salida al/del recinto cerrado. Es responsable de facilitar el acceso/salida al/del recinto al usuario previamente identificado positivamente. Es responsable de detectar el paso de usuarios a través de la puerta. Es responsable de detectar el estado de la puerta. Su objetivo es notificar la detección de la situación anómala denominada Tailgating. Su objetivo es notificar la detección de la situación anómala en la que la puerta ha sido bloqueada por un usuario. Se encarga de gestionar la comunicación entre agentes necesaria para soportar el acceso/salida de usuarios al/del recinto. 34 3.3. Fase de diseño arquitectónico 3.3.1. Identificación de tipos de agentes Una vez que se han identificado los roles en la fase de especificación del sistema, la primera cuestión que hay que resolver en la fase de diseño arquitectónico es identificar los tipos de agente que van a formar parte del sistema. Para esto, se toma como base los roles del sistema y se agrupan de tal modo que cada nuevo agente introducido sea el responsable de llevar a cabo la funcionalidad de uno o varios roles. Como norma general, se pretende que las agrupaciones tengan como resultado la máxima cohesión y el mínimo acoplamiento. Los roles obtenidos en la fase anterior han dado como resultado la introducción de un tipo de agente por cada rol (véase figura 3.12). Figura 3.12. Diagrama de agrupamiento Agente-Rol 3.3.2. Especificación de acoplamiento de datos En algunos casos, para soportar la funcionalidad que representa un rol se deben leer y/o escribir datos. La relación existente entre estos conceptos (roles y datos) se muestra gráficamente en el diagrama de acoplamiento de datos, tal y como puede observarse en la figura 3.13. El rol rIdentificaciónUsuario tiene el objetivo de comprobar la validez de cada ticket introducido en el sistema. Para ello, su agente asociado (agLector) accede al dato BDD que se corresponde con una base de datos de tickets de usuario. Por otro lado, el rol 35 rControlInfrarrojo tiene el objetivo de controlar el tráfico de usuarios que pasan a través de la puerta. Para satisfacer esta funcionalidad, su agente asociado (agSensorInfrarrojo) debe controlar, por una parte, el total de usuarios que pasan a través de la puerta (Tráfico), y por otra parte, el total de usuarios que se encuentran dentro del recinto (Personas Dentro). Además, debe acceder a la configuración del módulo para actualizar correctamente estas estadísticas, es decir, Configuración Módulo permite determinar si el paso de una persona a través de la puerta es de entrada o de salida. Figura 3.13. Diagrama de acoplamiento de datos 3.3.3. Descripción de las interacciones Otra tarea importante en la fase de diseño arquitectónico es la descripción de los protocolos de interacción. Los escenarios describen el comportamiento del sistema mediante una secuencia de pasos. Sin embargo, no contemplan la comunicación entre agentes. Por el contrario, los protocolos de interacción reflejan gráficamente la interacción entre agentes, así como la interacción con el entorno a través de los actores. A continuación se describe detalladamente cada uno de los protocolos considerados en este caso de estudio. PI Identificación especifica cómo se produce la identificación de un usuario en el sistema (véase figura 3.14). Un usuario sólo puede identificarse en el sistema cuando encuentra que la puerta está inicialmente cerrada (percepción pPuertaCerrada). Por lo tanto, cuando se da este caso y un usuario introduce un ticket en el lector, el agente agLector percibe la información del ticket (pIdentificaciónUsuario) para proceder a comprobar la validez del ticket introducido. En función de si el ticket introducido por el usuario es válido o no pueden darse dos situaciones alternativas. En el primer caso, cuando el usuario introduce un ticket válido - se satisface la guarda Usuario Autorizado - se ejecuta la acción aIluminarLedAutorizado para iluminar el led del lector con el fin de notificarle al usuario que ha introducido un ticket válido. Al mismo tiempo, se ilumina un 36 led de la centralita para notificárselo al vigilante (aIluminarLedAutorizadoCentralita). Posteriormente, el agente agLector comunica al agente agPuerta que puede proceder a la apertura de la puerta. Esta comunicación se realiza a través del agente agIntercomunicador, que se encarga de hacer de intermediario en la comunicación entre dos agentes ligados a los dispositivos. En el segundo caso, cuando el usuario introduce un ticket no válido - se satisface la guarda Usuario No Autorizado - se ilumina el led del lector y de la centralita para notificar que se trata de un ticket no válido mediante las acciones aIluminarLedNoAutorizado y aIluminarLedNoAutorizadoCentralita, respectivamente. Figura 3.14. Protocolo PI Identificación PI Acceso especifica todo el proceso de entrada/salida al/del recinto por parte de un usuario, desde que se abre la puerta hasta que se vuelve a cerrar (véase figura 3.15). En esta descripción se supone que el usuario ya se ha autentificado con éxito previamente, es decir, el agente agPuerta ha recibido el mensaje LectorAPuertaUsuarioAutorizado enviado por el agente agIntercomunicador (véase figura 3.14). Cuando esto ocurre, se satisface la guarda Usuario Autorizado y el agente agPuerta ordena que se abra la puerta (aAbrirPuerta) e introduce un retardo (aRetardar), durante el cual la puerta permanecerá abierta, con el fin de darle tiempo al usuario para que la atraviese antes de que se cierre de nuevo. Tras esto, el agente agPuerta se pone en contacto con el agente agSensorContacto para anunciarle la apertura de la puerta. 37 Es preciso resaltar de nuevo que el agente agIntercomunicador hace de intermediario en esta comunicación. Cuando el agente agSensorContacto recibe el mensaje PuertaASensorContactoAbriendoPuerta enviado por el agente agIntercomunicador, percibe el estado de la puerta. En este caso se va a encontrar abierta (pPuertaAbierta) y por lo tanto el agente agSensorContacto ejecuta la acción aIluminarLedPuertaAbiertaCentralita para mostrarlo en la centralita. En ese momento el agente agSensorContacto envía el mensaje SensorContactoASensorInfrarrojoActivar al agente agSensorInfrarrojo para que proceda a su activación. Además, envía el mensaje SensorContactoATailgatingPuertaAbierta al agente agTailgating para que conozca que se ha abierto la puerta y que debe ponerse a monitorizar las ocurrencias de tailgating una vez que el agente agSensorInfrarrojo ha detectado que ha pasado una persona. Las guardas Entrada y Salida permiten contemplar lo que ocurre cuando el usuario atraviesa la puerta de un módulo para entrar o para salir, de acuerdo a cómo esté configurado, respectivamente. En ambos casos es necesario ejecutar la acción aIncrementarContadorTrafico para incrementar el contador de personas que atraviesan el módulo. La diferencia está en que en la alternativa marcada como Entrada se incrementa el contador de personas que hay dentro del recinto mientras que en la alternativa Salida se decrementa. Tras comunicar al agente agTailgating la detección del corte del infrarrojo (SensorInfrarrojoATailgatingInfrarrojoCortado), se inicia el proceso que detecta la ocurrencia de situaciones anómalas correspondientes al fenómeno de tailgating (el contenido de este subprotocolo se detallará en la figura 3.16). Una vez que ha finalizado el retardo se cierra la puerta (aCerrarPuerta) y se le comunica al agente agSensorContacto que debe percibir el estado de la puerta cuando le llegue el mensaje PuertaASensorContactoCerrandoPuerta. Al igual que en el caso de la apertura, esto se hace a través del agente agIntercomunicador. En este instante se contempla la posibilidad de que el usuario haya bloqueado la puerta, impidiendo su cierre, para que otros individuos puedan atravesarla sin necesidad de gastar un ticket (el contenido de este subprotocolo PI Puerta Bloqueada Usuario se detallará en la figura 3.17). Si la puerta está cerrada (pPuertaCerrada) entonces muestra este hecho en la centralita iluminando el led asociado a la puerta, envía el mensaje SensorContactoASensorInfrarrojoDesactivar al agente agSensorInfrarrojo y finalmente envía el mensaje SensorContactoATailgatingPuertaCerrada al agente agTailgating para que deje de monitorizar la situación que es responsable de detectar. A continuación se describen con más detalle las situaciones anómalas citadas previamente. 38 Figura 3.15. Protocolo PI Acceso 39 PI Tailgating especifica cómo se detecta la situación en la que uno o más individuos pasan a través de la puerta aprovechando el paso de un usuario autorizado (véase figura 3.16). Esta situación, como se ha podido ver en el protocolo PI Acceso se produce, cuando la puerta se encuentra abierta, después de que la haya atravesado una persona autorizada. A partir de ese momento, cada vez que el agente agSensorInfrarrojo percibe que se ha cortado el infrarrojo (pInfrarrojoCortado) se contabiliza el paso de otra persona a través de la puerta, se actualiza el número de personas que hay dentro del recinto y se comunica la detección al agente agTailgating mediante el mensaje SensorInfrarrojoATailgatingInfrarrojoCortado. Finalmente, el agente agTailgating notifica la situación a centralita ejecutando la acción aNotificarTailgating. Como puede observarse, la detección se hace de la misma manera tanto en la alternativa de entrada como en la de salida. Figura 3.16. Protocolo PI Tailgating 40 PI Puerta Bloqueada Usuario describe cuándo se detecta que la puerta ha sido bloqueada por un usuario para impedir su cierre (véase figura 3.17). Esta detección se produce cuando el agente agPuerta envía el mensaje PuertaASensorContactoCerrandoPuerta al agente agSensorContacto para comunicarle que ha procedido a cerrar la puerta, tal y como se puede apreciar en el protocolo PI Acceso (véase figura 3.15). Tras recibir este mensaje, el agente agSensorContacto percibe el estado de la puerta. En caso de estar abierta (pPuertaAbierta) interpreta que ha sido bloqueada por el usuario y se lo comunica al agente agPuertaBloqueada mediante el mensaje SensorContactoAPuertaBloqueadaPuertaBloqueada. Este agente informa inmediatamente de esta situación en la centralita (aNotificarPuertaBloqueadaUsuario) tras recibir el mensaje. Figura 3.17. Protocolo PI Puerta Bloqueada Usuario Notar que en la detección de situaciones anómalas no se utiliza el agente intermediario agIntercomunicador porque interesa que la ocurrencia de una situación anómala se notifique instantáneamente. Por esto, el agente agSensorInfrarrojo se comunica directamente con el agente agTailgating en el protocolo PI Tailgating (véase figura 3.16) e igualmente lo hace el agente agSensorContacto con el agente agPuertaBloqueada en el protocolo PI Puerta Bloqueada Usuario (véase figura 3.17). 3.3.4. Descripción de la arquitectura global del sistema Por último, el diagrama de visión general del sistema (véase figura 3.18) muestra en una única vista la arquitectura del sistema, es decir, los agentes identificados, las percepciones que reciben, las acciones que ejecutan, los datos que leen y/o escriben y los protocolos de interacción en los que participan. 41 El diagrama de comunicación de agentes incluye las relaciones de comunicación entre los agentes del sistema. Este diagrama se genera automáticamente a partir de los mensajes incluidos en los protocolos de interacción. En figura 3.19 se observa cómo el agente agIntercomunicador hace de intermediario en las conversaciones entre los agentes agLector, agPuerta, agSensorContacto y agSensorInfrarrojo. Por otra parte se aprecia la comunicación directa entre los agentes agSensorInfrarrojo y agSensorcontacto y los agentes agTailgating y agPuertaBloqueada identificados para reconocer las situaciones anómalas. Figura 3.18. Diagrama de visión general del sistema Figura 3.19. Diagrama de comunicación de agentes 42 3.4. Fase de diseño detallado 3.4.1. Transformación de estructuras de Prometheus a INGENIAS La fase de diseño detallado requiere, en primer lugar, la transformación de los conceptos de Prometheus incluidos en el diagrama de visión general del sistema en conceptos equivalentes en la metodología INGENIAS. Esto se debe a que ambas metodologías no utilizan la misma terminología para describir los elementos que conforman el sistema. Las equivalencias entre las entidades del lenguaje de modelado de Prometheus y el lenguaje de modelado de INGENIAS se pueden resumir como sigue: La entidad agente está presente en Prometheus e INGENIAS y por lo tanto su traducción es directa. Un actor en Prometheus queda descrito en INGENIAS mediante una aplicación con la que interacciona un agente por medio de métodos y eventos. Una entidad aplicación, presente en INGENIAS, encapsula una serie de métodos y eventos y se relaciona con uno o varios agentes. Un método es el procedimiento que describe una acción, que puede ser invocado junto con una serie de argumentos y devolver un resultado. El método puede enviar un evento de aplicación, el cual puede contener información (véanse figuras 3.20 y 3.21), a un agente. La interacción entre agentes y aplicaciones se hace a través de métodos. Así pues, cada actor de Prometheus se ha llevado a INGENIAS transformado en una aplicación, dentro de la cual se ha creado un método por cada acción que un agente puede ejecutar sobre este actor y, seguidamente, se ha creado un evento de aplicación por cada percepción que puede recibir un agente de este actor (véanse figuras 3.20 y 3.21). Respecto a las interacciones entre agentes resaltar que los mensajes utilizados en Prometheus se reflejan en INGENIAS mediante las denominadas Unidades de Interacción, equivalentes a los mensajes, las cuales pueden contener información adicional, al igual que sucede en los eventos de aplicación (véase figura 3.22). Por último, los datos en Prometheus no tienen una equivalencia directa en INGENIAS. Por lo tanto, la manera de reflejar un dato se hace mediante una aplicación con la que pueden interaccionar los agentes (véase figura 3.23). Las figuras 3.20, 3.21, 3.22 y 3.23 muestran gráficamente la transformación de conceptos que debe realizarse al traducir un modelo de Prometheus a INGENIAS. Cada figura muestra en su parte izquierda el modelo original en Prometheus y en su parte 43 derecha el modelo equivalente en INGENIAS. En la parte inferior de cada figura aparece una tabla que indica los diagramas que se ven afectados en la transformación. En la columna de la izquierda aparece lo que afecta en Prometheus y en la de la derecha lo que afecta a INGENIAS. Figura 3.20. Transformación de una percepción Figura 3.21. Transformación de una acción 44 Figura 3.22. Transformación de un mensaje Figura 3.23. Transformación de un dato El resultado de estas transformaciones se resume en tabla 3.3, la cual muestra en su lado izquierdo las entidades procedentes de Prometheus junto a sus figuras asociadas, y en el lado derecho, las entidades equivalentes en INGENIAS y sus respectivas figuras. 45 Tabla 3.3. Equivalencia entre conceptos de Prometheus e INGENIAS Prometheus Entidad Figura INGENIAS Entidad Agente Agente Actor Aplicación Acción Método Percepción Evento de Aplicación Mensaje Unidad de Interacción Dato Aplicación Figura A lo largo de este capítulo, se proporcionan una serie de tablas con el fin de mostrar al lector cómo se realiza la transformación de conceptos entre ambas metodologías. Dichas tablas muestran en su parte izquierda la entidad origen en Prometheus y su tipo, y en la parte derecha la entidad obtenida en INGENIAS junto con su tipo equivalente. A continuación se muestran las equivalencias obtenidas en INGENIAS a partir de los agentes y actores procedentes de Prometheus (tablas 3.4 y 3.5, respectivamente). Tabla 3.4. Agentes obtenidos desde Prometheus Prometheus Entidad agLector agPuerta agSensorContacto agSensorInfrarrojo agTailgating agPuertaBloqueada agIntercomunicador Tipo Agente Agente Agente Agente Agente Agente Agente INGENIAS Entidad agLector agPuerta agSensorContacto agSensorInfrarrojo agTailgating agPuertaBloqueada agIntercomunicador 46 Tipo Agente Agente Agente Agente Agente Agente Agente Tabla 3.5. Aplicaciones obtenidas a partir de los actores de Prometheus Prometheus Entidad acLector acPuerta acSensorContacto acSensorInfrarrojo acCentralita INGENIAS Entidad acLector acPuerta acSensorContacto acSensorInfrarrojo acCentralita Tipo Actor Actor Actor Actor Actor Tipo Aplicación Aplicación Aplicación Aplicación Aplicación A continuación se muestran las tablas que describen las aplicaciones obtenidas a partir de la transformación de los actores obtenidos en la fase anterior (tablas 3.7 a 3.11). La columna tipo muestra el tipo de entidad origen y destino en la transformación. Además, se ha añadido una descripción para aclarar el cometido de cada entidad. Resaltar que el nombre de la entidad obtenida en INGENIAS es el mismo que su equivalente en Prometheus. En tabla 3.6 se resume el significado de cada uno de los tipos empleados. Tabla 3.6. Leyenda Tipo P ME M IU IUFF AE AES AC Descripción Percepción Método Mensaje Unidad de interacción sin información Unidad de interacción con información Evento de aplicación sin información Evento de aplicación con información Acción Tabla 3.7. Aplicación acLector Prometheus Entidad pTicketLeido Tipo P aIluminarLedAutorizado AC aIluminarLedNoAutorizado AC INGENIAS Tipo Descripción AES Evento que contiene el número de ticket leído. Ilumina el led verde en el interfaz del lector que indica un ME usuario autorizado. Ilumina el led rojo en el interfaz del lector que indica un ME usuario no autorizado. Tabla 3.8. Aplicación acPuerta Prometheus Entidad aAbrir Tipo AC aRetardar AC aCerrar AC INGENIAS Tipo Descripción Provoca la apertura de la puerta. Introduce un retardo entre la apertura y el cierre de la puerta. Provoca el cierre de la puerta. 47 Tabla 3.9. Aplicación acSensorInfrarrojo Prometheus Entidad Tipo pInfrarrojoCortado P INGENIAS Tipo Descripción Evento que indica que el infrarrojo se ha cortado debido AE al paso de un usuario a través de la puerta. Tabla 3.10. Aplicación acSensorContacto Prometheus Entidad Tipo pPuertaAbierta P pPuertaCerrada P INGENIAS Tipo Descripción Evento que indica que la puerta se encuentra en AE estado abierto. Evento que indica que la puerta se encuentra en AE estado cerrado. Tabla 3.11. Aplicación acCentralita Prometheus Entidad Tipo aNotificarTailgating AC aNotificarPuertaBloqueada AC aIluminarLedPuertaAbiertaCentralita AC aIluminarLedPuertaCerradaCentralita AC aIluminarLedAutorizadoCentralita AC aIluminarLedNoAutorizadoCentralita AC aIncrementarContadorTrafico AC aIncrementarContadorPersonasDentro AC aDecrementarContadorPersonasDentro AC INGENIAS Tipo Descripción Notifica al vigilante la detección de una ME situación de tailgating en el interfaz del recurso. Notifica al vigilante la detección de una ME situación de bloqueo de la puerta en el interfaz del recurso. Ilumina el led verde en el interfaz de centralita ME que indica que la puerta se encuentra abierta. Ilumina el led rojo en el interfaz de centralita ME que indica que la puerta se encuentra cerrada. Ilumina el led verde en el interfaz de centralita ME que indica un usuario autorizado. Ilumina el led rojo en el interfaz de centralita ME que indica un usuario no autorizado. Incrementa el contador de tráfico de un ME módulo concreto. Incrementa el contador de personas que se ME encuentran dentro del recinto cerrado. Decrementa el contador de personas que se ME encuentran dentro del recinto cerrado. En tabla 3.12 se describe la aplicación obtenida en INGENIAS al transformar un dato de granularidad gruesa obtenido en el modelo de Prometheus. El dato BDD se ha transformado en INGENIAS en una aplicación que permite gestionar el acceso a la base de datos que contiene la información relativa a los tickets de usuario autorizados. Esta aplicación devuelve el resultado de la consulta (comprobarUsuario) en dicha base de datos 48 con uno de los dos eventos siguientes: UsuarioAutorizado y UsuarioNoAutorizado. Resaltar que los datos ConfiguracionModulo, PersonasDentro y Trafico no se han transformado en aplicaciones dado que su simplicidad (son de granularidad fina) permiten manejarlos en la implementación de los métodos de aplicación como variables. Notar que en las columnas entidad y tipo de Prometheus aparece un “-” que significa que lo introducido en INGENIAS no tiene correspondencia con ningún concepto de Prometheus. Tabla 3.12. Aplicación BDD Prometheus Entidad Tipo INGENIAS Entidad Tipo - - comprobarUsuario ME - - UsuarioAutorizado UsuarioNoAutorizado AE AE Descripción Comprueba en la BDD la validez del ticket introducido por el usuario en el lector. Indica que el ticket de usuario leído es válido. Indica que el ticket de usuario leído no es válido. Las aplicaciones obtenidas mediante la transformación sólo incluyen relaciones con los agentes para representar las percepciones que éstas envían y los métodos que representan las acciones ejecutadas por los agentes, es decir, solamente contemplan cambios sobre el entorno. Es preciso refinar las aplicaciones añadiendo métodos auxiliares que representen otro tipo de acciones necesarias para permitir, por ejemplo, cambiar el estado de una puerta o controlar el interfaz gráfico de una aplicación. A continuación se muestran los métodos auxiliares añadidos en cada una de las aplicaciones que lo han requerido (tablas 3.13 a 3.16). Tabla 3.13. Métodos auxiliares de la aplicación acLector Prometheus Entidad - Tipo - INGENIAS Entidad insertarTicket activarInterfaz desactivarInterfaz dameId Tipo ME ME ME ME Descripción Dispara la percepción pTicketLeido. Activa el interfaz del lector. Desactiva el interfaz del lector. Devuelve el ID asociado al recurso. Tabla 3.14. Métodos auxiliares de la aplicación acSensorInfrarrojo Prometheus Entidad Tipo INGENIAS Entidad Tipo - - iluminarLedInfrarrojoCortado ME - - iluminarLedInfrarrojoLibre ME - - cortarInfrarrojo activarInterfaz desactivarInterfaz dameId ME ME ME ME 49 Descripción Ilumina el led negro que indica que el infrarrojo se ha cortado. Ilumina el led rojo que indica que el infrarrojo no está cortado. Dispara la percepción pInfrarrojoCortado. Activa el interfaz del infrarrojo. Desactiva el inferfaz del infrarrojo. Devuelve el ID asociado al recurso. Tabla 3.15. Métodos auxiliares de la aplicación acSensorContacto Prometheus Entidad Tipo INGENIAS Entidad Tipo - - iluminarLedPuertaAbierta ME - - iluminarLedPuertaCerrada ME - - iluminarLedPuertaBloqueada ME - - iluminarLedPuertaDesbloqueada ME - - cambiarEstadoPuerta ME - - bloquearPuertaUsuarioToggle ME - - bloquearPuertaVigilanteToggle ME Descripción Ilumina el led verde en el interfaz del sensor que indica que la puerta se encuentra abierta. Ilumina el led rojo en el interfaz del sensor que indica que la puerta se encuentra cerrada. Ilumina el led negro en el interfaz del sensor que indica que la puerta se encuentra bloqueada. Ilumina el led blanco en el interfaz del sensor que indica que la puerta no está bloqueada. Provoca que se perciba un cambio en estado en la puerta. Provoca el bloqueo/desbloqueo de la puerta por parte de un usuario. Provoca el bloqueo/desbloqueo de la puerta por parte del vigilante. Tabla 3.16. Métodos auxiliares de la aplicación acCentralita Prometheus Entidad Tipo INGENIAS Entidad Tipo - - incrementarContadorTickets ME - - incrementarContadorTicketsTotal ME - - activarBotonVigilante ME - - desactivarBotonVigilante ME - - reinicializarContadores ME Descripción Incrementa el contador de tickets introducidos en un módulo concreto. Incrementa el contador de tickets totales introducidos en el sistema. Desactiva el botón que permite al vigilante bloquear la puerta de un módulo. Activa el botón que permite al vigilante bloquear la puerta de un módulo. Pone a cero todos los contadores mostrados en la centralita. Las aplicaciones obtenidas han dado como resultado el diagrama de entorno que se muestra en las figuras 3.24.a y 3.24.b. Este diagrama incluye el conjunto de agentes y aplicaciones existentes en el sistema. La relación entre estas entidades se establece para reflejar la utilización de aplicaciones por parte de los agentes (ApplicationBelongsTo) y para conocer los agentes receptores de los eventos generados por cada aplicación (EPercives). 50 Figura 3.24.a. Diagrama de entorno 51 Figura 3.24.b. Diagrama de entorno El diagrama de interacción muestra un esquema de la comunicación entre agentes por medio de mensajes (véanse las figuras 3.25.a y 3.25.b). En el diagrama aparecen todos los mensajes existentes en el sistema sobre los que se ha establecido una relación de tipo UInitiates con el agente emisor y otra relación de tipo UColaborates con el receptor. 52 Figura 3.25.a. Diagrama de interacción 53 Figura 3.25.b. Diagrama de interacción 3.4.2. Identificación de tareas El siguiente paso en el diseño detallado consiste en identificar las tareas que ejecuta cada agente. Una tarea, engloba la invocación de uno o varios métodos y/o el envío de mensajes a otros agentes con el fin de acercarse a un objetivo marcado o como respuesta a eventos que el agente recibe de su entorno. Al examinar el modelo de interacción de agentes obtenido, se puede deducir que por cada “mensaje” recibido por un agente debe haber una tarea asociada al agente para atender la llegada del evento. De la misma manera, examinando el modelo del entorno inicial obtenido, se puede deducir que por cada percepción que llega a un agente también debe haber una tarea asociada. Se debe aclarar que las tareas se corresponden con las acciones semánticas que ejecutan los agentes. Las tablas siguientes muestran las acciones semánticas ejecutadas por cada agente del sistema en respuesta a mensajes y percepciones (tablas 3.17 a 3.23). Cada tabla presenta en lado izquierdo el evento en INGENIAS, y su tipo, que provoca la ejecución de la acción semántica. Después se muestra la acción semántica ejecutada y a su derecha una breve descripción. 54 Tabla 3.17. Acciones semánticas ejecutadas por el agente agLector INGENIAS Evento Tipo Acción Semántica Descripción AE ComprobarTicket Comprueba el ticket introducido por el usuario mediante el método ComprobarUsuario del recusoBDD. IU Activar Se activa la interfaz del recurso acLector. IU Desactivar usuarioAutorizado AE Autorizado usuarioNoAutorizado AE NoAutorizado Comenzar Finalizar AE AE Nula Nula pTicketLeido SensorContactoALector Activar SensorContactoALector Desactivar Se desactiva la interfaz del recurso acLector. Comunica al agente agPuerta que puede comenzar el proceso de apertura ya que se trata de un usuario autorizado. No comunica nada al agente agPuerta, se prepara para la introducción de un nuevo ticket. - Tabla 3.18. Acciones semánticas ejecutadas por el agente agPuerta INGENIAS Evento Tipo Acción Semántica LectorAPuertaIdentificacion Valida IU AbrirPuertaAutorizado pCerrandoPuerta AE ComunicarCerrandoPuerta Comenzar Finalizar AE AE Nula Nula Descripción Inicia el proceso de apertura, retardo y cierre de la puerta. Comunica al agente SensorContacto que se va a proceder a cerrar la puerta. - Tabla 3.19. Acciones semánticas ejecutadas por el agente agSensorInfrarrojo INGENIAS Evento Tipo Acción Semántica pInfrarrojoCortado AE ComunicarInfrarrojoCortado IU Activar IU Desactivar PuertaASensorInfrarrojo PasarUsuarioAutorizado IU ComunicarInfrarrojoCortado Comenzar Finalizar AE AE Nula Nula SensorContactoASensor InfrarrojoActivar SensorContactoASensor InfrarrojoDesactivar 55 Descripción Comunica al agente agTailgating que ha atravesado la puerta un usuario. Activa la interfaz del recurso acSensorInfrarrojo. Desactiva la interfaz del recurso acSensorInfrarrojo. Comunica al agente agTailgating que ha atravesado la puerta un usuario autorizado. - Tabla 3.20. Acciones semánticas ejecutadas por el agente agSensorContacto. INGENIAS Evento Tipo Acción Semántica Descripción Comunica al agente agTailgating que la puerta esta abierta y al agente agSensorInfrarrojo que debe activarse. Comunica al agente agPuertaBloqueada que la puerta está bloqueada. Comunica al agente agTailgating que la puerta está cerrada, al agente agSensorInfrarrojo que debe desactivarse y al agente agLector que debe activarse. Comunica al agente agPuertaBloqueada que la puerta está bloqueada. Cambia el estado de la puerta. pPuertaAbierta AE ComunicarPuertaAbierta pPuertaAbierta AE ComunicarPuertaBloqueada pPuertaCerrada AE ComunicarPuertaCerrada pPuertaCerrada AE ComunicarPuertaBloqueada IU CambiarEstadoPuerta IU Nula - IU CambiarEstadoPuerta Cambia el estado de la puerta. IU Nula - pDesbloqueo AE CambiarEstadoPuerta pPuertaBloqueadaVigilante AE ComunicarPuertaBloqueadaVigilante pPuertaDesbloqueadaVigilante AE ComunicarPuertaDesbloqueadaVigilante pBloquearPuertaVigilante AE BloquearPuertaVigilante Comenzar Finalizar AE AE Nula Nula PuertaASensorContacto AbriendoPuerta PuertaASensorContacto AbriendoPuerta PuertaASensorContacto CerrandoPuerta PuertaASensorContacto CerrandoPuerta 56 Cambia el estado de la puerta. Comunica al agente agLector que debe desactivarse. Comunica al agente agLector que debe activarse. Cambia el estado de bloqueo. - Tabla 3.21. Acciones semánticas ejecutadas por el agente agTailgating INGENIAS Evento SensorInfrarrojoATailgating InfrarrojoCortado SensorInfrarrojoATailgating InfrarrojoCortado SensorContactoATailgating PuertaAbierta SensorContactoATailgating PuertaCerrada Comenzar Finalizar Tipo Acción Semántica Descripción IU NotificarTailgating Notifica a centralita la detección de una situación de tailgating. IU Nula - IU Nula - IU Nula - AE AE Nula Nula - Tabla 3.22. Acciones semánticas ejecutadas por el agente agPuertaBloqueada INGENIAS Evento SensorContactoAPuerta BloqueadaPuertaBloqueada Comenzar Finalizar Tipo Acción Semántica IU NotificarPuertaBloqueada AE AE Nula Nula Descripción Notifica a centralita la detección de una situación de puerta bloqueada. - Se debe decir que el evento Comenzar ha sido necesario introducirlo porque está ligado a la implementación y no genera código asociado. Comenzar es enviado por el gestor de agentes al agente de aplicación para que se inicie la ejecución del autómata que describe su comportamiento. El evento Finalizar se envía para cerrar la aplicación y liberar los recursos utilizados. La acción semántica Nula no realiza ningún cómputo. 57 Tabla 3.23. Acciones semánticas ejecutadas por el agente agIntercomunicador INGENIAS Evento Tipo Acción Semántica LectorAPuertaIdentificacionValida IU ComunicarAPuertaAbrir PuertaASensorContactoAbriendoPuerta IU ComunicarASensorContactoAbriendo PuertaASensorContactoCerrandoPuerta IU ComunicarASensorContactoCerrando SensorContactoALectorActivar IU ComunicarALectorActivar SensorContactoALectorDesactivar IU ComunicarALectorDesactivar SensorContactoASensorInfrarrojoActivar IU ComunicarASensorInfrarrojoActivar SensorContactoASensorInfrarrojoDesactivar IU ComunicarASensorInfrarrojoDesactivar PuertaASensorInfrarrojoPasarUsuarioAutorizado IU ComunicarASensorInfrarrojoPasarUsuarioAutorizado Comenzar Finalizar AE AE Nula Nula Descripción 58 Notifica mensaje del agente agLector al agente agPuerta para comunicarle que la identificación ha sido válida. Notifica mensaje del agente agPuerta al agente agSensorContacto para comunicarle que se está procediendo a abrir la puerta. Notifica mensaje del agente agPuerta al agente agSensorContacto para comunicarle que se está procediendo a cerrar la puerta. Notifica mensaje del agente agSensorContacto al agente agLector para comunicarle que puede proceder a activar la interfaz del lector. Notifica mensaje del agente agSensorContacto al agente agLector para comunicarle que puede proceder a desactivar la interfaz del lector. Notifica mensaje del agente agSensorContacto al agente agInfrarrojo para comunicarle que puede proceder a activar la interfaz del sensor. Notifica mensaje del agente ag SensorContacto al agente agInfrarrojo para comunicarle que puede proceder a desactivar la interfaz del sensor. Notifica mensaje del agente agPuerta al agente agSensorInfrarrojo para comunicarle que debe pasar el usuario autorizado. - 3.4.3. Especificación del modelo de comportamiento de los agentes El comportamiento de un agente se puede describir mediante un diagrama de estados que indica, para cada estado, los eventos que puede recibir y las acciones semánticas que puede ejecutar como respuesta a cada evento. El autómata resultante se puede obtener a partir de las acciones semánticas expuestas previamente y los eventos que recibe el agente. En la figura 3.26 se muestra, para un agente cualquiera, una transición entre estados. Esta transición se produce cuando el agente recibe un evento (Evento_Recibido), para el que responde con una acción semántica (Acción_Respuesta_a_Evento), transitando al estado siguiente (Estado_Tras_Ejecutar_Acción). Figura 3.26. Comportamiento de un agente Existe un estado común al autómata de todos los agentes que conforman el sistema. Este estado, denominado UniversalState, se utiliza para describir la transición universal y representa cualquier estado del autómata. La transición universal se produce cuando un agente, en cualquiera de sus estados, transita al estado Fin al recibir el evento finalizar. Como respuesta a este evento el agente responde con la acción semántica Nula. A continuación se describe el autómata de cada agente obtenido en INGENIAS. Para ilustrar la descripción de los autómatas se incluye una figura del autómata especificado con la herramienta IDK y otra representación equivalente del diagrama con la notación propia de UML (véanse figuras 3.27.a a 3.33.b). Además, se muestra la tabla de eventos recibidos que recoge la entidad que emite el evento, la entidad y tipo correspondiente en Prometheus, el tipo correspondiente en INGENIAS y el contenido del evento (tablas 3.24 a 3.30). El autómata del agente agLector (véanse figuras 3.27.a y 3.27.b) se encuentra inicialmente inactivo para evitar que un usuario introduzca un ticket cuando el sistema aún no puede atender una petición (estado EsperarActivación). Una vez que el sistema se ha inicializado por completo y se ha detectado que la puerta se encuentra cerrada, el agente 59 agSensorContacto comunica al agente agLector que puede proceder a activar la interfaz (estado EsperarTicket). En ese momento el lector se encuentra disponible para leer los tickets de usuario. Cuando un usuario introduce un ticket se ejecuta la acción semántica ComprobarTicket y se pasa al estado EsperarComprobacionTicket en espera del resultado. En caso de que el ticket sea válido se desactivará la interfaz para que un nuevo usuario no pueda introducir otro ticket (estado EsperarActivacion). En otro caso se regresará al estado anterior a la espera de un nuevo ticket (estado EsperarTicket). Tabla 3.24. Eventos recibidos por el agente agLector Prometheus Evento pTicketLeido SensorContactoALectorActivar SensorContactoALectorDesactivar usuarioAutorizado usuarioNoAutorizado Comenzar Finalizar Tipo P M M P P - INGENIAS Tipo Contenido AES Ticket String IU IU AE AE AE AE - Emisor acLector agSensorContacto agSensorContacto recursoBDD recursoBDD - Figura 3.27a. Autómata del agente agLector obtenido en INGENIAS 60 stm agLector EstadoInicial [comenzar / nula] [SensorContactoALectorDesactivar / desactivar] EsperarActiv acion [SensorContactoALectorDesactivar / desactivar] [SensorContactoALectorActivar / activar] [pTicketLeido / ComprobarTicket] EsperarTicket [usuarioNoAutorizado / NoAutorizado] EsperarComprobacionTicket [usuarioAutorizado / Autorizado] EstadoFinal Transición universal: (Sx, EstadoFinal): finalizar / nula Sx es cualquier estado del autómata Figura 3.27b. Autómata del agente agLector El agente agPuerta (véanse figuras 3.28.a y 3.28.b) se encuentra esperando la comunicación de un usuario válido (estado EsperarUsuarioValido). Cuando recibe el evento LectorAPuertaIdentificaciónValida procede a abrir la puerta mediante la acción semántica AbirPuerta. Tras ejecutar dicha acción semántica comunica al agente agSensorContacto que se está procediendo a cerrar la puerta para que compruebe si esta acción se ha realizado con éxito. Tabla 3.25. Eventos recibidos por el agente agPuerta Prometheus Evento LectorAPuertaIdentificacionValida pCerrandoPuerta Comenzar Finalizar Tipo M P - INGENIAS Tipo Contenido IU AE AE AE - 61 Emisor agLector acPuerta - Figura 3.28a. Autómata del agente agPuerta obtenido en INGENIAS stm agPuerta EstadoInicial [comenzar / nula] EsperarUsuarioValido [pCerrandoPuerta / ComunicarCerrandoPuerta] EstadoFinal [LectorAPuertaIdentificacionValida / AbrirPuerta] Transición universal: (Sx, EstadoFinal): finalizar / nula Sx es cualquier estado del autómata Figura 3.28b. Autómata del agente agPuerta 62 El autómata del agente agSensorInfrarrojo (véanse figuras 3.29.a y 3.29.b) cuenta con un solo estado intermedio (EsperarInfrarrojo). Inicialmente se encuentra a la espera de recibir, de la aplicación acSensorInfrarrojo, el evento que le indica que el infrarrojo se ha cortado (pInfrarrojoCortado), al que reacciona comunicando al agente agTailgating dicho suceso mediante la acción semántica ComunicarInfrarrojoCortado. Este evento se produce como consecuencia de la interacción con la interfaz de uso del recurso8, la cual permite provocar el corte del infrarrojo. El agente agSensorInfrarrojo reacciona de la misma manera cuando recibe el evento PuertaASensorInfrarrojoPasarUsuarioAutorizado, ya que de esta manera se contabiliza el usuario autorizado que debe pasar cuando se abre la puerta del módulo como consecuencia de la identificación positiva del usuario. Los eventos SensorContactoASensorInfrarrojoActivar y SensorContactoASensorInfrarrojoDesactivar comunican al agente la necesidad de activar/desactivar la interfaz de uso mientras la puerta del módulo permanece abierta/cerrada. Esta activación/desactivación no afecta al funcionamiento del agente, que puede contabilizar el paso del usuario autorizado antes de que se permita operar a través de la interfaz. Tabla 3.26. Eventos recibidos por el agente agSensorInfrarrojo Prometheus Evento pInfrarrojoCortado SensorContactoASensorInfrarrojoActivar SensorContactoASensorInfrarrojoDesactivar PuertaASensorInfrarrojoPasarUsuarioAutorizado Comenzar Finalizar Tipo P M M M - 8 INGENIAS Tipo Contenido AE IU IU IU AE AE - Emisor acSensorInfrarrojo agSensorContacto agSensorContacto agPuerta - El recurso es un concepto que aparecerá en la implementación. Los recursos se obtienen a partir de las entidades de tipo aplicación del modelo de INGENIAS. En el contexto de este capítulo utilizar el término recurso es equivalente a utilizar el término aplicación. 63 Figura 3.29.a. Autómata del agente agSensorInfrarrojo obtenido en INGENIAS stm agSensorInfrarroj o EstadoInicial [comenzar / nula] [SensorContactoASensorInfrarrojoDesactivar / desactivar] [PuertaASensorInfrarrojoPasarUsuarioAutorizado / ComunicarInfrarrojoCortado] EsperarInfrarroj o [SensorContactoASensorInfrarrojoActivar / activar] EstadoFinal [pInfrarrojoCortado / ComunicarInfrarrojoCortado] Transición universal: (Sx, EstadoFinal): finalizar / nula Sx es cualquier estado del autómata Figura 3.29.b. Autómata del agente agSensorInfrarrojo 64 El autómata del agente agSensorContacto (véanse figuras 3.30.a y 3.30.b) dispone de dos estados claramente diferenciados, PuertaAbierta y PuertaCerrada, que se corresponden con los estados detectados en la puerta del módulo. La puerta, controlada por el agente agPuerta, funciona de manera independiente al estado detectado por el sensor de contacto, es decir, únicamente realiza las acciones de apertura y cierre, introduciendo el correspondiente retardo, al margen del estado que detecta el sensor de contacto. Esto puede producir situaciones en las que la puerta efectúe el proceso de apertura cuando ésta haya sido bloqueada, por lo tanto, el estado real en que se encuentra la puerta solamente lo puede determinar el agente agSensorContacto. Este agente se encuentra inicialmente en el estado PuertaCerrada, a la espera de recibir la comunicación del agente agPuerta que le indique el inicio del proceso de apertura de la puerta (PuertaASensorContactoAbriendoPuerta). Cuando recibe el evento ejecuta la acción semántica CambiarEstadoPuerta que provoca el cambio de estado, almacenado internamente, y cuyo resultado dependerá del estado de bloqueo/desbloqueo de la puerta. Inmediatamente, el agente recibe el evento de la aplicación acSensorContacto que indica el nuevo estado de la puerta. Si la puerta se encuentra desbloqueada será pPuertaAbierta, el cual provoca la transición al estado PuertaAbierta. En caso contrario recibirá el evento pPuertaCerrada, que indica al agente que la puerta se encuentra bloqueada al encontrarse ya en el estado PuertaCerrada. En el estado PuertaAbierta el agente espera a recibir el evento que provoque un cambio en el estado de la puerta (PuertaASensorContactoCerrandoPuerta), tal y como se acaba de explicar, mediante la acción semántica CambiarEstadoPuerta. Como sucedía en el estado PuertaCerrada, la ejecución de la acción semántica provoca la percepción del estado de la puerta en función de si está bloqueada o no. En caso de no estar bloqueada, recibirá el evento pPuertaCerrada que provoca la transición al estado PuertaCerrada. En caso contrario, recibirá el evento pPuertaAbierta, indicándole que la puerta ha sido bloqueada y provocando la ejecución de la acción semántica ComunicarPuertaBloqueada. En este estado, el bloqueo ha sido efectuado por un usuario, por lo tanto no se desbloqueará hasta que el usuario desactive el bloqueo. El agente recibirá el evento pDesbloqueo provocando un nuevo cambio de estado. 65 Tabla 3.27. Eventos recibidos por el agente agSensorContacto Prometheus Evento pPuertaAbierta pPuertaCerrada PuertaASensorContactoAbriendoPuerta PuertaASensorContactoCerrandoPuerta pDesbloqueo pPuertaBloqueadaVigilante pPuertaDesbloqueadaVigilante pBloquearPuertaVigilante Comenzar Finalizar Tipo P P M M P P P P - INGENIAS Tipo Contenido AE AE IU IU AE AE AE AE AE AE - Emisor acSensorContacto acSensorContacto agPuerta agPuerta acSensorContacto acSensorContacto acSensorContacto acCentralita - Figura 3.30.a. Autómata del agente agSensorContacto obtenido en INGENIAS 66 Figura 3.30.b. Autómata del agente agSensorContacto El agente agTailgating (véanse figuras 3.31.a y 3.31.b) se encuentra inicialmente a la espera de que se produzca la apertura de la puerta para contabilizar el paso de usuarios a través de la puerta (estado EsperarPuertaAbierta). El paso de un usuario autorizado se contempla cada vez que se abre la puerta. Cuando esto ocurre, el agente recibe el evento SensorInfrarrojoATailgatingInfrarrojoCortado, provocando que el autómata transite al estado Infrarrojo1. En este estado se puede volver a cortar el infrarrojo, lo cual produce la detección de una situación de tailgating (acción semántica NotificarTailgating) y el paso al siguiente estado, Infrarrojo2. En el estado Infrarrojo2 cualquier nuevo evento que indique el corte del infrarrojo produce la notificación de la situación de tailgating. Resaltar que esta notificación se envía a la aplicación acCentralita para poner en conocimiento del vigilante la detección del suceso. En ambos estados, Infrarrojo1 e Infrarrojo2, puede recibirse el evento que indica que se ha detectado que la puerta está cerrada, lo cual 67 provoca que el agente transite al estado inicial EsperarPuertaAbierta, dejando de ser posible el paso de usuarios no autorizados a través de la puerta del módulo. Tabla 3.28. Eventos recibidos por el agente agTailgating Prometheus Evento SensorInfrarrojoATailgatingInfrarrojoCortado SensorContactoATailgatingPuertaAbierta SensorContactoATailgatingPuertaCerrada Comenzar Finalizar Tipo M M M - INGENIAS Tipo Contenido IU IU IU AE AE - Emisor agSensorInfrarrojo agSensorContacto agSensorContacto - Figura 3.31.a. Autómata del agente agTailgating obtenido en INGENIAS 68 stm agTailgating EstadoInicial [comenzar / nula] EsperarPuertaAbierta [SensorContactoATailgatingPuertaAbierta / nula] EsperarNotificacionInfrarroj o [SensorInfrarrojoATailgatingInfrarrojoCortado / nula] Infrarroj o1 [SensorContactoATailgatingPuertaCerrada / nula] [SensorInfrarrojoATailgatingInfrarrojoCortado / NotificarTailgating] Infrarroj o2 [SensorContactoATailgatingPuertaCerrada / nula] [SensorInfrarrojoATailgatingInfrarrojoCortado / NotificarTailgating] EstadoFinal Transición universal: (Sx, EstadoFinal): finalizar / nula Sx es cualquier estado del autómata Figura 3.31.b. Autómata del agente agTailgating El agente agPuertaBloqueada (véanse figuras 3.32.a y 3.32.b) se encuentra a la espera de recibir la notificación que le indique que la puerta ha sido bloqueada, pues la detección de la situación se produce en el agente agSensorContacto. Este último agente comunica al agente agPuertaBloqueada el suceso mediante el evento SensorContactoAPuertaBloqueadaPuertaBloqueada, que produce la ejecución de la acción semántica NotificarPuertaBloqueada por parte del agente agPuertaBloqueada. Esta notificación se envía a la aplicación agCentralita, al igual que se hace cuando se detecta una situación de tailgating. 69 Tabla 3.29. Eventos recibidos por el agente agPuertaBloqueada Prometheus Evento SensorContactoAPuertaBloqueadaPuertaBloqueada Comenzar Finalizar Tipo M - INGENIAS Tipo Contenido IU AE AE - Emisor agSensorContacto - Figura 3.32.a. Autómata del agente agPuertaBloqueada obtenido en INGENIAS 70 stm agPuertaBloqueada EstadoInicial [comenzar / nula] EsperarNotificacionPuertaBloqueada [SensorContactoAPuertaBloqueadaPuertaBloqueada / NotificarPuertaBloqueada] EstadoFinal Transición universal: (Sx, EstadoFinal): finalizar / nula Sx es cualquier estado del autómata Figura 3.32.b. Autómata del agente agPuertaBloqueada El agente agIntercomunicador (véanse figuras 3.33.a y 3.33.b) tiene la responsabilidad de operar como intermediario en la comunicación entre agentes ligados a dispositivos físicos, salvo en los casos de detección de situaciones sospechosas, tal y como se comentó en la fase anterior del diseño. Por lo tanto, el autómata de este agente dispone de un único estado intermedio (EsperarMensaje) que le permite recibir los eventos enviados por el agente que inicia la comunicación, para de inmediato, proceder a reenviar el evento recibido al agente receptor en la comunicación. Tabla 3.30. Eventos recibidos por el agente agIntercomunicador Prometheus Evento LectorAPuertaIdentificacionValida PuertaASensorContactoAbriendoPuerta PuertaASensorContactoCerrandoPuerta SensorContactoALectorActivar SensorContactoALectorDesactivar SensorContactoASensorInfrarrojoActivar SensorContactoASensorInfrarrojoDesactivar PuertaASensorInfrarrojoPasarUsuarioAutorizado Comenzar Finalizar Tipo M M M M M M M M - 71 INGENIAS Tipo Contenido IU IU IU IU IU IU IU IU AE AE - Emisor agLector agPuerta agPuerta AgSensorContacto AgSensorContacto AgSensorContacto AgSensorContacto AgPuerta - Figura 3.33.a. Autómata del agente agIntercomunicador obtenido en INGENIAS 72 Figura 3.33.b. Autómata del agente agIntercomunicador 3.4.4. Crear diagrama de componentes El último paso de la fase de diseño detallado consiste en establecer, para cada tarea, una relación con un componente de código en el diagrama de componentes (véase figura 3.34). Esto es necesario para realizar la generación de código, pues se utilizará este componente como base para generar el código, tal y cómo se describirá más adelante en el siguiente capítulo. 73 Figura 3.34. Diagrama de componentes 74 3.4.5. Crear diagrama de despliegue El Diagrama de despliegue muestra la cantidad de instancias que se generarán para cada entidad (véase figura 3.35). En el diagrama puede observarse que cada entidad se ha relacionado con una nota de texto que muestra un número en su interior. Este número indica el número de instancias que se generarán, en la ejecución, para cada entidad. Por ejemplo, para el agente agLector se generarán cinco instancias, mientras que para el recurso acCentralita se generará sólo una. Figura 3.35. Diagrama de despliegue 75 76 4. IMPLEMENTACIÓN La fase de implementación tiene como objetivo obtener un sistema ejecutable a partir de los modelos obtenidos en la fase anterior. Para ello se genera automáticamente el código de la infraestructura ICARO-T sobre el que se continúa la implementación manual del sistema, añadiendo las interacciones agente-agente, agente-recurso y recurso-agente. Posteriormente, se crean los interfaces gráficos para la interacción del usuario con el sistema. Con el fin de ilustrar este proceso, se proporcionan algunos fragmentos de código generado automáticamente, algunos fragmentos de código añadido manualmente para llevar a cabo los tipos de interacción citados previamente y algunas capturas de los interfaces gráficos. En el último apartado del capítulo se añade una mejora al sistema para facilitar al usuario su uso. 4.1. Fase de generación de código El código de la infraestructura se genera automáticamente a partir de los modelos especificados en INGENIAS, dando como resultado, por un lado, el fichero que describe la organización de la aplicación y que toma como base el modelo de despliegue explicado en la sección 3.4.5 y, por otro lado, los paquetes y clases relativos a los agentes y aplicaciones especificados durante el modelado. El fichero despliegue.xml generado en el directorio “config\icaro\aplicaciones\descripcionOrganizaciones” describe las características generales de los componentes de la organización de la aplicación. Comienza describiendo las propiedades globales de la organización, el comportamiento de los gestores y el comportamiento de los agentes de la aplicación (véase figura 4.1), el cual queda descrito para todos los agentes como reactivo9 (véase por ejemplo la línea 8 de la figura 4.1). Tras una descripción de los recursos se describen las instancias de la aplicación. Por un lado, describe las instancias de los gestores y por otro, las instancias de los agentes y de los recursos. El identificador de cada instancia viene dado por el valor de atributo id (línea 4 de figura 4.2), mientras que el tipo lo proporciona el atributo refDescripción (línea 5 de figura 4.2). Tras estos atributos pueden declararse otros manualmente para dotar a los agentes de ciertas propiedades. Este ha sido el caso del agente agSensorInfrarrojo, que incluye en cada una de sus instancias un atributo especial denominado Tipo y que puede tomar los valores “entrada” o “salida” (línea 7 de figura 4.2). Este atributo se ha añadido al despliegue de la aplicación para configurar cada instancia del agente como módulo de entrada o de salida. Las instancias de los recursos de la aplicación quedan descritas de forma similar a los agentes, es decir, el atributo id identifica cada una de las instancias y el tipo viene dado por el atributo refDescripción. Al igual que en el caso del agente 9 Un agente reactivo, como su nombre indica, reacciona ante los cambios en el entorno ejecutando tareas que lo acercan a los objetivos que tiene marcados. 77 agSensorInfrarrojo, ha sido necesario añadir una serie de atributos adicionales al recurso BDD que proporcionan la configuración del origen de datos de la base de datos que gestiona. Concretamente, se han añadido los atributos NOMBRE_DNS_SISTEMA, NOMBRE_INICIO_SESION, CONTRASEÑA, URL_CONEXION y DRIVER_JDBC (véanse líneas 3 a 7 de figura 4.3). (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) <!--****************************************************************************************** ***************** Descripcion del comportamiento de los agentes de aplicacion ******************** ******************************************************************************************--> <icaro:DescComportamientoAgentesAplicacion> <icaro:DescComportamientoAgente nombreComportamiento="AgenteAplicacionagLector" rol="AgenteAplicacion" localizacionComportamiento="icaro.aplicaciones.agentes.agenteAplicacionagLectorReactivo.comporta miento" tipo="Reactivo" /> <icaro:DescComportamientoAgente nombreComportamiento="AgenteAplicacionagIntercomunicador" rol="AgenteAplicacion" localizacionComportamiento="icaro.aplicaciones.agentes.agenteAplicacionagIntercomunicadorReactivo. comportamiento" tipo="Reactivo" /> <icaro:DescComportamientoAgente nombreComportamiento="AgenteAplicacionagSensorInfrarrojo" rol="AgenteAplicacion" localizacionComportamiento="icaro.aplicaciones.agentes.agenteAplicacionagSensorInfrarrojoReactivo. comportamiento" tipo="Reactivo" /> <icaro:DescComportamientoAgentenombreComportamiento="AgenteAplicacionagPuertaBloqueada" rol="AgenteAplicacion" localizacionComportamiento="icaro.aplicaciones.agentes.agenteAplicacionagPuertaBloqueadaReactivo. comportamiento" tipo="Reactivo" /> <icaro:DescComportamientoAgente nombreComportamiento="AgenteAplicacionagPuerta" rol="AgenteAplicacion" localizacionComportamiento="icaro.aplicaciones.agentes.agenteAplicacionagPuertaReactivo.comportamiento" tipo="Reactivo" /> <icaro:DescComportamientoAgente nombreComportamiento="AgenteAplicacionagTailgating" rol="AgenteAplicacion" localizacionComportamiento="icaro.aplicaciones.agentes.agenteAplicacionagTailgatingReactivo. comportamiento" tipo="Reactivo" /> <icaro:DescComportamientoAgente nombreComportamiento="AgenteAplicacionagSensorContacto" rol="AgenteAplicacion" localizacionComportamiento="icaro.aplicaciones.agentes.agenteAplicacionagSensorContactoReactivo. comportamiento" tipo="Reactivo" /> </icaro:DescComportamientoAgentesAplicacion> Figura 4.1. Fragmento del fichero XML del despliegue de la aplicación (1) <!--****************************************************************************************** (2) *************************** Instancias de Agentes de aplicacion ******************************* (3) ******************************************************************************************--> …………………………. (4) (5) (6) (7) (8) (9) <icaro:Instancia id="AgenteAplicacionagSensorInfrarrojoReactivo1" refDescripcion="AgenteAplicacionagSensorInfrarrojo"> <icaro:listaPropiedades> <icaro:propiedad atributo="Tipo" valor="Entrada"/> </icaro:listaPropiedades> </icaro:Instancia> Figura 4.2. Descripción de una instancia del agente agSensorInfrarrojo 78 (1) (2) (3) (4) (5) (6) (7) (8) (9) <icaro:Instancia id="RecursoBDD1" refDescripcion="RecursoBDD" xsi:type="icaro:Instancia"> <icaro:listaPropiedades> <icaro:propiedad atributo="NOMBRE_DNS_SISTEMA" valor="TablaTickets" /> <icaro:propiedad atributo="NOMBRE_INICIO_SESION" valor="usuario1" /> <icaro:propiedad atributo="CONTRASEÑA" valor="contraseña1" /> <icaro:propiedad atributo="URL_CONEXION" valor="jdbc:odbc:TablaTickets" /> <icaro:propiedad atributo="DRIVER_JDBC" valor="sun.jdbc.odbc.JdbcOdbcDriver" /> </icaro:listaPropiedades> </icaro:Instancia> Figura 4.3. Descripción de la instancia del recurso BDD La estructura de paquetes generada consta de un paquete por cada agente y recurso del modelo, tal y como puede observarse en la figura 4.4. Considerando como ejemplo el paquete que contiene la implementación del comportamiento del agente agTailgating, icaro.aplicaciones.agentes.agenteAplicacionagTailgatingReactivo.comportamiento, se puede ver que consta de dos ficheros. El primero de ellos es la clase AccionesSemanticasAgenteAplicacionagTailgating que proporciona un esqueleto para los métodos que implementarán, en Java, las acciones semánticas del autómata y que constituirán la reacción del agente ante los estímulos exteriores. Estos métodos se corresponden con las acciones semánticas ejecutadas por el agente. El otro fichero generado dentro del paquete es el fichero automata.xml que describe el autómata especificado en el modelo de INGENIAS. En este fichero se distinguen tres tipos de estado: inicial, intermedio y final (líneas 1, 5 y 13, respectivamente, de figura 4.5). Los estados inicial y final son comunes a todos los autómatas de INGENIAS y contienen una única transición, la que inicia al agente mediante el evento comenzar (estado inicial) y la que lo finaliza mediante finalizar (estado final), respectivamente. Esta última es una transición de tipo universal, lo que implica que el autómata puede transitar al estado final desde cualquier estado cuando reciba el evento citado. Las transiciones que describen el comportamiento del agente se encuentran descritas con estados de tipo intermedio. El estado Infrarrojo1 contiene dos transiciones posibles, SensorInfrarrojoATailgatingInfrarrojoCortado y SensorContactoATailgatingPuertaCerrada. Estas transiciones son los imput o eventos a los que el agente reaccionará cuando se encuentre en dicho estado (líneas 6 y 9 de figura 4.5). La primera de ellas transita al estado Infrarrojo2 y provoca la ejecución de la acción NotificarTailgating (línea 7) por parte del agente; la segunda lo hace al estado EsperarPuertaAbierta y provoca la ejecución de la acción nula (línea 9). Ambas transiciones son de tipo bloqueante, lo que significa que el agente no atenderá ningún otro evento hasta que no haya finalizado la tarea lanzada en la última transición. Cualquier evento recibido por el agente durante la ejecución de tareas quedará encolado a la espera de su interpretación por parte del agente. 79 Figura 4.4. Estructura de paquetes de la aplicación (1) <estadoInicial idInicial="EstadoInicial"> (2) <transicion input="comenzar" accion="nula" estadoSiguiente="EsperarNotificacionInfrarrojo" (3) modoDeTransicion="bloqueante"/> (4) </estadoInicial> …………………………. (5) (6) (7) (8) (9) (10) (11) (12) <estado idIntermedio="Infrarrojo1"> <transicion input="SensorInfrarrojoATailgatingInfrarrojoCortado" accion="NotificarTailgating" estadoSiguiente="Infrarrojo2" modoDeTransicion="bloqueante"/> <transicion input="SensorContactoATailgatingPuertaCerrada" accion="nula" estadoSiguiente="EsperarNotificacionInfrarrojo" modoDeTransicion="bloqueante"/> </estado> …………………………. (13) <estadoFinal idFinal="EstadoFinal"/> Figura 4.5. Fragmento de código del autómata del agente agTailgating Como se ha comentado anteriormente, cuando un agente recibe un evento reacciona transitando conforme a lo descrito en su autómata asociado. Cada transición trae consigo la ejecución de una acción semántica que se encuentra implementada en el código que describe el comportamiento del agente. A la hora de desarrollar este código se parte del esqueleto generado automáticamente, el cual consta de un método por cada acción semántica que puede efectuar el agente. En figura 4.6 se puede apreciar un fragmento de 80 código del fichero AccionesSemanticasAgenteAplicacionagTailgating.java que muestra el esqueleto generado para la acción semántica NotificarTailgating del agente agTailgating. Como se puede observar, el código solamente declara el método asociado a la acción y define un espacio donde añadir el código pertinente. Este espacio viene delimitado por los comentarios #start_nodeNotificarTailgating y #end_nodeNotificarTailgating que se emplean para permitir la modificación de los modelos en INGENIAS paralelamente al desarrollo del código de la aplicación (líneas 4 y 6 de figura 4.6). Estos delimitadores evitan que el código, previamente desarrollado, se “machaque” por el nuevo código generado a partir de los modelos de INGENIAS. En la figura 4.7 se muestra el código desarrollado manualmente para la acción aNotificarTailgating que, como se comentó en el capítulo anterior, se encarga de notificar al recurso acCentralita la detección de una situación anómala de tailgating. En el código mostrado se puede apreciar, en primer lugar, la inicialización de la variable r_RecursoCentralita con la referencia al interfaz de uso de la instancia del recurso acCentralita (línea 9). Para ello se utiliza el método obtenerInterface del interfaz de uso itfUsoRepositorio, que proporciona la referencia a los interfaces de cada uno de los agentes y aplicaciones declarados en el fichero XML de despliegue. Es interesante resaltar, que el nombre pasado al método obtenerInterfaz es el mismo que se ha asignado en dicho fichero de despliegue de la aplicación. Seguidamente, en el código del método, se puede apreciar cómo se ejecutan las acciones sobre el recurso acCentralita a través del interfaz de uso declarado. El método aMostrarTexto permite mostrar un texto a través del interfaz gráfico del recurso (línea 14) y seguidamente, el método aNofitifarTailgating (que comparte nombre con la acción semántica del agente) muestra un mensaje preestablecido a través de dicho interfaz gráfico informando de la detección de dicha situación anómala (línea 15). Nótese la trazabilidad de estos métodos a lo largo de todo el diseño de la aplicación y cómo se puede llegar a las acciones declaradas en el diseño inicial en Prometheus. (1) (2) (3) (4) //aNotificarTailgating is an intermediate action public void aNotificarTailgating(){ //TODO: Complet aNotificarTailgating action implementation //#start_nodeaNotificarTailgating:aNotificarTailgating <--aNotificarTailgating-DO NOT REMOVE THIS (5) (6) //#end_nodeaNotificarTailgating:aNotificarTailgating <--aNotificarTailgating—DO NOT REMOVE THIS (7) } Figura 4.6. Esqueleto generado para la acción semántica aNotificarTailgating 81 (1) (2) (3) (4) //aNotificarTailgating is an intermediate action public void aNotificarTailgating(){ //TODO: Complet aNotificarTailgating action implementation //#start_nodeaNotificarTailgating:aNotificarTailgating <--aNotificarTailgating—DO NOT REMOVE THIS (5) System.out.println("aNotificarTailgating"); (6) trazas.aceptaNuevaTraza(new InfoTraza(this.nombreAgente,"NOTIFICAR DETECCION TAILGATING A CENTRALITA",InfoTraza.NivelTraza.debug)); (7) //RecursoCentralita (8) try { (9) r_RecursoCentralita = (ItfUsoRecursoacCentralita) itfUsoRepositorio.obtenerInterfaz(NombresPredefinidos.ITF_USO + "RecursoacCentralita1"); (10) } catch (Exception e) { (11) // TODO Auto-generated catch block (12) e.printStackTrace(); (13) } (14) r_RecursoCentralita.aMostrarTexto(this.nombreAgenteCorto+": Tailgating detectado"); (15) r_RecursoCentralita.aNotificarTailgating(id); (16) //#end_nodeaNotificarTailgating:aNotificarTailgating <--aNotificarTailgating-- DO NOT REMOVE THIS (17) } Figura 4.7. Implementación final de la acción semántica aNotificarTailgating De la misma manera que los agentes disponen de un método por cada tarea o acción semántica que pueden ejecutar, los recursos disponen de métodos por cada acción que pueden realizar. Así pues, se ha generado automáticamente un esqueleto de código para cada recurso de la aplicación al que posteriormente se ha añadido el código necesario para llevar a cabo cada una de sus acciones. En figura 4.8 se muestra un fragmento del contenido del fichero ClaseGeneradoraRecursoacSensorInfrarrojo.java, concretamente el método cortarInfrarrojo que implementa la acción que permite simular el corte que se produce en el rayo del sensor infrarrojo cuando una persona atraviesa la puerta de un módulo. Esta acción se produce cuando el usuario de la aplicación desea que una persona atraviese la puerta de forma intencionada para provocar cambios en el sistema que lleven a la detección de situaciones, tanto habituales como anómalas. La forma de implementar esta acción es enviando el evento pInfrarrojoCortado al agente agSensorInfrarrojo para que actúe conforme a la definición de su autómata y detecte este hecho. Examinando el código de la figura 4.8 se puede observar cómo se recupera la referencia a la interfaz de uso del agente agSensorInfrarrojo por medio de la ClaseGeneradoraRepositorioInterfaces y se asigna a la variable itfUsoAgente (línea 6). Seguidamente se crea un nuevo evento recursoagente EventoRecAgte de tipo pInfrarrojoCortado que contiene el identificador del propio recurso como origen y el identificador del agente agSensorInfrarrojo como destinatario (en 82 la línea 7 aparece esta información como primer, segundo y tercer argumento, respectivamente). Finalmente, se envía el evento (línea 8) ejecutando el método aceptaEvento() de la interfaz recuperada (línea 6), pasándole como argumento el evento recién creado. (1) /#start_nodelocalMethods:localMethods <--localMethods-- DO NOT REMOVE THIS (2) public void cortarInfrarrojo(){ (3) //se le envia al agente agTailgating la percepcion pInfrarrojoCortado (4) trazas.aceptaNuevaTraza(new InfoTraza(this.getId(),"COMUNICAR PINFRARROJOCORTADO AAGTAILGATING",InfoTraza.NivelTraza.debug)); (5) try { (6) ItfUsoAgenteReactivo itfUsoAgente = (ItfUsoAgenteReactivo)ClaseGeneradoraRepositorioInterfaces .instance().obtenerInterfaz(NombresPredefinidos.ITF_USO+NombresPredef inidos.NOMBRE_AGENTE_APLICACION+"agSensorInfrarrojoReactivo"+id); (7) EventoRecAgte ev = new EventoRecAgte("pInfrarrojoCortado", this.getId(), NombresPredefinidos.NOMBRE_AGENTE_APLICACION+"agSensorInfrarrojoReact ivo"+id); (8) itfUsoAgente.aceptaEvento(ev); (9) } catch (Exception e1) { (10) // TODO Auto-generated catch block (11) e1.printStackTrace(); (12) } (13) } Figura 4.8. Método cortarInfrarrojo del recurso acSensorInfrarrojo Un agente se comunica con otro agente por medio de mensajes, los cuales se traducen en el código de la aplicación como eventos. Las percepciones también se traducen a eventos en el código de la implementación. Por lo tanto, la manera en que se envían eventos entre agentes es similar a la manera en que se envían los eventos de un recurso a un agente. En figura 4.9 se muestra un fragmento de código de la acción semántica ComunicarInfrarrojoCortado. Esta acción se encuentra implementada en el fichero AccionesSemanticasAgenteAplicacionagSensorInfrarrojo.java. El método relativo a dicha acción semántica es utilizado por el agente agSensorInfrarrojo para comunicar al agente agTailgating la detección del corte del infrarrojo al recibir el evento pInfrarrojoCortado. Para ello, el agente agSensorInfrarrojo debe recuperar la referencia al interfaz de uso del agente agTailgating al que va destinado el evento (línea 4). A continuación crea el evento SensorInfrarrojoATailgatingInfrarrojoCortado cuyo origen y destino son el agente agSensorInfrarrojo y el agente agTailgating, respectivamente (línea 5). Por último, se envía el evento creado al agente agTailgating (línea 6). 83 (1) //se le comunica al agente agTailgating que se ha cortado el sensor infrarrojo (2) ItfUsoRepositorioInterfaces itfUsoRepositorioInterfaces = ClaseGeneradoraRepositorioInterfaces.instance(); (3) try { (4) ItfUsoAgenteReactivo itfUsoAgente = (ItfUsoAgenteReactivo) itfUsoRepositorioInterfaces.obtenerInterfaz(NombresPredefinidos.ITF_USO + NombresPredefinidos.NOMBRE_AGENTE_APLICACION + "agTailgatingReactivo"+id) (5) EventoRecAgte ev = new EventoRecAgte("SensorInfrarrojoATailgatingInfrarrojoCortado", this.getNombreAgente(),NombresPredefinidos.NOMBRE_AGENTE_APLICACION+ "agTailgatingReactivo"+id); (6) itfUsoAgente.aceptaEvento(ev); (7) } catch (Exception ex){ (9) ex.printStackTrace(); (10) } Figura 4.9. Fragmento de la acción semántica ComunicarInfrarrojoCortado del agente agSensorInfrarrojo Para que el usuario pueda interaccionar con el sistema y el vigilante de seguridad pueda visualizar cómodamente las situaciones detectadas ha sido necesario implementar una interfaz gráfica para cada recurso de la aplicación. Por tanto, se han creado interfaces gráficas para los recursos acCentralita, acLector, acSensorInfrarrojo y acSensorContacto. La parte visual de las interfaces y las cabeceras de los métodos que responden a la interacción con el usuario se han implementado con la herramienta NetBeans que simplifica la creación de interfaces gráficas, aunque también podría haberse utilizado indistintamente por ejemplo Eclipse o JBuilder. Las clases obtenidas han sido InterfazCentralita, InterfazLector, InterfazSensorInfrarrojo, InterfazSensorContacto. Éstas se han integrado en ICARO-T dentro del mismo paquete que la clase generadora que corresponde a cada interfaz (véase figura 4.10 para el caso concreto del recurso acSensorInfrarrojo). Posteriormente se han hecho modificaciones en las clases generadoras, añadiendo los import correspondientes y modificando los constructores para crear un objeto que hace referencia a una instancia del interfaz gráfico. Es preciso resaltar que cuando se crea la instancia de un interfaz se le pasa como parámetro una referencia de la instancia de la clase generadora del recurso, de forma que el objeto de tipo interfaz tiene acceso a la clase generadora que lo creo. El diagrama de clases relacionadas con el recurso acSensorInfrarrojo se muestra en la figura 4.11. Figura 4.10. Paquete del recurso acSensorInfrarrojo 84 class recursoacSensorInfraroj o javax.swing.JFrame imp::InterfazSensorInfraroj o - idRecurso: ClaseGeneradoraRecursoacSensorInfrarojo jBotonAtravesarPuerta: JButton jLedInfrarojo: JProgressBar numId: int + + + + + + + activarInterfaz() : void desactivarInterfaz() : void initComponents() : void InterfazSensorInfrarojo() : void InterfazSensorInfrarojo(ClaseGeneradoraRecursoacSensorInfrarojo) : void jBotonAtravesarPuertaActionPerformed(ActionEvent) : void ledInfrarojoCortado() : void ledInfrarojoLibre() : void main(String[]) : void -ventanaSensorInfrarojo -idRecurso ImplRecursoSimple imp::ClaseGeneradoraRecursoacSensorInfraroj o - id: String idRecurso: String trazas: ItfUsoRecursoTrazas ventanaSInfrarojo: InterfazSensorInfrarojo + + + + + + + + activarInferfaz() : void aLedInfrarojoCortado() : void aLedInfrarojoLibre() : void ClaseGeneradoraRecursoacSensorInfrarojo(String) : void cortarInfrarojo() : void dameId() : String desactivarInferfaz() : void termina() : void java.lang.Object «interface» ItfUsoRecursoacSensorInfraroj o + + + + + + activarInterfaz() : void aIluminarLedInfrarrojoCortado() : void aIluminarLedInfrarrojoLibre() : void cortarInfrarrojo() : void dameId() : String desactivarInterfaz() : void Figura 4.11. Diagrama de clases relacionadas con el recurso acSensorInfrarrojo Tal y como se ha mencionado anteriormente, se han creado interfaces gráficos para los recursos acCentralita, acLector, acSensorInfrarrojo y acSensorContacto, para permitir que el usuario interactúe con la aplicación con dos papeles distintos: (1) el de una persona que entra en el recinto y puede realizar actos no permitidos; y (2) el de un vigilante de seguridad que supervisa el proceso de entrada y salida de usuarios en/del recinto. El interfaz InterfazCentralita consiste en una ventana dividida en cinco secciones, cada una de las cuales está dedicada a un módulo de entrada o salida (véase figura 4.12). Cada sección muestra, para el módulo al que está dedicada, el número de tickets leídos, el número de usuarios que han atravesado la puerta, la validez del ticket introducido y el estado de la puerta. Además incluye un botón para deshabilitar la puerta del módulo. Por otro lado, la ventana muestra el número total de tickets leídos y el número de personas que se encuentran dentro del recinto e incluye, en la parte inferior, un cuadro de texto donde se va mostrando todo lo que sucede en el sistema. El interfaz InterfazLector (véase figura 4.13) muestra todo lo necesario para interactuar con el lector de tickets: un cuadro de texto en el que se puede escribir el número de ticket que se quiere introducir, un botón que simula la introducción del ticket en el lector (tomando como valor el número de ticket escrito en el cuadro de texto) y un recuadro que cambia de color cuando el ticket es válido y que hace el papel de led. El interfaz InterfazSensorInfrarrojo (véase figura 4.14) muestra 85 en primer lugar un recuadro que cambia de color cuando una persona atraviesa la puerta, simulando el corte del rayo infrarrojo, y un botón que permite cortar el rayo a petición del usuario. Destacar que este botón únicamente se activa cuando la puerta del módulo se encuentra abierta, momento en el que un usuario la puede atravesar. El interfaz InterfazSensorContacto (véase figura 4.15) muestra en todo momento el estado de la puerta del módulo por medio de un recuadro que cambia de color según su estado y que hace el papel de led. Además, muestra el estado del bloqueo de la puerta mediante otro recuadro relacionado con el botón de bloqueo que permite bloquear o desbloquear la puerta por parte de un usuario. Este bloqueo, al igual que sucede con el corte del rayo infrarrojo, sólo puede realizarse cuando la puerta está abierta, pues en otro caso el botón aparece deshabilitado. Comentar que el número que aparece en la barra de título de los interfaces gráficos asociados a los dispositivos nos permite conocer en qué módulo está instalado. Figura 4.12. Ventana de la clase InterfazCentralita Figura 4.13. Ventana de la clase InterfazLector 86 Figura 4.14. Ventana de la clase InterfazSensorInfrarrojo Figura 4.15. Ventana de la clase InterfazSensorContacto Finalmente, comentar que para lanzar el despliegue de la aplicación se deben ejecutar los script que se encuentran en la carpeta /ICAROTCode/bin/ del proyecto. El primero de ellos, Fija entorno.bat, establece las rutas necesarias para el IDK de INGENIAS, ANT y JDK; y el segundo, Despliegue.bat, lanza la aplicación mediante el comando “ant buildfile=../build.xml run -DrutaDescripcion=DespliegueDNS5modulos”, siendo DespliegueDNS5modulos el nombre del fichero XML que describe el despliegue de la organización recién lanzada. Como resultado se lanza el Recurso de trazas de ICARO-T (véase figura 4.16) que permite acceder a las trazas de cada uno de los elementos que componen la aplicación. El aspecto de la aplicación recién iniciada se puede ver en la figura 4.17. Figura 4.16. Recurso de trazas de ICARO-T 87 Figura 4.17. Aspecto de la aplicación tras su lanzamiento 4.2. Mejora de la aplicación La introducción de tickets de forma manual por parte del usuario resulta una tarea bastante ardua porque el usuario de la aplicación debe teclear los números de ticket y pulsar los botones correspondientes para simular la entrada/salida de usuarios en/del recinto. Este procedimiento impide una interacción ágil con la aplicación para simular el bloqueo de puertas y la introducción de personas no autorizadas, así como la supervisión de toda la simulación a través de la centralita. Ha resultado interesante mejorar la aplicación haciendo la introducción de tickets en el sistema una tarea automática, 88 permitiendo así una interacción más cómoda con la aplicación. Este procedimiento automático se basa en la introducción de un reloj en la aplicación que va contabilizando el tiempo y que va enviando eventos a los recursos lectores pertinentes para que estos reaccionen como si el usuario hubiera introducido un número de ticket. Para llevar a cabo esta mejora ha sido necesario utilizar la herramienta de actualización de código ICAROTcodeUploader que se incluye en el IDK de INGENIAS. Esta funcionalidad permite actualizar el diseño de la aplicación durante el proceso de implementación en java, de tal manera que el código introducido manualmente se salva para evitar que pueda sobrescribirse. Una vez actualizado el diseño, añade el código generado automáticamente a partir de los cambios realizados en el diseño junto con el código salvado. Por lo tanto, una vez salvado el código implementado de forma manual, se ha procedido a introducir una nueva aplicación en el diseño denominada Reloj. Esta aplicación ha producido cambios en el diseño detallado de la aplicación, los cuales se explican a continuación. En primer lugar, se han introducido los métodos necesarios para que la aplicación Reloj pueda desempeñar funciones de control de instantes de tiempo (tabla 4.1). Además se ha dotado a la aplicación acLector de nuevos métodos para permitir la introducción de tickets de forma automática al recibir instantes de tiempo por parte del Reloj (tabla 4.2). A continuación se han añadido las relaciones pertinentes en el diagrama de entorno, el cual muestra el envío de eventos al agente agLector mediante la relación EPercibes y el manejo de métodos de aplicación por parte del agente a través de la relación AplicationBelongsTo (véase figura 4.18). Tabla 4.1. Aplicación Reloj Prometheus Entidad Tipo - INGENIAS Entidad iniciarSimulacion Tipo ME - - continuarSimulacion ME - - nuevoInstante ME - - incrementarInstante dameInstante Pausar Reanudar estaEnPausa ME ME ME ME ME - - Disponibles ME - - obtenerVaribleSimulando ME - - obtenerVariableInstante ME 89 Descripción Lanza en el sistema la simulación programada. Comunica a cada lector el instante de reloj actual. Comunica al reloj la disponibilidad por parte de un lector para la recepción de un nuevo instante de reloj. Incrementa un instante de reloj. Devuelve el instante de reloj actual. Detiene el avance de reloj. Reanuda el avance de reloj. Devuelve cierto cuando el reloj esta pausado. Devuelve cierto cuando todos los lectores están disponibles para recibir un nuevo instante de reloj. Devuelve cierto cuando el recurso se encuentra en medio de una simulación. Devuelve el instante en que se encuentra el reloj. Tabla 4.2. Métodos añadidos a la aplicación acLector Prometheus Entidad Tipo INGENIAS Entidad Tipo - - insertarTicketAuto ME - - nuevoInstanteRecibido ME Descripción Durante la simulación, dispara la percepción pTicketLeido. Durante la simulación, provoca la búsqueda de un ticket asociado a un instante concreto de tiempo. Figura 4.18. Fragmento del diagrama de entorno En segundo lugar, se han identificado las acciones semánticas del agente agLector ejecutadas como respuesta a los nuevos eventos (nuevoInstante) que puede recibir del recurso Reloj. Según el caso, el agente puede recibir un número de ticket para cierto instante si así ha sido programado, recibiendo el evento nuevoInstante al que reacciona mediante la acción semántica NuevoInstanteRecibido que incluye acciones destinadas a buscar el ticket correspondiente al instante recibido, si lo hubiera. Si para un instante dado no se ha programado la introducción de un ticket, el lector recibirá el evento noTicket, al que reaccionará con la acción semántica InstanteSinTicket (véase tabla 4.3). 90 Tabla 4.3. Acciones semánticas añadidas al agente agLector INGENIAS Entidad Tipo Acción Semántica Descripción nuevoInstante AES NuevoInstanteRecibido noTicket AE InstanteSinTicket Durante una simulación, provoca la ejecución del método nuevoInstanteRecibido del recurso acLector que se encarga de buscar un ticket asociado al instante recibido. Durante una simulación, no introduce ningún ticket. El último paso en la revisión del diseño detallado ha consistido en modificar el autómata del agente agLector para incluir las nuevas acciones semánticas que puede ejecutar. La tabla 4.4 muestra los nuevos eventos recibidos por el agente mientras que las figuras 4.19.a y 4.19.b muestran el autómata del agente con la notación empleada en INGENIAS y UML, respectivamente. Tabla 4.4. Eventos recibidos por el agente agLector Prometheus Entidad - Tipo - INGENIAS Entidad nuevoInstante noTicket Tipo AES AE Contenido Instante Integer - Emisor Reloj acLector Figura 4.19.a. Automáta del agente agLector en INGENIAS 91 stm agLector EstadoInicial [comenzar / nula] [SensorContactoALectorDesactivar / desactivar] EsperarActiv acion [SensorContactoALectorDesactivar / desactivar] [SensorContactoALectorActivar / activar] [noTicket / InstanteSinTicket] [pTicketLeido / ComprobarTicket] EsperarTicket [usuarioNoAutorizado / NoAutorizado] [nuevoInstante / NuevoInstanteRecibido] EsperarComprobacionTicket [usuarioAutorizado / Autorizado] EstadoFinal Transición universal: (Sx, EstadoFinal): finalizar / nula Sx es cualquier estado del autómata Figura 4.19.b. Automáta del agente agLector Una vez rediseñada la aplicación en INGENIAS se ha vuelto a generar el código, obteniendo el esqueleto de la implementación para el nuevo recurso y el código generado inicialmente junto con todo el desarrollado realizado previamente de forma manual. De la misma manera que se ha hecho en la primera etapa de implementación se han completado los métodos del recurso Reloj partiendo del esqueleto generado automáticamente. Debido a que el nuevo recurso Reloj envía instantes de tiempo a los recursos lectores, estos deben conocer si existe un ticket para ellos asociado a cada instante de tiempo, por lo que ha sido necesario crear un fichero XML denominado entradalectores.xml que contiene los lectores que poseen un ticket asociado en cada instante de tiempo y el número de cada ticket (véase líneas 1 y 2 de figura 4.20). Por lo tanto, una instancia del agente agLector ejecutará dentro de la tarea NuevoInstanteRecibido una acción destinada a la búsqueda, en el fichero entradalectores.xml, del instante recibido, su número de lector y el número de ticket correspondiente. Esta acción se ejecuta en el método nuevoInstanteRecibido() del 92 recurso acLector, el cual se encarga de realizar la búsqueda en el fichero XML. Una vez finalizada la búsqueda y, en caso de que no haya encontrado un ticket para el instante recibido, enviará un evento noTicket a la instancia correspondiente del agente agLector. En caso contrario, ejecutará el método insertarTicketAuto(), que equivale a la inserción manual de un ticket por parte de un usuario del sistema. (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) <LECTURA instante = "1"> <Lector id = "1" ticket = "8"></Lector> <Lector id = "3" ticket = "8"></Lector> </LECTURA> <LECTURA instante = "2"> <Lector id = "2" ticket = "4"></Lector> <Lector id = "3" ticket = "6"></Lector> <Lector id = "5" ticket = "2"></Lector> </LECTURA> <LECTURA instante = "3"> <Lector id = "2" ticket = "1"></Lector> </LECTURA> <LECTURA instante = "5"> <Lector id = "1" ticket = "3"></Lector> <Lector id = "2" ticket = "7"></Lector> <Lector id = "3" ticket = "6"></Lector> </LECTURA> Figura 4.20. Fragmento del fichero entradaLectores.xml Por último, se ha creado un interfaz gráfico para iniciar la simulación mediante el clic sobre un botón, además de indicar el instante de tiempo en el que se encuentra el reloj en cada momento (véase figura 4.21). Nótese que el diseño de la interfaz y la integración con ICARO-T se han realizado siguiendo el mismo procedimiento que anteriormente se ha descrito. Evidentemente, también ha sido necesario dar de alta el recurso Reloj en el fichero de despliegue de la aplicación. Figura 4.21. Interfaz de la aplicación Reloj 93 4.3. Pruebas Las pruebas de la aplicación han estado presentes desde los primeros pasos de la implementación. Por una parte, se han efectuado pruebas de complejidad creciente para asegurar el funcionamiento correcto de cada módulo desarrollado, además de comprobar la correcta coordinación e interacción entre módulos. Por otra parte, se han realizado pruebas para comprobar que se alcanzan los objetivos globales del sistema, además de los objetivos propios de cada agente. Los errores más comunes detectados durante la realización de las pruebas se muestran a continuación: - Un agente no recibe un evento enviado por otro agente o un recurso. - Un recurso no efectúa la acción ordenada por un agente. - Un evento no se produce. - Un evento se produce demasiado pronto o llega tarde a su receptor. - La interfaz gráfica no se muestra como es debido. - Errores de coordinación del reloj. Como puede apreciarse, los principales errores tienen que ver con el uso incorrecto de la infraestructura ICARO-T, errores de relevancia leve que se han solucionado modificando el código tras revisar el manual correspondiente y algunos ejemplos de uso. Otros errores, como los de coordinación, se han producido como consecuencia de la ejecución paralela de múltiples hilos. Se debe decir que el uso de ICARO-T, junto con una metodología sólida y efectiva como es VigilAgent, han simplificado enormemente la fase de desarrollo de código, ya que ésta se reduce a la codificación manual de la comunicación entre agentes, el desarrollo de interfaces gráficos y el acceso a bases de datos. 94 5. CONCLUSIONES Y TRABAJOS FUTUROS Antes de comenzar a describir las conclusiones obtenidas tras finalizar este proyecto, resulta oportuno comentar las medidas obtenidas referentes al tiempo de desarrollo. 5.1. Métricas Durante la realización del proyecto se ha ido documentando el tiempo invertido en cada una de las fases del desarrollo con el fin de obtener conclusiones acerca del desarrollo de SMA mediante la metodología VigilAgent. Resulta de gran importancia conocer el coste de cada una de las actividades realizadas para saber qué punto del desarrollo nos ofrece ventajas y dónde se deben centrar los esfuerzos para reducir los costes en futuros proyectos. En la figura 5.1 se muestra, en orden horario, el tiempo empleado para cada fase del proyecto, siguiendo la leyenda adjunta, cuyos ítems se explican a continuación. - Investigación en SMA: estudio e investigación del estado del arte en SMA, así como de las metodologías existentes para el desarrollo de SMA, en especial las metodologías Prometheus, INGENIAS y VigilAgent. - Investigación en ICARO-T: estudio e investigación de la infraestructura ICARO-T. - Investigación en entrada/salida: investigación de sistemas automáticos de entrada/salida de humanos, así como sensores y redes de sensores. - Especificación del sistema: primera fase de desarrollo del sistema siguiendo la metodología VigilAgent. - Diseño arquitectónico: segunda metodología VigilAgent. - Diseño detallado: tercera fase de desarrollo del sistema siguiendo la metodología VigilAgent. - Implementación: cuarta fase de desarrollo del sistema siguiendo la metodología VigilAgent. - Base de datos: creación de la base de datos de usuarios para el acceso y modificación por parte de la aplicación en desarrollo. - Despliegue: quinta y última fase de desarrollo del sistema siguiendo la metodología VigilAgent. - Pruebas: realización de pruebas de la aplicación. - Documentación: generación de la presente memoria del proyecto. fase de desarrollo del sistema siguiendo la 95 Investigación en SMA Investigación en ICARO-T 8% 20% 7% 3% Investigación en entrada/salida 3% 1% 9% 1% Especificación del sistema Diseño arquitectónico Diseño detallado Implementación 13% 23% Base de datos Despliegue 12% Pruebas Documentación Figura 5.1. Tiempo de desarrollo del proyecto por fases El tiempo total empleado en el proyecto se estima en 384 horas, las cuales se han repartido en el desarrollo de cada una de sus fases. Se ha invertido un 18% del tiempo en investigación y estudio (investigación en SMA, investigación en ICARO-T e investigación en entrada/salida). Durante estas fases se ha han estudiado los fundamentos de los SMA, las metodologías Prometheus, INGENIAS y VigilAgent, además de la infraestructura ICARO-T. También se ha investigado en materia de sistemas de control de entrada/salida y tipos de sensores utilizados en dicho ámbito. Se puede considerar que el tiempo invertido en investigación en SMA, así como el aprendizaje de la metodología VigilAgent, es algo elevado, sin embargo, esta inversión se compensa enormemente en tiempo de implementación, como se comenta más adelante. Tras finalizar la fase de investigación se ha empleado un 34% del tiempo en la especificación y diseño de la aplicación (especificación del sistema, diseño arquitectónico y diseño detallado). Durante estas fases se han seguido los pasos y recomendaciones que hace VigilAgent, facilitando considerablemente la identificación de entidades y la creación de relaciones. La fase de implementación ha necesitado solamente un 23% del tiempo total de desarrollo. Esto se debe a que la generación automática de código permite obtener el código de la infraestructura a partir del diseño obtenido en las tres primeras fases de la metodología. De esta manera, la fase de implementación se reduce a completar los métodos para los que se han creado automáticamente las cabeceras, crear los interfaces gráficos y establecer el acceso a bases de datos. ICARO-T ofrece al desarrollador un sistema de intercomunicación entre entidades, gestión automática para la creación de agentes y recursos, control de eventos y coordinación entre entidades, reduciendo el tiempo de implementación considerablemente. 96 En el gráfico, también se puede observar que la base de datos ha supuesto un 1% del coste en tiempo. Esto es debido a su sencillez, de la misma manera que la configuración del despliegue sólo ha necesitado de otro 1%, empleado en la realización de algunos ajustes en el código generado automáticamente. Las pruebas, realizadas a medida que se iba completando el código, han supuesto un coste del 3% del tiempo total. Por último, ha sido necesario invertir un 20% en la realización de la presente memoria de proyecto. En figura 5.2 se muestra el tiempo requerido para implementar cada uno de los módulos que componen el sistema. Cada módulo se considera como el conjunto que forman la suma de sus partes (por ejemplo, el módulo Lector está formado por el agente agLector, el recurso asociado al agente acLector y la interfaz gráfica del lector InterfazLector). Se puede observar que el módulo Contacto ha requerido mucho más tiempo que otros módulos (35% del total). Esto se debe a que dicho módulo participa en todos los procesos de funcionamiento del sistema, siendo más complejo que el resto de módulos. Sin embargo, el módulo Puerta ha necesitado tan sólo un 5% debido a un comportamiento mucho más básico y a la falta de una interfaz gráfica. El módulo Reloj por su parte, ha necesitado un 21% del tiempo ya que ha sido necesario integrarlo con el módulo Lector. Por último, se debe comentar que habiendo trabajado en un inicio de este proyecto con Prometheus y JACK, el uso de VigilAgent ha significado una efectiva reducción del tiempo de trabajo. Se puede afirmar que la implementación mediante la generación automática de código para ICARO-T resulta más sencilla que mediante JACK, por lo que la etapa de aprendizaje se hace más corta, se reduce el tiempo de implementación y se invierte menos tiempo en la resolución de errores. 18% 21% Módulo Lector 5% Módulo Puerta Módulo Infrarrojo 10% 11% Módulo Contacto Módulo Centralita Módulo Reloj 35% Figura 5.2. Tiempo dedicado a la implementación de cada módulo 97 5.2. Conclusiones Como resultado de este trabajo se ha diseñado y desarrollado un sistema software basado en organizaciones de agentes que permite simular el funcionamiento de un sistema inteligente de control para la entrada/salida de humanos a/de un recinto cerrado. Para obtener este sistema se ha utilizado la metodología VigilAgent, especifica para el desarrollo se SMA orientados a la vigilancia. Esta metodología integra, como se ha explicado a lo largo de la presente memoria, las metodologías Prometheus e INGENIAS en las etapas de diseño, realizando finalmente la implementación del software sobre la plataforma ICARO-T. Este método de trabajo ha proporcionado consistencia desde la captura de requisitos a la etapa de diseño detallado, que se efectúan siguiendo las recomendaciones proporcionadas por la metodología. De la misma manera, la utilización de la infraestructura ICARO-T ha proporcionado robustez arquitectónica como base para la obtención del producto final. Además, esta infraestructura ha permitido centrar los esfuerzos en el desarrollo de las funcionalidades deseadas para el sistema, evitando el gasto que conlleva implementar los mecanismos propios de una organización de agentes (por ejemplo, la gestión para la creación de agentes y recursos y el subsistema de comunicación entre entidades). Se ha podido comprobar una gran flexibilidad de trabajo, permitiendo incluso dar marcha atrás en la etapa de implementación, regresando al diseño detallado sin perder el código ya desarrollado. Este trabajo se ha realizado para satisfacer los objetivos descritos en el capítulo uno, por lo que resulta interesante comentar en qué grado se han satisfecho dichos objetivos a la finalización del proyecto. Estudio de los Sistemas Multi-Agente. Se ha investigado qué es un agente, en qué consiste un SMA y qué aplicaciones tiene, tratando de confirmar la viabilidad para el desarrollo de sistemas de control y vigilancia. Además, la labor de investigación ha permitido establecer una base para continuar con el estudio de metodologías de desarrollo de SMA. Conocimiento de la Ingeniería del Software Orientada a Agentes (AOSE). Se han estudiado diferentes metodologías para el desarrollo de SMA centrando los esfuerzos en Prometheus e INGENIAS, bases de la metodología VigilAgent. Estudio de sistemas de control para la entrada y salida. Se ha investigado sobre el estado del arte en sistemas de control de entrada/salida de humanos para adquirir los conocimientos necesarios para el desarrollo de este proyecto. Investigación en sensores aplicados a la vigilancia y control automáticos. Se ha indagado en los tipos de sensores más utilizados en los sistemas de vigilancia y 98 control automáticos, proporcionando la idea de utilizar sensores de infrarrojo para la detección de personas y sensores de contacto para las puertas. Prevención de situaciones anómalas en el funcionamiento del sistema. A partir de los conocimientos adquiridos se han abordado un conjunto de situaciones anómalas que pueden producirse en un sistema de control de entrada/salida de humanos. Concretamente se han tratado el caso de tailgating y el bloqueo de puertas. Toma de decisiones y previsión de sus efectos durante las fases de diseño de software. Realizar minuciosamente el diseño de la aplicación ha resultado de suma importancia para evitar problemas en la fase de implementación. Integración de las metodologías Prometheus e INGENIAS para el diseño de software orientado a agentes. Se ha seguido el procedimiento propuesto en VigilAgent para la integración de las metodologías Prometheus e INGENIAS. De esta manera se ha podido obtener un modelo en INGENIAS equivalente al obtenido inicialmente en Prometheus. Conocimiento de la plataforma ICARO-T. Los conocimientos adquiridos sobre ICARO-T han permitido realizar el despliegue del sistema con éxito, así como aprovechar las ventajas que ofrece relativas a la organización de agentes. Procesos de intercomunicación entre agentes. ICARO-T ha evitado tener que implementar manualmente un subsistema de intercomunicación entre entidades. Además, ha permitido poner en práctica los procesos de intercomunicación entre agentes tal y cómo se han definido en el diseño. Implementación del software siguiendo los modelos definidos en el diseño. Se ha conseguido desarrollar un sistema acorde con los modelos especificados desde las primeras etapas del diseño y que proporciona trazabilidad desde la primera fase del proceso de desarrollo. Adición de un nuevo módulo al sistema software terminado. Una vez completado el sistema se ha vuelto a la etapa de diseño para incorporar la identificación de usuarios de forma automática. Gracias a la flexibilidad que ofrece VigilAgent en este aspecto no se han producido efectos negativos en el sistema. El nuevo módulo ha dotado al sistema de mayor libertad a la hora de controlar la simulación sin crear conflictos con las especificaciones de diseño originales. Documentación del proceso de desarrollo de software. El resultado final ha sido la presente memoria del proyecto. 99 A la vista del grado de satisfacción alcanzado en este proyecto, y tras haber comprobado la viabilidad y ventajas de VigilAgent para el desarrollo de sistemas de vigilancia basados en organizaciones de agentes, se puede augurar un alto grado de éxito en futuros desarrollos basados en esta metodología. 5.3. Trabajos futuros El sistema desarrollado puede admitir algunas ampliaciones y modificaciones con el fin de mejorar su funcionamiento, y por lo tanto, utilidad a la hora de proporcionar resultados basados en las simulaciones efectuadas. Gracias a la utilización de la metodología VigilAgent se garantiza la posibilidad de efectuar modificaciones y extender la funcionalidad de una aplicación basada en agentes. A continuación se proponen algunas mejoras para el sistema. Una primera mejora podría consistir en poder definir el despliegue dinámicamente, de forma que el usuario pudiera definir el número de módulos de entrada o salida al lanzar la aplicación. Esta mejora conllevaría la adaptación de los interfaces gráficos en tiempo de ejecución, mostrando en centralita únicamente los módulos definidos, así como las ventanas asociadas a los sensores. Otra mejora podría ser la detección de nuevas situaciones anómalas, como por ejemplo, la detección de piggy-backing. Esta situación se da cuando un usuario autorizado introduce su identificación para que una tercera persona entre o salga del recinto. Un caso concreto de piggy-backing podría ser aquel en el que un usuario autorizado se identifica desde el interior del recinto para que otra persona no autorizada pase a través del módulo desde el exterior. Este caso necesitaría que los módulos permitieran la entrada y la salida a la vez, característica que también sería interesante contemplar como mejora. También resultaría interesante incluir en la interfaz del módulo Centralita un mapa para mostrar gráficamente los módulos de entrada y salida, así como su distribución en el recinto, indicando el estado de las puertas y las situaciones anómalas detectadas. Esta mejora haría más fácil la visualización de toda la simulación. Una última mejora podría consistir en la provocación automática de situaciones anómalas, ampliando la mejora descrita en el apartado 4.2. 100 6. ANEXO: CONFIGURACIÓN Y USO 6.1. Configuración de la aplicación Para el funcionamiento correcto de la aplicación es necesario instalar el software proporcionado junto a la presente memoria y realizar una serie de configuraciones en el equipo, tal y como se detalla a continuación. Software proporcionado: Aplicación ICARO-T (ControlES.rar) Apache Ant 1.7.1 (apache-ant-1.7.1-bin.rar) Jdk 1.6.16 (jdk-6u16-windows-i586) Pasos para instalar, configurar y ejecutar el software: 1. Descomprimir el archivo de la aplicación en el directorio deseado (Ej. C:\ControlES) 2. Descomprimir la herramienta Apache Ant en el directorio deseado (Ej. C:\apache-ant1.7.0). 3. Instalar la herramiento Jdk en el directorio deseado (Ej. C:\jdk1.6.0_16). La estructura de directorios propuesta se muestra en la figura 6.1. 4. Crear un DNS de sistema con los valores que se encuentran en el archivo “DespliegueDNS5modulos.xml” del directorio de la aplicación “…\ControlES\ICAROTCode\config\icaro\aplicaciones\descripcionOrganizaciones”. Este paso se debe realizar de la siguiente manera (partiendo de un sistema operativo Windows XP o Vista): 1.1. Acceder a Panel de control Herramientas administrativas Origenes de datos (ODBC). 1.2. Crear un DNS de sistema de nombre “TablaTickets”. 1.3. Configurar la ruta de acceso a la BDD como “…\ControlES\BDTickets.mdb”. 1.4. Configurar las opciones avanzadas con el nombre de inicio de sesión “usuario1” y la contraseña “contraseña1”. 5. Acceder al directorio “…\ControlES\ICAROTCode\bin” y editar el archivo “Despliegue 5 modulos.bat” ajustando las rutas conforme a la instalación realizada de Ant y Jdk. 101 6. Lanzar la aplicación mediante el ejecutable “Despliegue 5 modulos.bat” recién editado. Figura 6.1. Estructura de directorios propuesta 6.2. Uso de la aplicación Una vez lanzada la aplicación aparece en primer lugar el recurso de trazas, posteriormente las ventanas correspondientes a cada uno de los módulos y finalmente la ventana correspondiente a la centralita. Se debe esperar a que la ventana CENTRALITA (véase figura 6.2) indique la configuración de cada uno de los módulos monitorizados, de modo que sean conocidos los que permiten la entrada de usuarios al recinto y los que permiten la salida. A partir del instante en el que la ventana de centralita describe textualmente que las cinco puertas se encuentran cerradas es posible interactuar con la aplicación. A continuación, en la figura 6.2, aparecen resaltadas en rojo las zonas de la ventana que han sido nombradas en el texto, al igual que se hace en figuras sucesivas a lo largo de la presente sección. Figura 6.2. Ventana CENTRALITA 102 Para introducir un ticket en el lector L 110 de forma manual basta con escribir un número de ticket (del uno al diez) y pulsar el botón Insertar Ticket (figura 6.3). Si el ticket es válido se ilumina el led del lector en color verde y únicamente falta esperar a que la puerta se encuentre abierta para provocar cualquiera de las dos acciones anómalas que detecta el sistema. Figura 6.3. Ventana L 1 Para bloquear la puerta basta con pulsar el botón U-Bloquear del sensor de contacto C 1 (véase figura 6.4), provocando el bloqueo de la puerta, tal y como muestra su led inferior, que cambia del color blanco al negro. Figura 6.4. Ventana C 1 Tras el bloqueo es posible atravesar la puerta ilegalmente mediante el botón “Atravesar Puerta” del sensor infrarrojo IR 1 (véase figura 6.5). El parpadeo en negro del led indica que se ha atravesado la puerta, hecho que muestra el cuadro de texto de la centralita (tailgating detectado). Tras esta acción es posible desbloquear la puerta o continuar introduciendo personas en el recinto. Una vez desbloqueada la puerta y, tras unos instantes, la puerta volverá a encontrarse cerrada permitiendo la identificación de un nuevo usuario en dicho módulo. Se debe aclarar que también puede provocarse la situación de tailgating 10 Las ventanas correspondientes a los dispositivos que conforman un módulo de entrada o salida se distinguen por su inicial (L para el lector, C para el contacto e IR para el infrarrojo). Esta inicial se acompaña de un número que indica a qué módulo pertenecen (valores del uno al cinco). Así pues, el módulo uno dispone de las ventanas L 1, C 1 e IR 1, correspondientes a los dispositivos lector, contacto e infrarrojo, respectivamente. 103 aprovechando el instante de tiempo en que la puerta permanece abierta para dejar paso al usuario, pero este método requiere pulsar el botón de bloqueo en el momento preciso. Figura 6.5. Ventana IR 1 Otra manera de interactuar con la aplicación consiste en simular la entrada y salida de usuarios mediante el botón Simular que muestra la ventana Reloj (figura 6.6). Esta opción permite al usuario de la aplicación concentrarse en provocar situaciones anómalas. Figura 6.6. Ventana Reloj Por último, comentar que pueden deshabilitarse varios módulos de la aplicación mediante los botones Bloquear puerta que posee la ventana CENTRALITA (Figura 6.7). Esta acción solamente se puede realizar cuando el estado de la puerta es “CERRADA”. Figura 6.7. Detalle del Modulo 1 104 7. BIBLIOGRAFÍA - José Ignacio Armesto Quiroga. Instalación de Sistemas de Automatización y Datos. Departamento de Ingeniería de Sistemas y Automática, Universidad de Vigo, 2007. - Camilo Andrés Benito Rojas y Dulce María Valerón Almazán. Doctoris. Proyecto Fin de Máster, Departamento de Sistemas Informáticos y Programación, Universidad Complutense de Madrid, 2009. - José María Fernández de Alba López de Pablo. Talking Agents: Arquitectura para Sistemas de Agentes Conversacionales. Proyecto Fin de Máster, Departamento de Sistemas Informáticos y Programación, Universidad Complutense de Madrid, 2009. - Antonio Fernández-Caballero y José M. Gascueña. Sistemas Multi-Agente. Transparencias de la asignatura, Departamento de Sistemas Informáticos, Universidad de Castilla la Mancha, 2009. - Rubén Fuentes Fernández, María Guijarro, Gonzalo Pajares. A Multi-Agent System Architecture for Sensor Networks. Sensors, 9, 10244-10269, 2009. - Francisco J Garijo, Felipe Polo y Damiano Spina. Manual de uso ICAROMini v1.1. 2009. - José M. Gascueña. Modelado con INGENIAS para generar código para ICARO-T. Transparencias, Departamento de Sistemas Informáticos, Universidad de CastillaLa Mancha, 2009. - José M. Gascueña. VigilAgent: Una metodología basada en agentes para el modelado y la implementación de sistemas de vigilancia multisensoriales. Tesis Doctoral, Departamento de Sistemas Informáticos, Universidad de Castilla-La Mancha, 2010. - José M. Gascueña, Antonio Fernández-Caballero, Francisco J. Garijo. Using ICARO-T Framework for Reactive Agent-Based Mobile Robots. 8th International Conference on Practical Applications of Agents and Multi-Agent Systems (PAAMS’10). Advances in Intelligent and Soft Computing. Springer, pp. 91-101, 2010. - Jorge Gómez Sanz. Modelado de Sistemas Multi-Agente. Tesis doctoral, Departamento de Sistemas Informáticos y Programación, Universidad Complutense de Madrid, 2002. 105 - Jorge Gómez Sanz y Juan Pavón Mestras. Desarrollo de Sistemas Multi-Agente con INGENIAS. Transparencias, Departamento de Sistemas Informáticos y Programación, Universidad Complutense de Madrid. - The Kaba Group. Productos y soluciones. Web disponible en http://www.kaba.es/, 2010. - Lin Padgham y Michael Winikoff. Developing Intelligent Agent Systems: A Practical Guide. John Wiley and Sons, 2004. - Ling Padgham, John Thangarajah y Paresh Paul. Prometheus Design Tool Version 2.5. User Manual. RMIT Agents Group, web disponible en: http://www.cs.rmit.edu.au/agents/pdt/ - Álvaro Rodríguez Pérez. Asistente para la Gestión de Organizaciones de Agentes Software. Proyecto Fin de Máster, Departamento de Sistemas Informáticos y Programación, Universidad Complutense de Madrid, 2009. - Meritxell Vinyals, Juan A.Rodríguez Aguilar, Jesús Cerquides. A Survey on Sensor Networks from a Multi-Agent Perspective. The Computer Journal, Febrero de 2010. 106