MoonNote

반응형
     

 

 

 

오토 인덱싱(Auto Indexing)

이번 시간에는 랩뷰 오토 인덱싱(Auto Indexing)에 대해서 한번 알아보도록 하겠습니다. 오토 인덱싱(Auto Indexing)이란 "Auto + Indexing"의 의미 그대로 자동적으로 인덱스 처리를 수행해주는 기능을 말합니다. 인덱스는 배열의 구성 요소 중 하나로 'n번째'라는 위치 정보를 나타내는 용어인데요. 이 위치 정보를 자동으로 처리하기 위해 ¹반복문(For문, While문)을 이용 ²배열 데이터를 다룬다고 보시면 되겠습니다. 오토 인덱싱은 기본적으로 활성화 되어있기 때문에 반복문(For문 or While문) 경계에 터널이 생성되면 오토인덱싱이 활성화 되어있습니다. 아래의 이미지는 오토인덱싱이 활성화되어 있는 예시 이미지입니다.

 

오토 인덱싱(Auto Indexing) 활성화

 

여기서 LabVIEW의 디테일함을 알 수있는 또 한가지!!👀 바로 터널을 자세히 살펴보시면 우리가 프로그래밍 언어에서 보통 배열을 다룰 때 선언하는 '[ ]'마크가 터널 안쪽에 새겨져있습니다.(LabVIEW가 첫 프로그래밍 언어이신 분들 또는 무슨 말인지 모르시는 분들은 그냥 넘어가셔도 됩니다..^_^) 즉, 배열 데이터와 연관된 기능을 수행하겠다라고 직관적으로 보여주는 것이죠. 활성화 설정은 터널에서 우클릭시 설정 가능하며 입력과 출력에서의 메뉴가 조금 다르게 나타나기에 참고 이미지만 살펴보고 아래쪽에서 자세히 다루어보도록 하겠습니다.

오토인덱싱 활성화 여부에 따른 터널 표시
입·출력 터널에서의 아이템 메뉴

 

 

입력 터널에서의 오토인덱싱 

입력에서의 오토인덱싱은 루프 바깥쪽에서 배열 데이터가 루프 안쪽으로 전달되는 경우입니다. 인덱싱을 활성화하게되면 배열 안에 구성되어있는 데이터가 루프가 실행될 때마다 안쪽으로 순차적으로 하나씩 들어오게됩니다. 이해를 돕기 위해 아래의 코드를 한번 실행해보겠습니다.

 

오토인덱싱 활성화된 For문

 

위의 코드에서 오토인덱싱이 된 터널을 기준으로 루프 바깥쪽과 루프 안쪽에서의 와이어 굵기가 다른 것을 확인하실 수 있습니다. 바깥쪽은 1차원 배열, 루프 안쪽은 단일(스칼라) 값임을 한눈에 파악할 수 있습니다.

 

TIP
 
 

LabVIEW에서는 와이어 굵기만으로 데이터의 차원(스칼라 or N차원 배열)을 알 수 있다고 하였습니다.

# 참조 링크 : Tutorial 06, 배열(Array) 데이터 타입

 

 

여기서 또 하나 알아두어야할 포인트! 위의 이미지처럼 코드를 작성하면 LabVIEW 코드가 실행 가능함을 확인하실 수 있습니다. 이전까지 배웠던 For문은 루프 카운트를 반드시 지정해주어야지만 실행이 되었었는데요. 입력에서의 오토인덱싱 터널이 생성되고난 후 LabVIEW 실행 버튼을 확인하니 실행 가능함으로 변경된 것을 보실 수 있을 겁니다. 이유는 바로 입력으로 전달받는 배열 데이터의 오토인덱싱 처리를 자동적으로 수행함으로써 루프가 몇번 반복되어야할지 결정되기 때문에 따로 루프 카운트를 지정하지않아도 실행이 가능하게 되는 것입니다. 위의 예시 이미지로 볼 땐 For 루프는 총 4회 실행되고 루프 안쪽으로 배열의 첫번째 데이터 '10'부터 '20, 30, 40'이 순차적으로 전달됩니다. (터널 모드를 비활성화하였다면 한번에 '[10, 20, 30, 40]'의 1차원 배열이 루프안으로 전달됩니다.) 아래 이미지는 예시 코드를 실행하였을 때 For문의 실행 결과 화면입니다. 

 

오토인덱싱(AutoIndexing)을 통한 For문 실행 화면

 

오토인덱싱도 활성화되어 있고, 루프 카운트도 설정되어 있다면? 루프는 몇번 반복 실행 될까요?

 

위의 질문에 대한 대답은 설정된 두 개의 루프 카운트(오토인덱싱 or 루프 카운트) 중 "무조건 작은 숫자 기준으로 반복 실행이 된다."입니다. 이유는 프로그램에서 범할 수 있는 에러를 최소화하기 위해서인데요. 실습을 통해 해당 내용을 한번 익혀보겠습니다.

 

