Está en la página 1de 30

QUITO, 06 DE OCTUBRE DEL

Control de Flujo de programa en


2020 LabVIEW. Estructuras repetitivas
EVALUACIÓN PARCIAL 4
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

INTRODUCCION

En el siguiente documento realizaremos ejercicios y las correspondientes simulaciones


sobre control de flujo con ayuda del simulador LABVIEW practicaremos y
aprenderemos.

DESARROLLO

Ejercicio 1:

Realice un programa que permita encontrar el máximo de 100 números generados texto

aleatoriamente. Represente gráficamente los números generados.

El ejercicio una vez terminado debe conducir a una representación en Lenguaje G como
la que se muestra a continuación en la ventana de diagrama o código del LabView:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

Veamos como desarrollar paso a paso dicho ejercicio. Primero, una explicación de lo
que se nos pide.

Se necesitan generar 100 números aleatorios, lo que implica utilizar un generador de


números aleatorios y un lazo de control de programa o repetición que permita que ese
generador de números aleatorios nos entregue 100 de dichos números.

Cada vez que se nos entregue un número, o sea, con cada iteración del bucle o lazo, se
debe comparar el número generado con el número máximo hasta ahora generado. Eso
nos indica que debemos realizar una comparación que busque el máximo y almacenarlo
para comparar en cada iteración con el nuevo número.

Se nos pide que representemos gráficamente dichos números por lo que debemos
agregar un gráfico a nuestro diseño encargado de plotear en cada iteración el número
aleatorio a procesar. Como descomponer entonces con LabView dichas operaciones?

1. Primero debemos crear el lazo de control o bucle. Para ello seleccionamos de la


paleta de funciones del LabView las funciones de estructuras y dentro de ella la del
ciclo For. El ciclo for es el escogido porque en este caso necesitamos repetir la
operación de comparación en la búsqueda de un máximo 100 veces,
invariablemente. Si estuviéramos sujetos a alguna condición entonces deberíamos
de haber seleccionado un lazo condicional, o sea, un While. La siguiente figura
ilustra como hacer la selección:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

2. Una vez que se ha puesto el ciclo for debemos definir el alcance del mismo. Se
recuerda que un ciclo for en LabView siempre va desde 0 hasta N-1, siendo N el
valor a definir. Aquí queremos realizar las operaciones 100 veces por lo que
debemos definir para N un valor de 100. Esto se realiza creando una constante y
conectándola con N. Es muy sencillo, la siguiente figura ilustra como hacerlo. El
menú que allí aparece se obtiene dando clic derecho encima de N:

3. Cuando la constante se crea, aparece con valor 0. Debemos cambiar dicho valor y
poner 100, como se muestra en la siguiente figura:

4. Necesitamos ahora generar un número aleatorio y compararlo con algún máximo. Por
supuesto, el primer número aleatorio no tiene referencia de comparación, pero como
debemos comparar dentro del ciclo for, basta con compararlo con el menor valor
posible que se pudiera generar, en este caso 0, con lo cual garantizamos que el primer
número aleatorio siempre será el primer máximo contra el cual comparar después los
sucesivos que se generarán. LabView presenta un componente que realiza la
comparación entre dos fuentes o números, y devuelve el mínimo valor de entre los
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

dos y el máximo. La siguiente figura muestra como seleccionar dicho componente


(Functions/Comparison/Max & Min):

Se inserta en la ventana de diagrama del ciclo for:

5. Necesitamos ahora encontrar alguna función que genere números aleatorios.


LabView tiene un componente en Functions/Numeric/Random Number (0-1):
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

Si quisiéramos generar un número aleatorio en un rango diferente podemos multiplicar


el número generado con esta función por el valor máximo que queremos generar. Puede
modificar el ejercicio como estudio independiente ahora intentando buscar el máximo de
100 números aleatorios en el rango de 0-50.

Una vez introducidos en el diagrama el generador de números aleatorios y la función


que devuelve el máximo entre dos números debemos entonces buscar la forma de
almacenar el máximo que resulta de cada iteración para compararlo con el número
generado en la siguiente iteración. Si se analiza bien esto lo que necesitamos es
comparar el número generado en la iteración i (denotemos por n(i) a dicho número) con
el máximo que resultó de la iteración i-1. Esta es una de las funciones que puede
brindarnos el registro de desplazamiento o shift register de LabView.

