Integración de Laboratorios Remotos en emersion Héctor Vargas.- Departamento de Informática y Automática Universidad Nacional de Educación a Distancia Noviembre - 2007
Contenido Como construir los laboratorios remotos de manera sistemática (nuestra experiencia Ejs/LabVIEW) Estructura de comunicación Implementación usando Ejs y LabVIEW Documentación a preparar para los laboratorios Organización de la documentación Plantillas web Integración de los laboratorios en emersion Recursos a enviar por los sitios remotos Pruebas remotas Control de accesos Sistema de reservas (en desarrollo) Autenticación
Visión General
Laboratorios Remotos Laboratorios remotos usando Ejs/LabVIEW Ventajas de usar ambas herramientas de software: Posibilidad de generar agradables simulaciones interactivas en Java junto a la flexibilidad que LabVIEW provee para conectar con instrumentación externa. Es posible transparentar el proceso de crear laboratorios virtuales y remotos de control ocultando los detalles de implementación TCP/IP. Cliente Internet TCP/IP Servidor Easy Java Simulations Generador de aplicaciones Java Paradigma Modelo, Vista y Controlador. Applets Java embebidos en páginas HTML. LabVIEW Aplicación servidor (basado en TCP/IP). Adquisición de datos y control de lazo cerrado. Intercambio de datos con el cliente Ejs.
Laboratorios Remotos Estructura de comunicación Intercambio continuo de vectores de control y estado entre el cliente Ejs y el servidor LabVIEW usando sockets TCP/IP. Conocimiento de uso de Sockets TCP/IP en Java y la librería de bloques comunicación TCP de LabVIEW. Ejs LabVIEW Transmisor Receptor Vector de Control Enlace TCP/IP Vector de Estado Receptor Transmisor ejecutando el lazo de Control RT
Laboratorios Remotos Implementación tradicional (Servidor en LabVIEW) Pseudo código
Laboratorios Remotos Implementación tradicional (Cliente en Ejs)
Laboratorios Remotos Nuevo esquema de implementación (en desarrollo) Métodos internos en Ejs para manejar la conexión con el servidor. Encapsulamiento de los hilos analizador de Comandos y Transmisor en un módulo genérico de LabVIEW. Ejs LabVIEW Transmisor Receptor Enlace TCP/IP Asincrónico Analizador Comandos Transmisor ejecutando el lazo de Control
Laboratorios Remotos Servidor Analizador de comandos y transmisor JiL Server implementa los módulos Analizador de Comandos y Transmisor. JiL Server incluye todos los métodos para interpretar y ejecutar comandos entrantes desde Ejs y enviar las respuestas asociadas a estos comandos. Panel frontal de JiL Server. JiL Server usa la característica VI Server de LabVIEW
Laboratorios Remotos Servidor Desarrollo del VI de control local Esta parte del servidor es generada por el desarrollador siguiendo la estructura típica de implementación de lazos de control en LabVIEW. JiL Server envuelve este VI con los métodos TCP/IP de comunicación para conectar con Ejs. Típico lazo de control en LabVIEW incluyendo hardware en el lazo.
Laboratorios Remotos Cliente Métodos internos en Ejs Retorno Métodos para controlar la conexión Retorno Métodos para establecer y obtener variables void void void _external.connect(): Conecta la aplicación Ejs a la fuente de datos a través de JiL Server. _external.disconnect(): Desconecta la aplicación Ejs desde la fuente de datos a través de JiL Server. _external.runvi(boolean arg): Ejecuta un VI de LabVIEW en dos modos de ejecución. Si arg es TRUE, el VI remoto debe finalizar su ejecución en una iteración del diagrama de bloques. Por otra parte, si arg es FALSE, el VI remoto será lanzado y ejecutado sin esperar a que éste finalice (intercambio continuo de datos con el servidor). void void void _external.setvalue(string arg1, boolean arg2): Escribe una variable TF de LabVIEW cuyo nombre es especificado en arg1 con el valor arg2. _external.setvalue(string arg1, int arg2): Escribe una variable I32 de LabVIEW cuyo nombre es especificado en arg1 con el valor arg2. _external.setvalue(string arg1, double arg2): Escribe una variable DB de LabVIEW cuyo nombre es especificado en arg1 con el valor arg2. void void boolean String _external.step(int arg): Realiza el intercambio asincrónico de datos entre Ejs y JiL Server. Este método debe ser usado en la evolución de Ejs. La entrada arg no es usada actualmente y está reservada para una futura característica. Por defecto, debe ser 1. _external.synchronize(): Envía los parámetros de control a JiL Server cuando el usuario interactúa con la vista Ejs. _external.getstatus(): Retorna el estado actual de la conexión TCP/IP con un verdadero o falso. _external.geterrormsg(): Retorna el último mensaje de error capturado durante la conexión como un string. void boolean int double String _external.setvalue(string arg1,string arg2): Escribe una variable ABC de LabVIEW cuyo nombre es especificado en arg1 con el valor arg2. _external.getboolean(string arg): Lee una variable TF de LabVIEW cuyo nombre se especifica en arg. _external.getint(string arg): Lee una variable I32 de LabVIEW cuyo nombre se especifica en arg. _external.getdouble(string arg): Lee una variable DB de LabVIEW cuyo nombre se especifica en arg. _external.getstring(string arg): Lee una variable ABC de LabVIEW cuyo nombre se especifica en arg.
Laboratorios Remotos Cliente Configurar la fuente de datos Configurar la fuente de datos. Conectar variables Ejs a variables LabVIEW. Usar los métodos internos para la lógica de conexión.
Resumen Resumen de pasos a seguir usando JiL Server Programar la simulación del sistema usando Ejs. Desarrollar un programa LabVIEW para controlar el sistema localmente. Localizar el programa LabVIEW anterior en el directorio provisto por JiL Server para las aplicaciones cliente y luego abrir e iniciar el servidor. Finalmente, modificar la versión virtual del laboratorio creado con Ejs para agregar la conexión con el servidor usando los métodos internos. Cliente Servidor Lazo de Control.vi JiL Internet
Ejemplos h 1 h 3 Simulación del sistema de tres tanques modo local Proceso real en el laboratorio Relación de variables Pump 1 Pump 2 Q 1 Q 2 A T 1 T 3 T 2 S n h 2 az Q 13 1 az Q 32 3 az Q 20 2 dh dt A 1 = Q1 Q 13 Q1 leak dh dt dh dt A 3 = Q13 Q 32 Q3leak A 2 = Q2 + Q32 Q 20 Q2leak Q ij = az S sgn( h h ) 2g h h i n 13 = az1s sgn( h1 h3 ) 2 i Q n g h h Q n g h h Q 32 = az 3S sgn( h3 h2 ) 2 20 = az 2 S n 2 gh 2 j i 1 3 j 3 2
Ejemplos El sistema heatflow Proceso real Proceso real en el laboratorio Relación de variables Ventilador (Vb) Calefactor (Vh) Ta Temperatura ambiente Flujo de Temperatura S1 S2 S3 x1 x2 x3 x3 (, V, ). T n = F V T a, x h b n modelo G( s) = T n V h () s () s = τ ( 1 + τ s) e d 3 ( 1 + τ s)( 1 + τ s) K p 1 2 s Modelo identificado - IDENT Tn: Temperatura en el sensor n. Vb: Voltaje aplicado al calefactor. Vh: Voltaje aplicado al calefactor. Ta: Temperatura ambiente. xn: Distancia desde el sensor n al calefactor. Tn (s): Temperatura en el sensor n. Vh (s): Voltaje aplicado al calefactor.
Documentación Organización de la documentación (plantilla web) Protocolo de Tareas Manual de la interfaz cliente Guión de Prácticas Anexos Versión PDF de cada página Protocolo de acceso Documentación de la práctica
Integración en emersion Recursos a enviar por los sitios remotos Protocolo de Tareas Manual de la interfaz cliente Guión de Prácticas Anexos Versión PDF de cada página Applet Java desarrollado con Ejs Pruebas de conectividad Integración del laboratorio remoto en emersion. Pruebas de acceso remoto.
Control de Acceso Sistema de reservas Estudiante Estudiante Estudiante Red UPC Red UMH Red 1. Applet Java de cada laboratorio 2. Web server Apache Tomcat 3. MySQL server 4. emersion Windows 2000 Server IP: 62.204.199.62/24 http://lab.dia.uned.es Red UAL Red UNILEON Windows O.S. IP: X.Y.W.Z/24 http://xywz.ual.es Red UPV Red UA Lazo de Control y Módulo de Comunicación Base de datos para reservas. accesslist
Control de Acceso Sistema de reservas (que hacer en los sitios remotos) Desarrollar el laboratorio virtual y remoto usando Ejs y LabVIEW sin considerar autenticación. Instalar MySQL Server y crear una instancia llamada netlab con sólo una tabla llamada accesslist. Esta tabla será escrita desde el servidor central con las nuevas reservas realizadas por un usuario. Por otro lado, será leída localmente por la aplicación LabVIEW para propósitos de autenticación. Agregar a la aplicación LabVIEW la lógica de autenticación requerida. Esto implica recibir el username y password desde Ejs, consultar la tabla accesslist de la BD netlab y, finalmente, dar acceso o no a la planta si el usuario cumple los requisitos. Para consultar la base de datos, la aplicación LabVIEW utiliza la librería gratuita LabSQL (http://jeffreytravis.com/lost/) para accesar MySQL. Agregar a la aplicación Ejs los métodos para autenticación.