# CASE 01 : 루프 카운트 10으로 설정, 1D 배열 [1, 2, 3, 4, 5]로 오토인덱싱이 활성화된 경우

이와 같은 조건으로 For문 안쪽에 반복 횟수(i) 값과 오토인덱싱 처리된 배열의 원소를 더하는 코드를 작성하였다고 가정해봅시다. 코드는 아래와 같은 형태일 것입니다.

"오토인덱싱 < 루프 카운트"으로 설정된 코드

이 코드에서 반복되는 것을 생각해보면 루프 안 데이터 인디케이터에서 표시될 숫자는 1번째 사이클에서는 'i : 0' + 'Array(0) : 1' = 1, 2번째 사이클에서는 'i : 1' + 'Array(1) : 2' = 3, 3번째는 'i : 2' + 'Array(2) : 3' = 5 ... 5번째 반복에서는 'i : 4' + 'Array(4) : 5' = 9가 출력되는 것을 알 수 있습니다. 만일 루프 카운트 10으로 설정한 값 기준으로 6번째 반복을 실행해야한다면? 반복 횟수(i)의 경우에는 당연히 'i : 5'가 출력되겠지만, 입력 배열에서는 더이상 원소가 존재하지 않기에 어떤 값이 전달되어야할지 알 수 없으며 이럴 경우 루프 안쪽 코드에 따라 프로그래밍적으로 에러를 범할 수 있습니다. 따라서, LabVIEW에서는 최대한 이러한 에러를 줄이고자 정상적으로 실행 가능한 가장 작은 카운트 설정 기준으로만 반복 실행되도록 조치를 취한 것으로 보여집니다. 어려우신 분들은 그냥 "무조건 작은 카운트 설정 값 기준으로 실행된다"라고 보시면 되겠습니다.

 

# CASE 02 : 루프 카운트 3으로 설정, 1D 배열 [1, 2, 3, 4, 5]로 오토인덱싱이 활성화된 경우

이번에는 배열에 있는 원소 개수보다 루프 카운트 설정이 작은 경우입니다. 배열의 원소가 5개가 들어있고 오토인덱싱이 활성화되어 있지만 추가로 설정한 루프 카운트 3의 설정 또한 무시할 수 없으므로 정상적으로 실행이되는 횟수는 3회까지입니다. 루프 카운트와 오토인덱싱 설정이 된 경우 이외에도 ¹두 개의 입력 배열이 루프쪽으로 오토인덱싱된 경우, ²여러개의 입력 배열과 루프 카운트 모두 설정된 경우 등 모두 카운트 설정이 제일 작은 값 기준으로 루프가 실행된다고 보시면 되겠습니다.

"오토인덱싱 > 루프 카운트"으로 설정된 코드
루프카운트 10 설정, 1D 배열(원소 5개), 1D 배열(원소 2개) 설정된 코드

 

TIP
 
 

입력 배열이 2D 배열일 경우 행 데이터 기준으로 오토인덱싱 처리됩니다.

 

출력 터널에서의 오토인덱싱

입력에서는 오토인덱싱 처리에 따라 데이터 차원이 줄어들었다면(예:1차원 배열 →스칼라 값), 출력에서는 루프 안에서 바깥쪽으로 오토인덱싱되기 때문에 차원이 증가한다고 생각하시면 되겠습니다. 예시로 아래의 이미지는 루프 카운트를 10으로 설정하고 반복 횟수(i)에서 나오는 값을 바깥쪽으로 오토인덱싱하였을 때 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]까지의 1D 배열이 생성되는 코드입니다.

 

출력에서의 오토인덱싱 활성화 화면

 

입력과는 다르게 출력에서의 오토인덱싱 모드는 활성화 이외에도 '마지막 값, 연결하기, 조건적'이라는 옵션이 있습니다. 위쪽에서 소개되었던 우클릭 메뉴를 보시면 아시겠지만 '마지막 값', '인덱스하기', '연결하기', '조건적' 옵션으로 총 4가지 기능을 사용자가 설정할 수 있습니다. 하나씩 살펴보면 다음과 같습니다.

 

# 마지막 값 : 루프 최종 실행에서의 단일 값(마지막 값)만 루프 바깥으로 출력합니다. '오토인덱싱 비활성화'

# 인덱스하기 : 루프 안쪽보다 1차원 높은 배열 타입으로 데이터가 출력됩니다. '오토인덱싱 활성화'

# 연결하기 : 동일한 차원의 데이터들을 묶어서 연결시켜주는 기능입니다.(예외 : 스칼라 타입은 사용 불가)

# 조건적 : 출력 터널에서 지정한 조건을 만족하는 데이터만 루프 바깥쪽으로 출력하는 기능입니다.

 

이상으로 LabVIEW 오토인덱싱(Auto Indexing)에 대해서 알아보았습니다.

 

 

 

 

 

 

 

 

※ 이 글이 도움이 되었다면 "🤍공감" 버튼을 클릭해주세요. 클릭 한번이 글 쓰는데 큰 힘이 됩니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band