El shift register desde el punto de vista de la programación es una estructura tipo arreglo
asociada con lazos de control o bucles de programa como el for y el while y que
almacena valores anteriores producidos en dichos lazos. Así, por ejemplo, si obtenemos
como resultado de una iteración i un valor v(i) al final de dicha iteración, al comienzo
de la próxima al i incrementarse en uno, dicho valor se almacena como v(i-1). Dos
iteraciones hacia delante será v(i-2) y así sucesivamente. La siguiente tabla ilustra dicho
concepto con ejemplos numéricos:

y así sucesivamente....
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

6. Para adicionar Shift Registers con LabView se selecciona la estructura for y se da


clic derecho sobre ella. El siguiente menú aparece:

Al seleccionar de dicho menú la última opción, Add Shift Register (Adicionar registro
de desplazamiento) se inserta en el diagrama como se muestra en la siguiente figura:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

7. Antes de realizar las conexiones entre los elementos debemos además seleccionar
algún componente que nos permita visualizar gráficamente los números
aleatorios que se van generando. Para ello nos vamos al panel frontal y con clic
derecho visualizamos el siguiente menú:

Al seleccionar la opción Controls/Graph/Waveform Chart obtenemos un gráfico como el que se


representa en la pantalla frontal de la siguiente figura, donde también se representa el contenido
de la ventana de diagrama hasta este momento:

8. A continuación se realizan las conexiones entre los elementos. La salida del


generador de números aleatorios se conecta al bloque de comparación de
números, y a la entrada del control gráfico. El shift register de la derecha debe
almacenar el último valor del máximo calculado y que se obtiene como salida del
módulo de comparación. La siguiente figura muestra las conexiones a realizar:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

9. - Una vez realizadas estas conexiones el ejercicio está prácticamente concluido. Note
que la primera vez que se compara en el bloque de comparación se hace entre un primer
número aleatorio y el valor del shift register. Ya se explicó como funciona el shift
register y debemos notar que antes de concluir la primera iteración no tenemos un valor
con el cual comenzar para el shift register que adquiere uno al final de cada iteración.
Eso nos indica que tenemos que inicializarlo, darle un valor inicial con el cual empezar
y evaluar la iteración 0 . Note además que cuando se llega a la última iteración el valor
actual que contiene el shift register es el del último máximo calculado, y por tanto el
valor que debemos reportar como resultado. Es por ello que entonces debemos crear un
indicador para visualizar el último máximo y una constante para definir la condición
inicial del shift register. Las figuras que se muestran a continuación ilustran como
hacerlo. Los menús que allí aparecen se obtienen al dar clic derecho encima de los shift
registers.
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

El resultado final se muestra en la siguiente figura. Note que el valor inicial del shift
register es 0.00 pues es el mínimo que puede tomar el número aleatorio y no afectará la
selección del primer máximo.

10. Antes de ejecutar el programa es conveniente modificar algunos parámetros del


gráfico, en particular los relacionados con los ejes, que debemos modificar para
permitir la auto escala. Las figuras a continuación muestran la manera de hacerlo
(siempre clic derecho en el objeto para obtener el menú):
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

11. Finalmente salvamos el ejercicio y lo ejecutamos. Un ejemplo de ejecución se


muestra en la siguiente figura:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

Por último, señalar que si queremos que el gráfico se represente más lentamente podemos
incluir una demora (Functions/Time & Dialog/ Wait Until Next ms Multiple) o
seleccionar el indicador de ejecución paso a paso. La siguiente figura muestra como
quedaría el ejercicio para una demora de 50 milisegundos:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

Ejercicio 2:

En este ejercicio se propone realizar la descomposición de la fecha introducida


en un control tipo Edit (Edición) de una manera más eficiente (comparada con la
primera solución a este ejercicio que ya se vio en una guía anterior), haciendo
uso de los shift registers.

Desarrollo:

En clases anteriores se ofreció una solución al problema de desglose de una


