LabVIEW For loop
For loop
For 루프는 특정 횟수를 반복해서 실행할 수 있는 구조입니다. 블록다이어그램 팔레트 - 구조 - For 루프를 선택하여 블록 다이어그램에 배치할 수 있습니다.

N 이라고 써있는 블록은 카운트 터미널로, 입력값을 주면 입력값 만큼 For 루프 안의 코드를 반복 실행합니다. i 라고 써있는 블록은 반복 터미널로, 루프 반복 횟수 - 1 을 출력합니다.
예를 들어 카운트 터미널에 10 을 입력하면 루프는 10회 반복 실행되고, 첫 번째 실행에서 i 는 0, 두 번째 실행에서 1, 세 번째 실행에서 2 를 출력합니다.


C 언어의 for 루프와 같습니다.
for (int i = 0; i < N; ++i) {
}
Auto-indexing
오토인덱싱 기능은 N의 값을 설정하지 않더라도 연결된 배열 등에 의해 For 루프의 실행 횟수를 정하는 방법입니다. 오토인덱싱을 사용하기 전에 먼저 배열과 차원을 알아야 합니다.
Array, Dimension
배열은 데이터의 묶음으로 1 차원 배열의 경우 상수나 변수를 원소로 갖는 묶음입니다. 2 차원 배열은 1 차원 배열을 원소로 갖는 배열입니다. 이런 식으로 n 차원 배열은 (n-1) 차원 배열을 원소로 갖습니다.
몇가지 예를 들면 아래와 같습니다.
{1, 2, 3, 4} // 1 차원 배열에 숫자형 상수 4 개이므로 크기는 4 입니다.
{{1, 2, 3, 4},
{5, 6, 7, 8,}} // 2 차원 배열에 1 차원 배열 2 개가 있고, 1 차원 배열은 숫자형 상수 4 개 가 있으므로 크기는 2, 4 입니다.
{{{1, 2, 3, 4},
{5, 6, 7, 8}},
{{9, 0, 1, 2},
{3, 4, 5, 6}}} // 3 차원 배열에 2차원 배열 2 개가 있고, 2 차원 배열에 1 차원 배열 2 개가 있고, 1 차원 배열은 숫자형 상수 4 개 가 있으므로 크기는 2, 2, 4 입니다.
Labview에서는 아래와 같이 표현됩니다.

배열은 프론트패널 팔레트 - 배열, 행렬, 클러스터 - 배열을 눌러 프론트패널에 배치 후, 원하는 데이터형의 컨트롤이나 인디케이터를 집어 넣거나, 블록다이어그램 팔레트 - 배열 - 배열 상수를 클릭해서 블록다이어그램에 배치 후, 원하는 데이터형의 상수 등을 집어 넣으면 됩니다.

배열의 외곽을 늘리면 늘리는 방향 원소의 수가 늘어나고, 인덱스를 늘리면 배열의 차원이 늘어나고, 원소를 늘리면 보이는 크기가 늘어납니다.

For loop using auto-indexing
입력 오토인덱싱은 For 루프 안으로 루프 밖의 배열값을 전달할 때, 배열의 가장 높은 차원의 크기만큼 For 루프가 반복되고, 해당 차원의 하위 차원 배열이 루프마다 전달 됩니다.
예를 들어 {1, 3, 5}
라는 크기 3 인 1 차원 배열이 있다면 루프는 3 회 반복 실행되고 첫 번째 실행에는 1, 두 번째 실행에는 3, 세 번째 실행에는 5 가 전달됩니다.
{{1, 1, 1}, {2, 2, 2}}
라는 크기 2, 3 인 2 차원 배열이 있다면 루프는 2 회 반복 실행되고 첫 번째 실행에는 {1, 1, 1}
, 두 번째 실행에는 {2, 2, 2}
가 전달 됩니다.

오토인덱싱 기능을 사용하지 않고, 단순히 For 루프에 배열을 전달하고 싶을 때는 For 루프에 배열을 연결할 때 생기는 터널의 기능을 바꾸면 됩니다.
터널을 오른쪽 클릭 후 인덱싱 비활성화를 누르면 루프 터널이 됩니다. 루프 터널은 연결된 인자를 그대로 루프 안에 전달하는 역할을 합니다. 인덱싱을 활성화 하면 괄호가 그려진 오토인덱스 터널이 되고, 위에서 설명한 오토인덱싱 기능이 활성화 됩니다.

여러개의 배열이 인덱싱 되거나, 인덱스와 반복 횟수 모두 있는 경우 가장 적은 크기에 맞춰 반복실행됩니다.
Output tunnel
출력단 터널 모드에는 마지막 값, 인덱스하기, 연결하기, 조건적 4 가지가 있습니다. 이 중 많이 쓰게 되는 마지막 값과 인덱스하기만 보겠습니다.

For 루프 안의 코드가 반복 실행될 때, For 루프가 끝난 뒤 나온 결과를 출력하고 싶은 경우가 있습니다. 이 때, 사용하는 터널이 마지막 값입니다.
예를 들어 반복 횟수 4 회의 For 루프에서, 반복 터미널의 값을 For 루프의 결과로 출력하고자 할 때, 마지막 값 터널을 쓰면 0, 1, 2, 3 이라는 반복 터미널 값 중에 마지막인 3 만 출력하게 됩니다.
인덱스하기는 루프연산에 따라 나온 값을 순차적으로 저장한 후 배열로 출력하는 터널 입니다.
예를 들어 4 회 반복되는 For 루프에 반복 터미널을 출력하면 0, 1, 2 ,3 이 순차적으로 출력됩니다. 이때 마지막 값으로 하면 3 이 결과가 되고, 인덱스하기를 하면 {0, 1, 2, 3}
인 배열이 결과로 출력됩니다.
