SubVI 란 무엇인가
이번 강의에서는 SubVI에 대해서 알아보겠습니다. SubVI는 기타 언어에서 사용하는 함수와 같은 개념입니다. 입력을 받고, 입력을 처리하고, 출력합니다. 이전 강의에서 사용한 랩뷰의 더하기(Add)라는 함수도 일종의 SubVI라고 봐도 되겠죠.
1. SubVI의 개념
아래와 같이 a,b를 입력받아서 두 값을 더한 후 c로 출력하는 함수가 있다고 생각해 봅시다. 이 함수는 랩뷰에 기본적으로 있는 Add 함수와 동일한 역할을 합니다.
2. SubVI 만들기
입력 a, b를 받아서 아래와 같이 계산해서 c로 출력해야 하는 경우를 생각해 봅시다.
c = a/(a+b)
기본 함수를 사용해서 블록 다이어그램에서 코드를 짜면 아래와 같습니다.
여기서 c=a/(a+b) 를 계산하는 SubVI를 만들 때 가장 많이 사용하는 방법은 블록 다이어그램에서 SubVI화 할 부분을 드래그해서 선택한 후 Edit - Create SubVI 를 클릭하는 것입니다.
생성된 SubVI를 더블클릭하면 해당 SubVI를 볼 수 있습니다.
3. SubVI 터미널과 아이콘
자동으로 생성된 SubVI를 더블클릭하여 프론트패널을 확인하면 아래와 같이 자동으로 생성된 컨트롤 a,b와 인디케이터 Numeric을 볼 수 있습니다. 출력 인디케이터의 이름은 c로 변경해 주면 되겠지요. 추가로 살펴보아야 할 부분은 SubVI 터미널과 아이콘입니다. SubVI 터미널은 SubVI의 입력 또는 출력을 연결하는 터미널입니다. SubVI 아이콘은 해당 SubVI를 블록 다이어그램에 추가했을 때 보이는 아이콘의 모습입니다.
- SubVI 터미널에 연결된 컨트롤/인디케이터 확인하기
특정 터미널에 어떤 컨트롤 또는 인디케이터가 연결되어 있는지를 확인하기 위해서는 터미널을 클릭해 보면 됩니다. 터미널을 클릭하면 연결된 객체가 선택됩니다.
- SubVI 터미널 변경하기
SubVI에서 터미널에 연결된 컨트롤이나 인디케이터를 바꾸는 방법은 두 가지가 있습니다.
- 원래 연결된 터미널을 삭제하고 다시 연결하는 방법
- 원래 연결된 터미널을 오른쪽 클릭하여 Remove Terminal 을 눌러 터미널을 삭제합니다.
- 새로 연결할 터미널을 클릭한 후, 컨트롤 또는 인디케이터를 눌러 터미널을 연결합니다. - 컨트롤 키를 누른 채로 터미널을 교체하는 방법 (자주 사용하게 됨)
- 원래 연결된 터미널을 클릭합니다.
- 서로 교체할 터미널을 컨트롤 키(Ctrl)를 누른 채로 클릭합니다.
아래는 두 번째 방법을 사용하여 터미널을 교체하는 방법입니다. 컨트롤 키를 누른 채로 터미널을 교체하는 방법은 블록 다이어그램에서도 사용할 수 있습니다.
- SubVI 아이콘 변경하기 (중요***별표 3개)
SubVI의 아이콘을 변경하는 것은 SubVI 생성후 반드시 해 줘야 하는 작업입니다. 텍스트 기반 언어에서는 함수(=SubVI)를 호출할 때 함수명을 사용하기 때문에 바로 어떤 함수를 사용하는지 알 수 있습니다. 하지만 랩뷰에서는 그래픽적으로 VI를 표현하기 때문에, SubVI를 저장하고 사용한다고 해서 어떤 SubVI를 사용하는지 한눈에 파악할 수가 없습니다.
SubVI 아이콘 부분을 더블클릭하거나, 오른쪽 클릭 - Edit Icon... 을 클릭합니다.
먼저, 랩뷰에서 기본으로 생성된 아이콘을 없애야 합니다. Layers 탭 -> User Layers에 생성된 아이콘 클릭 -> Remove Layer를 클릭하여 아이콘을 삭제합니다.
Templates 탭에서 프레임을 선택해서 추가해 줍니다. 꼭 할 필요는 없습니다만.. 적당한 게 없어 항상 사용하게 됩니다.
Icon Text 탭에서 아래와 같이 입력합니다. (또는 펜슬 도구를 이용해서 직접 그리셔도 됩니다.)
확인을 누르면 SubVI 아이콘이 바뀐 것을 확인할 수 있고, SubVI를 사용한 블록 다이어그램에서도 아이콘이 변경된 것을 알 수 있습니다. 블록 다이어그램에서 SubVI 아이콘이 어떤 함수인지를 알려주어야 나중에 코드를 분석할 때 쉽게 작업할 수 있습니다.
4. SubVI에 대한 여담
SubVI는 랩뷰의 프로젝트와 함께 사용해야 빛을 발할 수 있습니다. 위처럼 간단한 프로그램에서는 SubVI가 몇 개 없으니까 상관 없습니다만, 정말 많은 SubVI를 사용하면 프로젝트를 관리할 수 밖에 없습니다. C언어에서 헤더 파일을 이용해서 함수들을 정리하는 것처럼요.
또한 프로그래밍을 하는 입장에서 함수를 최대한 쪼갤 수 있는만큼 쪼개는 것이 가장 좋습니다. 그것이 텍스트 기반 언어이든, 랩뷰처럼 그래픽 기반 언어이든 말이죠. 그래야 나중에 프로그램을 개발하는 데 시간이 단축됩니다. 그런데 텍스트 기반 언어에서는 함수들을 쭉 모아놓고 한번에 읽어내려갈 수 있는데 랩뷰는 그렇지 못합니다. SubVI 하나하나를 열어서 확인해야 한다는 것이 가장 큰 불편한 점 중 하나입니다.
SubVI 아이콘을 만드실 때 아이콘 텍스트가 흐릿한 경우 텍스트를 크게 해 보시고, 그것도 안된다면 아래 글을 참고해 주세요.