Manual Basico Labview
Manual Basico Labview
Manual Basico Labview
ÍNDICE
Introducción --------------------------------------------------------------------- 03
¿Qué es LabVIEW? ------------------------------------------------------------- 04
Conociendo LabVIEW ---------------------------------------------------------- 06
El primer programa en LabVIEW -------------------------------------------- 11
Controles e indicadores -------------------------------------------------------- 14
Elementos booleanos --------------------------------------------------------- 15
Uso de Select ------------------------------------------------------------------- 16
Uso de cadenas de texto ----------------------------------------------------- 18
Uso de la estructura Case ------------------------------------------------------ 20
Uso de Array --------------------------------------------------------------------- 25
Uso de arrays con strings ----------------------------------------------------- 28
El ciclo For ------------------------------------------------------------------------ 31
For condicional ------------------------------------------------------------------ 33
Shift Register --------------------------------------------------------------------- 35
El ciclo While ------------------------------------------------------------------- 37
Variables locales ---------------------------------------------------------------- 42
Uso de Cluster ------------------------------------------------------------------- 43
Práctica 1: Máquina de refrescos ------------------------------------------- 47
Inserción de imágenes y decoraciones ------------------------------------- 52
Máquinas de estados ---------------------------------------------------------- 55
Ejercicios finales ---------------------------------------------------------------- 63
Tamaño de un botón con nodos de propiedad --------------------------- 65
Ejercicio con array de leds ---------------------------------------------------- 67
Máquina tragamonedas ------------------------------------------------------- 72
Edición del ícono de un programa ------------------------------------------ 83
Página 2
INTRODUCCIÓN
Página 3
¿QUÉ ES LABVIEW?
Cuando un programa está terminado, el usuario final hace uso del panel
frontal, donde se encuentra todo lo necesario para controlar un sistema. El
diagrama de bloques es donde se encuentra el código del programa, es
donde el programador accede para modificar o mantener el programa.
Página 4
LabVIEW es principalmente utilizado por los ingenieros para el manejo de
datos, la comunicación entre una computadora y un aparato o circuito
externo es imprescindible para las aplicaciones que se le pueden dar al
software, por lo que LabVIEW puede comunicarse con interfaces como:
Puerto serial
Puerto paralelo
GPIB
PXI
VXI
TCP/IP
Irda
Bluetooth
USB
OPC
Entre otros.
“La potencia está en el software” Una frase muy célebre de LabVIEW, que
hace referencia a la capacidad e importancia que puede tener un programa
en un proyecto.
Página 5
Conociendo LabVIEW
Aquí podemos elegir del menú la opción de abrir un nuevo VI, un proyecto en
blanco o un VI desde una plantilla. Para empezar elegiremos abrir un VI en
blanco.
Página 6
Nos aparecen dos ventanas, el Front Panel (Panel frontal) y Block Diagram
(Diagrama de bloques). En el panel frontal, es donde podemos elegir los
elementos que conformarán nuestro programa.
Página 7
El primer botón (Run) sirve para ejecutar el programa, pero si el código no
incluye un ciclo para que el programa se repita infinitamente o la cantidad de
veces que el usuario elija, sólo parpadeará la pantalla y el programa no hará
nada.
Si no se está trabajando con ciclos, es necesario hacer clic en el segundo
botón (run continuously), que significa correr continuamente, de esta
manera, el programa se ejecutará hasta que el usuario vuelva a dar clic en
ese botón o realizar alguna acción en el programa que haga que éste se
detenga.
El tercer botón sirve para abortar la ejecución. Este ícono se utiliza solamente
cuando el programa se cicla, es decir; que no se puede detener por algún
error en la programación. Esto sucede únicamente cuando se trabaja con
ciclos y es recomendable no usarlo si no es absolutamente necesario, ya que
el usarlo podría causar pérdida de datos.
Página 8
El otro ícono sirve para ver y modificar las propiedades del VI (clic derecho>VI
properties).
En el diagrama de bloques los menús son muy parecidos, solo que aquí se
agrega un botón al menú de ejecución que sirve para ver paso a paso lo que
el diagrama de bloques está ejecutando, muy útil cuando se quiere ver el
orden de ejecución de todo el código y ver su comportamiento.
Otro botón que se agrega es el que limpia todo el código, para poner todos
los elementos de una forma más ordenada y legible.
Página 9
Para empezar a colocar elementos en el panel frontal, podemos dar clic
derecho en cualquier parte del panel y aparece el menú con todos los
elementos, o se puede dar clic en View>Controls palette.
Para ver más elementos, solo se necesita dar clic en la flechita de abajo del
menú para desplegar el menú completo.
Página 10
EL PRIMER PROGRAMA EN LABVIEW
Página 11
Aquí ya empieza el trabajo del programador, realizar las operaciones
necesarias para que el programa funcione como se desea. Para seleccionar
las funciones que se utilizarán, solo se tiene que dar clic derecho sobre el
diagrama de bloques para que aparezca el menú, igual que en el panel
frontal.
Página 12
Hasta aquí ya podemos ejecutar el programa, como no se está utilizando
ciclo, le damos clic en correr continuamente.
Página 13
CONTROLES E INDICADORES
Por otro lado, los indicadores son los elementos que no pueden ser
modificados por el usuario, y que solamente muestran datos o resultados
que el programa arroja, por ejemplo en el programa anterior, el indicador
muestra el resultado de la suma.
Página 14
ELEMENTOS BOOLEANOS
Un ejemplo muy sencillo del uso de estos, es para encender un led con un
switch, solo necesitamos un switch y un led, conectados entre sí, para poder
encender el led con los valores verdadero o falso.
Página 15
USO DE SELECT
Página 16
Imagen 16: Diagrama de bloques del ejemplo del uso de select.
Página 17
USO DE CADENAS DE TEXTO
Página 18
El objetivo del indicador textual es que si el nivel es mayor o menor de 5, se
indique con un mensaje. Para esto podemos utilizar otro select conectado a
cualquier de los dos leds, para evaluar si este está encendido o prendido, las
constantes de texto estarán conectadas al select y la salida al indicador.
Página 19
USO DE LA ESTRUCTURA CASE
switch (funcion)
{
case1:
Sentencias;
break;
case 2:
Sentencias;
break;
}
Al analizar la imagen 21 podemos notar que lo único que hay dentro del case
es la operación que se va a realizar. Esto es porque si metemos cualquiera de
los controles o indicadores, éstos solo servirán para un solo caso, y para que
el programa funcione correctamente se tendrían que crear variables locales
de cada elemento para colocarlos en el otro caso, pero eso es innecesario y
haría que el código quede más grande.
Página 21
En el case también se puede conectar un tab control, útil para dar un mejor
aspecto al programa, almacenando cada operación o acción en un
contenedor individual. El tab control se encuentra en el menú Containers
(Contenedores).
Podemos ver un ejemplo con un programa para hacer los cálculos de la ley de
Ohm:
Aquí se usan tres pestañas para el tab control, (para añadir más pestañas se
da clic derecho sobre cualquier pestaña y luego en add page after ó add page
before). Cada pestaña representa el valor que se quiere obtener, ya sea
voltaje, resistencia o intensidad.
Página 22
Imagen #23: Código del programa de ejemplo de uso de tab control.
Página 23
El diagrama de bloques queda como se muestra:
Página 24
USO DE ARRAY
Página 25
En el panel frontal se tienen dos arrays, uno de leds y otro de switch.
En el diagrama de bloques sólo nos saldrán dos elementos, que son los
arrays, si los conectamos, el programa funcionará perfectamente.
Algo que se debe aclarar es que si se quiere controlar el array de cuatro leds
con un solo switch fuera de un array, no se puede, ya que son elementos de
distintos tipos.
Página 26
Imagen #27: Uso de Index array y Build array.
Página 27
USO DE ARRAYS CON STRINGS
Si es falso, con una constante de texto se dice que el led está apagado, si es
verdadero, dice que está encendido.
Página 28
El resultado al correr el programa es el siguiente:
Página 29
Esta constante de retorno se conecta cada vez que finaliza la frase (para este
caso), no es necesario usar tres constantes de estas ya que una sola puede
funcionar para todo el programa.
Página 30
EL CICLO FOR
Página 31
La terminal N representa el número de veces que se va a repetir el ciclo, la
terminal i representa la iteración, que va desde 0 a n-1 .
Podemos tomar el siguiente programa como ejemplo del uso del ciclo for:
Página 32
Se puede observar que el número de repeticiones del ciclo for será de 5, y la
operación será la suma de un número aleatorio y cinco. Esta operación se
hará cinco veces y esos cinco resultados se imprimirán en el indicador
numérico.
FOR CONDICIONAL
Se dice que un ciclo for es condicional cuando éste tiene una terminal de
paro, se trata de una terminal a donde se puede conectar un botón de stop o
una condición para que el programa se detenga en determinado momento
sin importar que no se hayan ejecutado el número de repeticiones
establecidas.
Esta terminal de paro se puede agregar dando clic derecho sobre el ciclo for y
posteriormente clic en conditional terminal.
Página 33
Imagen #36: Representación del ciclo for condicional.
Página 34
SHIFT REGISTER
Página 35
Un ejemplo del uso de shift register con array es el siguiente:
Aquí, se tiene un array de 4 leds, se usa un shift register que está aumentado
a 4 elementos que representan a cada led, esto se hace poniendo el cursor
del mouse debajo del shift register y arrastrándolo hacia abajo.
Se inicializa con una constante true, esto indica que el primer led estará
encendido al correr el programa. En un lapso de 100 milisegundos pasa a
false y el siguiente a true, así hasta llegar al último, y esto se repite 50 veces o
hasta que el usuario presione el botón stop.
Imagen #38: Panel frontal del programa de ejemplo de shift register y array.
Página 36
EL CICLO WHILE
A diferencia del For, el ciclo While ejecuta determinada acción hasta que el
programa termine su función o hasta que el usuario decida detener el
programa. Si el programa no tiene un fin determinado, el programa se
ejecutará infinitamente o hasta que el usuario lo detenga.
Página 37
Podemos ver un ejemplo muy sencillo de un programa para encontrar la
hipotenusa de un triángulo usando el Teorema de Pitágoras, con el ciclo
while.
Página 38
Entonces una forma simple de resolverlo, es usando la función square, que
eleva al cuadrado cualquier número que se le conecte, entonces, se usan dos,
uno para cada lado del triángulo. Éstos se suman y se le saca raíz cuadrada al
resultado, usando la función square root. Ambas funciones se encuentran en
el menú Numeric.
Hasta aquí todo va bien, pero hay un pequeño error, que en este programa
puede no causar problemas, pero al trabajar con programas grandes, puede
ocasionar muchos problemas. Es necesario colocar un Wait.
Página 39
Un ejemplo para el uso de shift register con un ciclo while, podría ser un
contador, para llenar un tanque.
Imagen #43: Panel frontal para el programa con while y shift register.
Aquí, el propósito del programa podría ser que el tanque se vaya llenando,
como si se tratara de una máquina automática de llenado de algún líquido,
como un despachador de café o algo así.
Página 40
El shift register se inicializa en cero y se le suma uno, esto hace que en cada
repetición se sume uno al valor final. Esto hace que el tanque se vaya
llenando lentamente, dando un efecto como de máquina automatizada.
Otra cosa muy útil sería que el programa se detuviera cuando el tanque
llegue a 10. Para esto, usamos una función de comparación Equal (igual),
conectada a una compuerta OR, esto para que el programa se detenga si el
tanque llega a 10 o si el usuario presiona el botón de stop.
Página 41
VARIABLES LOCALES
Para crear una variable local, solo se da clic derecho sobre el elemento, luego
en create>Local variable.
Página 42
USO DE CLUSTER
El uso del cluster puede reducir el tamaño del código y dependiendo del
programa que se esté desarrollando, su uso puede ser imprescindible.
Podemos ver un panel frontal con un cluster que alberga algunos elementos:
Página 43
En el diagrama de bloques, lo anterior aparece con un solo elemento, al igual
que el array. Para trabajar con cluster, se usan las funciones del menú
cluster, class & variant.
Para sacar los elementos del cluster, podemos usar Unbundle y Unbundle by
name. La diferencia entre estos es que el unbundle saca los elementos de
forma individual, en orden ascendente. Y el unbundle by name saca los
elementos mostrando sus nombres, en algunas ocasiones es más fácil utilizar
esta función para saber con qué elementos se está trabajando.
Página 44
Se puede observar el siguiente ejemplo donde se usa un cluster y variables
locales:
Página 45
El primer paso sería sacar los elementos del clúster, utilizando un unbundle
by name, y se selecciona solo el medidor que es el que se va a utilizar como
control. Luego utilizamos bundle by name para conectar el medidor al
indicador numérico, aquí prácticamente estaríamos creando un cluster. Para
finalizar, creamos una variable local del cluster y conectamos el bundle by
name a éste.
Página 46
APLICANDO LOS CONOCIMIENTOS
Página 47
Los botones que indican los sabores están dentro de un cluster, lo demás son
controles e indicadores.
Página 48
Como se puede ver en la imagen 52, se usa un ciclo while que anida 3
estructuras case, que a su vez, anidan otro case cada una, y éste, un ciclo for.
Imagen #53: Se sacaron los elementos del cluster con Unbundle by name.
Dentro del while, se utilizó unbundle by name para poder usar los botones
del cluster individualmente. Estos tres botones se conectaron a una
estructura case cada uno.
Página 49
Imagen #55: Estructura Case del primer botón.
Todos los Case de los tres botones tienen lo mismo, solo cambia el costo de
la bebida. En el primer case, estando en true, se evalúa si el dinero ingresado
es igual o mayor que 15 (costo de la bebida). Si esto es verdadero, en un case
anidado se hace la operación para mostrar el cambio.
Con un ciclo for se hace la simulación del llenado del vaso. Como se vio
anteriormente, se usa un shift register como contador para ir llenando el
vaso, empezando de cero y llenándose de 5 en 5 cada 200 milisegundos.
Después, si el valor del tanque es igual a 100, se manda la instrucción de
detener el programa.
Página 50
Imagen #56: Valor false del segundo case.
Los siguientes dos case indican lo mismo, sólo cambia el valor del dinero y
que se usan variable locales de los controles e indicadores.
Página 51
INSERCIÓN DE IMÁGENES Y DECORACIONES
Pueden surgir algunas dudas con el programa anterior, como por ejemplo,
cómo insertar la imagen del vaso en el panel frontal.
Insertar imágenes es muy sencillo. Basta con tener una imagen guardada en
el disco duro y arrastrarla desde su ubicación hasta el panel frontal, de esta
manera se hace una copia y no importará si se borra la imagen del disco
duro, ésta se quedará en el panel frontal, donde se podrá modificar su
tamaño.
Para encontrar las decoraciones, nos vamos al menú Modern > Decorations.
Ahí podemos encontrar el siguiente menú:
Página 52
Ahí se puede elegir cualquier tipo de decoración para que el programa que se
esté desarrollando se vea más presentable.
Para que la decoración que hayamos elegido no tape todo, nos vamos al
menú y damos clic en el ícono que tiene dos flechas circulares:
Aquí elegimos Move to back para que la decoración se vaya hasta atrás de
todo lo que tengamos en el panel.
Para insertar imágenes al panel frontal es muy sencillo, solo basta con dar clic
en Edit o Editar, y en Import picture to clipboard.
De esta manera se puede elegir la imagen que se requiera.
Página 53
Imagen #60: Insertar imágenes en el panel frontal.
Página 54
MÁQUINAS DE ESTADO
Se sigue una serie de pasos para lograr que la máquina funcione, esto se
puede observar en el siguiente diagrama:
Entrada 1
ESTADO 2
Entrada 2
Entrada 3
ESTADO 1 Entrada 1 ESTADO 3
Entrada 3
Página 55
Para abrir una plantilla de máquina es estados en LabVIEW, sólo se da clic en
File>new>For template>Frameworks>Design Patterns>Standard state
machine.
Página 56
Imagen #63: Plantilla de máquina de estados en LabVIEW.
Página 57
Para este programa, tenemos lo siguiente:
Estados:
Entradas:
Botón de inicio
Botón de detener
Salidas:
Acciones:
Con estos datos ya podemos crear el diagrama de estados que nos servirá
para poder desarrollar el código del programa en LabVIEW.
Página 58
Inicio
Stand
Detener
by
Página 59
El diagrama de bloques terminado queda de la siguiente manera:
Página 60
Imagen #66: Caso Stand by.
Para que el proceso de llenado del tanque se detenga sin que el programa
completo se detenga, hay que ponerle una terminal de paro al ciclo for (for
Página 61
condicional), de esta manera, al presionar el botón sólo se detendrá el ciclo
for y no todo el programa, haciendo más eficaz el uso del mismo.
Página 62
EJERCICIOS FINALES
Página 63
Para acceder a este menú desde el diagrama de bloques seleccionamos
donde dice Mathematics>Linear Algebra.
Página 64
A y B se conectan de lado izquierdo y C del lado derecho. El ciclo while es
opcional, pero si se requiere que el programa se mantenga en ejecución es
conveniente utilizar un ciclo.
Con este nodo de propiedad podemos ajustar el ancho y largo del botón.
Para esto usaremos dos controles tipo Slide que se conectarán al cluster del
nodo de propiedad mediante un bundle by name.
Página 65
Imagen #73: Código del programa con nodo de propiedad Size.
Página 66
EJERCICIO CON ARRAY DE LEDS
Página 67
El diagrama de bloques completo es el siguiente:
Página 68
Se utiliza un Enum con 4 valores; arriba, abajo, izquierda y derecha, éste es el
que se encarga de asignar la dirección hacia donde se encenderán los leds. Se
conecta a un shift register que a su vez se conecta a una estructura case. Esta
estructura tendrá una configuración para cada uno de los cuatro casos en
donde prácticamente sólo varía el orden de los incrementos y decrementos.
Página 69
Este número 120 representa el número total de leds en el array, y a su vez, la
cantidad de repeticiones que el ciclo for ejecutará.
Este último elemento se conecta a un shift register que pasa por la estructura
case, luego se conecta a otro Replace array subset que seguirá el orden de
encendido de los casos y dejará en valor verdadero los leds que se vayan
encendiendo, luego se conecta al array de leds para mostrar el resultado.
Para establecer hacia donde se van a encender los leds, sólo se usan dos
elementos, incremento y decremento. Por ejemplo, para “Abajo”, al estar
encendido el led del centro se enciende el de abajo con un decremento,
luego, con un incremento se enciende el de su derecha y así funcionan los
demás casos, sólo se juega con los incrementos.
Página 70
Imagen #80: Textos para el estado del programa.
Página 71
Para salir de LabVIEW usamos otro botón, éste se conecta a un case, si el
botón está en false no se hace nada, si se presiona, cambia a true y el
programa mostrará un mensaje emergente con la frase “Hasta luego” y con
el elemento Exit, saldrá de LabVIEW.
http://www.youtube.com/watch?v=jLspyWmOTFM
MÁQUINA TRAGAMONEDAS
En el panel frontal, los elementos que se usarán son los leds que hay en cada
fruta, los botones de la parte derecha, también el control numérico y el
indicador de texto y el botón de stop.
Página 73
Para empezar, utilizamos un ciclo while para mantener corriendo el
programa, hasta que se presione el botón de stop. Esto podría considerarse
como la simulación de encendido y apagado de la máquina.
Aquí es donde viene la parte más interesante, hacer que el led recorra todas
las frutas, encendiéndose uno y apagando los que ya recorrió, empezando
rápido hasta terminar lento.
Lo más viable para esto sería un ciclo for. El número de repeticiones del ciclo
será la cantidad de vueltas que dará el led encendido en el tablero, ésta
cantidad debe variar, ya que se trata de un juego de azar.
Página 74
Entonces, podemos utilizar un número aleatorio (random), éste se encuentra
en el menú numérico. Ahora, como se trata de un número aleatorio, podría
variar entre 0 e infinito, entonces tendríamos que ponerle un límite. En este
caso fue de cero a 150.
Ahora, para que el led camine con una velocidad descendente, podemos usar
un contador con un shift register. Se inicializa el shift register en cero, se
conecta a un incremento y éste a un timing.
Página 75
Imagen #85: Inicialización de shift registers.
Página 76
Al correr el programa, el indicador de texto nos muestra un mensaje, éste se
encuentra dentro del while, y se mostrará durante toda la ejecución del
programa.
Aquí se usan dos frases para el usuario, entre ellas usamos un Carriage
Return Constant que nos servirá para colocar una oración debajo de la otra,
es decir; deja un espacio como si se hubiera presionado un enter al escribir o
parecido al uso de \n en el lenguaje C.
Para que se haga la resta del dinero del usuario cada vez que presiona el
botón jugar, utilizamos una variable local del control numérico.
Página 77
Imagen #88: Conexión de los botones a estructuras case.
Cada botón que representa las frutas del tablero se conecta a una estructura
case, en esta, se usa una compuerta lógica OR para advertir que si X led se
queda encendido se cumpla el caso verdadero. Si el case debe responder a
más de dos leds, se utiliza un Compound Arithmetic para poder conectar más
elementos a la compuerta.
Página 78
Imagen #89: Uso de compuerta AND en estructura case.
Página 79
Por ejemplo, en el caso de la naranja, la estructura case es la siguiente:
La naranja se repite tres veces en el tablero, por lo tanto son 3 leds los que se
usan para esa fruta, si uno de esos tres queda encendido al terminar el ciclo
for, se utiliza una operación de suma para añadirle el valor de la fruta, 10 en
este caso, al dinero del usuario, para esto se utiliza una variable local del
control “dinero”.
Si el led se detiene en la figura del muñequito que hay a los lados del tablero,
sólo se regresa la cantidad que el usuario gastó.
Página 80
Para terminar nos queda la parte donde el usuario decide cobrar el dinero
que ganó o el dinero que ingresó.
El número de repeticiones del ciclo for será la cantidad que haya en el control
numérico “dinero”. Se utiliza un shift register, que se inicializa también con el
control numérico “dinero”, se conecta a un decremento y luego a una
variable local del mismo control numérico.
Página 81
Imagen #93: Código completo de la máquina tragamonedas.
Página 82
Puedes ver un video del programa funcionando aquí:
http://www.youtube.com/watch?v=b_wL9Ncb_nA
Página 83
Y desde ahí se puede editar el ícono de la forma que se requiera, usando
imágenes, las herramientas del editor, entre otros.
Página 84