Activa JavaScript para disfrutar de los vídeos de la Mediateca.
5.Bucle While.Que es y cómo utilizarlo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
En este capítulo aprenderás a utilizar la estructura iterativa while para conseguir
00:00:00
que el código se ejecute cíclicamente. Asimismo te presentaré las funciones de tiempo necesarias
00:00:20
que deberás de utilizar para conseguir no sobrecargar al ordenador o cualquier dispositivo
00:00:26
que esté ejecutando tu programa. Por último verás cómo crear túneles para entrada y
00:00:31
salida de datos en los bucles while. Mi nombre es Obrero Cadenas y sin más, esto empieza ya.
00:00:36
Cuando se está programando, en muchas ocasiones se necesita ejecutar un determinado código durante un número de veces,
00:00:45
o que un determinado código se repita mientras se cumplan determinadas condiciones.
00:00:52
Para dar solución a esto, tienes disponibles las llamadas estructuras,
00:00:56
un tipo particular de nodo que permite controlar la ejecución de un determinado código de programa.
00:01:00
LabVIEW dispone, entre otras, de las estructuras iterativas como es el bucle WHILE,
00:01:06
que permite ejecutar un determinado código mientras se cumpla una condición
00:01:12
y el bucle FOR que permite la ejecución de un determinado código un cierto número de veces.
00:01:17
En el diagrama de bloques, haz clic con el botón derecho y despliega la paleta de funciones
00:01:24
y selecciona Programming, Estructuras, selecciona el bucle Y,
00:01:30
luego haz clic con el botón izquierdo del ratón y arrastra un rectángulo de selección alrededor de
00:01:36
la sección de código del diagrama de bloques que quieras incluir en el bucle cuando sueltes
00:01:43
el ratón aparecerá el marco que delimita la sección que ha seleccionado el bucle white
00:01:48
te permite repetir el código que se encuentra dentro del marco hasta que se cumpla una condición
00:01:54
Por lo tanto usarás la estructura while loop cuando necesites que un determinado código de programa se repita mientras una determinada condición sea cierta o falsa
00:02:00
El código dentro del marco while siempre se ejecuta al menos una vez
00:02:11
Como puedes ver en el flujo grama, primero se ejecuta el código dentro del marco while
00:02:16
Luego se mira a ver si se cumple la condición
00:02:22
si no se cumple la condición de fin se vuelve a ejecutar el código. En el caso de que se cumpla
00:02:25
la condición de fin el bucle while termina. Esta estructura iterativa del bucle while tiene dos
00:02:32
terminales. El terminal de interacción es el terminal de salida que va contando desde i igual
00:02:38
a cero el número de veces que va repitiendo la ejecución del bucle y por otro lado el terminal
00:02:45
condicional que es un terminal de entrada booleana que define la condición que permite la ejecución
00:02:50
del código contenido dentro de la estructura. El bucle while comprobará el estado de este
00:02:57
terminal al final de cada iteración. Haciendo clic derecho con el ratón encima de este terminal
00:03:02
condicional aparecerá un menú desplegable donde podrás elegir cómo quieres que se detenga la
00:03:08
ejecución del bucle while. Si seleccionas la condición stop if true el bucle while se detiene
00:03:14
si el terminal recibe un valor verdadero. En cambio si seleccionas la condición continue if true el
00:03:21
bucle while continúa si este terminal recibe un valor verdadero o lo que es lo mismo el bucle
00:03:29
while se detiene si este terminal recibe el valor falso. Cuando un bucle termina la ejecución de
00:03:35
una iteración inmediatamente empieza a ejecutarse la siguiente. Esto supone para el procesador del
00:03:42
equipo donde se está ejecutando estar prácticamente dedicado a ejecutar esta tarea y por lo tanto no
00:03:49
tendrá tiempo para ejecutar otras tareas. Así pues hay que introducir dentro de los bucles while
00:03:55
una función de tiempo de espera que haga que el VI se desactive durante un cierto tiempo y de esa
00:04:01
forma el procesador pueda abordar otras tareas durante el tiempo de espera. Coloca una función
00:04:09
de espera dentro del ciclo while para permitir que el VI se duerma por un cierto tiempo. Esto
00:04:14
permite que el procesador atienda otras tareas, como te estoy diciendo, durante el tiempo de
00:04:20
espera. Las funciones de espera utilizan el reloj de milisegundos del sistema operativo. Dos son las
00:04:25
funciones utilizadas. La función wait. Si configuras un tiempo de 10 milisegundos como
00:04:32
puedes ver en el gráfico cuando termina de ejecutarse el código dentro del bucle while
00:04:39
se espera estos 10 milisegundos y al concluir comienza de nuevo la ejecución del código y así
00:04:43
sucesivamente. Como verás a veces el código tarda más o menos tiempo en ejecutarse. Unas veces puede
00:04:50
tardar 4 milisegundos otras veces puede tardar 6 milisegundos etcétera la otra función es la
00:04:57
función wait until next si configuras un tiempo de 10 milisegundos como puedes ver en el gráfico
00:05:05
si el código inicialmente tarda 4 milisegundos en ejecutarse el tiempo de espera o descanso de
00:05:12
la cpu será de 6 milisegundos ya que el tiempo programado es de 10 milisegundos en cambio en
00:05:19
el segundo ciclo el código tarda en ejecutarse 8 milisegundos. Solo estará en espera 2 milisegundos
00:05:26
como puedes ver. Evidentemente para que esta función sea efectiva el tiempo que tarda en
00:05:33
ejecutarse el código deberá ser inferior al tiempo especificado para esta función. Como puedes
00:05:39
observar cuando se ejecuta un VI utilizando la ejecución cíclica mediante el icono de la barra
00:05:46
de herramientas, la CPU del equipo donde se está ejecutando está el 70% del tiempo atendiendo a
00:05:52
esta tarea, teniendo poco tiempo para realizar otras tareas. Cuando se ejecuta cíclicamente un
00:05:59
programa pero utilizamos un bloque while sin función de espera dentro del bucle, la CPU es
00:06:04
utilizada el 51% del tiempo por este recurso. Y por último, cuando se ejecuta cíclicamente un
00:06:10
programa utilizando un bloque while donde hemos introducido una función de espera dentro
00:06:17
del bucle, la CPU es utilizada solamente el 1% del tiempo por ese recurso.
00:06:22
Bien, vamos a realizar un ejercicio donde vas a ver la utilidad del bucle while.
00:06:29
Este ejercicio consiste en que nos va a mostrar la temperatura actual en grados centígrados,
00:06:34
Vamos a modificar aquí, vamos a ponerle grados centígrados y nos va a permitir que introduzcamos un valor máximo y un valor mínimo.
00:06:41
De tal manera que cuando la temperatura sea mayor del valor máximo, aparezca en este indicador de texto una advertencia y diga, por ejemplo, advertencia de golpe de calor.
00:06:52
En cambio, cuando la temperatura actual sea menor que la temperatura mínima, se muestra aquí en un texto y diga, por ejemplo, advertencia de congelación.
00:07:02
Si la temperatura actual está comprendida entre el valor máximo y el valor mínimo, entonces mostrará sin advertencia.
00:07:13
Siempre que haya una advertencia se encenderá este LED.
00:07:21
Bien, el VI que ves es este.
00:07:25
aquí tendríamos el control para introducir la temperatura actual
00:07:27
el control para introducir la temperatura mínima
00:07:31
y el control para introducir la temperatura máxima
00:07:34
además necesitamos la función de selección que ya conoces
00:07:37
también tendríamos una función de comparación
00:07:42
x es menor o igual a y
00:07:46
y una función también de comparación mayor o igual que
00:07:49
esta entrada mayor o igual que esta entrada
00:07:52
Si se cumple, esto será verdadero.
00:07:56
Bien, vamos entonces a empezar por aquí.
00:07:58
Metemos por aquí la temperatura actual y la estamos comparando.
00:08:01
Y estamos preguntando, ¿la temperatura actual es mayor o igual que la temperatura máxima?
00:08:03
Si es verdadero, este texto va a salir en esta salida.
00:08:09
Si es falso, este texto va a salir en esta salida.
00:08:16
Por otro lado, aquí en esta otra comparación comparamos la temperatura actual con el valor mínimo
00:08:20
Y decimos, la temperatura actual es menor o igual que la mínima
00:08:26
Si es verdadero, lo que tenemos aquí saldrá aquí
00:08:31
Si es falso, lo que tendremos aquí, el texto que tendremos aquí
00:08:36
Que es el resultado de esta otra comparación, lo tendremos en la salida
00:08:40
¿Sí?
00:08:44
Advertencia, este sería este led de aquí
00:08:47
cuando se enciende este led esta función dice que cuando estas dos entradas son distintas este led
00:08:49
se enciende esta salida sería verdadera por lo tanto este led se enciende cuando lo que tengo
00:08:57
aquí es distinto de este texto sin advertencias y no se enciende este led cuando lo que sale por
00:09:03
aquí es el texto sin advertencias bien cómo conseguir este indicador este es un indicador
00:09:10
que no hemos visto es un indicador de texto de string botón derecho encima del panel frontal
00:09:19
vas a string control para introducir texto e indicador para visualizar texto en este caso
00:09:25
necesitamos un indicador y este sería el indicador que tendríamos que colocar aquí hay una clara
00:09:35
diferencia de símbolos y esto es debido a que yo puedo convertir este formato si
00:09:42
le quitó aquí ver como un icono pues me queda así en pequeño vale y ocupa menos
00:09:49
espacio también pasa lo mismo con él con el led
00:09:55
en el led no podemos también poner como un icono y lo veríamos así de acuerdo
00:10:00
bien por último sólo me queda comentarte que esto es una constante de texto para
00:10:07
conseguir la botón derecho vamos a string y aquí abajo tenemos constante de texto
00:10:14
las locas y aquí puedes escribir el texto que quieras y luego ya conectarías con la entrada
00:10:23
que corresponda bien vamos a ejecutar este v y lo vamos a ejecutar cíclicamente con esta
00:10:33
función si bien lo está ejecutando cíclicamente vamos a hacer control al suprimir y seleccionar
00:10:42
el administrador de tareas el seleccionado rendimiento y estoy viendo que la cpu tiene
00:10:50
una ocupación del 48 49 por ciento está ocupada ese porcentaje si podemos abrir el monitor de
00:10:56
recursos vale y aquí tendrías el mi procesador del ordenador de la computadora tiene cuatro
00:11:05
núcleos estos serían los cuatro núcleos y tiene una ocupación bueno el núcleo cpu 3 casi casi
00:11:12
al 100% bien esto es lo que ocurre cuando estamos ejecutando cíclicamente con esta función vamos a
00:11:19
parar y vamos a introducir el buque wild hacemos botón derecho en extracta wild loop ahora pincho
00:11:27
y arrastro y voy a crear aquí un control botón derecho create control muy bien este sería el
00:11:37
botón para detener el v vamos a ejecutarlo no ahora cíclicamente si no vamos a ejecutarlo
00:11:49
una vez pero como tenemos el bucle white eso está ahí ejecutándose una y otra vez que estamos
00:11:55
observando que prácticamente bajo algo ahora son unos 47 tal bajo algo la ocupación de la cpu pero
00:12:01
bueno todavía está bastante sobrecargada bien por último vamos a parar vamos a introducir aquí una
00:12:10
función de tiempo de espera botón derecho en timing wait y vamos a ponerle por ejemplo
00:12:19
una constante cread constant de 10 milisegundos con 10 milisegundos de espera vamos a ver qué
00:12:28
efecto conseguimos ejecutamos y miramos aquí la cpu y sorprendentemente bajo considerablemente
00:12:37
Ahora tenemos la CPU ocupada, 11, 12, 14, 11, ha disminuido mucho el recurso que estamos utilizando de la computadora.
00:12:46
Esta es una de las ventajas de ejecutar cíclicamente utilizando una función while, pero siempre acuérdate de poner una función de espera, aunque sea tan poco como 10 milisegundos.
00:13:00
Cuando deseemos introducir datos dentro de un bucle while o sacar datos de un bucle while
00:13:12
debemos utilizar los túneles
00:13:20
Estos alimentan datos desde y hacia la estructura while
00:13:23
El túnel aparece como un bloque sólido en el borde del ciclo while como estás viendo
00:13:27
El bloque es del color del tipo de datos cableado al túnel
00:13:32
En este caso el color es de naranja que representa datos con decimales.
00:13:37
Cuando un túnel pasa datos a un ciclo, el ciclo se ejecuta solamente después de que los datos lleguen al túnel.
00:13:42
En el ejemplo hay un control, un número elegido del 1 al 10, que entra en el túnel y una vez haya pasado al bucle,
00:13:50
éste comienza a ejecutarse no volviendo a leer dicho valor del control.
00:14:00
Los datos salen fuera del ciclo después de que el ciclo haya terminado
00:14:05
En el ejemplo de la imagen el terminal de iteración está conectado a un túnel
00:14:10
El valor en el túnel pasa al indicador de iteraciones cuando termine de ejecutarse el ciclo while
00:14:15
El túnel de salida como ves aparece también en color del tipo de datos cableado
00:14:21
En este caso es un dato de tipo entero
00:14:27
Los túneles permiten suministrar datos hacia dentro solo antes del inicio del bucle y hacia fuera del bucle while, solo después del final del bucle.
00:14:30
Los ciclos infinitos son un error común de programación que involucra un ciclo que nunca se detiene.
00:14:42
Si el terminal condicional es STOPIFTRUE y le conectas un control booleano fuera del ciclo WHILE
00:14:49
Ocurrirá que si el control es falso, cuando comienza el ciclo a ejecutarse provocará un ciclo infinito
00:14:57
Recuerda, el valor del control STOP solamente es leído antes de que inicie el ciclo WHILE
00:15:06
Por tanto, si al inicio valía falso, aunque el control de stop tome el valor verdadero una vez se haya iniciado el bucle while, no detiene el ciclo infinito, ya que el valor en el terminal condicional sigue siendo falso y no se puede detener accionando el control stop.
00:15:13
Para detener un ciclo infinito, debes abortar el VI al hacer clic en el botón de abortar en la barra de ejecución.
00:15:33
Por lo tanto, para poder usar un control para detener un ciclo while, debes colocar siempre el terminal dentro del bucle while como ves en la imagen.
00:15:43
El VI que ves en la pantalla determina el número de iteraciones que debe hacer el bucle while para generar un número entero entre 0 y 10 que coincida con el número seleccionado en el terminal.
00:15:53
Bien, para realizar un túnel de entrada, simplemente vamos a conectar este terminal, este control, pinchamos, arrastramos y conectamos con esta función de igualdad y ya se generó aquí el túnel.
00:16:05
Para hacer un túnel de salida, pues lo mismo, pinchamos, arrastramos y conectamos a este indicador que nos va a determinar el número de iteraciones que va a realizar el UI.
00:16:21
Vamos a ver cómo funcionaría esto.
00:16:34
Aquí tenemos una función que os presento y que se trata de la función que genera un número aleatorio entre 0 y 1.
00:16:36
Aquí puedes ver, produce un número de doble precisión, un número de tipo TBL entre 0 y 1.
00:16:45
Aleatoriamente.
00:16:53
Lo multiplico por 10, por lo tanto estoy generando un número decimal entre 0 y 10.
00:16:54
con esta otra función lo que estoy haciendo es redondeando al entero más próximo al número decimal que tengo aquí
00:17:00
por ejemplo si tengo 2 con 4 redondea a 2, si tengo 2 con 8 redondea a 3
00:17:09
bien, ese número sería mostrado una vez ejecutamos el programa sería mostrado en este indicador de aquí
00:17:14
sería el número que va generando este VI
00:17:21
este bucle se va repitiendo y generaría un número
00:17:23
parecería aquí, ese número lo comparamos
00:17:28
con el número que hemos introducido previamente
00:17:31
antes de iniciar el bucle while
00:17:34
si son iguales, esto sería verdadero
00:17:36
esto sería una función o
00:17:39
la función o funciona de la siguiente manera
00:17:42
la salida es verdadera o bien cuando esta entrada sea verdadera
00:17:44
o cuando esta otra entrada sea verdadera
00:17:48
o cuando las dos entradas sean verdaderas
00:17:51
este terminal de interacción, esta es una salida
00:17:53
y este número va contando el número de interacciones
00:17:56
empezaría en 0, 1, 2, 3
00:17:59
es decir que se ejecuta todo esto
00:18:01
si aquí es falso
00:18:03
se vuelve otra vez a ejecutar
00:18:06
pero antes esperaría 500 milisegundos
00:18:08
espera 500 milisegundos y otra vez vuelve a ejecutarse
00:18:11
¿Coinciden estos valores? No
00:18:15
¿Has pulsado el botón de stop? No
00:18:17
por lo tanto aquí tendríamos falso
00:18:21
y se vuelve otra vez a repetir
00:18:23
es decir, cuando no pulso, cuando no acciono este pulsador
00:18:25
pues es falso lo que está devolviendo
00:18:30
bien, vamos a ejecutarlo, aquí selecciono el número 1
00:18:33
voy a ejecutarlo, y se detiene
00:18:38
a las dos iteraciones, solo hizo dos iteraciones, solo lo repitió esto dos veces
00:18:44
y ya generó el número 1, vamos a poner por ejemplo
00:18:48
el número 6, ejecutamos otra vez
00:18:51
mientras se está ejecutando se puede cambiar este número a 4
00:18:54
¿cuándo se detuvo? cuando coincidió con el 6
00:19:01
porque yo a pesar de haber cambiado esto
00:19:04
el bucle while recordar
00:19:08
este dato que está aquí en el túnel
00:19:10
es al iniciarse el bucle while
00:19:12
que era 6
00:19:15
aunque lo cambie y le ponga 4
00:19:17
él sigue con el dato que está introducido en este túnel
00:19:19
que sería 6
00:19:23
y tuvo que realizar 11 iteraciones
00:19:24
vamos con un numerito más
00:19:27
por ejemplo vamos a
00:19:30
poner el número 8
00:19:31
damos aquí
00:19:33
y si quiero detener el UI
00:19:35
pulso
00:19:37
pulso
00:19:38
tengo que mantener un tiempo más de 500 milisegundos
00:19:40
porque si hago una pulsación corta
00:19:44
no se detiene
00:19:45
por ejemplo mirad
00:19:47
una pulsación corta no, pero una pulsación de más de medio segundo
00:19:48
pues si se detiene
00:19:51
Bien eso es todo, espero que el video tutorial te haya gustado
00:19:53
Si es así por favor dale al me gusta, pulgar arriba
00:19:59
Y si quieres estar informado de próximos video tutoriales que vaya subiendo
00:20:02
Anímate y suscríbete a mi canal a cadenas
00:20:05
En caso de que no te haya gustado puedes ponerme en comentarios en la parte de abajo del video
00:20:07
Que es lo que no te ha gustado para que la próxima vez pueda mejorar en la explicación
00:20:12
Gracias, hasta luego
00:20:16
- Etiquetas:
- Robótica
- Subido por:
- Victoriano G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 3
- Fecha:
- 5 de febrero de 2026 - 17:43
- Visibilidad:
- Público
- Centro:
- IES JULIO VERNE
- Duración:
- 20′ 20″
- Relación de aspecto:
- 1.79:1
- Resolución:
- 1104x616 píxeles
- Tamaño:
- 84.86 MBytes