MoonNote

반응형
     

 

 

 

모듈화(SubVI)

모듈화란 사용자가 원하는 기능의 함수를 직접 만드는 것을 말합니다. 랩뷰에서는 SubVI라고 많이 부르며 랩뷰 기본 함수 및 툴킷에서 제공되는 아이콘 외에 내가 직접 함수 아이콘을 만든다고 보시면 되겠습니다. "그럼 모듈화를 왜 사용해야 하는 걸까요?", "기존에 제공되는 함수를 사용하면 더 편하고 쉬운게 아닌가요?" 등의 의문을 가지고 계신 분들이 있으실텐데요. 개인적으로는 내가 잘 활용할 수 있는 나만의 모듈. 즉, SubVI를 얼마나 많이 가지고 있는지가 나의 LabVIEW 스킬이 될 수 있다고 생각합니다. 그만큼 랩뷰에서는 지원되는 함수만 있다면 입출력 터미널을 와이어링만 시켜서 일단 코드 작성을 끝낼 수 있기 때문이죠. "先 기능 구현, 後 스터디가 가능하다고나 할까요?" 크게 모듈화와 관련된 장점으로 가독성, 확장성, 보수성을 이야기하는데 하나씩 살펴보도록 하겠습니다.

 

가독성

모듈화를 사용하게되면 프로그램 가독성이 증가하게 됩니다. 잘 정리되어 있는 노트와도 같은 것이죠. 프로그램이란 것이 당연히 기능 구현만 되면 장땡이라고 말할정도로 프로그래머마다 스타일이 다르고 동일한 기능에 대해서 작성된 로직이 상이할 수 있습니다. 랩뷰가 아무리 직관적인 언어이고 G프로그램이라고 불린다고하지만 정말 방대한 양의 코드를 와이어링으로만 구현을 한다면 오히려 가독성이 떨어지게되어 내가 작성한 코드도 못 알아보게되는 사태가 벌어질지 모르는 것이. 아래 이미지는 SubVI를 사용하지 않은 블록다이어그램의 코드 중 일부를 캡쳐한 이미지로 복잡하게 뒤엉킨 형태를 스파게티 코드라고 부르기도 합니다.

SubVI를 사용하지 않은 코드 예시 - 스파게티 코드(Spaghetti code)

 

랩뷰의 장점은 분명 직관적이고 그래픽적이기 때문에 코드 분석이 용이한 장점이 있는데, 적절한 모듈화를 하지 않았을 경우 위의 이미지처럼 오히려 장점이 단점이 되어버리는 사태가 발생하게 되는 것이죠. 위의 코드는 랩뷰 코드를 검색해보았을 때 대표적으로 나오는 이미지 중 하나로 전체 코드를 파악하기는 어렵겠지만, 설명을 위해 제가 임의로 크게 4군데(①초기 값 설정, ②Wait 타이머, ③아날로그 출력, ④아날로그 입력)로 나뉘어서 모듈화를 하였을 경우로 가정해보겠습니다.

①~④ 모듈화 파트 이미지

직접 짠 코드가 아니기에 가정으로 초기화 작업을 수행하고 ②장비 로딩 시간을 어느정도 기다린 후 ④아날로그 출력 및 입력 루프에서 데이터를 쓰기/읽기 작업을 수행한다라고하고 모듈화를 해보면 아래와  같이 어느정도 정리를 할 수 있는 것이죠. 아래에 모듈화시킨 코드를 보면 설명을 위해 간략하게만 아키텍쳐를 구성하였지만 확실히 SubVI를 만들어서 모듈화를 시켰더니 코드의 가독성이 훨씬 높아진 것을 알 수 있습니다.

모듈화(SubVI) 장점 01 - 가독성 증가

 

확장성

확장성은 말그대로 SubVI로 만들어둔 특정 기능의 코드에 추가로 다른 기능들을 추가하는 작업을 말합니다. 처음부터 VI를 재구성하지 않아도 되기에 개발 단축 시간도 줄일 수 있고 간편하죠. 예를 들어 상반기 가계부 내역을 합산하는 코드가 있었는데 평균을 계산하는 코드를 추가하여 디스플레이하는 것입니다. 아래의 이미지처럼 말이죠.

모듈화(SubVI) 장점 02 - 확장성

 

보수성

특정 기능에 대해서 모듈 형태로 코드를 관리하게되면 유지보수 또한 좋아집니다. 전체 Main VI 하나만 관리하기보단 각각의 파트별 SubVI를 만들어서 Serial, TCP/IP, Analog Input, Analog Output, Data logging 등 기능별로 나누어두는 것이죠. 그러고나서 AI쪽 기능만 수정이 필요할 경우 Analog Input을 담당하는 SubVI쪽 코드만 수정하면 되기에 유지보수가 용이하죠. 이 뿐만이 아닙니다. Main VI에서 동일 기능이 여러군데에서 사용될 경우 SubVI가 있다면 Main 코드의 적절한 위치에 SubVI를 놓기만하면되니 정말 편하게 관리할 수 있겠죠?

 

