Está en la página 1de 5

Programación de tiempo real.

Enero 2018
Grado en Tecnologías de Comunicaciones

Supervisión de un espacio aéreo.


Se quiere configurar la planificabilidad de una aplicación de tiempo real (ControlAereo) que supervisa la información
que llega desde los aviones que están volando por una determinada una zona aérea. La aplicación analiza:
1. Cada 5 segundos, la aplicación evalúa la posición relativa entre cada pareja de aviones. Si la distancia entre
dos aviones es inferior a DISTACIA_SEGURIDAD_m (=5000) la aplicación envía un mensaje de
PeligroColision. Si los aviones están en la proximidad (a una distancia menor de RADIO_AEROPUERTO_m 
(=20000) de un aeropuerto de un aeropuerto, no se genera esta alama.
2. Cada avión comunica su posición una vez cada 10 s. Cada 30 segundos la aplicación genera un mensaje de
AvionPerdido por cada avión que no haya comunicado su posición desde la verificación anterior.
3. Cada 60 segundos la aplicación ControlAereo transmite un mensaje LLegadaEstimada con una estimación
de la hora prevista de llegada de los aviones a loa aeropuertos que estén en la zona aérea. Esta estimación se
realiza en base a la posición del avión, del aeropuerto y de la velocidad calculada en base a las dos última
comunicaciones de posición.
Existe una infraestructura de gestión de la zona aérea denominada ServicioAereo que suministra todos los mensajes
de posición transferidos por los aviones a las aplicaciones, que como ControlAereo, se subscriben como clientes de
ella. La infraestructura proporciona también la localización de todos los aeropuertos situados en la zona aérea. Así
mismo la infraestructura ServicioAereo gestiona mensajes tales como PeligroColision, AvionPerdido y
LLegadaEstimada que son emitidas por la aplicación ControlAereo.

timeout

mssgAvion

ServicioAereo ControlAereo
peligroColision
(legado) avionPerdido (Aplicación tiempo real)
Zona aérea  LlegadaEstimada

La zona aérea, corresponde a una región circula de radio RADIO_ZONA AEREA (500 Km). El centro de la zona
aérea se considera como el origen del sistema de coordenadas. Los aviones entran y salen de la región de forma
autónoma y se desplazan por ella siguiendo una trayectoria fijada por el propio avión. Cada avión transmite
esporádicamente al servicio de control un mensaje con los siguientes datos:

Cuando sale de la zona aérea o llega al aeropuerto de destino, transmite un último dato y deja de comunicar.

Acceso al servicio de control aéreo.


La interfaz de acceso que ofrece el ServicioAereo se muestra en el diagrama de clases de la siguiente figura.
Clase ServicioAereo: Ofrece la interfaz pública con las que las aplicaciones acceden a la infraestructura de la zona
aerea. Su interfaz pública ofrece los siguientes métodos:
registraCliente(cliente:ClienteControlAereo) => Registra a un cliente. Esto significa que tras el registro, el
servicio transfiere al cliente todos los datos recibido de aviones, invocando el método nuevoDatoAvion que
tiene que ofrecer el cliente (por implemetar la interfaz ClienteControlAereo)
cancelaCliente(cliente:ClienteControlAereo) => Elimina de la lista de clientes del servicio de control aéreo
al cliente especificado.
peligroColision(avion1:String,avion2:String) => Se notifica al servicio de control aéreo la existencia de una
situación de peligro entre los dos aviones cuyo código de vuelo se pasan.
avionPerdido(avión:DatoAvion)=> Se notifica al servicio de control aéreo la perdida de contacto con un
avión que no ha anunciado su toma de tierra o salida de la zona aérea.
llegadaEstimada(aeropuerto:String, vuelo:String,horaLlegada:long) => Transfiere a un aeropuerto la hora
estimada de un vuelo destinado a él.
datosAeropuerto(código:String): DatoAeropuerto => Retorna la lozcalización geográfica del aeropuerto
cuyo código se pasa como parámetro. Si el aeropuerto no está en la zona aérea, retorna null.
Tipo de dato DatoAvion: Es una estructura con los datos que transmite el avión al servicio del espacio aéreo.
Tipo de datos DatoAeropuerto: Define la localización geográfica de un aeropuerto.
Interfaz ClienteControlAereo: Interfaz que debe estar implementada por el cliente que se registra en el Servicio de
control aéreos. Requiere que ofrezca el método nuevoDatoAvion(dato:DatoAvion) que es invocado por el servicio
de control aéreo para transferir los datos que recibe.
Diseño lógico de la aplicación
En el siguiente diagrama de clases se muestra el diseño lógico y concurrente de la aplicación:

«interface»
«eventHandler»   ClienteControlAereo
ServicioAereo
+nuevoDatoAvion(dato:DatoAvion)
+ registraCliente(cliente:ClienteControlAereo)
+ cancelaCliente(cliente:ClienteControlAereo)
 
+ peligroColision(avion1:String,avion2:String)
+ avionPerdido(avión:DatoAvion)
+ llegadaEstimada(aeropuerto:String,
vuelo:String,horaLlegada:long) -ca «main»«taskJob»
+datosAeropuerto(código:String): DatoAeropuerto ControlAereo 
«task» - actualiza()
+run()
«main» + main(args:String[*])
-sca + nuevoDatoAvion(dato:DatoAvion)
+ finaliza()
«task» -analizaPeligroColision()
«dataType» «task» -buscaPerdidos()
Ejecuta buscaPerdidos() 
DatoAvion «task» -estimaLlegadas()

+ codigo: String
«dataType»
+destino: String DatoAeropuerto -ebp «periodicExecutor»
+ posX: double
   EjecutorBusquedaPerdidos
+ posY: double + coordX: double
+ posZ: double + coordY: double
+ coordZ: double -eac
+ hora:long «periodicExecutor»
EjecutorAnalisisColision

- eel «periodicExecutor»
EjecutorEstimacionLlegadas
-aviones

Avion Ejecuta analizaPeligroColision()


-listaAviones «protected»
- dato: DatoAvion AvionesEnZona
- datoPrevio:DatoAvion *
«synchronized» + registraAvion(dato:DatoAvion) Ejecuta estimaLlegadas()
«synchronized» + copiaListaAviones(): List<Avion>
….. + finaliza()

El diseño lógico es muy simple, la clase EspacioAereo es la clase principal que contiene el método main() con el que
se ejecuta la aplicación, así mismo en su constructor se instancian los objetos agregados de las clases ServicioAereo y
AvionesEnZona. Define como elementos internos los ejecutores EjecutorBusquedaPerdidos,
EjecutorAnalisisColision y EjecutorEstimacionLlegadas que son activos y aportan los threads en cuyos métodos run()
ejecutan las tres tareas periódicas, y así mismo, define los métodos («task») que definen la actividad que se ejecutan
en estas tareas (analizaPeligroColision(), buscaPerdidos() y estimaLlegadas()). Así mismo define el método
nuevoDatoAvión() que invoca el thread del «eventHandler»ServicioAereo que se ejecuta esporádicamente cada vez
que se recibe el dato de un avión. La única interacción entre las tareas concurrentes se realiza a través de un objeto
«protected»AvionesEnZona que contiene los datos de los aviones de la zona aérea gestionados por la aplicación.
Diseño reactivo
El modelo reactivo de la aplicación contiene las cinco respuestas (transacciones) que se muestran en la siguiente
figura.

«sporadic»
minInterArr= 130 ms «GlobalDeadline»
avgInterArr=260 ms deadline=130 ms

NuevoDatoAvion actualiza()

ServicioControlAereo.thread

AvionesEnZona.mutex
registraAvion

«Periodic» copiaListaAviones
 

period= 30.0 s «GlobalDeadline»


deadline=30.0 s

BusquedaPerdidos    buscaPerdidos()

EjecutorBusquedaPerdidos.thread

«Periodic» «GlobalDeadline»
period= 5.0 s deadline=5.0 s

AnalisisColision analizaPeligroColision()

EjecutorAnalisisColision.thread

«Periodic» «GlobalDeadline»
period= 60.0 s deadline=60.0 s

EstimacionLlegadas estimaLlegadas()

EjecutorEstimacionLlegadas.thread
Documentación de partida:

En la página Moodel de la asignatura se encuentra el proyecto ControlAereo_TR.zip que contiene en su carpeta src el
código de la aplicación y en su carpeta MAST_Model el modelo MAST de la aplicación sin estimación de los tiempos
de las operaciones.

Trabajo que se solicita:

1º Completar el modelo MAST para el análisis de planificabilidad de la aplicación.

2º Haciendo uso de las herramientas del entorno MAST, determinar las prioridades que deben asignarse a los thread
de la aplicación para que la aplicación sea planificable.

3º Incluir en el código las sentencias que asignan las prioridades a los threads para que las respuestas de la aplicación
cumplan sus plazos temporales.

Hay que entregar:

El fichero .zip que resulta de exportar el proyecto Eclipse con el que se ha trabajado durante el examen. En él debe
encontrarse:

 El proyecto EspacioAereo_TR de la aplicación conteniendo:


o El modelo de análisis de planificabilidad EspacioAereo.xml que ha sido completado con los
resultados de la actividad 1º.
o El código de la aplicación planificada, esto es con las prioridades de los thread asignadas de acuerdo
con los resultados de las actividades 2ª y 3ª.
 El proyecto EspacioAereo_TR_medidas Instrumentado para medir los tiempos requeridos por el modelo y
que ha sido utilizado en la Actividad 1ª.