Domain changed

VIve LabVIEW is pleased to announce the domain has changed to ezlabview.com

Because we are convinced all the things must be easier, the new domain is

easy to remember

easy to write

 

That is why ezlabview.com exist, to do the LabVIEW experience easier

Regards, 

eZ

 

 

VIve LabVIEW se va a GitHub

Hola a Todos, 

 

Despues de un tiempo de no escribir, he decidio colocar el codigo fuente en GitHub, asi que si tu no sabes que es GitHub o como funciona, es hora de que corras y busques tutoriales para que puedas tener el codigo a tu alcance… Puedes bajar el código y tener la copia local, o mejor aun, puedes modificarlo y mejorarlo.

 

Solo hazme un favor, comparte este blog a tus conocidos para que incremente el numero de usuarios que puedan tener acceso al codigo y seamos mas los que podamos proponer mejoras.

https://github.com/zekeApps/VIve_LabVIEW

 

Saludos

eZ

Building a Comment parser inspired on Python & C/C++.

Hi again…  after a while without posting anything,  I am here .

The initial idea with this blog, was to post information related with NI LabVIEW programming environment for the Spanish Speakers, this because there are few LabVIEW resources in Spanish compared against English, but I have received many suggestions from non Spanish speakers so I have been consider seriously post in English also. I am not a native English Speaker, and I hate to use  on-line translators, So I will do my best.

This time let’s review a code I developed months ago, this is comment parser based on Python & C/ C++.

You could wonder how come  a comment parser could be useful for a graphical programming environment such as LabVIEW?

It is quite common to use external files in our projects: Test executives or Script runners, configuration files, etc.

This is where a Comment parser could be useful.

This is an specific example of a Script runner application, where the commands could be saved in external files to call them later if needed.  The application send those commands to a micro controller, and the micro controller firmware process it and returns a value for each command.

W//xxx;
WR107ABB1;
R108458E2;
Wait(100);
W104D02C4;

Despite of the possible documentation about those commands, it could be handy have a small description of each command… So here is where a comment parser makes sense.

W//1234;       # This command give access to the : enter test mode.
WR107ABB1;     # Sets a temperature value.
R108458E2;     # Reads the current temperature setpoint.
Wait(100);     # Waits 100 mS.... this is command is not for the firmware, 
               # this command is processed by LabVIEW application.
W104D02C4;     #Locks the enter access mode.

