1 00:00:00,240 --> 00:00:21,600 En este capítulo aprenderás a utilizar los registros de desplazamiento y su equivalente 2 00:00:21,600 --> 00:00:27,120 el nodo de realimentación, que tan útiles resulta en los programas y verás varios ejemplos 3 00:00:27,120 --> 00:00:31,800 de utilización de los mismos. Al final del vídeo te agradecería me hicieras algún comentario 4 00:00:31,800 --> 00:00:36,159 sobre qué te ha parecido. Si quieres que siga con el curso no dudes en suscribirte 5 00:00:36,159 --> 00:00:40,320 a mi canal. Mi nombre es Aureo Cadenas y sin más, esto empieza ya. 6 00:00:40,320 --> 00:00:58,369 Los registros de desplazamiento son variables locales disponibles para las dos estructuras iterativas que ya conoces, el bucle FOR y el bucle WHILE, que permiten transferir datos de una iteración a la siguiente como vas a ver seguidamente. 7 00:00:58,630 --> 00:01:05,670 Como mínimo tienen un terminal de entrada, lado izquierdo, y otro de salida, situado en el lado derecho. 8 00:01:05,670 --> 00:01:16,489 Se pueden incrementar el número de terminales a la entrada y cuantos más terminales se dispongan, más iteraciones se pueden almacenar, como verás más adelante. 9 00:01:18,530 --> 00:01:29,909 Para crear un registro de desplazamiento, aquí tenemos un VI, te pones en el borde de esta estructura de bucle FOR, haces botón derecho, añadir registro de desplazamiento. 10 00:01:30,650 --> 00:01:38,290 Automáticamente se te crea un registro de desplazamiento, pinchamos y arrastramos hasta colocarlo en el lugar que corresponda 11 00:01:38,290 --> 00:01:44,769 y hacemos clic, botón izquierdo y lo colocamos en esta entrada de la función suma. 12 00:01:44,769 --> 00:01:56,230 Y el otro lo cableamos a la salida, soltamos y ya tendríamos este registro de desplazamiento con su dato de tipo DBL listo para ser usado. 13 00:01:56,230 --> 00:02:03,750 Bien, los registros de desplazamiento, como ya te he dicho, transfieren datos de una iteración a la siguiente 14 00:02:03,750 --> 00:02:08,669 de forma que el terminal derecho almacena el dato al finalizar una iteración 15 00:02:08,669 --> 00:02:14,449 y lo pasa al terminal de la izquierda quien proporciona el dato al comienzo de la siguiente iteración 16 00:02:14,449 --> 00:02:18,469 Un registro de desplazamiento se adapta a cualquier dato que le conectes 17 00:02:18,469 --> 00:02:26,409 Como puedes observar en la primera iteración se introduce un valor 0 inicial antes de que se inicie el ciclo while 18 00:02:26,409 --> 00:02:32,310 y al ejecutarse el primer ciclo el resultado de la suma es 5 19 00:02:32,310 --> 00:02:40,930 El registro de desplazamiento lo pasará a la entrada para que la segunda iteración lo tome como valor de inicio 20 00:02:40,930 --> 00:02:46,650 el cual será sumado a la constante 5 y resultará el valor de 10 21 00:02:46,650 --> 00:02:55,409 El registro de desplazamiento lo pasará a la entrada para que la tercera iteración lo tome como valor de inicio 22 00:02:55,409 --> 00:03:02,050 El cual será sumado con la constante 5 y resultará el valor de salida 15 23 00:03:02,050 --> 00:03:08,150 Y así sucesivamente hasta que se detenga el ciclo while al presionar sobre el botón stop 24 00:03:08,150 --> 00:03:17,969 Los registros de desplazamiento se utilizan para muchas aplicaciones que necesiten memorizar datos como verás en los diferentes ejemplos que te voy a ir mostrando. 25 00:03:18,810 --> 00:03:29,650 En este ejemplo se dispone de un bucle FOR que se repite 5 veces con un tiempo de espera entre iteración e iteración de 2 segundos, 2000 milisegundos. 26 00:03:29,650 --> 00:03:36,729 Al comenzar el proceso de iteración el registro de desplazamiento es iniciado con el valor 0 en el terminal de la izquierda. 27 00:03:36,729 --> 00:03:42,629 Como puedes ver se trata de un contador que cuenta de 5 en 5 unidades como te expliqué anteriormente. 28 00:03:42,830 --> 00:03:51,889 Se dispone de un indicador dentro del bucle y otro indicador fuera que se actualizará cuando se terminen las 5 repeticiones. 29 00:03:52,490 --> 00:04:03,310 El registro de esplanciamiento puede trabajar con cualquier tipo de datos siempre y cuando los datos que se conecten al terminal de entrada sean del mismo tipo de los que se conectan al terminal de salida. 30 00:04:03,310 --> 00:04:23,540 Bien, aquí tienes el VI, vamos a ejecutarlo, pulsamos en RUN y vas viendo como se va incrementando el indicador de dentro y al terminar se actualiza el indicador de afuera. 31 00:04:23,540 --> 00:04:39,220 ¿De acuerdo? Bien, vamos a repetir el VI, voy a poner este a cero y vamos a ver, activando la ejecución resaltada, cómo se va a ir produciendo el desplazamiento de los datos. 32 00:04:39,680 --> 00:04:58,790 Ahí tenemos, vas viendo cómo el dato que tengo aquí pasa otra vez aquí, ahí sale el 10, más 10, 15, el 15 vuelve a pasar aquí y termina. 33 00:04:59,069 --> 00:05:18,000 En el diagrama de bloques en la paleta de funciones Programming, en el submenú Estructuras dispones del nodo de realimentación, que es otra representación del mismo concepto del registro de desplazamiento comportándose ambos de la misma forma. 34 00:05:18,000 --> 00:05:27,439 En la imagen puedes ver la representación de un registro de desplazamiento y su representación equivalente mediante un nodo de realimentación 35 00:05:27,439 --> 00:05:33,639 Observa que dispone de una entrada para inicializar el valor en su terminal de salida 36 00:05:33,639 --> 00:05:38,360 El nodo de realimentación dispone además de una entrada de habilitación 37 00:05:38,360 --> 00:05:47,839 Para poder usarla, haz clic derecho sobre el nodo y en el menú contextual selecciona Show Enable Terminal 38 00:05:47,839 --> 00:05:53,259 si al terminal de habilitación le introduces el valor verdadero 39 00:05:53,259 --> 00:05:57,459 el nodo de realimentación funciona como te he explicado 40 00:05:57,459 --> 00:06:00,939 en cambio si le introduces el valor falso 41 00:06:00,939 --> 00:06:08,399 el nodo de realimentación mantiene a la salida el último valor de la iteración o ejecución previa 42 00:06:08,399 --> 00:06:13,339 hasta que el valor del terminal se establezca de nuevo el valor verdadero 43 00:06:13,339 --> 00:06:25,579 Un nodo de reglamentación aparece automáticamente si cableas la salida de un sub-VI o una función a un terminal de ese mismo sub-VI o función. 44 00:06:26,240 --> 00:06:27,139 Vamos a ver. 45 00:06:28,600 --> 00:06:35,639 Bien, si consideramos el mismo VI de antes, eliminado el registro de desplazamiento, observarás lo siguiente. 46 00:06:35,639 --> 00:06:54,259 Si yo me sitúo sobre este cable, aparece el carrete, pincho botón izquierdo, arrastro, suelto, me desplazo y giro para conectar ahí, ¿qué ocurrirá? Que va a aparecer un nodo de reglamentación, porque estoy uniendo una salida con una entrada. 47 00:06:54,259 --> 00:07:08,279 Hago clic y automáticamente veis, si lo organizo un poquitín esto, vemos que el nodo de reglamentación está uniendo la salida con la entrada. 48 00:07:09,459 --> 00:07:19,120 No obstante, lo más cómodo siempre sería utilizar el nodo de reglamentación colocándolo nosotros como queramos. 49 00:07:19,120 --> 00:07:29,920 Para ello hacemos botón derecho en estructuras y voy a nodo de reventación y coloco el nodo donde yo quiera. 50 00:07:30,699 --> 00:07:41,939 Por ejemplo, ahí me sitúo a la entrada, cableo a la salida, me sitúo a la salida del nodo y cableo a la entrada. 51 00:07:41,939 --> 00:07:54,060 Bien, cableo esto ahí, aparece el carrete, hago clic en el botón izquierdo y me fijo ahí. 52 00:07:54,480 --> 00:08:02,259 Pero observad, este terminal, para conectarlo ahí, si yo cableo, me sale una cruz. 53 00:08:02,579 --> 00:08:06,139 Bueno, vamos a colocarnos encima de la cruz y vamos a ver qué nos dice. 54 00:08:06,939 --> 00:08:09,620 Que hemos conectado dos terminales de diferente tipo. 55 00:08:09,620 --> 00:08:16,899 efectivamente este terminal de aquí es un array y este indicador es de tipo escalar por lo tanto 56 00:08:16,899 --> 00:08:24,579 lo que tengo que hacer es lo siguiente me sitúo hago botón derecho y que tengo que hacer el modo 57 00:08:24,579 --> 00:08:32,240 de este túnel que hemos creado en la función del bloque for tengo que elegir el último valor no 58 00:08:32,240 --> 00:08:37,220 que esté indesado que ya lo veremos más adelante con las con los array con las matrices y 59 00:08:37,220 --> 00:08:43,820 automáticamente llame que me generaría el dato entonces aquí siempre sale el último dato sí 60 00:08:43,820 --> 00:08:49,460 bien vamos a ejecutarlo para que veáis que funciona exactamente igual que el registro 61 00:08:49,460 --> 00:09:00,200 de espaciamento tengo ahí el highlight activado pongo en modo rom empezaría a contar de acuerdo 62 00:09:00,200 --> 00:09:07,940 y funciona exactamente igual que en el caso del registro de esparciamiento. 63 00:09:10,679 --> 00:09:21,429 Bien, vamos con un ejemplo de aplicación del registro de esparciamiento. 64 00:09:22,070 --> 00:09:26,590 En este programa, en este VI, voy a visualizar el nivel de un tanque 65 00:09:26,590 --> 00:09:29,970 el cual conecto una tubería que lo alimenta de un líquido 66 00:09:29,970 --> 00:09:33,710 y que se va a controlar el llenado mediante una electroválvula. 67 00:09:34,490 --> 00:09:37,090 Asimismo, también se dispone de otra tubería de vaciado 68 00:09:37,090 --> 00:09:45,370 también controlada por otra electroválvula. Bien, como puedes ver, voy a ejecutar el VI y tendría 69 00:09:45,370 --> 00:09:53,889 que funcionar de la siguiente manera. Cuando activo la electroválvula de llenado, veremos al depósito 70 00:09:53,889 --> 00:10:01,649 subir el nivel de líquido. Si la cierro, quedaría con ese nivel y si abro la válvula de vaciado, 71 00:10:02,009 --> 00:10:06,669 tendría que disminuir el nivel y si la cierro, tendría que mantenerse. Esas serían las condiciones 72 00:10:06,669 --> 00:10:13,809 que tendría que cumplir este v bien vamos a ver cómo hacerlo bien lo primero vamos a ver 73 00:10:13,809 --> 00:10:22,330 qué elementos necesitas para construir este panel frontal del v lo primero es tener instalado el 74 00:10:22,330 --> 00:10:32,889 módulo de sc el módulo de sc te va a permitir tener a disposición un conjunto de imágenes 75 00:10:32,889 --> 00:10:41,269 como puedes ver aquí para interruptores etcétera vamos a buscar aquí los tanques vamos a ver aquí 76 00:10:41,269 --> 00:10:48,669 tendréis todos estos tanques por ejemplo yo elijo este le podéis cambiar el color vais a opciones 77 00:10:48,669 --> 00:10:57,009 símbolos y aquí pinchamos con el botón izquierdo y podemos seleccionar qué color deseamos de este 78 00:10:57,009 --> 00:11:01,269 tanque, damos ok, pinchamos y arrastramos 79 00:11:01,269 --> 00:11:05,350 y tendríamos ahí el tanque, lo podemos poner, cambiar 80 00:11:05,350 --> 00:11:08,370 el color, luego 81 00:11:08,370 --> 00:11:12,450 vamos a ver este indicador 82 00:11:12,450 --> 00:11:17,289 que nos va a permitir visualizar el nivel del líquido, para ello 83 00:11:17,289 --> 00:11:21,490 hacemos botón derecho, vamos a numeric 84 00:11:21,490 --> 00:11:23,690 y aquí tenemos tanque 85 00:11:23,690 --> 00:11:28,210 y lo único que haríamos sería situarlo 86 00:11:28,210 --> 00:11:31,710 superpuesto por encima del tanque 87 00:11:31,710 --> 00:11:35,490 tendríamos que cambiarle por ejemplo 88 00:11:35,490 --> 00:11:40,049 el final de escala, ponemos 100 y ahí tendríamos 89 00:11:40,049 --> 00:11:43,409 podemos cambiarle las dimensiones, etc. 90 00:11:43,409 --> 00:11:47,610 bien, que más, las válvulas 91 00:11:47,610 --> 00:11:51,970 estas válvulas son componentes que vamos a conseguir 92 00:11:51,970 --> 00:12:02,149 botón derecho, vamos a DSC módulo y controles de dos dimensiones y válvulas de dos dimensiones. 93 00:12:02,490 --> 00:12:06,470 Y aquí tendríamos todas las válvulas con la orientación que necesitemos. 94 00:12:06,629 --> 00:12:09,509 Por ejemplo, pinchamos aquí y esta sería la válvula. 95 00:12:10,730 --> 00:12:17,929 Podemos cambiarle de tamaño y ponerla al tamaño que queramos. 96 00:12:17,929 --> 00:12:29,289 Este elemento, este terminal, puede ser un control o un indicador y tiene dos valores, falso y verdadero, es decir, es una variable booleana, es un control o un indicador booleano. 97 00:12:30,049 --> 00:12:41,429 Si damos doble clic, lo veríamos aquí. Este sería, ahora mismo es un indicador, pero si le hacemos botón derecho y lo cambiamos a control, sería un control. 98 00:12:41,429 --> 00:13:04,330 Y por último la tubería. Para la tubería lo mismo. En el módulo DSC vamos a 3D Controles y seleccionamos segmento múltiple. Lo colocamos aquí y este segmento lo podemos dimensionar y estirar. 99 00:13:04,330 --> 00:13:12,470 Por ejemplo, si quiero quitar este trozo, botón derecho y lo que hago es borrar este segmento de tubería. 100 00:13:12,970 --> 00:13:23,610 Lo puedo estrechar, lo puedo hacer más estrecho y cambiarle las dimensiones de esta brida. 101 00:13:25,549 --> 00:13:30,629 Y nada, lo llevaría a donde quiera que quiero ahí. 102 00:13:30,629 --> 00:13:48,649 Vale, por ejemplo, ¿qué estoy viendo? Estoy viendo que está por delante del depósito, quiero ponerlo por detrás, entonces lo que tendría que hacer sería seleccionar el dispositivo, venir aquí y mandarlo al fondo, ¿vale? 103 00:13:48,649 --> 00:13:59,269 y estaría ahí colocada bien este dispositivo si lo seleccionó botón derecho encontrar terminal 104 00:13:59,269 --> 00:14:07,549 este dispositivo sería este de aquí vale este de aquí yo ya los tengo aquí creados los diferentes 105 00:14:07,549 --> 00:14:16,350 tubos los diferentes tuberías las tengo ahí creadas y les tengo puesto un valor falso para 106 00:14:16,350 --> 00:14:24,029 que siempre tenga el mismo color vale porque esta tubería puede podemos hacer que tenga un color o 107 00:14:24,029 --> 00:14:33,529 otro podemos cambiar el color vamos a borrar esto y vamos a pasar al v vamos a ver el v y que nos 108 00:14:33,529 --> 00:14:43,470 encontramos sería este aquí lo primero tendremos el tanque el tanque le conectamos un registro 109 00:14:43,470 --> 00:14:50,070 desplazamiento y la entrada vamos a ver que le vamos a colocar en el tanque vamos a colocarle 110 00:14:50,070 --> 00:14:58,590 un selector y ese selector va a estar controlado por el ejemplo por la válvula de vaciado por una 111 00:14:58,590 --> 00:15:04,590 entrada vamos a colocar este bloque y por la otra entrada vamos a colocar este otro bloque 112 00:15:04,590 --> 00:15:12,389 vamos primero con este bloque lo que estamos haciendo aquí es que si la válvula vaciado es 113 00:15:12,389 --> 00:15:20,389 verdadero estaríamos colocando a la salida el valor de esta entrada y en esta entrada que 114 00:15:20,389 --> 00:15:25,789 viene de esta salida que también hay otro selector que estamos haciendo lo que estamos haciendo es 115 00:15:25,789 --> 00:15:37,490 tomando el valor de la salida del tanque que tendría en el estado anterior le restamos uno 116 00:15:37,490 --> 00:15:50,330 y lo que hacemos es que comparamos con 0 el nivel de tanque al restarle 1 es mayor que 0 si es que 117 00:15:50,330 --> 00:15:57,929 si lo que tengo aquí el número que tengo aquí saldría en la salida y por tanto saldría en el 118 00:15:57,929 --> 00:16:05,049 tanque y lo que hemos conseguido es disminuir una unidad el nivel del tanque que va a ocurrir si al 119 00:16:05,049 --> 00:16:14,950 tomar el valor del estado del tanque y restarle 1 resulta ser menor que 0 esta igualdad de mayor 120 00:16:14,950 --> 00:16:22,669 igual ya no se cumpliría y entonces este valor sería falso que estaríamos haciendo estaríamos 121 00:16:22,669 --> 00:16:31,210 tomando este valor 0 y asignándole al nivel del tanque por lo tanto el tanque estaría siempre en 122 00:16:31,210 --> 00:16:39,909 cero vacío por este otro lado si la válvula de vaciado es falso estaríamos tomando este valor 123 00:16:39,909 --> 00:16:46,769 y lo estaríamos colocando a la salida es decir la válvula de vaciado la tengo cerrada no sale 124 00:16:46,769 --> 00:16:54,169 nada del líquido del depósito podría entrar va a depender de este otro como veis repetimos el 125 00:16:54,169 --> 00:17:03,230 mismo esquema pero ahora lo que hacemos es tomamos el valor que tiene el nivel del tanque le sumamos 126 00:17:03,230 --> 00:17:14,569 1 y al sumar 1 preguntamos el nivel del tanque es ahora menor o igual a 100 si el tanque no está 127 00:17:14,569 --> 00:17:20,950 lleno es decir si se cumple esta condición de ser menor o igual que 100 esto sería verdadero 128 00:17:20,950 --> 00:17:29,269 y esta entrada aparecería la salida como está la válvula de llenado abierta no está cerrada 129 00:17:29,269 --> 00:17:35,789 entonces lo que estaríamos haciendo es conservando el mismo valor que tiene el tanque y no lo 130 00:17:35,789 --> 00:17:43,150 estaríamos incrementando de otra manera si la válvula de llenado está abierta es decir esto 131 00:17:43,150 --> 00:17:49,710 es verdadero estaríamos incrementando en una unidad el nivel del tanque porque esta entrada 132 00:17:49,710 --> 00:17:56,549 sería mayor que la anterior en una unidad esta salida lo mismo y el tanque valdría una unidad 133 00:17:56,549 --> 00:18:05,369 más su nivel y esto estaría así hasta que llegue a 100 no hasta que llegue a 101 cuando llega a 134 00:18:05,369 --> 00:18:15,230 101 preguntamos el nivel es menor o igual a 100 no por lo tanto esto sería falso tomaríamos el 135 00:18:15,230 --> 00:18:24,680 valor de 100 y el nivel de depósito sería el 100%. Bien, pues esto es todo. Aquí tendríamos 136 00:18:24,680 --> 00:18:32,140 el bucle Y, el pulsador de Stop y siempre recordar que tenemos que poner un tiempo de 137 00:18:32,140 --> 00:18:35,660 espera para no sobrecargar la CPU donde estemos ejecutando el UI.