모듈화(SubVI) 장점 03 - 보수성

 

SubVI 만드는 방법

그럼 SubVI를 만드는 방법을 살펴보도록 하겠습니다. 코드는 심플하게 카운트를 지정하면 0부터 지정한 횟수만큼 +1 증가한 데이터를 생성하는 아래와 같은 코드를 가지고 만들어보겠습니다.

 

SubVI 만들기 샘플 코드

[방법 1]

1. SubVI를 만들고자 하는 영역을 드래그하여 지정합니다. 자세히 보시면 컨트롤 및 인디케이터는 선택하지 않았으니 똑같이 따라해주시기 바랍니다.

2. 메뉴 바에서 편집(E) >> SubVI 생성(S) 아이템을 클릭합니다.

3. Main VI에서 생성된 SubVI를 확인합니다.(아래 이미지 참조)

 

 

커넥터 팬(Connector Pane)

다음은 샘플 코드처럼 직접 작성했다고 가정하고 해당 VI를 SubVI로 사용하기 위해 커넥터팬을 지정하는 방법입니다. 커넥터팬은 프런트패널 우측 상단에 위치한 격자 무늬 형태로 SubVI로 데이터를 주고 받기 위한 입출력 터미널을 설정하는 팬을 말합니다.

LabVIEW 커넥터 팬

커넥터팬에 마우스 커서를 놓고 우클릭을 했을 시 기본 패턴 외에 랩뷰에서 제공하는 다양한 패턴을 선택하여 사용할 수 있습니다.

랩뷰 커넥터팬(Connector Pane) 패턴

 

커넥터팬에 원하는 컨트롤 또는 인디케이터를 매칭시킬 때 딱 정해진 것은 아니지만 랩뷰의 기본 권장 흐름대로 좌에서 우, 위에서 아래 방향으로 입출력 터미널을 맞추어 지정해주시면 와이어링시 좀 더 깔끔한 코드를 만드실 수 있습니다. 따라서, 보통 아래와 같은 형태로 좌측을 입력, 우측을 출력으로 터미널 지정을 많이하고 있습니다.

커넥터 팬 지정(권장 사항, 필수는 아님)

 

지정하는 방법은 터미널에 클릭하고 프런트 패널 내의 컨트롤 또는 인디케이터를 선택하기만해주면 됩니다. 자세히 보시면 데이터 타입에 맞추어 터미널 색상이 지정되는 것을 보실 수 있으며, 클릭-투-클릭 형태로 실제 터미널을 지정하는 이미지는 아래에 첨부해두었으니 참고하시면 되겠습니다. 

커넥터팬 설정

 

[방법2]

커넥터팬까지 살펴보았으니 이번에는 메뉴아이템 이용하여 자동으로 SubVI를 만들지 않고 직접 작성했던 코드를 SubVI로 만들어보겠습니다. 방법1과 동일한 샘플 코드가 있다고 했을 때 커넥터 팬만 지정해주면 됩니다. 완성된 VI는 아래의 이미지와 같습니다.

수동으로 SubVI를 만든 이미지

 

다 만들어진 SubVI는 새로운 VI 패널에서 가지고와서 사용하기만하면 됩니다. 호출 방법은 랩뷰 팔레트에서 VI 직접 선택하기를 통한 호출, SubVI 아이콘을 끌어오는 방법, 폴더 탐색기에서 VI를 드래그하여 가지고오는 방법 등이 있습니다.

 

- 폴더 탐색기에서 SubVI 끌어오는 방법

SubVI 등록 방법 01 : 폴더 탐색기에서 드래그

- SubVI 아이콘을 끌어오는 방법

SubVI 등록 방법 02 : VI 아이콘에서 드래그

- 함수 팔레트를 이용한 방법

SubVI 등록 방법 03 : 함수 팔레트에서 VI 지정

 

 

 

아이콘(Icon)

LabVIEW가 그래픽 기반의 언어인만큼 내가 만든 SubVI도 기능에 맞게 적절한 아이콘으로 표시되면 아무래도 보기 더 좋겠죠? 커넥터팬 우측에 아이콘을 더블 클릭하면 해당 VI의 아이콘을 꾸밀 수 있는 패널이 나오게 됩니다. 32 x 32 픽셀 사이즈로 그림판 사용하는 형태와 비슷하니 사용법은 생략하고 참고 이미지만 첨부하도록 하겠습니다.

 

LabVIEW 아이콘 편집기

 

이상으로 Tutorial 19 모듈화(SubVI)에 대한 포스팅을 마치도록 하겠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

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

공유하기

facebook twitter kakaoTalk kakaostory naver band