material de labview para examen de certificación version mas completa

Upload: joaquin-guillen

Post on 09-Jul-2015

1.130 views

Category:

Documents


7 download

TRANSCRIPT

Material Importante referente a la filosofa de LabView

Paletas de LabView

Panel Frontal.- La paleta de Controls es utilizada para seleccionar controles o indicadores que sern colocados en el instrumento virtual. Se accede a travs del men de View-Controls Palette

Diagrama Bloques.- La paleta de Functions es utilizada para colocar bloques o funciones de programacin grfica. Se accede a travs del men de View-Functions Palette

Tools Palette.- Es una paleta que tiene herramientas particulares que pueden ser usadas dentro del panel frontal del diagrama de bloques. . Se accede a ella a travs del men de View-Tools Palette. Cuando est activado el botn de seleccin automtica (botn superior de la paleta), LabView selecciona la herramienta autilizar al mover el mouse sobre objetos del panel frontal o del diagrama de bloques.

1

Material Importante referente a la filosofa de LabView

Teclas de Acceso Rpido en LabView CTRL Cambia entre el panel frontal y el de bloques

CTRL Muestra ayuda respecto a los bloques sobre los que pasa el cursor en el diagrama de bloques o sobre los objetos del panel frontal CTRL Hace una limpieza en el diagrama de bloques eliminando alambres no conectados y mal alambradoFilosofa de Operacin de LabViewLabView opera basado en un modelo de flujo de datos, a travs del alambrado en el diagrama de bloques fluye la informacin de un programa. Cada bloque, funcion y estructuras en un diagrama slo pueden ser ejecutado(a) cuando TODAS las entradas a los mismos han sido recibidas.PREGUNTA TIPO EXAMEN2Material Importante referente a la filosofa de LabViewFormula Node : Soluciones de LabView programando en CUn recurso para solucionar problemticas utilizando dentro de LabView programacin de texto similar a C es la estructura Formula Node. A travs de esta estructura se pueden alimentar datos de entrada y obtener datos de salida. La estructura Formula Node se encuentra en la paleta de Structures.Al utilizar una estructura Formula Node se agregan entradas y salidas a la estructura oprimiendo el botn derecho en el borde de la estructura. Las entradas y salidas se etiquetan con un nombre y dicho nombre puede usarse 3Material Importante referente a la filosofa de LabView en la programacin como si fuera una variable, las etiquetas de los nombres de salida pueden(aunque no es obligatorio) corresponder con variables declaradas dentro del formula node, esto con el fin de definir explcitamente el tipo de dato de salida.En la figura de abajo se muestra un simple programa de LabView que suma dos nmeros, se muestra la solucin utilizando alambrado comn y la solucin con Formula Node.4Material Importante referente a la filosofa de LabViewLos tipos de datos que pueden ser usados dentro de la estructura Formula Node son: int, int8, int16, int32, uInt8, uInt16, uInt32, float, float32 y float64.PREGUNTA TIPO EXAMENUSO DE SHIFT REGISTERS y FEEDBACK NODES EN LabViewLos Shift Registers sirven para transferir valores de una iteracin a otra dentro de los ciclos fors y whiles. Para crear un shif register en un ciclo for o while se hace clic con el botn derecho en uno de los bordes de la estructura cclica dentro del diagrama de bloques y se elige Add Shift Register. Aparecen entonces en los extremos izquierdo y derecho de la estructura smbolos encuadrados con flechas hacia abajo y arriba(entrada y salida del shift register) donde se puede realizar el alambrado. En la siguiente figura se muestra el panel frontal y el diagrama de bloques en un programa de LabView que suma los primeros N nmeros. A travs de un control se proporciona el valor de N y el resultado se despliega en un indicador numrico.5Material Importante referente a la filosofa de LabViewEn el diagrama se alambra el valor del control N a la entrada N que controla el ciclo for, este es el nmero de veces que se ejecutar el ciclo El contador automtico i que proporciona el ciclo for da los valores de 0 para la primera ejecucin del ciclo, 1 para la segunda ejecucin del ciclo, 2 para la tercera ejecucin y N-1 para la ltima ejecucin del ciclo. Dicho contador es entonces incrementado en 1 para as poder sumar 1+2+3+N en vez de 0+1+2+3+. +N-1. En la primera vez que se ejecuta el ciclo for, se transfiere un cero al alambre superior del bloque de suma, Como el resultado del bloque de suma va al Shift Register de salida, este valor es transferido al Shift Register de entrada en la siguiente iteracin del ciclo y as sucesivamente. Como nota MUY IMPORTANTE cabe mencionar que slo al finalizar la ejecucin del ltimo ciclo el valor del shift register de salida se transfiere al indicador Suma de los primeros N nmeros. Esto es, para que el ciclo emita o genere valores hacia fuera de l se debe de haberse terminado completamente, de lo contrario todo el procesamiento del flujo de datos en LabView se lleva a cabo dentro del mismo.PREGUNTA TIPO EXAMEN6Material Importante referente a la filosofa de LabViewSHIFT Register estackeados Existe la posibilidad de acceder a valores generados en iteraciones previas a travs de shift registers estackeados, para crear un nuevo registro de este tipo se oprime con clic derecho un shift register existente en el borde izquierdo del ciclo y se elige Add Element.Se generan de esta manera los shift registers estackeados necesarios en el borde izquierdo del ciclo de tal forma que en el smbolo superior se tendr el valor producido en la ltima iteracin, en el siguiente smbolo (hacia abajo) el resultado de la penltima iteracin y as sucesivamente. El siguiente diagrama muestra una rutina con 2 shift registers estackeados que suma en la primera iteracin 0+1, en la segunda 1+0, en la tercera 1+1, en la cuarta 2+1, en la 7Material Importante referente a la filosofa de LabView quinta 3+2 y as sucesivamente hasta que elusuario oprime un botn de stop, el resultado de la ltima iteracin es desplegado en un indicador numrico.PREGUNTA TIPO EXAMENNota: El DAQ Assistant.vi realiza una lectura de voltaje de un puerto de una tarjeta de adquisicin de datos. La funcin Compound Arithmetic est configurada para hacer una sumatoria de todos los valores de sus entradas.FeedBack Nodes8Material Importante referente a la filosofa de LabView Un feedback node hace la misma funcin que un shift register pero sin la necesidad de usar alambrado largo dentro de un ciclo. Al finalizar el ciclo, el valor final es transferido a travs de un nodo a un indicador, funcin o estructura externa. Para colocar un feedback node en el diagrama de bloques se accede a la paleta Structures-> Feedback node.En la figura inferior se muestra un caso similar al del ejemplo de shift registers que suma los nmeros enteros 1,2,3,4.etc.. La diferencia con este ejemplo es que aqu la suma se sigue realizando hasta que el usuario oprime el botn STOP, los valores intermedios de la sumatoria se almacenan en el nodo de salida del ciclo, sin embargo ningn valor puede fluir hacia fuera del ciclo hasta que ste termine completamente. El ltimo valor del nodo es entonces 1+2+3+4+5++N, donde N es el nmero de veces que se haba repetido el ciclo cuando el usuario oprimi el botn STOP.9Material Importante referente a la filosofa de LabViewREPRESENTACIN DE LA INFORMACIN DENTRO DE LABVIEWNMERICALos controles, indicadores y constantes utilizadas en LabView tienen un tipo de representacin, para acceder y/o modificar a esta representacin se hace un clic derecho sobre el control, indicador o constante de manera similar a como se muestra en la siguiente figura:Las representaciones tipo EXT(extended), DBL(double), SGL(single) representaciones para nmeros reales y van de mayor a menor precisin.sonLas representaciones tipo I32(integer 32), I16(integer 16) y I8(integer 8) son representaciones para nmeros enteros con signo de 32,16 y 8 bits. Las representaciones tipo U32(unsigned 32), U16(unsigned 16) y U8(unsigned 8) son representaciones para nmeros enteros sin signo de 32, 16 y 8 bits. 10Material Importante referente a la filosofa de LabView Para entender la diferencia entre integer y unsigned se puede mostrar con una comparacin: un I8 puede almacenar valores entre -128 y 127 mientras que un U8 puede almacenar valores de 0 a 255. Las representaciones tipo CXT(complex extended), CDB(complex double) y CSG(complex single) son representaciones para nmeros complejos de mayor a menor precisin. Por default LabView maneja datos de tipo DBL y I32 para las representaciones nmericas no complejas y dibuja alambrado color naranja y rojo para informacin real y entera respectivamente. Se debe recordar que mayor precisin y/o rango ocupan ms memoria en la computadora por lo que la seleccin del tipo de dato a usar debe ser el adecuado para la funcin que se est realizando.Coercion dots(puntos de coercin)Las funciones de LabView permiten manipular informacin nmerica de un mismo tipo a la vez, sin embargo cuando una funcin recibe entrada de varios tipos(por ejemplo una entrada tipo entera y una tipo double) la funcin convierte la representacin menor a la mayor, esto es indicado a travs de un pequeo punto a la entrada de la funcin como se muestra en la figura:Este pequeo punto(coercin dot) indica al usuario que internamente LabView realizar una conversin intrna , esto causar a un VI usar ms memoria y ms tiempo para ejecutarse. Debe evitarse utilizar en un diagrama muchas funciones con coercin dots. En el ejemplo del feedback node presentado anteriormente se ..PREGUNTA TIPO EXAMEN11Material Importante referente a la filosofa de LabViewTIMINGLa paleta de Timing nos proporciona herramientas de programacin que se relacionan con tiempo.Los 2 bloques ms utilizados son el Wait(ms) y el Wait Until Next ms multiple. El primero retarda cierta cantidad de tiempo en milisegundos y el segundo produce una espera hasta que el timer del sistema es mltiplo de una cantidad dada de milisegundos.12Material Importante referente a la filosofa de LabViewEJEMPLO: Desplegar en un indicador numrico los mltiplos de la serie de un nmero especificado en otro control, como un indicador slo puede tener un valor a la vez, los mltiplos se debern desplegar uno por uno con una separacin de 500 milisegundos entre ellos. El programa se detendr cuando el usuario oprima un botn de STOP. Solucin13Material Importante referente a la filosofa de LabViewCabe hacer notar aqu, que si durante la ejecucin del programa se modifica el control Serie, comenzarn a aparecer mltiplos del valor nuevo de dicho control ya que este control es ledo una vez por cada una de las ejecuciones del ciclo.TnelesUn tnel es la manera en que LabView pasa informacin de una parte del diagrama a una estructura o viceversa. Hay tneles de entrada a una estructura y tneles de salida de la estructura, adems existen diferentes tipos de tneles, cada uno opera de manera diferente, el ms simple es el tnel relleno, en este tipo de tnel el valor se pasa por una nica vez hacia el interior de una estructura o hacia fuera de una estructura. En este tnel o nodo el valor transferido es almacenado dentro del mismo tnel para ser utilizado dentro de la estructura (tnel de entrada) o fuera de ella (tnel de salida).14Material Importante referente a la filosofa de LabView Una cosa importante de recordar es que una estructura(cualquiera que sta sea) es ejecutada slo cuando ya se han almacenado los valores que provienen de fuera de la estructura dentro de los tneles de entrada, esto significa que los tneles son lugares de almacenamiento de informacin. Por ejemplo, abajo se muestra un diagrama donde se ha sacado de la estructura while el control llamado Serie del ejemplo previo y su valor se ha introducido al ciclo a travs de un tnel de entrada.La operacin sera casi idntica al ejercicio de la seccin de Timing, sin embargo si durante la ejecucin se modifica el control Serie se seguiran desplegando los mltiplos del primer valor de dicho control, esto significa que ste es ledo en el diagrama nicamente una vez y su valor almacenado en el tnel de entrada. En el diagrama de bloques a travs del botn Highlight Execution se puede ver el flujo de valores que se generan en la ejecucin de un programa de LabView, se puede observar para este caso que el control llamado Serie es ledo una nica vez(al iniciar la ejecucin del programa), se almacena entonces en el tnel y despus de esto se procede a la ejecucin del ciclo.15Material Importante referente a la filosofa de LabViewLo mencionado previamente significara que si sac el botn de stop fuera del ciclo, el programa nunca se detendra pues el botn se lee nicamente una vez antes de comenzar ejecucin del ciclo, por lo que sera completamente incorrecto hacer algo as.Colocar el indicador Mltiplo fuera del ciclo y conectarlo a travs de un tnel como lo muestra la siguiente figura, hara que solamente el ltimo valor generado antes de oprimir el botn stop apareciera en el indicador, esto es, en este tipo de tneles de salida, el ltimo valor almacenado en ellos es el transferido. Por lo tanto la ejecucin en LabView sigue un orden dado por el flujo de informacin que fluye por el alambrado.16Material Importante referente a la filosofa de LabViewAlgunas veces es deseable sustituir o reemplazar un tnel en una estructura cclica por un shift register , esto se hace oprimiendo con el botn derecho sobre el tnel y eligiendo la opcin Replace with Shift Register. El proceso inverso tambin es posible(cambiar un shift register por un tnel).Probes17Material Importante referente a la filosofa de LabViewImplementacin de ifs en LabViewLa filosofa de LabView para implementar instrucciones anlogas a la instruccin if encontrada en lenguajes como C es la estructura Case. Dicha estructura puede encontrarse en la paleta Structures de la seccin de Programming como lo muestra la siguiente figura.Por default la estructura aparece con una entrada tipo boolean (la cual puede ser true o false), cada una de las 2 opciones se codifica dentro de la estructura. 18Material Importante referente a la filosofa de LabView Para cambiarse de una opcin a otra se hace un clic en la parte superior y se elije la opcin que se desea codificar o visualizar.En el siguiente ejemplo se muestra un programa de LabView con un control nmerico y un indicador. El programa obtiene la raz cuadrada del valor del control, se muestra la codificacin para el caso en que el nmero sea mayor o igual a cero y cuando no lo es. En el caso en que el control tenga un valor negativo se enva un cuadro de dialogo al usuario indicando que hay un error. El programa utiliza un tnel para transferir la informacin del control a la estructura Case y otro tnel para emitir el valor de la raz cuadrada hacia fuera de la estructura. Algo importante que recordar respecto a los tneles de salida en una estructura Case, es el hecho de que dichos tneles deben de estar alambrados en el interior de la estructura para todas las opciones posibles del Case (en el ejemplo mostrado para las opciones true y false).19Material Importante referente a la filosofa de LabViewNtese que en la codificacin de False se enva el valor -99999.0 al indicador cuando se intenta obtener la raz cuadrada de un nmero negativo. La figura inferior muestra los resultados al correr el programa con valores positivos y negativos.Algo similar a la estructura Case pero ms enfocado al control de flujo de datos en el alambrado es el bloque Select encontrado en la paleta de Comparison dentro de Programming. Dicho bloque permite que una de 2 entradas(t f en la figura de abajo) pueda fluir hacia la salida del bloque acorde al valor booleano de una entrada (s en la figura de abajo).20Material Importante referente a la filosofa de LabViewEl siguiente diagrama muestra un ejemplo de un programa en LabView que despliega en un indicador string una serie de nmeros separados por comas que van descendiendo con diferencias de 100, 200, 300, 400, etc. entre ellos. El primer nmero se da a travs de un control llamado valor de inicio y se indica a travs de otro control el nmero de elementos que se desplegarn. El bloque select se utiliza aqu para eliminar la ltima coma que podra aparecer en el ltimo nmero desplegado.21Material Importante referente a la filosofa de LabViewUso de valores de controles e indicadores en varias secciones de un programa de LabViewMuchas veces es requerido modificar o utilizar el valor de un control o indicador que se encuentra lejos en un diagrama de bloques. La manera ms adecuada de hacer esto es creando un Nodo de Propiedad(Property Node) del control o indicador, esto se hace oprimiendo con el botn derecho del indicador o control en el diagrama de bloques y seleccionando Create->Property Node-->Value , como se muestra en la siguiente figura al hacerlo sobre el indicador llamado Mltiplo 1 de un programa de LabView. 22Material Importante referente a la filosofa de LabViewUna vez hecho esto se crea un nodo del control o indicador con el campo Value (mostrado en la sig. Figura para el indicador Mltiplo 1). El valor del control o indicador se puede obtener alambrando desde dicho campo (si la punta que aparece despus del nombre del campo se dirige hacia fuera) hacia el lugar deseado.En caso de que se desee modificar el valor del control o indicador se deber de hacer clic derecho sobre el nombre del campo y seleccionar Change to Write como se muestra en la sig. Figura.23Material Importante referente a la filosofa de LabViewLa punta ahora aparecer antes del nombre del campo y se dirigir hacia adentro de tal forma que podemos alambrar un valor nuevo hacia el control o indicador. La siguiente figura muestra el mismo programa que produce mltiplos de una serie pero utilizando Property Nodes. Ntese que los bloques originales que se generan en el diagrama de bloques al crear los controles e indicadores en el panel frontal no se estn utilizando directamente.Se pueden hacer cuantos nodos sean requeridos para cada indicador o control, de esta forma se evita demasiado alambrado y confusin en un programa de LabView.24Material Importante referente a la filosofa de LabViewParalelismo en LabViewLabView es en esencia un programa que maneja paralelismo de manera muy natural, estructuras no conectadas entre s pueden estarse ejecutando simultneamente sin ningn problema. La siguiente figura muestra el diagrama de bloques de 2 ciclos generando dos series diferentes. Ambos ciclos corren en paralelo y generan series diferentes en los indicadores, El ciclo inferior genera su serie ms rpido ya que tiene un retardo menor.25Material Importante referente a la filosofa de LabViewCada ciclo se detendr cuando el usuario oprima el botn stop correspondiente.Programacin Secuencial en LabViewCuando se desea seguir un orden determinado en la ejecucin de un programa es muy til la estructura llamada Sequence, existen dos versiones de este tipo, la Flat y la Stacked y se encuentran en la paleta de Structures como lo muestra la sig. Figura.En la mayora de los casos es indiferente usar una u otra estructura Sequence, su funcin principal es facilitar la programacin secuencial, es decir definir que secciones del programa se ejecutan antes y cuales se ejecutan despus. En la 26Material Importante referente a la filosofa de LabView siguiente figura se muestra una Flat Sequence(su formato grfico es parecido a un rollo de pelcula) conteniendo 3 secciones .En la primera seccin aparece el ciclo que genera una serie, despus aparece un retardo de 5 segs. Y finalmente otro ciclo generando otra serie. A diferencia del ejemplo encontrado en la seccin de paralelismo, en este si existe un orden de ejecucin definido de izquierda a derecha en la estructura Sequence. El retardo slo se ejecutar cuando el usuario haya parado el primer ciclo a travs del botn stop 1. Cuando se acabe el retardo se generarn entonces los mltiplos correspondientes al segundo ciclo y ste terminara slo cuando el usuario oprima el botn stop 2. Cuando se crea un flat sequence slo aparece un rea o frame donde colocar bloques de LabView, las dems secciones necesitadas para realizar programacin secuencial se hacen haciendo un clid derecho en el borde de la estructura y eligiendo Add Frame After. La siguiente figura muestra este concepto.27Material Importante referente a la filosofa de LabViewUn programador que conozca lenguajes como C. tiene una filosofa secuencial de pensamiento al programar, por ejemplo el cdigo para hacer una sumatoria de los primeros N nmeros positivos sera parecido a:suma = 0; for (i = 1; iIndicator. En la figura inferior se muestra este proceso para la creacin del indicador llamado ndice.El proceso general para la solucin propuesta del problema es el siguiente: 39Material Importante referente a la filosofa de LabView 1. Se Inicializo un arreglo de tamao 10 con valores en 0 en todos los elementos del mismo. 2. El arreglo fue copiado al tnel e introducido al modificacin. ciclo para su3. En cada una de las iteraciones del ciclo se sustituy el valor de la posicin i del arreglo con un valor al azar entre 0 y 100 generado a travs de la multiplicacin de 100 por un valor al azar entre 0 y 1. 4. El arreglo final es entonces utilizado para ser desplegado , obtener el menor, el mayor y sus posiciones. Como se muestra en la penltima figura, la ejecucin del programa no da los resultados esperados ya que solo modifica el ltimo valor del arreglo. Esto se debe a que no se ha hecho la siguiente consideracin: Utilizar el bloque Replace Array Subset crea un nuevo arreglo con el valor modificado en la posicin dada por i, sin embargo dicho arreglo no se utiliza en la siguiente iteracin y por lo tanto se pierde. Para las siguientes iteraciones del ciclo se vuelve a tomar el arreglo original y se reemplaza el elemento de la posicin i por un valor al azar entre 1 y 100 y se vuelve a perder excepto en el ltimo ciclo, ya que este arreglo de salida es utilizado para ser desplegado y para obtener el mayor, el menor y sus posiciones. Una solucin a la problemtica presentada es mostrada en la siguiente figura40Material Importante referente a la filosofa de LabView La nica diferencia en el diseo de los diagramas de bloques es la sustitucin de los nodos por shift registers, de esta manera el arreglo de salida en cada iteracin del ciclo es retroalimentado y se convierte en un arreglo de entrada para el siguiente ciclo.VARIABLESLa manera ms simple de relacionar el concepto de variables en un lenguaje de programacin textual como C respecto a LabView es considerar a cada control o indicador como una variable. A travs de un Property Node en el campo Value es posible acceder o modificar el valor de un control o indicador como ya se haba mencionado previamente. Los valores que pasan a travs del alambrado en un diagrama de bloques se pierden una vez que fueron transferidos a otra parte del diagrama de bloques, la nica manera de retener su valor es utilizando un indicador ligado al alambre en cuestin, con eso el dato que pasa a travs del alambre se almacena y puede ser utilizado en otras partes del programa. La manera de crear un indicador ligado a un alambre en particular es haciendo un clic derecho sobre el alambre en cuestin y seleccionando Create -> Indicator como se haba mencionado previamente.El siguiente programa de LabView muestra la solucin del mismo ejercicio previo pero ahora se van mostrando visualmente como entran los valores al azar al arreglo. En la solucin, el indicador del arreglo es creado al inicializar el arreglo y no a la salida del ciclo, adems se crea un Property node del arreglo de tal manera que el arreglo de salida del bloque Replace Array Subset sea almacenado en el indicador y as se muestra visualmente como se va modificando el arreglo.41Material Importante referente a la filosofa de LabViewPudiera pensarse que si se hubiesen usado tneles normales en vez de shift registers tambin seria correcta la solucin, esto debido a que la salida del arreglo creado con el nuevo valor almacenado se vuelve a almacenar en el arreglo llamado Array, sin embargo esto no es as, ya que el nodo que recibe el arreglo en el lado izquierdo de la estructura for en realidad almacena una copia del arreglo original(el arreglo de 10 elementos con valor de cero) y por lo tanto se accede a esta copia en cada una de las iteraciones del ciclo. La siguiente figura muestra el diagrama de bloques y el resultado (el cual es errneo) para el mismo ejemplo utilizando tneles normales.42Material Importante referente a la filosofa de LabView Otra solucin factible para el problema del ejemplo podra realizarse utilizando Property Nodes en vez de shift registers, esta solucin es mostrada en la figura de abajo. Aqu se utilizan dos properties nodes, uno de lectura y otro de escritura, ntese que en vez de alimentar el arreglo a travs de un nodo se usa el property node de lectura y con esto se asegura que la entrada al bloque Replace Array Subset sean los valores del indicador del arreglo llamado Array y no una copia del arreglo original inicializado en cero.43Material Importante referente a la filosofa de LabView44Material Importante referente a la filosofa de LabView SUB VIsMANEJO DE ERRORESVARIABLES LOCALES Y GLOBALES45Material Importante referente a la filosofa de LabViewCHARTS AND GRAPHSMAQUINA DE ESTADOS46Material Importante referente a la filosofa de LabViewEVENTOS47Material Importante referente a la filosofa de LabViewFILOSOFIA PRODUCTOR CONSUMIDORREGISTROS(clusters)48Material Importante referente a la filosofa de LabViewARCHIVOSTYPE DEFSACCIONES MECANICAS EN LOS SWITCHESCoercion DotsCoercion dots appear on block diagram nodes to alert you that you wired two different numeric data types together. The dot means that LabVIEW converted the value passed into the node to a different representation. For example, the Add function expects two doubleprecision, floating-point inputs. If you change one of those inputs to an integer, a coercion dot appears on the Add function, as shown in the following figure.49Material Importante referente a la filosofa de LabViewThe block diagram places the coercion dot on the border of the terminal where the conversion takes place. Because VIs and functions can have many terminals, a coercion dot can appear inside an icon if you wire through one terminal to another terminal. Coercion dots also appear on the terminal when you wire any data type to a variant terminal, except when you wire two variants together. Coercion dots can cause a VI to use more memory and increase its run time. Try to keep data types consistent in the VIs you create. Coercion dots appear as gray dots by default. You can change the color that LabVIEW uses to show coercion dots by selecting ToolsOptions and selecting Colors from the Category list.Shift RegistersUse shift registers when you want to pass values from previous iterations through the loop to the next iteration. A shift register appears as a pair of terminals, shown as follows, directly opposite each other on the vertical sides of the loop border.The terminal on the right side of the loop contains an up arrow and stores data on the completion of an iteration. LabVIEW transfers the data connected to the right side of the register to the next iteration. After the loop executes, the terminal on the right side of the loop returns the last value stored in the shift register.50Material Importante referente a la filosofa de LabViewCreate a shift register by right-clicking the left or right border of a loop and selecting Add Shift Register from the shortcut menu. A shift register transfers any data type and automatically changes to the data type of the first object wired to the shift register. The data you wire to the terminals of each shift register must be the same type. You can add more than one shift register to a loop. If you have multiple operations that use previous iteration values within your loop, use multiple shift registers to store the data values from those different processes in the structure, as shown in the following figure.Initializing Shift RegistersInitializing a shift register resets the value the shift register passes to the first iteration of the loop when the VI runs. Initialize a shift register by wiring a control or constant to the shift register terminal on the left side of the loop, as shown in the following figure.In the previous figure, the For Loop executes five times, incrementing the value the shift register carries by one each time. After five iterations of the For Loop, the shift register passes the final value, 5, to the indicator and the VI quits. Each time you run the VI, the shift register begins with a value of 0.51Material Importante referente a la filosofa de LabViewIf you do not initialize the shift register, the loop uses the value written to the shift register when the loop last executed or the default value for the data type if the loop has never executed. Use an uninitialized shift register to preserve state information between subsequent executions of a VI. The following figure shows an uninitialized shift register.In the previous figure, the For Loop executes five times, incrementing the value the shift register carries by one each time. The first time you run the VI, the shift register begins with a value of 0, which is the default value for a 32-bit integer. After five iterations of the For Loop, the shift register passes the final value, 5, to the indicator, and the VI quits. The next time you run the VI, the shift register begins with a value of 5, which was the last value from the previous execution. After five iterations of the For Loop, the shift register passes the final value, 10, to the indicator. If you run the VI again, the shift register begins with a value of 10, and so on. Uninitialized shift registers retain the value of the previous iteration until you close the VI.Stacked Shift RegistersStacked shift registers let you access data from previous loop iterations. Stacked shift registers remember values from multiple previous iterations and carry those values to the next iterations. To create a stacked shift register, right-click the left terminal and select Add Element from the shortcut menu. Stacked shift registers can occur only on the left side of the loop because the right terminal transfers the data generated only from the current iteration to the next iteration, as shown in the following figure.52Material Importante referente a la filosofa de LabViewIf you add another element to the left terminal in the previous figure, values from the last two iterations carry over to the next iteration, with the most recent iteration value stored in the top shift register. The bottom terminal stores the data passed to it from the previous iteration.Feedback NodeThe Feedback Node, shown as follows, appears automatically in a For Loop or While Loop when you wire the output of a node or group of nodes to the input of that node or group of nodes.You also can select the Feedback Node on the Functions palette and place it inside a For Loop or While Loop. Use the Feedback Node to avoid long wires across loops. Like a shift register, the Feedback Node stores data when the loop completes an iteration, sends that value to the next iteration of the loop, and transfers any data type. The Feedback Node arrow indicates in which direction the data values flow along the wire. The arrow automatically changes direction if the direction of data flow changes. If you connect the wire to the tunnel after the Feedback Node, the Feedback Node passes each value back to the input of the node and then passes the last value to the tunnel. For example, the For Loop in the following figure iterates five times. The Feedback Node passes the value from the previous iteration to the input of the Increment function each time the loop iterates. On the last iteration of the loop, the Feedback Node passes the value from the previous iteration (4) to the input of the Increment function, which adds 1 to the value53Material Importante referente a la filosofa de LabViewand sends the result to the tunnel. When the VI finishes running, the value in the numeric indicator is 5.The following figure shows the same block diagram implemented with shift registers instead of a Feedback Node.The For Loop in the following figure also iterates five times. The Feedback Node passes the value from the previous iteration of the loop to the tunnel before it passes the value to the input of the Increment function. The value in the tunnel is always the value from the previous iteration. On the last iteration of the loop, the Feedback Node holds the last value, which in this case is 5, but does not pass that value to the tunnel or to the numeric indicator. When the VI finishes running, the value in the numeric indicator is 4, which is the value from the previous, not the last, iteration of the loop.54Material Importante referente a la filosofa de LabViewThe following figure shows the same block diagram implemented using shift registers instead of a Feedback Node.Initializing Feedback NodesRight-click the Feedback Node and select Initializer Terminal from the shortcut menu to add the initializer terminal to the loop border to initialize the loop. When you select the Feedback Node on the Functions palette or if you convert an initialized shift register to a Feedback Node, the loop appears with an initializer terminal. Initializing a Feedback Node resets the initial value the Feedback Node passes to the first iteration of the loop when the VI runs. If you do not initialize the Feedback Node, the Feedback Node passes the last value written to the node or the default value for the data type if the loop has never executed. If you do not wire the input of the initializer terminal, each time the VI runs, the initial input of the Feedback Node is the last value from the previous execution.Replacing Shift Registers with a Feedback NodeReplace a shift register with a Feedback Node by right-clicking the shift register and selecting Replace with Feedback Node from the shortcut menu. Replace a Feedback Node with shift registers by right-clicking the Feedback Node and selecting Replace with Shift Register from the shortcut menu.Default Data in Loops55Material Importante referente a la filosofa de LabViewWhile Loops produce default data when the shift register is not initialized. For Loops produce default data if you wire 0 to the count terminal of the For Loop or if you wire an empty array to the For Loop as an input with auto-indexing enabled. The loop does not execute, and any output tunnel with auto-indexing disabled contains the default value for the tunnel data type. Use shift registers to transfer values through a loop regardless of whether the loop executes.56