본문 바로가기

LabVIEW

[LabVIEW 강의]_3강 랩뷰의 배열

 

안녕하세요!

오늘은 랩뷰의 배열에 대해서 공부 해볼게요.

 

 

배열이란 무엇일까요?

배열은 같은 종류의 데이터들이 모인 집합을 말합니다.

 

건물을 예로 들어볼게요.

'아파트'는 '주거공간'의 집합체이고 '상가 건물'은 '약국, 음식점' 등의 집합체입니다.

(주상 복합의 개념인 클러스터도 있는데 이건 다음에,,)

주거공간의 집합, 상가의 집합과 같이 Labview에서는 문자열 배열, 정수형 배열 등이 있습니다.

그리고 한가지 더

아파트에 따라 한 층에 있는 호수의 갯수도 다르죠? 어떤 아파트는 한 층에 2개의 호가, 어떤 아파트는 단일 호, 어떤 아파트는 3개의 호가 있습니다.

이것처럼 배열도 2차원, 3차원 배열 등이 존재해요.

 

배열을 잘 사용하고 최적의 함수를 이용해 원하는 데이터를 가져올 수 있어야 합니다.

보통 프로그램에서 중요한 데이터들은 상수나 변수 같은 단일 데이터로 존재하지 않고 배열 안에 존재하거든요.

특정 값을 출력하기 위해 또는 배열에서 필요 없는 데이터를 제거하기 위해 배열을 검색하고, 잘라내고, 합치고, 끼워넣고, 뒤집고, 삭제해야 합니다.

 

오늘은 배열을 마음대로 주무르기 위해 Labview의 배열 함수에 대해 알아보겠습니다.

 

먼저 배열 실습을 하려면 임의의 배열데이터가 있어야해요.

난수 배열 만들기.vi
0.01MB

위의 첨부 파일은 난수로 임의 데이터를 생성해 배열로 만드는 Labview 소스입니다.

첨부 파일을 다운로드 하셔도 되고 아니면 그냥 똑같이 만드셔도 됩니다. (저는 랩뷰2014를 사용중입니다.)

 

 

-첨부 파일의 코드

while문을 통해 사용자가 정지버튼을 누를 때까지 계속해서 난수를 생성하도록 했어요.

난수는 0~1의 숫자가 랜덤하게 나타나는데 여기에 10을 곱해 0~10 사이의 임의 데이터를 만들도록 했습니다.

while 루프의 서브다이어그램에 와이어를 연결하고 터널 모드를 인덱스로 바꾼 뒤 인디케이터를 연결했습니다.

이렇게하면 매번 난수 데이터를 만들때 마다 데이터가 인디케이터에 추가 됩니다.

while루프 내부의 타이밍함수는 while루프의 회전 속도를 100ms로 설정하는 함수입니다.

숫자를 변경하면 해당 시간(ms)로 회전해요.

회전 속도를 설정하지 않으면 가능한 최고의 속도로 루프가 회전하기 때문에 난수 데이터의 갯수가 짧은 시간에 엄청나게 많아지고 프로그램이 방대하면 이 부분에서 메모리 누수가 발생합니다.

타이밍 함수는 다른 기기와 통신할 때 주기를 조절하는 것에도 쓰이는데 타이밍에 대해선 다음에 강의 하도록 하고 넘어갈게요!

 

다운로드 하신 다음 소스를 열어 실행합니다.

적당한 시간(10초 이내)이 지난 뒤 프런트패널의 정지 버튼을 눌러 프로그램을 정지해 주세요.

프런트패널의 배열 인디케이터를 보면 난수배열이 생성되어 있습니다.

-생성된 난수 배열

생성을 확인한 뒤 블록 다이어그램에서 배열 인디케이터만 남기고 모두 삭제해 주세요. (이번 강의에 필요 없으니 지웁니다.)

그리고 배열인디케이터에서 오른쪽 마우스를 누른 뒤 컨트롤로 변경을 눌러주세요.

 

 

 

자, 이제 모든 준비가 끝났습니다.

배열컨트롤의 데이터를 입력 받아 원하는 데이터를 찾아내고 필요 없는 데이터를 삭제하는 함수들을 실습해볼게요.

 

 

 