fecha en sus componentes de día, mes y año. Aquella solución introducía
algunos componentes para el procesamiento de cadenas que se encuentran
dentro de las funciones de LabView. En dicha solución los componentes se
repetían, pero hay una forma más eficiente de resolverlo haciendo uso de los shift
registers. La solución final se ofrece en la siguiente figura:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

Se recuerda la función y terminales de los dos elementos principales

involucrados:

Antes de pasar a una explicación más o menos detallada de como construir la solución en
la pantalla de diagrama veamos algunos razonamientos de como proceder con los shift
registers:

1. Se quiere dividir una cadena que representa la fecha en sus tres elementos
constitutivos, o sea, el día, el mes y el año que la conforman.
2. La operación siempre es la misma: se extrae de la cadena una subcadena que
representa un componente de la fecha (o el día, o el mes o el año) y se elimina de
la subcadena que resulta de extraer dicho componente el separador /.
3. El proceso se repite 3 veces.

El punto 3 nos indica que podemos utilizar un lazo condicional, o sea, un while, pues
siempre dentro del while se hará lo mismo (punto 2). La subcadena que representa el
componente extraído debe almacenarse para brindar los resultados finales. Como
entonces utilizar los shift registers? Quizá una manera en que podemos verlo es
representando el proceso, para una fecha ejemplo, a través de las iteraciones. La
siguiente tabla lo ilustra:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

Como se puede apreciar por cada iteración se obtiene un componente resultante, primero el
día, después el mes y por último el año. Si denotamos por c(i) al componente resultante se
puede ver que después de la iteración 2 c(i)=2005, c(i-1)=02 y c(i-2)=8. Dicha secuencia es la
que precisamente nos pueden brindar los shift register si creamos los suficientes en el
diagrama como para almacenar los valores c(i-2), c(i-1) y c(i). Necesitamos además de una

iteración a otra almacenar la subcadena resultante después de extraer el separador que será la
nueva cadena inicial con la cual trabajar en la próxima iteración. Veamos pues como
hacerlo. 1. Primero debemos de crear el lazo condicional while en nuestra aplicación:

2. Debemos ahora definir la condición de parada. Queremos que el lazo funcione mientras la
iteración no sea mayor que dos, por tanto, la condición de ejecución del while debe ser i<=2.
La siguiente figura nos indica como quedaría (el componente de comparación aparece en
Functions/Comparison/Less or Equal?):
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

3. En el panel Frontal debemos insertar un control de tipo String para poder teclear la fecha
que se quiere descomponer (Controls/String & Path/String Control):

Note que en la siguiente figura el control generado en el panel frontal tiene asociado una
variable que debemos ubicar fuera del lazo while pues es la cadena inicial que hay que
descomponer.

4. Insertamos ahora en la ventana de diagrama el componente Search/Split String


(Functions/String/Aditional String Functions/Search Split String):
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

5. Una vez introducido dicho componente se crea el primer shift register, que tendrá la
función de almacenar la subcadena resultante después de cada iteración. En la
siguiente figura aparece representado. A la función de dividir (Split) cadenas se le
asigna en cada iteración la cadena inicial (ver tabla página 13) que está almacenada
en el shift register (por ejemplo, si en la iteración que acaba de concluir quedó
02/2005 ese valor se almacena en el shift register de la derecha y cuando se
incrementa i para iniciar una nueva iteración esa cadena (ahora, después de
incrementada i es el resultado de la iteración i-1) LabView la pasa o ubica en el shift
register de la izquierda para que sea usada en la iteración i).

Como ya mencionamos anteriormente, los shift register tienen que tener un valor inicial,
para que sea el valor con el cual comienza a trabajar la iteración 0. En este caso el valor
inicial es la cadena inicial introducida en el edit, o sea, la fecha completa que se quiere
dividir. En la figura anterior se mostró la conexión que inicializa al shift register.

6. Una vez introducido este registro de desplazamiento hay que completar las entradas
del modulo de división de cadena. Para ello se agregan dos constantes en la entrada,
y se le dan, respectivamente, valores de / (que es el separador) y 0. Dichos valores le
indican al Labview que la cadena que tiene en su entrada y que será dividida en dos
se comenzará a explorar desde el primer elemento (elemento 0) hasta detectar el
carácter /.
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

