martes, 15 de diciembre de 2009

Como elegir la mejor opción entre LabVIEW, LabWindows/CVI, Measurement Studio y TestStand

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 logo 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.

LabWindows/CVI logo LabWindows/CVI

LabWindows/CVI es, para resumir, LabVIEW en lenguaje C.

  • 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 logo 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-Logo 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.

miércoles, 11 de noviembre de 2009

Conferencia en México

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.

12652_169092777849_107759907849_2596261_4426841_n

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.

16649_179577636768_533411768_2849826_1199836_n 16649_179577671768_533411768_2849831_2633575_n

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:

11440_167937514139_558214139_2568405_2940484_n

ver el portal del evento: siecc09.com

martes, 11 de agosto de 2009

Nuevas funciones de LabVIEW 2009

labview2 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
labview2009-moderno-digitales Añadido del control de tipo embalse
  • Gráficos
labview2009-moderno-graficos 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
labview2009-moderno-graficos-graficos-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
labview2009-programacion-digital-punto-fijo Añadido de adaptador de punto fijo a entero, adaptador de entero a punto fijo
  • Programación, vector, matriz
labview2009-programacion-tabla-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
labview2009-programacion-cluster-classe-y-variant Añadido de preservar la clase durante la ejecución
  • Programación, E/S en archivos, constantes de archivos
labview2009-programacion-es-sobre-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
labview2009-programacion-es-sobre-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
labview2009-programacion-es-sobre-archivos-tdm-en-continua Añadido de TDMS – convertir el formato, crear informaciones de escala

  • Programación, control de aplicaciones, informaciones sobre el procesador
labview2009-programacion-control-applicationes-informaciones-sobre-el-procesor 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
labview2009-programacion-control-applicationes-control-de-memoria Añadido de nueva referencia de valores de datos, suprimir una referencia de valores de datos

  • Programación, waveform, waveform digital
labview2009-waveform-waveform-digital Añadido de agrupar los señales digitales
  • Procesamiento de señales, operación de señales
labview2009-tratamiento-de-senal-operaciones-en-los-senales Añadido de nodo de periodo de transformada en Z

  • Matemáticas, ecuaciones diferenciales, ecuaciones diferenciales parciales
labview2009-matematicas-equaciones-differenciales-parcielas 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
labview2009-communicacion-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
labview2009-es-de-medicion-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
labview2009-es-de-medición-motor-de-escaneo-ni-limitacion 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
 labview2009-es-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
labview2009-es-de-medición-motor-de-escaneo-ni-configuracion-de-fallos Nueva paleta con: definir una configuración de fallos, borrar una configuración de fallos, obtener todas la configuraciones de fallos

lunes, 27 de julio de 2009

Uso de JAVA con TestStand

logoteststand 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).

TestStand-java
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.

Java_EditJavaCall_db 
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.

miércoles, 24 de junio de 2009

Opciones de compilación de LabWindows/CVI

imageLas 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).

Build Options LabWindows/CVI 9.0

lunes, 22 de junio de 2009

Estructuracion del diagrama LabVIEW

labview_thumb 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.

 

image 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.

martes, 3 de marzo de 2009

Historico de la versiones de LabWindows/CVI

cvi 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: LabWindows/CVI 3.0, bajo Windows 3.1 y Solaris
  • 1995: LabWindows/CVI 3.1, generación automática de código
  • 1996: LabWindows/CVI 4.0, mayor compatibilidad con los compiladores externos (Microsoft, Borland, Watcom y Symantec)
  • 1998: LabWindows/CVI 5.0, compatibilidad VXI e IVI
  • 2000: LabWindows/CVI 5.5, librarías de funciones multitarea
  • 2001: LabWindows/CVI 6.0, ActiveX y mejora de la interfaz gráfica de usuario
  • 2003: LabWindows/CVI 7.0, integración de los workspaces
  • 2004: LabWindows/CVI 7.1, terminación automática
  • 2005: LabWindows/CVI 8.0, nuevo sistema de despliegue, .NET assemblies
  • 2006: LabWindows/CVI 8.1, variables de red, controles gráficos del estilo Windows
  • 2007: LabWindows/CVI 8.5, mejora de la gestión del microprocesador multi corazón, edición del código durante el debug, toolkit tiempo real
  • 2008: LabWindows/CVI 9.0, gestor de memoria y compilación optimizada, C ANSI versión 99 (en particular, las array dinámicas)

Historial de las versiones de LabVIEW

labview Estoy haciendo el historial de la versiones de LabVIEW en Wikipedia (da un clic aqui para ver el articulo en Wikipedia):

 

  • 1986 : LabVIEW 1.0, primera versión en Mac OS
  • 1990 : LabVIEW 2.0, máximo aprovechamiento de los resultados
  • 1992 : LabVIEW 2.5, primera versión en Windows 3.1 et Solaris
  • 1993 : LabVIEW 3.0
  • 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
  • 2005 : LabVIEW 8.0, Project Explorer, XControls, shared variables
  • 2005 : LabVIEW 8.1, mejoramiento y correcciones
  • 2006 : LabVIEW 8.20, Programación orientada a objetos
  • 2007 : LabVIEW 8.5, primera version del toolkit FPGA et del toolkit Statechart
  • 2008 : LabVIEW 8.6, limpieza automática de los diagramas

Me falta todavia datos para algunas versiones pero en eso trabajo y todas informaciones son las bienvenudas.

miércoles, 11 de febrero de 2009

La programación orientada objetos con LabVIEW

¿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).

miércoles, 21 de enero de 2009

Wikipedia y la prueba, medida y control

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!

domingo, 11 de enero de 2009

LabWindows/CVI 9.0 : variable-length arrays

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);

*piArray = (int*)malloc(iRows*iCols*sizeof(int));
if (piArray != NULL)
{
__for (int i = 0; i < iRows;i++)
__{
____for (int j = 0; j ____{
______piArray [i][j] = i*iCols+ j;
______printf("%d ", piArray [i][j]);
____}
____printf("\n");
__}
}
free(piArray );
piArray = NULL;

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.

viernes, 9 de enero de 2009

Que hay de nuevo en LabWindows/CVI 9.0 : el estándar C99

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.