This content is not available in your preferred language.

The content is shown in another available language. Your browser may include features that can help translate the text.

Auto-Indexing Tunnels with For Loops and While Loops in LabVIEW

Updated Aug 21, 2023

Reported In

Software

  • LabVIEW

Issue Details

  • When wiring through a While Loop or For Loop, the tunnels for the wires are either solid or have square brackets on them. What is the difference between these tunnels? How can I change them?
  • When wiring through a While Loop or For Loop, the data type entering is different than the data type exiting. Why is this?

Solution

What is Auto-Indexing?

Auto-indexing is the ability for LabVIEW to read and process every element in an array when using a For Loop or While Loop. When auto-indexing is enabled, elements of an array enter the loop and are processed one at a time. 

Brackets on the input or output terminals of a loop indicate that auto-indexing is enabled. This is the default setting when you wire into/out of For Loops.
Tip: If you enable auto-indexing on an array wired to a For Loop input terminal, LabVIEW sets the count terminal to the array size so you do not need to wire the count terminal.
 
                   
              Auto-index enabled                    Auto-index disabled

Auto-Indexing and For Loops

Auto-indexing is enabled by default for every array you wire to a For Loop because a common application of a For Loop is to process individual array elements. Disable auto-indexing if you do not need to process the elements of an array individually. When you disable auto-indexing input, the For Loop handles all the elements in the array at once, instead of handling an element per iteration. 

Likewise, when you auto-index an array output tunnel, the output array receives a new element from every iteration of the loop. Therefore, auto-indexed output arrays are always equal in size to the number of iterations unless you select the conditional terminal mode. If you disable auto-indexing in the output tunnel, you receive the value of data from the last iteration, not the elements from every iteration.
 

Auto-Indexing and While Loops

Auto-Indexing is disabled by default when wiring in or out of While Loops, so the wiring tunnel will be solid. If you enable auto-indexing for an array entering a While Loop, the While Loop indexes the array the same way a For Loop does. However, the number of iterations a While Loop executes is not limited by the size of the array because the While Loop iterates until a specific condition is met. Additionally, when you auto-index an array output tunnel, the output array receives a new element from every iteration of the loop.
 

Enable or Disable Auto-Indexing

  • Input Terminals: To switch between auto-indexing and non-indexing tunnels for an input terminal, right-click a tunnel and select Enable Indexing or Disable Indexing
  • Output Terminals: 
    • To enable auto-indexing, right-click the output tunnel and select Tunnel Mode>>Indexing. The end result of the output using this mode will be an array of size equal to the number of loop iterations.
    • To disable auto-indexing, right-click the output tunnel and select Tunnel Mode>>Last Value. After the code is complete, this output will return only one element, the element from the last loop iteration.

Additional Information

  • If two arrays of different lengths are auto-indexed into a For Loop, the smaller size array determines the total number of iterations.
    • Example: two numeric arrays of sizes 4 and 8 are auto-indexed into a for loop, the total number of iterations will be limited to 4. 
  • If two arrays of different lengths are auto-indexed into a While Loop, then they will both be indexed until they are out of data and the default value of that data type will pad the rest of the array every subsequent iteration. A while loop has a stop condition that is independent of the arrays, so the program must take care to stop the while loop when appropriate to avoid erroneous data being added to the input and output arrays.