Now, the external Script contains the commands which makes more readable using comments, this VI parsed out the comments and returns the commands which invokes firmware functions Notice for this particular case I use the Python comment style, because  C/C++ comment convention is not recommended since the first command (W//1234;) contains the “//” characters which in C/C++ are considered as comment line… If the C/C++ convention is used for this particular case all the text after the “W”  will be swept out.

Different example,  using again a Script runner or test executive.

/*Test sequence for BP products*/

#define CONST_VAR1 3.000
#define CONST_VAR2 2.502
#define CONST_SR 20000
#define CONST_SA 2000
//#include<C:\a.txt>
BP.Init
BP.PowerOn adjVdc(5.105)
BP.Gain (CONST_VAR1) arg1(3.141516) sr(CONST_SR) sa(CONST_SA)
BP.PowerOn
BP.Offset goal(CONST_VAR2)
BP.Offset goal(CONST_VAR2)
BP.PowerOff
BP.End
//Developed by eZ

This time I want to use an additional feature from C/C++. The directive: #define

I use it to define a variable value in my Test Sequence file… but the application will parsed out the variable and its value and the code will substitute the variable name for its variable value…

So, If I will use then the directive #define… This time it is not recommended to use the Python convention for the comments… But the C/C++ conventions fits quite well..

Take a look the picture shown below.

You may notice the output did not contain the variable name as the Input did… Now the Output(Right side) have the variable values instead… Also the comments did not appear at the right side… Now you could use then the data to feed a sequencer (Queued State Machine, etc) using the commands without ignoring the useful comments.

Feel free to write a comment (Python or C/C++ style… ) about this article

eZ

9no Congreso Internacional de Ingenieria Mecatrónica

En marzo se celebrará el congreso internacional de mecatrónica: Automatización y tecnologia, organizado por el ITESM Campus Monterrey.

Este congreso de Mecatrónica más grande de America Latina.

 

 

Habrá conferencias, talleres, concursos , Eventos sociales, etc

 

Aqui dejo la pagina oficial:

http://www.congreso-mecatronica.com/

 

Has planes para que asistas a este magno evento que tiene mucho que ofrecer

 

 

VI Nugget: Llamando código externo Parte 3::Transparencias

El ejemplo anterior nos mostró la flexibilidad que ofrece LabVIEW para llamar y ejecutar código externo… y los beneficios que se pueden obtener

Ahora mostraremos un ultimo ejemplo: Establecer transparencia a una ventana…

Ahora, no estoy del todo seguro desde que version de LabVIEW contiene la propiedad de transparecia (LabVIEW 8.2?) pero lo que si es un hecho es que en la version LabVIEW 7.x no existe dicha propiedad…

Sin embargo, es posible hacer una ventana transparente utilizando el user32.dll (Aqui dejo una breve explicación… aunque el código fuente es para VB… tiene mucha similitud en la forma de llamar a la API de Windows) http://www.codeguru.com/vb/gen/vb_graphics/transparency/article.php/c6979

Este código aún funciona en versiones de LabVIEW que tengan integrada la función de transparencia como parte de su libreria

Consideraciones:

1.-  bAlpha espera valores de 0 a 255 … como se puede observar, mediante una ecuación estos valores se pasan a representarse como un porcentaje (0% significa que la pantalla es completamente visibile, y 100% que es completamente invisible).Es por ello que hay que considerar el valor de la entrada : “Transparency(%)”. Este valor no debe aceptar valores negativos ni mayores a 100.

Esto es posible alcanzarlo creando un control adaptado que aceptes los rangos de valores definidos… y/0, definir dicha condición en la estructura “Formula node”

2.- Este SubVI debe de colocarse en el VI que queremos que tenga las propiedades traslucidas…. es decir, si se ejecuta este SubVI observaras que aunque pongas el valor del control ” “Transparency(%)” al 100%  este SubVI no cambiara, puesto que solo surte efecto para el VI que lo manda llamar…

Como regla de oro: El VI que tu deses que sea transparente, colocale este SubVI y alimenta la entrada y obtendras las propiedades traslucidas de dicha ventana.

Aqui un ejemplo de como funciona:

VI nugget:Llamando código externo::Parte2

El ejemplo propuesto en la primer parte de esta serie sugiere el uso de un dialogo… sin embargo, LabVIEW contiene algunos nodos muy similares (One Button Dialog, Two button Dialog, Three Button Dialog).

Lo más atractivo por ahora seria buscar ciertas utilidades con las que LabVIEW no venga equipado… Que tal: Un VI que detecte el estado del CAPS-LOCK?

Esta caracterisitica la has visto en muchas apliacaciones,  sobre todo en aquellas que te pide que ingreses un Password…

LabVIEW no cuenta con un nodo, funcion o método (considerando aún LabVIEW9.0), sin embargo esto puede ser alcanzado utilizando código externo… en este caso utilizaremos una vez mas el API de Windows: User32.dll

La funcion a invocar se llama: GetKeyState… aqui mayor información : http://msdn.microsoft.com/en-us/library/ms646301%28v=VS.85%29.aspx

A continuación se presenta un ejemplo muy sencillo incorporando el VI explicado anteriormente

La leyenda: Caps Lock is ON…  aparecera solo cuando este esté activado, de otro modo no se desplegara dicho mensaje.

VI nugget:Llamando código externo::Parte I

Tal como los archivos ejecutables (.exe) los archivos .dll pueden contener código (hecho en algun lenguaje de programación) datos o algun otro recruso

LabVIEW tiene la capacidad de llamar y ejecutar código externo (Dynamic link libraries o Shared libraries, generalmente bajo las extensiones: dll, drv, ocx) incrementando el poderio y robustez de la plataforma de programacion creada por National Instruments.

Vamos a describir un ejemplo básico utilizando una API de Windows (WinAPI) bastante conocida: user32.dll

Esta API contiene una funcion llamada: MessageBox (bastante intuitivo el nombre… no crees?) la cual despliega un cuadro de dialogo  “modal” el cual contiene el icono y apariencia del sistema, un set de botones.

A pesar de ser una aplicacion sencilla es muy util para desplegar información de “estatus” o de errores, una vez seleccionada la opción, el dll retorna un numero entero dependiendo el boton que el usuario haya presionado.

Para mayores informes, lea la MSDN de dicha función : http://msdn.microsoft.com/en-us/library/ms645505%28VS.85%29.aspx

El VI presentado como ejemplo, funciona de manera similar (aunque no igual) al nodo: One Dialog Button contenido en la libreria de LabVIEW,  este ejemplo no pretende sustituirlo, sino solo demostrar de una manera clara como se puede ejecutar coódigo externo.

Código Fuente

Como puede observarse,  dependiendo de el tipo de mensaje seleccionado (Message Type) es el tipo de dialogo que aparece en pantalla y la opcion seleccionada retorna un entero (en este caso se hizo un indicador tipo enum para su mejor visualización)

Tal como lo indica la MSDN, el dialogo contiene la apariencia del sistema,  asi mismo ofrece la oportunidad de colocr titulo y mensaje al dialogo.

Este ultimo dialogo correponde entonces a el tipo de mensaje llamado : OK/Cancel

Finalmente se presenta un dialogo mostrado a traves de Twitter

Y aqui uno lanzado desde nuestro VI

Saludos, espero sus comentarios

VI nugget: Obtener valores de un cursor en Gráfica XY

Es posible obtener los valores de los cursores de una gráfica XY

A continuación se presenta una propuesta para hacerlo

Asi luce la interface de usuario

Notese en este caso en particular se tienen 2 cursores… pero pueden ser más

Ahora se presenta el código fuente:

Evento XY Graph:Mouse Up

.

.

Código fuente del VI principal---Evento Stop:Value Change

Y finalmente se presenta el código fuente del SubVI:

Ahora… como habran notado, la salida (cluster) llamada Cursor “x” (donde x es el numero de cursor al que corresponde) ademas de las posiciones X-Y contiene un indice…

Supongamos que no existiera la manera de obtener (por medio de propiedades) la posicion X-Y…. bueno, con el indice seria posible obtenerlos, solo utilicen el indice en los arreglos de 1D originados en la salida del for loop (X – Y) y esos serian los datos correspondientes

No lo hice asi, puesto que ya existen dichas propiedades

Comentarios Bienvenidos!!

Saludos!

VI Nugget: Sombrero Mexicano edición Bicentenario… utilizando MathScript

Aqui solo un ejemplo como puedes hacer un sombrero Mexicano… edición Bicentenario y esto  utilizando solamente un nodo (estructura MathScript)

Esto nos da una idea de la potente capacidad de dicha estructura

La próxima vez que necesites hacer operaciones aritméticas… intenta con MathScript en lugar de utilizar muchos nodos

P.D

La sintaxis de MathScript  (lo que está escrito dentro de la estructura)  es compatible con Matlab

Saludos!