Este Blog es dedicado a la valoración y el desarrollo de las técnicas de mecatrónica aplicada a la supervisión, prueba, medición, simulación y control.
Esta vez, la conferencia no fue acerca del control y medición con LabVIEW, LabWindows/CVI o TestStand sino sobre los aceleradores de partículas en la medicina para el tratamiento del cáncer y especialmente las aplicaciones de la radiación de sincrotrón para la observación de las proteínas y sus diferentes mecanismos de funcionamiento al fin de usarlos en los futuros medicamentos activos a base de nanotecnología. De donde viene la idea de este tema? Me toco dar accesoria al sincrotrón “Soleil”, en el sur de París, manejado por el CNRS (centro nacional francés de investigación científica) y el CEA (comisión a la energía atómica) para optimizar mediciones en una línea de luz.
Conferencia “Acelerador de partículas: luces al futuro medical” durante la XXXII reunión de residentes y cirujanos pediatras egresados del Instituto Nacional de Pediatría y Amigos de España en México.
Los cirujanos pediatras mexicanos y españoles.
El sincrotrón “Soleil”
Es para esos tipos de instrumentos he dado la asesoría.
Aquí está una descripción rápida de las nuevas características y los cambios realizados en LabVIEW 2010 en comparación con la versión 2009, pero en términos de paletas de programación y control.
Programing: structures
Tenga en cuenta la migración de la estructura del elemento en el lugar (in place element) que ya estaba presente en la versión 2009, pero que estaba en la paleta de manejo de la memoria. Esta estructura es muy útil para optimizar el consumo de memoria, especialmente útil para aplicaciones embebidas (Compact FieldPoint o Compact RIO) y software que necesitan manipular una gran cantidad de datos para (lo que reduce el número de reasignaciones y una lectura fácil del diagrama).
Los iconos de las variables compartidas, variables global y local han cambiado un poco con un diseño más significativo.
Programing: numeric
Adición de la constante doble. Antes ese cambio, la única mañera de poner una constante de tipo doble fue de primero poner una constante de tipo entero y después cambiar la en doble. Ahora es directo, se ahora tiempo.
Programing: boolean
El icono de la constante de tipo booleano a cambiado: es mas compacto. Ahora se ve solamente T o F (antes T/F en todos los casos) eso permite de tener un diagrama que se lee mas fácilmente y se ahora espacio.
Programing: File I/O
Aquí es la paleta del manejo de archivos de tipo waveform que aparece. Es la copia de las mismas funciones que se encuentran en la paleta waveform. Entonces, ahora se encuentra en dos lugares: la paleta de archivos y la paleta waveform. La ventaja es que no se puede olvidar a donde esta, dependiendo del punto de vista del tipo de datos o de los que se produce: archivo.
La paleta de los archivos TDMS se enriquece con la adición de funciones avanzadas.
En la paleta de funciones de archivos avanzadas se encuentra ahora las librarías empacadas. Que es eso? Para los conocedores de del lenguaje C, las librarías empacadas tienen el mismo uso que las librarías estaticas .lib: son VIs compilados en un mismo archivo .lvlibp. Las aventajas son: se ahorra tiempo durante el proceso de compilación porque ya el archivo .lvlibp contiene VIs compilados (practico para las grandes aplicaciones), o para compartir funciones con sus colegas de mañera segura y fácil.
Programing: Dialog & user interface
La fusión errores (merge errors) ahora es una función y no un sub-VI. Ahora esa función acepta N entradas al igual que la función build array y además pienso que se ejecuta mas rápido que el VI. Aprovecho para destacar la importancia de la gestión de las errores: cuentas veces gane tiempo durante la fase de desarrollo y de mantenimiento para identificar la fuente de un bug.
Data communication
Adición las funciones de flujo de red son añadas a la paleta de comunicación de datos. Permiten la transferencia de waveform en continuo sin perdida de datos. Para otros tipos de datos que no necesitan eso rendimiento, consejo el uso de las variables compartidas.
Para los protocolos, el HTTP cliente es adicionado. Eso facilita la programación porque en las versiones anteriores, eso se programaba gracias a las funciones de bajo nivel de la paleta del protocolo TCP. Ahora es mas sencillo. Ejemplo de uso: dialogo para enviar o recibir datos como un mini servidor embebido en una tarjeta Ethernet o un servidor web embebido de un controlador lógico programable PLC distante.
He podido disfrutar de dar una conferencia a cerca de los sistemas industriales y científicos con las tecnologías de National Instruments durante el secundo congreso internacional de ingeniería en telemática de la Universidad Politécnica de Durango, México. Esta conferencia duro una hora para desarrollar el tema de los “Sistemas embebidos en LabVIEW orientados al monitoreo de variables” desde la introducción para describir lo que son el control, la supervisión, la simulación, la prueba y la medición, pasando por una demostración de programación con LabVIEW, una video en vivo con une cliente mío, el Instituto Raspail de París en Francia, para detallar su sistema frigorífico usando componentes de National Instruments y un software embebido en LabVIEW que he desarrollado, hasta una demostración de las capacidades de control a distancia de la maquina instalada en París desde México.
Parte 1/8: Introducción
Introducción de la conferencia para mostrar la evolución de los productos y su impacto en las tecnologías usadas para fabricarlos.
Parte 2/8: Control, Supervisión, Medición, Prueba, Simulación
Descripción de lo que son el control, la medición, la prueba y la simulación para la calidad en la industria y la investigación científica.
Parte 3/8: Ejemplos de sistemas
Ejemplos de sistemas de control, supervisión, prueba, medición, hechos con las tecnologías de National Instruments: LabVIEW, LabWindows/CVI o TestStand y hardware.
Parte 4/8: Video en vivo del sistema de París
Video en vivo desde París, Francia (Instituto Raspail) para describir la maquina de refrigeración a doble camarera con sistema de control y supervisión Compact Fieldpoint de National Instrument y su software embebido que he desarrollado en lenguaje Grafico de LabVIEW, con la muy amable participación del Ing. Daniel Garault director técnico del instituto, del Prof. Guy Marcaillou profesor de termodinámica y la Prof. Clarisse Mbobda Fonking profesora de física.
Parte 5/8: Detallado del sistema de París
Descripción del hardware del sistema embebido de la maquina de París: hardware Compact Fieldpoint y software desarrollado con LabVIEW Tiempo Real.
Parte 6/8: Introducción a LabVIEW
Demostración de programación de un generador de señales con LabVIEW.
Parte 7/8: Shared Variables
Presentación de las variables compartidas en el red con LabVIEW y demostración de control a distancia desde México de la maquina en París, Francia.
Parte 8/8: Web Server con LabVIEW
Descripción y demostración del Web Server de LabVIEW embebido en el controlador Compact Fieldpoint de National Instruments para tomar el control a distancia de la maquina desde el navegador.
National Instruments, actualmente el líder mundial en la instrumentación, la prueba y la medición, ofrece soluciones para el desarrollo de software en tres lenguajes diferentes: LabVIEW, LabWindows/CVI y Measurement Studio; y un otro software de desarrollo especializado: TestStand. Pero, estoy de acuerdo, puede ser difícil de elegir entre todas esas opciones, además para un neófito en este ámbito. Por eso voy a tratar de hacer una descripción corta de esos productos tanto de las diferencias que hay entre ellos que de los puntos fuertes de cada uno.
LabVIEW
LabVIEW es el producto el mas famoso de National Instruments desde 1984.
Uso: desarrollo de software orientado para la industria y la ciencia, por lo general en comunicación con instrumentos de medición, sensores y aparatos electrónicos para Windows, Unix, Linux o Macintosh, PDA (Windows Mobile y Palm OS), aparatos tiempo real (de NI), tarjetas FGPA (de NI).
Lenguaje: lenguaje G para Grafico. La programación se hace con iconos (que son funciones) que se ponen en un diagrama y esos iconos son vinculados con hilos (que son flujos de datos, variables).
Aventajas: el lenguaje G, totalmente grafico, permite el desarrollo muy rápido de software sin un conocimiento extensivo de la programación.
Uso: desarrollo de software orientado para la industria y la ciencia, por lo general en comunicación instrumentos de medición, sensores y aparatos electrónicos, para Windows, Unix o Linux y aparatos tiempo real (de NI) – desde la versión 9.0 para este ultimo punto.
Lenguaje: lenguaje C. LabWindows/CVI ofrece muchos asistentes para ayudar al desarrollo de interfaz gráfica de usuario, la declaración de variables, la inserción de funciones y estructuras en el código de fuente y la comunicación con los instrumentos, sensores y aparatos electrónicos.
Aventajas: el lenguaje C es un lenguaje de base conocido de la mayoría de los ingenieros y técnicos. Es un lenguaje famoso que permite usar códigos de fuente existentes. La programación se encuentra accesible gracias a los asistentes.
Measurement Studio
Measurement Studio es un paquete de clases et librarías similares a LabVIEW para Visual Studio.
Uso: desarrollo de software orientado para la industria y la ciencia, por lo general en comunicación con instrumentos de medición, sensores y aparatos electrónicos para Windows.
Lenguaje: lenguajes C++, C# y Visual Basic.
Aventajas: ayuda el desarrollo de software para la instrumentación y la medición con Visual Studio por conducto de sus librarías de funciones y sus objetos gráficos especializados.
TestStand
TestStand es un herramienta, o mas bien una serie de funcionalidades, o Framework, para facilitar el desarrollo de software de tipo secuenciador.
Uso: desarrollo de software de tipo secuenciador para la industria y la ciencia, por lo general para la medición y la prueba en Windows.
Lenguaje: compatibilidad con LabVIEW, LabWindows/CVI, Java, HTbasic y todos los lenguajes que producen DLL, EXE, componentes ActiveX y .NET. También TestStand tiene su propio lenguaje sencillo de script.
Aventajas: tiene todas las funciones requeridas para un secuenciador de pruebas; significa que es muncho tiempo ganado porque no ce necesita desarrollarlas si están. Ofrece, entre otras, las funciones siguientes: generación de informes, editor de secuencias, generación automatizada de código de fuente, conexión a bases de datos, paralelismo, componentes gráficos para el interfaz grafica de usuario, gestión de los derechos de los usuarios.
Fui invitado a dar una conferencia durante el SIECC 2009, Simposio Internacional estudiantil de Ciencias Computacional de en tres días, organizado por el Instituto Tecnológico de Durango, México.
El título de mi conferencia fue "La Mecatrónica en la calidad industrial y la investigación científica", donde expuso los temas de control, medición, prueba y simulación para sistemas cada vez más complejo en la investigación científica y la industria, con ejemplos de mi experiencia profesional.
Entre otros oradores, se podría contar con Leo Prieto (leo.prie.to), un chileno que es la cabeza del Fayerwayer.com primero sitio en América Latina, con 4 millones de visitantes por día, para hablar de la conectividad de hiperconectividad; Alvaro López Ortega (Octality), español, creador del servidor gratuito "Cherokee", para presentar los modelos de negocio aplicables a una empresa de desarrollo de código libre; Ricardo Meza, mexicano, miembro de Mozilla, para hablar de FireFox y del Open Source; Mauricio Pastrana, colombiano, para hablar de cuestiones económicas de las comunidades del web; Alejandro Martínez, mexicano, miembro de Microsoft, para presentarnos a las nuevas innovaciones tecnológicas de Microsoft y Carlos Montelongo para hablar de las aplicaciones JAVA. A continuación se muestra una foto de los conferencistas:
2009 LabVIEW acaba de salir (ten en cuenta que el número de versión es 9.0). Además de la noticia anunciada por National Instruments en su sitio web, yo quería hacer una reseña de la evolución en las paletas de controles de la interfaz gráfica y funciones para los diagramas. Aquí está el resumen (las nuevas funciones se enmarcan en rojo):
Novedades en los controles (interfaz gráfica)
Digital
Añadido del control de tipo embalse
Gráficos
Añadido de tuta de compas, ruta a barras de errores, ruta de pluma, matriz de rutas XY y añadido de las funciones dedicadas a gráficos 3D
Gráficos en 3D
Añadido de gráficos 3D de tipo nube, barras, circulares, columnas, cintas, contorno, campo vectorial, cometa, superficie, malla y cascada.
Novedades en las funciones (diagrama)
Programación, digital, punto fijo
Añadido de adaptador de punto fijo a entero, adaptador de entero a punto fijo
Programación, vector, matriz
nueva paleta con : dimensión de matriz, construir una matriz, redimensionar una matriz, transponer de una matriz, obtener la diagonal de una matriz, obtener elementos de una matriz, obtener una sub-matriz, definir una diagonal de matriz, definir elementos de matriz, definir una sub-matriz
Programación, cluster, clase y variant
Añadido de preservar la clase durante la ejecución
Programación, E/S en archivos, constantes de archivos
Añadido de obtener le directorio sistema y directorio de la aplicación
Programación, E/S en archivos, XML, parsor XML
Añadido de obtener el primer nodo correspondiente y obtener todos los nodos correspondientes
se puede ver que los iconos nuevo y cerrar han cambiando
Programación, E/S en archivos, TDM en continua
Añadido de TDMS – convertir el formato, crear informaciones de escala
Programación, control de aplicaciones, informaciones sobre el procesador
Nueva paleta con : información del procesador, numero de niveles de cache, dimensión del cache de datos
Programación, control de aplicaciones, control de la memoria
Añadido de nueva referencia de valores de datos, suprimir una referencia de valores de datos
Nueva paleta con: definir EDP, definir un dominio de EDP, definir la condición a los limites de una EDP, definir la condición inicial de una EDP, resolución de EDP, visual de EDP
Comunicación de datos, variable compartida
Añadido de funciones para simplificar el uso de variables compartidas: crear una conexión a la variable, leer una variable, escribir una variable, cerrar una conexión a una variable, nodo de propiedad de variable.
para las variables PSP: abrir y verificar la conexión de una variable, crear una conexión a una variable en fondo.
para las variables de E/S: lectura por escaneo de la variable, escribir por escaneo de la variable, lectura directa de la variable
Entradas/Salidas de medición, motor de escaneo NI
Nueva paleta con: sincronización con el motor de escaneo, obtener el periodo del motor de escaneo, definir el periodo del motor de escaneo, obtener el modo de escaneo, definir el modo del motor de escaneo, refrescar los módulos locales
Entradas/Salidas de medición, motor de escaneo NI, limitación
Nueva paleta con: activar las limitaciones de variables, desactivar las limitaciones de variables, borrar las limitaciones de variables, limitar una variable, cancelar una limitación de variable
Entradas/Salidas de medición, motor de escaneo NI, fallos
Nueva paleta con: obtener una lista de fallos, definir un fallo, borrar un fallo, borrar todos los fallos
Entradas/Salidas de medición, motor de escaneo NI, configuración de fallos
Nueva paleta con: definir una configuración de fallos, borrar una configuración de fallos, obtener todas la configuraciones de fallos
Ahora puede hacer uso de clases Java directamente a partir de secuencias de TestStand.
Sabemos que TestStand puede usar componentes de varios tipos: LabVIEW (VI), LabWindows/CVI (.c, .obj, .lib, .dll), DLL (para todos los lenguajes que pueden generar DLL: C + +, Pascal Object con Delphi, Visual Basic y otros ....), ActiveX (para todos los lenguajes compatibles). NET (con los lenguajes compatibles...) y HTbasic. Uno podría decir que estos adaptadores (adapters en Inglés) son principalmente de tecnologías de Microsoft. Opción comercial podríe ser, pero no estaría contando con la posibilidad de programar usted mismo, sobre todo que se puede seguir los ejemplos de adaptadores, mencionados anteriormente, que se suministran con TestStand.
En este sentido, un nuevo adaptador existe: el adaptador JAVA. Se compone de tres grupos:
StartStop: para iniciar y detener la máquina virtual Java (JVM);
Methods: para usar un método de una clase
Static methods: para usar un método de una clase estatica
El uso de los métodos permite los pasos siguitentes: Numeric Limit Test, String Value Test, Pass/Fail Test et Action.
Véase a continuación un ejemplo de una secuencia de prubas (en este caso de una tarjeta madre de un PC) escrito en Java (ver la carpeta Java en los ejemplos de TestStand).
Secuencia de prueba en JAVA en TestStand
Cabe señalar que los codigos de fuente de los adaptadores Java están escritos en C con LabWindows/CVI. La interfaz de configuración de la propiedades que sigue es, entonces, editable.
Propriedades de un pasos JAVA en TestStand
El adaptador JAVA es compatible con TestStand a partir 3.0, LabWindows/CVI a partir 6.0 y Java 2 version 1.4.
Las opciones de compilación son, muchas veses, un poco olvidadas durante el desarrollo de un programa, aunque son, como el código, muy importantes por las razones siguientes: permiten de configurar el nivel de análisis para la detecciones de errores del código y de la gestión de la memoria durante la ejecución en modo "debug", fijan las direcciones de memoria para la compatibilidad con otros componentes, como DLL. Así, la modificación de una opción puede cambiar, hasta no desplegar los mensajes de error del debugger de LabWindows/CVI. Tendríamos un comportamiento inestable de nuestro programa sin haber tenido advertencias durante la compilación o la ejecución en modo "debug". Al fin de ayudar ustedes durante sus inicios con LabWindows/CVI, le propone de configurar los "Build Options" del menú "Options" de la manera que sigue (captura de la pantalla de Build Options de LabWindows/CVI 9.0, la versiones anteriores tienen mas o menos las mismas opciones).
Se puede definir un código bueno en LabVIEW con varias características: antes de todo debe funcionar, fácil de leer y fácil de modificar para melojar su mantenimiento. Así pues, se buscara a estructurar el código y no lanzar en el diagrama sus ideas.
En este fin, usáramos las funciones de estructuras como las bucles FOR o WHILE, les condiciones, la estructura de eventos (para maneja las acciones de los elementos del interface gráfico como un clic en un botón) o las secuencias sin olvidar las decoraciones como los cuadros y textos para agregar comentarios. Pero también los sub-VI los cuales agrupen funciones, eso reducirá los diagramas, capitalizara las funcionalidades y sera mas fácil de distribuir esas funciones; ademas, eso permite al motor de LabVIEW una mejor gestión de la memoria durante la ejecución del programa.
Con la misma idea que para el historial de la versiones de LabVIEW, hago en Wikipedia el historial de las versiones de LabWindows/CVI (ver el articulo aqui):
1989: LabWindows 1.0, bajo DOS, primera versión pública
1991: LabWindows 2.0, bajo DOS, ayuda al desarrollo de interfaces gráficas de usuario
1994 : LabVIEW 3.0.1, primera versión en Windows NT
1994 : LabVIEW 3.1
1995 : LabVIEW 3.1.1, integración del Application Builder
1996 : LabVIEW 4.0
1997 : LabVIEW 4.1
1998 : LabVIEW 5.0, multitarea, contenedores ActiveX, asistente para la adquisición de dato (tarjetas (DAQ) et asistente para el control de instrumentos; primera versión en Linux
1999 : LabVIEW 5.1, primera versión para Linux, primera versión de LabVIEW RT (Real Time)
2000 : LabVIEW 6.0, controles gráficos en 3D, referencias de controles
2001 : LabVIEW 6.1, mejoramiento y correcciones
2003 : LabVIEW 7.0, VI Express
2004 : LabVIEW 7.1, traducción en francés, alemán et japones
¿Sabía que desde la versión 8.20 de LabVIEW, que salió en 2006, es posible programar con una arquitectura objeto? Se pueden así crear clases con sus propiedades y sus métodos, como en C++, Java, C#, pascal object (Delphi) y otros lenguajes evolucionados. Oigo algunos de ustedes decir "pero que eso nos aporta para el desarrollo de programas informáticos de prueba, medida y control? ". Bien es cierto que para un pequeño programa informático que hace una medida o varias medidas y un tratamiento simple, el lenguaje objetos no es el mejor… ¿seguro? se piensa siempre desarrollar el programa en "one shot" y se da muy a menudo cuenta, más tarde, que es necesario hacer evolucionar el programa informático y/o recuperar una funcionalidad para integrarla en otro programa. Aquí se puede decir que la programación objeto (LVOOP en LabVIEW para LabView Oriented-Object Programming) tiene todo su interés: permite un concepto y una arquitectura más cerca del mundo físico y en consecuencia al razonamiento humano (ejemplo de asunto: un coche con sus métodos, volver, frenar, y sus propiedades, velocidad máxima, color). demás, se pueden entonces aprovechar las herramientas de modelización que permiten concebir en forma de esquemas semiformales la estructura del programa, basado por ejemplo en UML (existe un toolkit que permite eso en LabVIEW).
Desde 2006 contribuyo en algunos artículos en la enciclopedia libre Wikipedia, maravillosa herramienta del conocimiento (puede ver mi perfil en Wikipedia aquí: http://es.wikipedia.org/wiki/Usuario:Adrienj). Comencé redactando artículos sobre la historia y la cultura del norte de México. Pero, desde hace algún tiempo, participo, cuando tengo tiempo, agregando artículos relativos a la prueba, la medida, el control y sus distintas herramientas. Si desea participar en este esfuerzo, que no tiene más nobleza que de compartir el conocimiento, entonces no hay nada más simple que crear una cuenta en Wikipedia. Creé varios artículos como LabWindows/CVI, TestStand, Measurement Studio o modifiqué LabVIEW... pero muchas cosas quedan por completar y muchas otras definiciones no forman aún parte de la enciclopedia: ¡a sus teclados!
Con la puesta en práctica de la norma C99, un avance se hace en cuanto a la gestión de la memoria: la declaración de array dinámica (variable-length arrays in english).
Me dirá, conozco la array, declaro una array de diez totalidades calculando las dimensiones con una constante del siguiente modo: int iArray [10]. Las array dinámicas, ok conozco, declaro a un indicador luego yo hago un malloc o calloc para calcularla las dimensiones con una variable, en no olvidando liberar la memoria asignada con un free al final del tratamiento.
¿Entonces que son las variable-length arrays? Es la posibilidad de declarar array indicando dimensiones con variables y no solamente con constantes. A continuación, dos ejemplos para ilustrar la utilización de una array dinámica: se pide al usuario calcular las dimensiones de una array que él mismo asignará, luego se indica el contenido de esa array.
ANTES
int iRows, iCols;
int i, j;
int *piArray = NULL;
printf("Número de líneas: ");
scanf("%d", &iRows);
printf("Número de columnas: ");
scanf("%d", &iCols);
AHORA
En el código siguiente, se utiliza también otra novedad del C99: la declaración de las variables no será ya al principio de los bloques {}.
int iRows, iCols;
int i, j;
printf("Número de líneas: ");
scanf("%d", &iRows);
printf("Número de columnas: ");
scanf("%d", &iCols);
int tiArray [iRows][iCols];
for (int i = 0; i < iRows; ++i)
{
__for (int j = 0; j < iCols; ++j)
__{
____tiArray[i][j] = i*iCols+ j;
____printf("%d ", tiArray[i][j]);
__}
__printf("\n");
}
Aquí, la liberación de la memoria asignada a tiArray se efectúa al final de "vida" de esta variable. Como tiArray es una variable local, es liberada al final del tratamiento de la función en la cual se declara.
Muchas novedades están disponibles en LabWindows/CVI 9.0 sobre todo con la puesta en práctica de la última norma del lenguaje C: el C99. Pues se habrán esperado diez años, el tiempo de maduración, para beneficiarse de las ventajas de esta nueva norma.
¿Que aporta el C99?
Ahí tienes la lista de estas mejoras: * La declaración de las variables no será ya al principio de los bloques {}. * Se pueden declarar array indicando dimensiones con variables y no solamente con constantes. * Cada elemento de la array, estructuras y uniones son ahora inicializable distinta y especialmente. * Los elementos de las array, estructuras y uniones podrán iniciarse con variables. * Nuevo tipo: las totalidades de 64 bits (long long). * Nuevas funciones snprintf y vsnprintf que son versiones "aseguradas" de sprintf et vsprintf evitan los rebasamientos controlando el tamaño de la cadena de entrada. * Los macros a N argumentos (...). * Adición de la variable del precompilador __func__ que contiene el nombre de la función corriente.
Observo que esta última novedad (__func__) del C99 estaba ya presente desde hace algunas versiones de CVI.
Enumeraré en artículos dedicados a cada aspecto del C99 para LabWindows/CVI.
Esta vez, la conferencia no fue acerca del control y medición con LabVIEW, LabWindows/CVI o TestStand sino sobre los aceleradores de partículas en la medicina para el tratamiento del cáncer y especialmente las aplicaciones de la radiación de sincrotrón para la observación de las proteínas y sus diferentes mecanismos de funcionamiento al fin de usarlos en los futuros medicamentos activos a base de nanotecnología. De donde viene la idea de este tema? Me toco dar accesoria al sincrotrón “Soleil”, en el sur de París, manejado por el CNRS (centro nacional francés de investigación científica) y el CEA (comisión a la energía atómica) para optimizar mediciones en una línea de luz.
Conferencia “Acelerador de partículas: luces al futuro medical” durante la XXXII reunión de residentes y cirujanos pediatras egresados del Instituto Nacional de Pediatría y Amigos de España en México.
Los cirujanos pediatras mexicanos y españoles.
El sincrotrón “Soleil”
Es para esos tipos de instrumentos he dado la asesoría.
Aquí está una descripción rápida de las nuevas características y los cambios realizados en LabVIEW 2010 en comparación con la versión 2009, pero en términos de paletas de programación y control.
Programing: structures
Tenga en cuenta la migración de la estructura del elemento en el lugar (in place element) que ya estaba presente en la versión 2009, pero que estaba en la paleta de manejo de la memoria. Esta estructura es muy útil para optimizar el consumo de memoria, especialmente útil para aplicaciones embebidas (Compact FieldPoint o Compact RIO) y software que necesitan manipular una gran cantidad de datos para (lo que reduce el número de reasignaciones y una lectura fácil del diagrama).
Los iconos de las variables compartidas, variables global y local han cambiado un poco con un diseño más significativo.
Programing: numeric
Adición de la constante doble. Antes ese cambio, la única mañera de poner una constante de tipo doble fue de primero poner una constante de tipo entero y después cambiar la en doble. Ahora es directo, se ahora tiempo.
Programing: boolean
El icono de la constante de tipo booleano a cambiado: es mas compacto. Ahora se ve solamente T o F (antes T/F en todos los casos) eso permite de tener un diagrama que se lee mas fácilmente y se ahora espacio.
Programing: File I/O
Aquí es la paleta del manejo de archivos de tipo waveform que aparece. Es la copia de las mismas funciones que se encuentran en la paleta waveform. Entonces, ahora se encuentra en dos lugares: la paleta de archivos y la paleta waveform. La ventaja es que no se puede olvidar a donde esta, dependiendo del punto de vista del tipo de datos o de los que se produce: archivo.
La paleta de los archivos TDMS se enriquece con la adición de funciones avanzadas.
En la paleta de funciones de archivos avanzadas se encuentra ahora las librarías empacadas. Que es eso? Para los conocedores de del lenguaje C, las librarías empacadas tienen el mismo uso que las librarías estaticas .lib: son VIs compilados en un mismo archivo .lvlibp. Las aventajas son: se ahorra tiempo durante el proceso de compilación porque ya el archivo .lvlibp contiene VIs compilados (practico para las grandes aplicaciones), o para compartir funciones con sus colegas de mañera segura y fácil.
Programing: Dialog & user interface
La fusión errores (merge errors) ahora es una función y no un sub-VI. Ahora esa función acepta N entradas al igual que la función build array y además pienso que se ejecuta mas rápido que el VI. Aprovecho para destacar la importancia de la gestión de las errores: cuentas veces gane tiempo durante la fase de desarrollo y de mantenimiento para identificar la fuente de un bug.
Data communication
Adición las funciones de flujo de red son añadas a la paleta de comunicación de datos. Permiten la transferencia de waveform en continuo sin perdida de datos. Para otros tipos de datos que no necesitan eso rendimiento, consejo el uso de las variables compartidas.
Para los protocolos, el HTTP cliente es adicionado. Eso facilita la programación porque en las versiones anteriores, eso se programaba gracias a las funciones de bajo nivel de la paleta del protocolo TCP. Ahora es mas sencillo. Ejemplo de uso: dialogo para enviar o recibir datos como un mini servidor embebido en una tarjeta Ethernet o un servidor web embebido de un controlador lógico programable PLC distante.
He podido disfrutar de dar una conferencia a cerca de los sistemas industriales y científicos con las tecnologías de National Instruments durante el secundo congreso internacional de ingeniería en telemática de la Universidad Politécnica de Durango, México. Esta conferencia duro una hora para desarrollar el tema de los “Sistemas embebidos en LabVIEW orientados al monitoreo de variables” desde la introducción para describir lo que son el control, la supervisión, la simulación, la prueba y la medición, pasando por una demostración de programación con LabVIEW, una video en vivo con une cliente mío, el Instituto Raspail de París en Francia, para detallar su sistema frigorífico usando componentes de National Instruments y un software embebido en LabVIEW que he desarrollado, hasta una demostración de las capacidades de control a distancia de la maquina instalada en París desde México.
Parte 1/8: Introducción
Introducción de la conferencia para mostrar la evolución de los productos y su impacto en las tecnologías usadas para fabricarlos.
Parte 2/8: Control, Supervisión, Medición, Prueba, Simulación
Descripción de lo que son el control, la medición, la prueba y la simulación para la calidad en la industria y la investigación científica.
Parte 3/8: Ejemplos de sistemas
Ejemplos de sistemas de control, supervisión, prueba, medición, hechos con las tecnologías de National Instruments: LabVIEW, LabWindows/CVI o TestStand y hardware.
Parte 4/8: Video en vivo del sistema de París
Video en vivo desde París, Francia (Instituto Raspail) para describir la maquina de refrigeración a doble camarera con sistema de control y supervisión Compact Fieldpoint de National Instrument y su software embebido que he desarrollado en lenguaje Grafico de LabVIEW, con la muy amable participación del Ing. Daniel Garault director técnico del instituto, del Prof. Guy Marcaillou profesor de termodinámica y la Prof. Clarisse Mbobda Fonking profesora de física.
Parte 5/8: Detallado del sistema de París
Descripción del hardware del sistema embebido de la maquina de París: hardware Compact Fieldpoint y software desarrollado con LabVIEW Tiempo Real.
Parte 6/8: Introducción a LabVIEW
Demostración de programación de un generador de señales con LabVIEW.
Parte 7/8: Shared Variables
Presentación de las variables compartidas en el red con LabVIEW y demostración de control a distancia desde México de la maquina en París, Francia.
Parte 8/8: Web Server con LabVIEW
Descripción y demostración del Web Server de LabVIEW embebido en el controlador Compact Fieldpoint de National Instruments para tomar el control a distancia de la maquina desde el navegador.
National Instruments, actualmente el líder mundial en la instrumentación, la prueba y la medición, ofrece soluciones para el desarrollo de software en tres lenguajes diferentes: LabVIEW, LabWindows/CVI y Measurement Studio; y un otro software de desarrollo especializado: TestStand. Pero, estoy de acuerdo, puede ser difícil de elegir entre todas esas opciones, además para un neófito en este ámbito. Por eso voy a tratar de hacer una descripción corta de esos productos tanto de las diferencias que hay entre ellos que de los puntos fuertes de cada uno.
LabVIEW
LabVIEW es el producto el mas famoso de National Instruments desde 1984.
Uso: desarrollo de software orientado para la industria y la ciencia, por lo general en comunicación con instrumentos de medición, sensores y aparatos electrónicos para Windows, Unix, Linux o Macintosh, PDA (Windows Mobile y Palm OS), aparatos tiempo real (de NI), tarjetas FGPA (de NI).
Lenguaje: lenguaje G para Grafico. La programación se hace con iconos (que son funciones) que se ponen en un diagrama y esos iconos son vinculados con hilos (que son flujos de datos, variables).
Aventajas: el lenguaje G, totalmente grafico, permite el desarrollo muy rápido de software sin un conocimiento extensivo de la programación.
Uso: desarrollo de software orientado para la industria y la ciencia, por lo general en comunicación instrumentos de medición, sensores y aparatos electrónicos, para Windows, Unix o Linux y aparatos tiempo real (de NI) – desde la versión 9.0 para este ultimo punto.
Lenguaje: lenguaje C. LabWindows/CVI ofrece muchos asistentes para ayudar al desarrollo de interfaz gráfica de usuario, la declaración de variables, la inserción de funciones y estructuras en el código de fuente y la comunicación con los instrumentos, sensores y aparatos electrónicos.
Aventajas: el lenguaje C es un lenguaje de base conocido de la mayoría de los ingenieros y técnicos. Es un lenguaje famoso que permite usar códigos de fuente existentes. La programación se encuentra accesible gracias a los asistentes.
Measurement Studio
Measurement Studio es un paquete de clases et librarías similares a LabVIEW para Visual Studio.
Uso: desarrollo de software orientado para la industria y la ciencia, por lo general en comunicación con instrumentos de medición, sensores y aparatos electrónicos para Windows.
Lenguaje: lenguajes C++, C# y Visual Basic.
Aventajas: ayuda el desarrollo de software para la instrumentación y la medición con Visual Studio por conducto de sus librarías de funciones y sus objetos gráficos especializados.
TestStand
TestStand es un herramienta, o mas bien una serie de funcionalidades, o Framework, para facilitar el desarrollo de software de tipo secuenciador.
Uso: desarrollo de software de tipo secuenciador para la industria y la ciencia, por lo general para la medición y la prueba en Windows.
Lenguaje: compatibilidad con LabVIEW, LabWindows/CVI, Java, HTbasic y todos los lenguajes que producen DLL, EXE, componentes ActiveX y .NET. También TestStand tiene su propio lenguaje sencillo de script.
Aventajas: tiene todas las funciones requeridas para un secuenciador de pruebas; significa que es muncho tiempo ganado porque no ce necesita desarrollarlas si están. Ofrece, entre otras, las funciones siguientes: generación de informes, editor de secuencias, generación automatizada de código de fuente, conexión a bases de datos, paralelismo, componentes gráficos para el interfaz grafica de usuario, gestión de los derechos de los usuarios.
Fui invitado a dar una conferencia durante el SIECC 2009, Simposio Internacional estudiantil de Ciencias Computacional de en tres días, organizado por el Instituto Tecnológico de Durango, México.
El título de mi conferencia fue "La Mecatrónica en la calidad industrial y la investigación científica", donde expuso los temas de control, medición, prueba y simulación para sistemas cada vez más complejo en la investigación científica y la industria, con ejemplos de mi experiencia profesional.
Entre otros oradores, se podría contar con Leo Prieto (leo.prie.to), un chileno que es la cabeza del Fayerwayer.com primero sitio en América Latina, con 4 millones de visitantes por día, para hablar de la conectividad de hiperconectividad; Alvaro López Ortega (Octality), español, creador del servidor gratuito "Cherokee", para presentar los modelos de negocio aplicables a una empresa de desarrollo de código libre; Ricardo Meza, mexicano, miembro de Mozilla, para hablar de FireFox y del Open Source; Mauricio Pastrana, colombiano, para hablar de cuestiones económicas de las comunidades del web; Alejandro Martínez, mexicano, miembro de Microsoft, para presentarnos a las nuevas innovaciones tecnológicas de Microsoft y Carlos Montelongo para hablar de las aplicaciones JAVA. A continuación se muestra una foto de los conferencistas:
2009 LabVIEW acaba de salir (ten en cuenta que el número de versión es 9.0). Además de la noticia anunciada por National Instruments en su sitio web, yo quería hacer una reseña de la evolución en las paletas de controles de la interfaz gráfica y funciones para los diagramas. Aquí está el resumen (las nuevas funciones se enmarcan en rojo):
Novedades en los controles (interfaz gráfica)
Digital
Añadido del control de tipo embalse
Gráficos
Añadido de tuta de compas, ruta a barras de errores, ruta de pluma, matriz de rutas XY y añadido de las funciones dedicadas a gráficos 3D
Gráficos en 3D
Añadido de gráficos 3D de tipo nube, barras, circulares, columnas, cintas, contorno, campo vectorial, cometa, superficie, malla y cascada.
Novedades en las funciones (diagrama)
Programación, digital, punto fijo
Añadido de adaptador de punto fijo a entero, adaptador de entero a punto fijo
Programación, vector, matriz
nueva paleta con : dimensión de matriz, construir una matriz, redimensionar una matriz, transponer de una matriz, obtener la diagonal de una matriz, obtener elementos de una matriz, obtener una sub-matriz, definir una diagonal de matriz, definir elementos de matriz, definir una sub-matriz
Programación, cluster, clase y variant
Añadido de preservar la clase durante la ejecución
Programación, E/S en archivos, constantes de archivos
Añadido de obtener le directorio sistema y directorio de la aplicación
Programación, E/S en archivos, XML, parsor XML
Añadido de obtener el primer nodo correspondiente y obtener todos los nodos correspondientes
se puede ver que los iconos nuevo y cerrar han cambiando
Programación, E/S en archivos, TDM en continua
Añadido de TDMS – convertir el formato, crear informaciones de escala
Programación, control de aplicaciones, informaciones sobre el procesador
Nueva paleta con : información del procesador, numero de niveles de cache, dimensión del cache de datos
Programación, control de aplicaciones, control de la memoria
Añadido de nueva referencia de valores de datos, suprimir una referencia de valores de datos
Nueva paleta con: definir EDP, definir un dominio de EDP, definir la condición a los limites de una EDP, definir la condición inicial de una EDP, resolución de EDP, visual de EDP
Comunicación de datos, variable compartida
Añadido de funciones para simplificar el uso de variables compartidas: crear una conexión a la variable, leer una variable, escribir una variable, cerrar una conexión a una variable, nodo de propiedad de variable.
para las variables PSP: abrir y verificar la conexión de una variable, crear una conexión a una variable en fondo.
para las variables de E/S: lectura por escaneo de la variable, escribir por escaneo de la variable, lectura directa de la variable
Entradas/Salidas de medición, motor de escaneo NI
Nueva paleta con: sincronización con el motor de escaneo, obtener el periodo del motor de escaneo, definir el periodo del motor de escaneo, obtener el modo de escaneo, definir el modo del motor de escaneo, refrescar los módulos locales
Entradas/Salidas de medición, motor de escaneo NI, limitación
Nueva paleta con: activar las limitaciones de variables, desactivar las limitaciones de variables, borrar las limitaciones de variables, limitar una variable, cancelar una limitación de variable
Entradas/Salidas de medición, motor de escaneo NI, fallos
Nueva paleta con: obtener una lista de fallos, definir un fallo, borrar un fallo, borrar todos los fallos
Entradas/Salidas de medición, motor de escaneo NI, configuración de fallos
Nueva paleta con: definir una configuración de fallos, borrar una configuración de fallos, obtener todas la configuraciones de fallos
Ahora puede hacer uso de clases Java directamente a partir de secuencias de TestStand.
Sabemos que TestStand puede usar componentes de varios tipos: LabVIEW (VI), LabWindows/CVI (.c, .obj, .lib, .dll), DLL (para todos los lenguajes que pueden generar DLL: C + +, Pascal Object con Delphi, Visual Basic y otros ....), ActiveX (para todos los lenguajes compatibles). NET (con los lenguajes compatibles...) y HTbasic. Uno podría decir que estos adaptadores (adapters en Inglés) son principalmente de tecnologías de Microsoft. Opción comercial podríe ser, pero no estaría contando con la posibilidad de programar usted mismo, sobre todo que se puede seguir los ejemplos de adaptadores, mencionados anteriormente, que se suministran con TestStand.
En este sentido, un nuevo adaptador existe: el adaptador JAVA. Se compone de tres grupos:
StartStop: para iniciar y detener la máquina virtual Java (JVM);
Methods: para usar un método de una clase
Static methods: para usar un método de una clase estatica
El uso de los métodos permite los pasos siguitentes: Numeric Limit Test, String Value Test, Pass/Fail Test et Action.
Véase a continuación un ejemplo de una secuencia de prubas (en este caso de una tarjeta madre de un PC) escrito en Java (ver la carpeta Java en los ejemplos de TestStand).
Secuencia de prueba en JAVA en TestStand
Cabe señalar que los codigos de fuente de los adaptadores Java están escritos en C con LabWindows/CVI. La interfaz de configuración de la propiedades que sigue es, entonces, editable.
Propriedades de un pasos JAVA en TestStand
El adaptador JAVA es compatible con TestStand a partir 3.0, LabWindows/CVI a partir 6.0 y Java 2 version 1.4.
Las opciones de compilación son, muchas veses, un poco olvidadas durante el desarrollo de un programa, aunque son, como el código, muy importantes por las razones siguientes: permiten de configurar el nivel de análisis para la detecciones de errores del código y de la gestión de la memoria durante la ejecución en modo "debug", fijan las direcciones de memoria para la compatibilidad con otros componentes, como DLL. Así, la modificación de una opción puede cambiar, hasta no desplegar los mensajes de error del debugger de LabWindows/CVI. Tendríamos un comportamiento inestable de nuestro programa sin haber tenido advertencias durante la compilación o la ejecución en modo "debug". Al fin de ayudar ustedes durante sus inicios con LabWindows/CVI, le propone de configurar los "Build Options" del menú "Options" de la manera que sigue (captura de la pantalla de Build Options de LabWindows/CVI 9.0, la versiones anteriores tienen mas o menos las mismas opciones).
Se puede definir un código bueno en LabVIEW con varias características: antes de todo debe funcionar, fácil de leer y fácil de modificar para melojar su mantenimiento. Así pues, se buscara a estructurar el código y no lanzar en el diagrama sus ideas.
En este fin, usáramos las funciones de estructuras como las bucles FOR o WHILE, les condiciones, la estructura de eventos (para maneja las acciones de los elementos del interface gráfico como un clic en un botón) o las secuencias sin olvidar las decoraciones como los cuadros y textos para agregar comentarios. Pero también los sub-VI los cuales agrupen funciones, eso reducirá los diagramas, capitalizara las funcionalidades y sera mas fácil de distribuir esas funciones; ademas, eso permite al motor de LabVIEW una mejor gestión de la memoria durante la ejecución del programa.
Con la misma idea que para el historial de la versiones de LabVIEW, hago en Wikipedia el historial de las versiones de LabWindows/CVI (ver el articulo aqui):
1989: LabWindows 1.0, bajo DOS, primera versión pública
1991: LabWindows 2.0, bajo DOS, ayuda al desarrollo de interfaces gráficas de usuario
1994 : LabVIEW 3.0.1, primera versión en Windows NT
1994 : LabVIEW 3.1
1995 : LabVIEW 3.1.1, integración del Application Builder
1996 : LabVIEW 4.0
1997 : LabVIEW 4.1
1998 : LabVIEW 5.0, multitarea, contenedores ActiveX, asistente para la adquisición de dato (tarjetas (DAQ) et asistente para el control de instrumentos; primera versión en Linux
1999 : LabVIEW 5.1, primera versión para Linux, primera versión de LabVIEW RT (Real Time)
2000 : LabVIEW 6.0, controles gráficos en 3D, referencias de controles
2001 : LabVIEW 6.1, mejoramiento y correcciones
2003 : LabVIEW 7.0, VI Express
2004 : LabVIEW 7.1, traducción en francés, alemán et japones
¿Sabía que desde la versión 8.20 de LabVIEW, que salió en 2006, es posible programar con una arquitectura objeto? Se pueden así crear clases con sus propiedades y sus métodos, como en C++, Java, C#, pascal object (Delphi) y otros lenguajes evolucionados. Oigo algunos de ustedes decir "pero que eso nos aporta para el desarrollo de programas informáticos de prueba, medida y control? ". Bien es cierto que para un pequeño programa informático que hace una medida o varias medidas y un tratamiento simple, el lenguaje objetos no es el mejor… ¿seguro? se piensa siempre desarrollar el programa en "one shot" y se da muy a menudo cuenta, más tarde, que es necesario hacer evolucionar el programa informático y/o recuperar una funcionalidad para integrarla en otro programa. Aquí se puede decir que la programación objeto (LVOOP en LabVIEW para LabView Oriented-Object Programming) tiene todo su interés: permite un concepto y una arquitectura más cerca del mundo físico y en consecuencia al razonamiento humano (ejemplo de asunto: un coche con sus métodos, volver, frenar, y sus propiedades, velocidad máxima, color). demás, se pueden entonces aprovechar las herramientas de modelización que permiten concebir en forma de esquemas semiformales la estructura del programa, basado por ejemplo en UML (existe un toolkit que permite eso en LabVIEW).
Desde 2006 contribuyo en algunos artículos en la enciclopedia libre Wikipedia, maravillosa herramienta del conocimiento (puede ver mi perfil en Wikipedia aquí: http://es.wikipedia.org/wiki/Usuario:Adrienj). Comencé redactando artículos sobre la historia y la cultura del norte de México. Pero, desde hace algún tiempo, participo, cuando tengo tiempo, agregando artículos relativos a la prueba, la medida, el control y sus distintas herramientas. Si desea participar en este esfuerzo, que no tiene más nobleza que de compartir el conocimiento, entonces no hay nada más simple que crear una cuenta en Wikipedia. Creé varios artículos como LabWindows/CVI, TestStand, Measurement Studio o modifiqué LabVIEW... pero muchas cosas quedan por completar y muchas otras definiciones no forman aún parte de la enciclopedia: ¡a sus teclados!
Con la puesta en práctica de la norma C99, un avance se hace en cuanto a la gestión de la memoria: la declaración de array dinámica (variable-length arrays in english).
Me dirá, conozco la array, declaro una array de diez totalidades calculando las dimensiones con una constante del siguiente modo: int iArray [10]. Las array dinámicas, ok conozco, declaro a un indicador luego yo hago un malloc o calloc para calcularla las dimensiones con una variable, en no olvidando liberar la memoria asignada con un free al final del tratamiento.
¿Entonces que son las variable-length arrays? Es la posibilidad de declarar array indicando dimensiones con variables y no solamente con constantes. A continuación, dos ejemplos para ilustrar la utilización de una array dinámica: se pide al usuario calcular las dimensiones de una array que él mismo asignará, luego se indica el contenido de esa array.
ANTES
int iRows, iCols;
int i, j;
int *piArray = NULL;
printf("Número de líneas: ");
scanf("%d", &iRows);
printf("Número de columnas: ");
scanf("%d", &iCols);
AHORA
En el código siguiente, se utiliza también otra novedad del C99: la declaración de las variables no será ya al principio de los bloques {}.
int iRows, iCols;
int i, j;
printf("Número de líneas: ");
scanf("%d", &iRows);
printf("Número de columnas: ");
scanf("%d", &iCols);
int tiArray [iRows][iCols];
for (int i = 0; i < iRows; ++i)
{
__for (int j = 0; j < iCols; ++j)
__{
____tiArray[i][j] = i*iCols+ j;
____printf("%d ", tiArray[i][j]);
__}
__printf("\n");
}
Aquí, la liberación de la memoria asignada a tiArray se efectúa al final de "vida" de esta variable. Como tiArray es una variable local, es liberada al final del tratamiento de la función en la cual se declara.
Muchas novedades están disponibles en LabWindows/CVI 9.0 sobre todo con la puesta en práctica de la última norma del lenguaje C: el C99. Pues se habrán esperado diez años, el tiempo de maduración, para beneficiarse de las ventajas de esta nueva norma.
¿Que aporta el C99?
Ahí tienes la lista de estas mejoras: * La declaración de las variables no será ya al principio de los bloques {}. * Se pueden declarar array indicando dimensiones con variables y no solamente con constantes. * Cada elemento de la array, estructuras y uniones son ahora inicializable distinta y especialmente. * Los elementos de las array, estructuras y uniones podrán iniciarse con variables. * Nuevo tipo: las totalidades de 64 bits (long long). * Nuevas funciones snprintf y vsnprintf que son versiones "aseguradas" de sprintf et vsprintf evitan los rebasamientos controlando el tamaño de la cadena de entrada. * Los macros a N argumentos (...). * Adición de la variable del precompilador __func__ que contiene el nombre de la función corriente.
Observo que esta última novedad (__func__) del C99 estaba ya presente desde hace algunas versiones de CVI.
Enumeraré en artículos dedicados a cada aspecto del C99 para LabWindows/CVI.