Esta función tiene dos salidas, la primera es la subcadena encontrada antes del carácter que
divide la cadena de entrada en dos cadenas (en nuestro ejemplo /). La segunda salida es la
cadena que se encuentra desde el separador hasta el final. Note que incluye al separador.
Las dos salidas serán de utilidad, la que está delante del separador es el componente de la
fecha que estamos separando (día, mes o año) y la segunda la que hay que seguir separando.
Que hacer con la primera? Hay que almacenarla pues de lo contrario en la próxima iteración
tendré otra componente resultante de la comparación que cambiará la salida de la función
Search/Split String.

7. Para ello debemos utilizar un nuevo shift register, en este caso, uno que tendrá la
función de los componentes resultantes. La siguiente figura indica la forma de
insertarlo:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

8. Que conectar al shift register que no aparece conectado en la figura anterior?


Recuerde que será el encargado de almacenar la cadena que en la próxima iteración
servirá de inicio para buscar el nuevo componente de la fecha. Note además que no
se puede conectar directamente a la salida de la primera función (Search/Split
Function) pues esa salida incluye todavía el separador (ver tabla pág. 13) y hay que
eliminarlo. Para ello se usa la función que se representa en la siguiente figura
(Functions/String/String Subset)

También se pudo utilizar una segunda función split, pero la que se ha escogido es la más
representativa de lo que se quiere hacer puesto que recibe a su entrada una cadena y
devuelve la subcadena que se encuentra desde la posición k hasta la l, donde k y l son otras
entradas de la función. Nosotros queremos tomar la cadena que sale de la función
Search/Split... y quitarle el separador, o sea, quedarnos con el subconjunto o subcadena que
se encuentra desde la posición 1 (en la posición 0 está el separador hasta el final):
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

9.- Ahora si podemos conectar la salida de esta función String Subset al shift register de su
derecha:

10. Hasta aquí lo que está programado funciona bien pero no nos permite visualizar todos
los resultados. El resultado se obtiene en el shift register que en la figura anterior no
está conectado. Que componente se obtiene ahí después de concluida la última (i=3)
iteración? La respuesta es que se obtiene el valor del shift register asociado (el de la

parte derecha a su mismo nivel) en la iteración i-1. Cual es ese valor? Del ejemplo de
la Tabla en la Página 13 podemos ver que es el año. Note que al final de la última
iteración el valor del shift register asociado de la derecha era “”. Conectemos
entonces un indicador tipo string al shift register no conectado hasta ahora (clic
derecho, en el menú que aparece seleccionar Create/Indicator). Cambiando el
nombre del indicador por el de año obtenemos:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

11. Eso nos permite visualizar el año. Pero y el mes? Si el año fue el valor resultante en la
iteración i-1, es de suponer que el mes es el valor resultante en la iteración i-2. Pero ese valor
no lo tenemos almacenado. Hay que almacenarlo. Crear elementos del shift register para las
iteraciones i-2, i-3, i-4,.... es fácil . Solo hay que agregar un elemento al shift register ya
creado. La siguiente figura muestra como hacerlo. El menú que aparece en ella se obtiene
con clic derecho sobre el shift register de la derecha (el conectado al indicador de año):

El resultado:

12. Debemos agregar otro nivel, (el de i-3) para el componente día de la fecha:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

A cada nivel creado se le asocia el indicador de cadena correspondiente, de la misma forma


que se hizo con el año:

13. Antes de concluir debemos realizar una operación más. Hay 3 elementos en el
registro de desplazamiento asociado con el año, el mes y el día que no han sido
inicializados. Que valor les corresponde? Aquí en realidad no tiene importancia el
valor que le demos pues solo están conectados (los elementos del shift register) y por
lo tanto el valor que al concluir el while mostrarán serán los componentes de la
cadena fecha. Sin embargo, es una práctica sana inicializarlos, y por eso se hará,
dándole un valor inicial de “” que indicará cadena vacía. La siguiente figura muestra
como hacerlo:

La constante de cadena vacía se encuentra definida en la biblioteca de funciones de


LabView Functions/String/Empty String constant.

En la ventana o panel frontal nuestro diseño sería más o menos así. Para probar que nuestro
programa se ejecuta debemos antes de ejecutarlo darle un valor inicial a la fecha que se
descompondrá, editando en el control Fecha el valor:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

