LabVIEW For loop
For loop
For 루프는 특정 횟수를 반복해서 실행할 수 있는 구조입니다. 블록다이어그램 팔레트 - 구조 - For 루프를 선택하여 블록 다이어그램에 배치할 수 있습니다.
![](/img/lang/labview/labview-create-for-loop.gif)
N 이라고 써있는 블록은 카운트 터미널로, 입력값을 주면 입력값 만큼 For 루프 안의 코드를 반복 실행합니다. i 라고 써있는 블록은 반복 터미널로, 루프 반복 횟수 - 1 을 출력합니다.
예를 들어 카운트 터미널에 10 을 입력하면 루프는 10회 반복 실행되고, 첫 번째 실행에서 i 는 0, 두 번째 실행에서 1, 세 번째 실행에서 2 를 출력합니다.
![](/img/lang/labview/labview-for-term.png)
![](/img/lang/labview/labview-for-example.gif)
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에서는 아래와 같이 표현됩니다.
![](/img/lang/labview/labview-for-array.png)
배열은 프론트패널 팔레트 - 배열, 행렬, 클러스터 - 배열을 눌러 프론트패널에 배치 후, 원하는 데이터형의 컨트롤이나 인디케이터를 집어 넣거나, 블록다이어그램 팔레트 - 배열 - 배열 상수를 클릭해서 블록다이어그램에 배치 후, 원하는 데이터형의 상수 등을 집어 넣으면 됩니다.
![](/img/lang/labview/labview-create-array.gif)
배열의 외곽을 늘리면 늘리는 방향 원소의 수가 늘어나고, 인덱스를 늘리면 배열의 차원이 늘어나고, 원소를 늘리면 보이는 크기가 늘어납니다.
![](/img/lang/labview/labview-array-size.gif)
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}
가 전달 됩니다.
![](/img/lang/labview/labview-for-autoindexing.gif)
오토인덱싱 기능을 사용하지 않고, 단순히 For 루프에 배열을 전달하고 싶을 때는 For 루프에 배열을 연결할 때 생기는 터널의 기능을 바꾸면 됩니다.
터널을 오른쪽 클릭 후 인덱싱 비활성화를 누르면 루프 터널이 됩니다. 루프 터널은 연결된 인자를 그대로 루프 안에 전달하는 역할을 합니다. 인덱싱을 활성화 하면 괄호가 그려진 오토인덱스 터널이 되고, 위에서 설명한 오토인덱싱 기능이 활성화 됩니다.
![](/img/lang/labview/labview-for-tunnel-mode.gif)
여러개의 배열이 인덱싱 되거나, 인덱스와 반복 횟수 모두 있는 경우 가장 적은 크기에 맞춰 반복실행됩니다.
Output tunnel
출력단 터널 모드에는 마지막 값, 인덱스하기, 연결하기, 조건적 4 가지가 있습니다. 이 중 많이 쓰게 되는 마지막 값과 인덱스하기만 보겠습니다.
![](/img/lang/labview/labview-for-tunnel-output.png)
For 루프 안의 코드가 반복 실행될 때, For 루프가 끝난 뒤 나온 결과를 출력하고 싶은 경우가 있습니다. 이 때, 사용하는 터널이 마지막 값입니다.
예를 들어 반 복 횟수 4 회의 For 루프에서, 반복 터미널의 값을 For 루프의 결과로 출력하고자 할 때, 마지막 값 터널을 쓰면 0, 1, 2, 3 이라는 반복 터미널 값 중에 마지막인 3 만 출력하게 됩니다.
인덱스하기는 루프연산에 따라 나온 값을 순차적으로 저장한 후 배열로 출력하는 터널 입니다.
예를 들어 4 회 반복되는 For 루프에 반복 터미널을 출력하면 0, 1, 2 ,3 이 순차적으로 출력됩니다. 이때 마지막 값으로 하면 3 이 결과가 되고, 인덱스하기를 하면 {0, 1, 2, 3}
인 배열이 결과로 출력됩니다.
![](/img/lang/labview/labview-for-test.gif)