배열은 앞서 말한 것처럼 아파트와 비슷합니다.

아파트에 층이 있는 것처럼 배열에도 인덱스라는 것이 있어요.

인덱스는 0부터 시작하고 각 인덱스에는 원소가 하나씩만 들어있습니다.

 

그렇다면 우리가 만든 이 난수 배열의 크기가 어떻게 될까요?

while문이 열심히 회전해서 만든 배열의 크기를 알려면 '배열 크기' 함수를 사용하면 됩니다.

 

블록 다이어그램에서 함수 패널을 열어 '배열'으로 들어간 뒤 배열 크기 함수를 가져오세요.

난수 배열 컨트롤에서 와이어를 빼 배열 크기 함수로 입력시키세요.

그런 다음 배열 크기 함수의 출력 부분에 오른쪽 마우스를 클릭 해 생성 → 인디케이터를 눌러 갯수를 확인 할 인디케이터를 만들어주세요.

이렇게 하고 프로그램을 실행하면 인디케이터에 배열 크기가 표시됩니다.

-배열의 크기를 확인 할 수 있다.

 

 

 

그럼 이번에는 배열에서 가장 큰 수와 작은 수를 찾아볼게요.

아주 간단합니다.

함수패널에서 '배열 최대&최소'를 가져와 주세요.

 

배열 크기를 확인 한 것처럼 배열 컨트롤의 와이어를 최대&최소에 연결하고 최대&최소 함수의 출력 부분에서 최대값과 최소값에 인디케이터를 생성하면 됩니다.

최대&최소 함수에서는 값 뿐 아니라 최대값과 최소값이 위치한 인덱스를 출력 할 수도 있어요.

-배열의 최대, 최소를 확인 할 수 있다.

 

 

 

이번에는 난수 배열에서 30번째에 위치한 데이터가 무엇인지 확인해보겠습니다.

함수 패널에서 '배열 인덱스'를 가져와 주세요.

 

배열 컨트롤에서 와이어를 배열 인덱스에 연결하고 배열 인덱스 함수의 입력쪽에서 인덱스 라고 된 입력란에 상수를 만들어 원하는 인덱스 값을 입력해두면 됩니다.

배열을 사용할 때 주의할 점이 있습니다.

배열의 시작은 0부터 입니다! 항상 기억하셔야해요.

30번째에 위치한 데이터를 찾기 위해 30을 입력하면 실제 배열의 31번 인덱스의 값이 나옵니다.

그러니 지금은 29를 입력해야 30번 인덱스의 값을 가져올 수 있겠죠? 

마찬가지로 확인할 인디케이터를 배열 인덱스 함수에 연결하고 실행 해보세요.

값이 하나 출력되는데 이게 과연 30번째가 맞나? 0부터 직접 카운팅 할수도 없고,,,(귀찮고)

그럴 땐 프런트패널의 배열 컨트롤에서 원소 칸 왼쪽에 위치한 인덱스 컨트롤에 값을 입력하고 Enter를 눌러보세요.

가장 위에 위치한 값이 입력한 인덱스의 원소입니다.

-컨트롤에 29를 입력한 값과 동일하다!

 

 

 

하나만 더 해볼까요?

배열 안에 있는 수를 작은 숫자 부터 큰 숫자까지 정렬하려면 어떻게 해야할까요?

첫번째 원소와 두번째 원소를 비교해서,,, 더 큰 원소를 배열의 끝으로 보내고,, 다시 비교하고,, ,인덱,,,스를 넘,,,기고,,,,

랩뷰에서는 간단하게 '배열 정렬' 함수를 사용하면 됩니다.

함수 패널에서 배열 정렬 함수를 가져온 뒤 난수 배열 컨트롤의 입력을 받고 확인용 인디케이터를 만들면 끝입니다.

코드를 실행하고 실제로 오름차순 정렬이 되었는지 확인해보세요.

 

 

 

개발을 하면서 배열은 아주 필수적인 요소라 할 수 있습니다.

처음에는 약간 개념이 복잡할 수 있는데 나중에 다차원 배열까지 컨트롤 하시려면 기초를 잘 다져놓으셔야 해요.

다음 강의에는 좀 더 심화된 배열 실습을 몇가지 더 연습해 보도록 하겠습니다!