08/01/1990

Después de una ejecución, y para esa cadena se obtiene:

1990

1
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

Ejercicio 3:

Realice un programa en LabView que permita gráficar la función seno hasta que se oprima
el botón parar.

Desarrollo:

Este ejercicio nos permitirá conocer como trabajar con el Nodo Fórmula. Que se nos pide?
Graficar la función seno(x) hasta que se oprima un botón. Eso nos indica que debemos
ubicar un lazo o bucle de repetición condicional, o sea, un while. La condición de parada
del while la producirá el clic sobre un botón. Dentro del while debemos de estar evaluando,
para cada iteración a la función seno(x). Que valor le damos a x? Podemos usar el mismo
valor de la iteración i. El único problema es que el seno(x) espera el valor en radianes por lo
que hay que convertir el valor de i a dicha unidad, y después calcular el seno. Este es un
caso típico en que un nodo fórmula nos simplifica mucho el trabajo. Veamos la solución.

1. Primero comenzamos creando el ciclo while y un botón (ya se sabe como hacerlo de
clases anteriores):
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

En la figura anterior aparece nuevo el elemento negado, que conecta al botón con la
condición de ejecución del while. En clases anteriores vimos que se podía también cambiar
la condición de ejecución del while con clic en ella: aparece un circulo rojo. En versiones
anteriores a la 6.0 no existía dicha posibilidad.

2. Después de introducido el while se crea el nodo fórmula según se muestra en la


siguiente figura:

3.

Una vez creado el nodo fórmula tenemos que indicar cuales serán las variables de
entrada de dicho nodo y cuales las de salida. Comenzando por las de entrada se
adicionan de la siguiente manera (el menú aparece al dar clic derecho en el nodo
fórmula):
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

4. A dicha entrada le damos el valor de nx:

5. Ahora debemos editar dentro del nodo fórmula el contenido de lo que se quiere
calcular. Para este caso son 3 lineas. Note la similitud entre C++ o Matlab y el
lenguaje que admite el nodo fórmula. Dicho nodo es compatible con ANSI C.

6. La fórmula convierte de grados a radianes y calcula el seno. El valor calculado lo


devuelve en la variable y, que hay que declararla como salida del nodo de la misma
forma que la entrada pero ahora seleccionando la opción Add Output. Una vez hecho
esto se realiza la conexión entre el indicador de iteración i y la variable de entrada
nx. La siguiente figura muestra como debe quedarnos la aplicación hasta este
momento en la ventana de diagrama:
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

7. La salida, que se produce en cada iteración, podemos conectarla a un componente para


plotear gráficos de la misma manera a como lo hicimos en el ejercicio 1:

La salida “y” del nodo fórmula se conecta al gráfico:


INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

La figura que se muestra a continuación es el resultado de la ejecución del programa:

CONCLUSIONES

Damos como concluida la practica obteniendo resultados favorables como ejemplo en el


primer ejercicio una vez ejecutado logramos observar en la pantalla formas de ondas
distorcionadas, añadimos una demora de 50 mili segundos para lograr apreciar de mejor
manera las ondas .

En el segundo ejercicio obtenemos la descomposición de la fecha introducida en un control


tipo Edit (Edición) con la ayuda de otros elementos.

Y por ultimo en el tercer ejercicio un poco parecido al primero pero con una diferencia en el
momento de elaborarlo ya que este introducimos una formula la cual obtuvimos como
resultado final ondas senoidales.
INSTITUTO SUPERIOR TECNOLOGICO
CENTAL TECNICO

RECOMENDACIONES

La principal recomendación es aprender ha usar el software LABVIEW .


Reconocer las diferentes herramientas que este software nos brinda asi como cada elemento
en el lenguaje de programacion.
Diferenciar entre las herramientas de control y las de funcionamiento .

WEBGRAFIA
https://classroom.google.com/u/0/c/MTIwMTUwNDY4MTg4/a/MTgxMTMyMzQ1MjU3/de
tails
https://www.ni.com/es-cr/support/downloads/software-
products/download.labview.html#346254

Bibliografía
Edison,joel,ivan2020

También podría gustarte