1 (RTW) Objetivo específico Generar un programa de control en tiempo real a partir de un diagrama de simulación utilizando el (RTW) Toolbox del Matlab, acortando de esta manera el proceso de desarrollo de software (prototipado rápido) 2 (RTW) Temas 1. Introducción 2. (RTW) 3. (RTWT) 4. MATLAB Compiler 1
3 Introducción El RTW y el RTWT son herramientas de MATLAB que facilitan el control en tiempo real desde el SIMULINK, acortando considerablemente el ciclo de desarrollo del software de control (prototipado rápido) y permitiendo hacer énfasis en el diseño El RTWT está basado en el El RTW permite generar código o un programa ejecutable (.exe,.dll) desde un diagrama de SIMULINK a diferentes plataformas: DOS, TORNADO, xpc, RTWT, otras En la mayoría de los casos, el diagrama de simulación de SIMULINK funciona como la interfaz de usuario (GUI) La diferencia consiste en que se debe trabajar en SIMULINK en modo externo 4 Introducción Proceso de desarrollo de prototipos 2
5 Introducción En el proceso de desarrollo de prototipos, una vez la simulación muestra los resultados esperados, se quita el modelo de la planta, dejando el regulador y demás bloques, y se adicionan bloques con los controladores de entrada y salida A partir del nuevo diagrama se genera el programa ejecutable, para el cual el diagrama de SIMULINK es la interfaz de usuario Bibliografía. Manuales de MATLAB en PDF: Real-Time Windows Target,, Writing S- functions, Target Language Compiler, MATLAB Compiler Esta idea se ilustra en los siguientes diagramas de SIMULINK 6 Introducción 1 Referencia PID Digital 1 s+1 Planta Scope 1 PID Digital Analog Output Analog Input Referencia Analog Output Analog Input Scope Recomendación: En los diagramas de simulación considere como planta todos los subsistemas (sensores, planta, actuadores, amplificadores, etc) desde la salida del convertidor D/A hasta la entrada del convertidor A/D 3
7 Generalidades El RTW permite generar código (portable, optimizado y personalizado) o un programa ejecutable (.exe o.dll) desde un diagrama de SIMULINK a diferentes plataformas y lenguajes: DOS, Tornado, xpc, Windows, Ada, C, otros Otros usos: aceleración de las simulaciones, protección de la propiedad intelectual (S-Function Target, Rapid Simulation Target), simulación en tiempo real y simulación HIV (hardware-in-the-loop) El SIMULINK funciona como la interfaz de usuario para monitoreo y ajuste de parámetros Requerimientos: MATLAB, SIMULINK y un compilador soportado (Visual C++, Borland C, LCC, Watcom) 8 Generalidades Acceso del RTW al Visual C++ 6.0: En AUTOEXEC.BAT (Para Windows anteriores a XP): SET MSDEVDIR="C:\Program Files\Microsoft Visual Studio\Common\MSDev98 Soporta sistemas de tiempo continuo, sistemas de tiempo discreto, sistemas híbridos, sistemas MF Convierte automáticamente los modelos de SIMULINK a código en C o Ada Para la generación de código Ada se requiere de la herramienta Ada Coder Para la generación de código a partir de diagramas de flujo (Stateflows) se requiere del Stateflow Coder 4
9 Generalidades En general, el RTW genera código para una plataforma diferente (target, sistema objetivo) a la que corre el MATLAB (host, sistema anfitrión). Existen excepciones como el RTWT y el GRT (self-targeting) Existen procedimientos para la generación de código, creación del ejecutable y transferencia de éste al target (ejemplo: xpc, Tornado) Al trabajar en modo externo es posible: monitorear las variables y ajustar los parámetros, mientras el programa se ejecuta en el target (se tiene una comunicación tipo clienteservidor vía TCP/IP, RS232 o Memoria Compartida) Tipos de target: Prototipado rápido Interfaz con SIMULINK Empotrado (productivo) Interfaz independiente 10 Relación del RTW con otros elementos 5
11 Ejemplo de target - xpc 12 Ejemplo de target - xpc xpc Target Block Library Version 2.0 Copyright 1996-2002 The MathWorks, Inc. A/D D/A Digital Input Digital Output Counter Watchdog Incremental Encoder LVDT Synchro Resolver RS232 GPIB CAN Thermo couple Signal Shared Conditioning Memory IP Carrier Misc. Asynchronous Event 6
13 Relación con el Simulink Plataformas que trabajan en modo externo: RTWT, (Windows como host y target), Tornado (VxWorks), xpc, Real-Time Linux Target (Linux como host y target) El SIMULINK junto con el RTW es un lenguaje de muy alto nivel (VHLL): los bloques de SIMULINK son los elementos básicos del lenguaje (gráfico) El generador de código se incluye en el RTW y es un compilador gráfico de última generación basado en diagramas de bloques Se genera un código en C o Ada de manera rápida y correcta, altamente legible y personalizado La Custom Code Library permite insertar código personalizado dentro del código fuente generado Estructura de programación Sólo soporta las S-functions escritas en C o Ada (C-code) El RTW utiliza el lenguaje TLC (Target Language Compiler) para obtener el código a partir del diagrama de simulación. TLC utiliza dos tipos de archivos (extensión.tlc), los cuales pueden personalizarse: System target file. Describe como se genera el código para un determinado target Block target file. Define el código para un modelo determinado El RTW utiliza plantillas.tmf para la construcción de ejecutables, dependiendo del target Una rutina make_rtw genera un archivo model.rtw y de ahí el model.mk a partir de la plantilla.tmf Del.MK se genera el ejecutable 14 7
15 Arquitectura RTW 16 Creación de nuevos targets Es posible personalizar la configuración del target y crear nuevos targets (Capítulo 17 del manual del RTW). Aplicaciones: Incorporar dispositivos personalizados Crear nuevos targets Configurar el proceso de construcción (build) para un nuevo compilador Formatos del código generado: Real-Time (rápido prototipado) Real-Time malloc (rápido prototipado) S-function (dlls, archivos MEX) Embedded C (para el RTW Embedded Coder Target) Ada (para el RTW Ada Coder Target) 8
17 Pasos para la construcción de un programa 1. Crear un directorio de trabajo con el modelo y seleccionarlo como directorio de trabajo. Se genera un subdirectorio con los archivos fuentes y otros archivos generados 2. Seleccionar un "fixed-step solver" Pasos para la construcción de un programa 3. Seleccionar el Target en RTW en Simulation parameters 18 9
19 Pasos para la construcción de un programa 4. Ajustar las opciones particulares y generales del RTW y del target Pasos para la construcción de un programa 5. Pasar al Modo Externo 6. Seleccionar las opciones deseadas del External Mode Control Panel (en el menú Tools) 20 10
21 Pasos para la construcción de un programa 7. Construir el ejecutable (build) a partir del modelo. Se debe reconstruir si se cambia la estructura del modelo 8. Transferir el ejecutable al target 9. Conectarse al Target (Connect to target en el menú Simulation). Permite la conexión con el programa target desde el host 10. Correr el Simulink en modo externo (Start). Si se seleccionan las opciones de Workspace I/O se guardarán las variables en el workspace del MATLAB NOTA: Existen diversos métodos para la optimización del código. Ver los Capítulos 8 y 9 del manual del RTW Creación de C-code S-functions para RTW El "MATLAB Compiler" genera código C o dlls, pero sin la posibilidad de pasar parámetros El RTW genera código C o DLLs a partir de un subsistema en un diagrama de SIMULINK (con S- function Target), pero con restricciones, pues no permite: MATLAB Fcn Block, M-file S-functions, Scope, To Workspace. Nota: dar valores en el Workspace a los parámetros ajustables Lo más indicado es escribir las funciones en C directamente, utilizando la plantilla sfuntmpl_basic.c o sfuntmpl_doc.c. Una vez creado el archivo *.c se genera un archivo *.dll (librería de enlace dinámico) con: mex archivo.c 22 11
23 Creación de C-code S-functions para RTW #define S_FUNCTION_NAME sfuntmpl_basic #define S_FUNCTION_LEVEL 2 #include "simstruc.h" static void mdlinitializesizes(simstruct *S) { } static void mdlinitializesampletimes(simstruct *S) { } static void mdlinitializeconditions(simstruct *S) { } static void mdloutputs(simstruct *S, int_t tid) { } static void mdlupdate(simstruct *S, int_t tid) { } static void mdlderivatives(simstruct *S) { } static void mdlterminate(simstruct *S) { } Opcional Opcional Opcional Opcional #ifdef MATLAB_MEX_FILE #include "simulink.c" #else #include "cg_sfun.h" #endif 24 Creación de C-code S-functions para RTW Aspectos a tener en cuenta: Con ssgetsfcnparam(s,n) se define el número de parámetros. N es un entero Cuando se pasa una matriz como parámetro ésta se almacena como un vector por columnas. Es decir: M = [a b; c d] se almacena como M = [a c b d] El índice del primer elemento de un vector es cero, como M[0] Supongamos que una función tiene dos parámetros: M = [1 2;3 4] y n = [5 2]. El siguiente código accede a ellos: 12
25 Creación de C-code S-functions para RTW int_t i,imax; real_t *n = mxgetpr(ssgetsfcnparam(s,1)); real_t *Ts = mxgetpr(ssgetsfcnparam(s,0)); imax = n[1]; for (i=0; i<imax; i++){ sssetsampletime(s, i, Ts[i]); sssetoffsettime(s, i, Ts[i+imax]);} 26 Creación de C-code S-functions para RTW Aspectos a tener en cuenta: El índice de un vector debe ser del tipo entero Parámetros admisibles: escalares, vectores o matrices Los parámetros, el vector de entradas, el vector de salidas y el vector de estados se pasan como punteros Por la razón anterior en la función mdloutputs se pueden actualizar al mismo tiempo el estado y las salidas Cuando una S-function tiene varios períodos de muestreo, es necesario realizar algunos cambios para que trabaje en un ambiente multitarea mdlupdate es opcional El siguiente código actualiza el estado y la salida al mismo tiempo 13
27 #define S_FUNCTION_NAME ejemplo #define S_FUNCTION_LEVEL 2 #include "simstruc.h" #define U(element) (*uptrs[element]) /* Puntero a la entrada */ #define TS(S) ssgetsfcnparam(s,0) #define N(S) ssgetsfcnparam(s,1)... static void mdloutputs(simstruct *S, int_t tid) { real_t *y = ssgetoutputportrealsignal(s,0); real_t *v = ssgetrealdiscstates(s); InputRealPtrsType uptrs = ssgetinputportrealsignalptrs(s,0); int_t i, posk, k; real_t *n = mxgetpr(n(s)); posk=n[0]; k = v[posk]; if (k == posk){ v[0] = U(0); for (i=1;i<posk;i++) v[i]=0.0; v[posk]=1.0; } else{ v[k]=u(0); v[posk]=k+1; } for (i=0;i<posk;i++) y[i]=v[i]; } 28 Bloques de SIMULINK DOS Library VxWorks Library Windows Target Create Your Own Asynchronous Interrupt Library S-Function Target 5.0.1 Copyright (c) 2002 by The MathWorks, Inc. 14
29 Generalidades RTWT es un sistema auto-dirigido (self-targeting), donde el host y el target están en el mismo computador Sistemas operativos soportados: Win 95, 98, NT, Win ME y Win XP Productos requeridos: MATLAB, SIMULINK, RTW y un compilador de C (Microsoft Visual o Watcom) Productos compatibles: Stateflow, Stateflow Coder, Dials & Gauges, DSP Blockset Instalación de Visual C++: >>mex -setup RAM: 32 MB o más 30 Aplicaciones y limitaciones Aplicaciones: Control en tiempo real Simulación en tiempo real con hardware en el lazo (hardware-in-the-loop o HIL) Educación Limitaciones: No soporta los siguientes bloques de SIMULINK: To File y bloques de graficación (con excepción de Scope) Uso de algoritmos de integración de paso fijo No están soportadas las M-code S-functions No están soportadas algunas tarjetas de adquisición de datos 15
31 Núcleo de tiempo real o "kernel" El RTWT utiliza un pequeño núcleo (kernel) de tiempo real para asegurar que las aplicaciones realmente se ejecuten en tiempo real (arranca cada vez que se inicia Windows) El núcleo tiene mayor prioridad que Windows, lo que permite darle a las aplicaciones de tiempo real la mayor prioridad posible En Win95 y Win98 el kernel es un VxD (controlador de dispositivo virtual) Instalación del kernel: >>rtwintgt install Multitarea: se asigna una tarea a los bloques con igual período de muestreo 32 Programación Un bloque con diferentes períodos de muestreo se ejecuta a un período base (no en multitarea), por lo que es necesario verificar cada período de muestreo Algoritmo de planificación: Rate-monotonic El RTWT requiere del RTW. El RTWT es un "target" del RTW que se encuentra en el mismo computador del "host" El RTWT tiene todas las restricciones del RTW, tales como la necesidad de C-code S-functions La comunicación entre el RTWT y la aplicación se realiza por medio de la interfaz de modo externo (external mode) del SIMULINK 16
33 Elementos básicos del RTWT 34 Librería RTWT 2.2 Analog Input Analog Input Analog Output Analog Output Digital Input Digital Input Digital Output Digital Output Counter Input Counter Input Encoder Input Encoder Input Other Input Other Input Other Output Other Output 17
35 Librería RTWT 36 Ejemplo 1 18
37 Ejemplo 2 38 Ejemplo 3 19
39 Proceso de desarrollo con el RTWT 1. Diseñar el sistema de control utilizando las diferentes herramientas del MATLAB y del SIMULINK 2. Ejecutar la simulación en tiempo de máquina (tiempo no real) y verificar que el diseño es correcto y los resultados son los esperados 3. Crear una aplicación en tiempo real con el RTW (generación de código y compilación) 4. Ejecutar la aplicación en tiempo real (el PC es el host y target) 5. Visualizar las señales y analizar los resultados Pasos para la ejecución de un programa 1. Seleccionar el método de simulación "fixed-step" 2. Quitar la planta y adicionar los bloques de entrada y salida 3. En el menú de simulación Parámetros de simulación RTW seleccionar (browse) como target el RTWT 4. Seleccionar los parámetros de la simulación (período de muestreo, Workspace I/O, Advanced, RTW) y del External Mode Control Panel 5. Construir el ejecutable (build) Se debe realizar este paso siempre que se cambie la estructura del modelo 6. Seleccionar el modo externo 7. Conectar al target 8. Ejecutar el programa (Start) 40 20
41 Pasos para la ejecución de un programa 42 Información del estado: >>rtwho 21
43 MATLAB Compiler Tipos de código Código fuente en C ó C++ para aplicaciones independientes. Se requieren las siguientes librerías: MATLAB C/C++ Math, MATLAB C/C++ Graphics Código fuente en C para la construcción de archivos MEX. Los archivos MEX (de extensión DLL en Windows) son subrutinas (generadas con la función MEX de MATLAB a partir de C o Fortran) que funcionan de manera idéntica a como lo hacen los archivos M C-code S-functions, a partir sólo de un bloque Fcn. No permite el paso de parámetros. No es compatible con RTW Creación de librerías de enlace dinámico DLLs 44 MATLAB Compiler Proceso de generación de archivos MEX (*.dll) 22
45 MATLAB Compiler Otras características Las limitaciones del compilador no permiten compilar los siguientes archivos: Scripts Archivos que utilicen objetos Archivos que utilicen eval o input Funciones internas del MATLAB Comando de MATLAB: mcc -<option> <file.m> Archivos generados: file.c, file.dll, file.h, file_mex.c, file.map otros.h De los archivos anteriores el único archivo necesario es el file.dll (archivo MEX en Windows) 23