Capítulo 8 Conclusiones y trabajo futuro 8.1. Conclusiones Las siguientes son las conclusiones obtenidas a lo largo de la realización del proyecto: Se ha desarrollado de manera exitosa un entorno de tiempo real que permite trabajar bajo el mismo esquema con simulaciones de modelos y datos obtenidos de experimentos reales. La posibilidad de representar los datos de la simulación y los datos experimentales en paralelo, hace a esta herramienta muy útil a la hora de establecer comparaciones. La interfaz gráca creada representa de manera clara el movimiento de los objetos, facilitando el análisis del comportamiento. La posibilidad de representar datos guardados en modo oine seleccionando sólo aquellos tramos de interés, añade versatilidad a la herramienta. El procedimiento para la obtención de código ejecutable en tiempo real se realiza de forma sencilla y sistemática con las herramientas que dispone MATLAB para tal n. Sin embargo, el proceso no es automático, por lo que se requiere que se genere de nuevo el código cada vez que se realice un cambio en el modelo. Mediante la incorporación del mando RC al entorno de simulación, es posible entrenar a pilotos con modelos matemáticos que previamente hayan sido ajustados para representar al prototipo real. 8.2. Trabajo futuro Las aplicaciónes generadas con RTW para ejecutar en tiempo real se basan en el siguiente esquema: 119 8.2. Trabajo futuro 120 main() { Initialization (including installation of rt_OneStep as an interrupt service routine for a real-time clock) Initialize and start timer hardware Enable interrupts While(not Error)&(time < final time) Background task (rt_OneStep) EndWhile Disable interrupts (Disable rt_OneStep from executing) Complete any background tasks Shutdown } rt_OneStep() { Check for interrupt overflow or other error Enable "rt_OneStep" (timer) interrupt ModelStep (Time step combines output, logging and update) } El programa principal, después de la inicialización, entra en un bucle innito a la espera de interrupciones. Estas interrupciones ocurren cada tiempo de muestreo especicado en el modelo. En la rutina de interrupción rt_OneStep, se llaman diferentes funciones que se encargan de calcular salidas (mdlOutputs ), actualizar estados (mdlUpdate ), calcular derivadas (mdlDerivates ), etc. Al compilar un modelo, RTW genera el código C de las funciones mdlOutputs, mdlUpdate, etc. traduciendo el diagrama de bloques. La estructura principal del programa esta implementada en un chero fuente de RTW que es independiente al modelo pero depende del tipo de target. Este chero fuente se incluye en la compilación y se enlaza junto con el código generado para formar la aplicación completa. 1 Si se compila un modelo seleccionando la opción para un target genérico , en la información de compilación se puede ver que se utilizan los siguientes cheros: Generados por RTW: modelo.c, modelo_data.c, rt_nonnite.c Librerías de RTW: rt_logging.c, grt_main.c, rt_sim.c El chero modelo.c es el que contiene todo el código traducido del modelo por RTW, mientras que grt_main.c es el que contiene la estructura principal del programa. Al ser un target genérico, grt_main.c sirve como plantilla para crear aplicaciones para diferentes sistemas operativos en 2 tiempo real . No ocurre lo mismo si se utiliza xPC target. Al compilar un modelo para xPC se utilizan los siguientes: Generados por RTW: modelo.c, modelo_capi.c, modelo_data.c, rt_nonnite.c Librerías de RTW: rt_logging.c, rt_logging_mmi.c, rtw_modelmap_utils.c, xpctarget.c, xpcim- ports.c, xpcPCFunctions.c La estructura principal del programa no se encuentra en ninguno de los cheros anteriores. Esto puede deberse a que el kernel de xPC está pensado para ejecutar exclusivamente aplicaciones 1 GRT target o Generic Real-Time 2 también conocidos como RTOS. target. 8.2. Trabajo futuro 121 generadas con Simulink, por lo que la estructura principal está predeterminada internamente. Al no tratarse de un RTOS convencional como, por ejemplo, RTLinux o QNX, no se pueden controlar aspectos relacionados con el kernel de tiempo real puesto que no se disponen de llamadas al sistema operativo. Sin embargo, se disponen de algunas funciones del kernel denidas en xpcimports.c que se pueden usar en cualquier aplicación para crear drivers especícos. Estas funciones se mencionan a continuación. Port I/O xpcInpB, xpcInpW, xpcInpDW -> I/O port input functions for byte, word, and double word accesses xpcOutpB, xpcOutpW, xpcOutpDW -> I/O port output functions for byte, word, and double word accesses PCI Conguration Information xpcGetPCIDeviceInfo -> Return information for PCI device xpcShowPCIDeviceInfo -> Display contents of PCIDevice structure Physical Memory xpcAllocPhysicalMemory -> Allocate physical memory xpcFreePhysicalMemory -> Free physical memory xpcReserveMemoryRegion -> Return virtual address that corresponds to physical address and mark region as readable/writable Time xpcGetElapsedTime -> Return time since system boot xpcSubtractTime -> Return dierence between two times Miscellaneous xpcBusyWait -> Wait for specied length of time in seconds xpcIsModelInit -> Return target application load state En [20], se puede encontrar una modicación de la plantilla grt_main.c y otros cheros relacionados con RTW para que se pueda disponer de QNX como target. Asimismo, en [21], se pueden encontrar los archivos necesarios para RTW que permiten disponer de RTLinux como target. Observando el código en ambos casos, se puede comprobar que las modicaciones incluyen llamadas al sistema 8.2. Trabajo futuro 122 3 que permiten interaccionar con el kernel de tiempo operativo o el uso de herramientas POSIX real. Teniendo en cuenta todo lo anterior, se proponen las siguientes líneas de extensión de este proyecto: 1. Análisis detallado del código para QNX target y RTLinux target con el n de comprender mejor su funcionamiento y las posibilidades de interacción de una aplicación cualquiera con diferentes RTOS. 2. Desarrollo de una interfaz entre Simulink y los RTOS equivalente a los bloques To xPC Target y From xPC Target, que permita el envío y recepción de información de la aplicación en tiempo real mediante una conexión TCP/IP. 3. Modicación del entorno para poder utilizar diferentes RTOS, eliminando así la dependencia exclusiva de xPC target. 3 POSIX es el acrónimo en inglés de Interfaz de Sistema Operativo Portátil basado en UNIX.