본문으로 바로가기

SubVI

category Programming/LabVIEW 2024. 5. 24. 21:00
반응형

대부분의 프로그래밍 언어가 그러하듯이, 프로그램 안에서 처리해야 하는 연산이 늘어나면 늘어날수록 프로그램은 복잡해지고 가독성이 떨어집니다. 특히나, 구현해야 하는 모든 기능을 하나의 함수 안에 다 때려 넣은 그런 프로그램에서는 더더욱 가독성이 떨어지는데요. 그래서 C#이나 파이썬과 같은 프로그래밍 언어에서는 메인 프로그램의 복잡함을 줄여주기 위해, 처리해야 하는 작업들을 여러 함수에 나눠서 구현합니다. 이렇게 프로그램을 작성하게 되면, 동일한 함수를 반복적으로 호출함으로써, 작성된 코드를 재사용할 수 있다는 이점도 가지게 되구요. 프로그램의 변경 및 수정이 필요할 때도 관련된 함수만 건드려 주면 되기 때문에 생산성까지 확보할 수 있습니다.

이런 점은 랩뷰라고 해서 예외일 수는 없습니다. 특히, 데이터가 전달되는 경로를 와이어로 표현하는 랩뷰의 경우에는 텍스트로 작성된 프로그램에 비해 복잡도가 더 높아질 수 밖에 없는데요. 그래서, 처리해야 하는 작업들을 분산해서 구현하는 필요성이 다른 프로그래밍 언어에 비해 많이 높다고 말씀드릴 수 있습니다.

위 그림을 예로 들어 보겠습니다. 랩뷰에서는 삼각함수를 제공하고 있는데요. 이런 삼각함수를 사용하기 위해서는 라디언 데이터를 입력으로 전달해야 합니다. 이건 랩뷰만 그런게 아니고, 대부분의 프로그래밍 언어들이 각도 대신 라디안을 입력으로 많이 사용하는데요. 왜 그런지는 잘 알고 있습니다만, 실제 사용하는 입장에서는 라디안으로 변경하는 과정이 별도로 필요하기 때문에 그렇게 달갑지는 않습니다.

물론, 학교의 교과 과정에서 각도 1도당 π/180 라디안이라는 것 정도는 다들 배웠을 것입니다. 하지만, 라디안 보다는 각도를 사용하는 것이 사실상 훨씬 친숙하고, 30도나 90도와 같이 특정 각도에 대한 라디안 조차도 파이가 포함된 형태로 대부분 표현하기 때문에, 90도에 대한 라디안 값이 약 1.57 정도 된다는 것을 모든 사람들이 바로바로 연상할 수는 없을 것입니다. 그래서, 삼각함수 연산이 필요한 프로그램을 작성할 때, 사용자로부터 라디안에 대한 정보를 바로 입력 받기 보다는 그냥 각도 정보를 입력 받아서 라디안 값으로 변환하는 것이 유리할 수 있습니다.

원래 프로그램이라는 것이 아주 극단적인 상황을 예로 들어서 많이 생각하기 때문에, 작성하는 프로그램 안에서 각도를 라디안으로, 혹은 라디안을 각도로 변환하는 부분이 약 1,000개쯤 된다고 가정해 봅시다. 그럼, 위 그림의 프로그램처럼 π/180의 값을 매번 각도에 곱해줄 것인가를 고민할 필요가 있구요. 반대로, 라디안으로 반환되는 삼각함수의 역함수 결과를 각도로 환산할 때마다 π/180의 값을 나눠줄 것인지를 고민할 필요가 있습니다.

SubVI의 필요성을 설명하는 사례치고는 조금 많이 빈약하긴 하지만, 어쨌든 이런 상황에서 라디안을 각도로, 혹은 각도를 라디안으로 변환해 주는 하나의 작은 프로그래밍 모듈을 만들어 놓고, 필요할 때마다 가져다 사용할 수 있으면 상당히 편리할텐데요. SubVI를 통해 이런 부분을 구현할 수 있습니다.

 

아예 새로운 VI를 열어서 SubVI를 만들 수도 있지만, 위 그림과 같이 작성된 프로그램에서 일부를 SubVI로 만들 수도 있습니다. 우선 SubVI로 만들 영역을 마우스로 선택하구요. 상단의 메뉴에서 편집 → SubVI 생성 메뉴를 클릭하면,

위 그림처럼 선택한 영역이 SubVI로 변경됩니다.

원래 프로그램의 블록 다이어그램에서 SubVI로 변경된 아이콘을 더블 클릭하면, SubVI에 대한 프런트 패널과 블록 다이어그램을 위 그림과 같이 열어볼 수 있구요. 여기서 필요한 부분을 추가로 작성하거나 수정하면 됩니다.

SubVI는 다른 프로그램에서 호출을 통해 사용됩니다. 다른 프로그래밍 언어에서는 Function 정도가 카운터 파트에 해당하는데요. 연산을 처리하는데 필요한 정보들과 함께 호출하고, 연산 결과를 반환 받는다는 점에서 그렇게 말씀드릴 수 있습니다. SubVI라 하더라도 호출하는 프로그램의 블록 다이어그램에서는 하나의 함수처럼 취급하기 때문에 데이터를 전달하거나, 연산 결과를 전달 받기 위해서는 와이어의 연결이 필요합니다. 다시 말해, SubVI를 작성하는 과정에서 몇 개의 데이터를 전달 받아야 하고, 몇 개의 데이터를 호출하는 프로그램에 반환할 것인지가 결정되어야 한다는 말이구요. 어떤 터미널을 통해 와이어를 연결할 것인지도 결정되어야 합니다.

위의 그림에서 볼 수 있듯이 SubVI의 프런트 패널에는 방금 말씀드린 터미널에 대한 부분이 오른쪽 상단에 표시되는데요.

현재 예시로 들고 있는 SubVI에서 터미널 부분만 확대해서 살펴보면, 총 12개의 터미널을 가진 상태로 설정이 되어 있구요. 이 부분은 패턴이라는 메뉴를 통해 변경할 수 있습니다.

터미널은 대부분 흰색으로 되어 있지만 2개의 터미널만 주황색으로 색이 칠해져 있는데요. 어떠한 데이터도 링크되어 있지 않은 터미널은 흰색으로 표시되고, 데이터가 링크된 터미널은 데이터 타입을 의미하는 색으로 칠해집니다. 다시 말해, 부동 소수형 데이터 2개가 터미널에 링크되어 있고, 나머지는 링크되어 있지 않기 때문에 사용하지 않는 터미널이라는 것을 의미합니다.

주황색으로 채워진 터미널 중에서 왼쪽의 터미널과 오른쪽의 터미널을 비교하면, 오른쪽 터미널이 좀 더 진한 윤곽선으로 되어 있습니다. 이것은 데이터를 전달받기 위한 용도의 터미널인지, 데이터를 전달하기 위한 용도의 터미널인지를 구분하는 기준이 되구요. 얇은 윤곽선의 터미널이 입력, 굵은 윤곽선의 터미널이 출력을 의미합니다.

일반적인 랩뷰 프로그램에서는 프런트 패널의 오브젝트를 통해 사용자가 데이터를 입력합니다. 하지만 SubVI에서는 호출하는 프로그램으로부터 데이터를 전달받기 때문에 호출하는 프런트 패널의 오브젝트와 터미널을 링크시켜 줍니다. 이 작업은 마우스를 통해 진행하는데요. 먼저 프런트 패널의 우측 상단에 표시되는 터미널들 중에서 비어 있는 터미널을 하나 클릭한 다음에, 프런트 패널 내부의 오브젝트를 선택하면, 오브젝트에서 처리하는 데이터의 색상이 터미널에 채워집니다.

지금까지 설명드린 방법에 따라 SubVI를 생성하고, 다른 프로그램에서 호출하는 것도 다 좋은데, 프로그램을 작성하는 과정에서 여러 SubVI를 호출하게 되면, 어떤 목적으로 만들어진 SubVI인지 헷갈릴 수 있습니다. 호출하는 SubVI 옆에 코멘트를 달아두어서 구분하는 방법도 있겠지만, 아이콘을 통해 SubVI의 사용 목적을 표시할 수도 있는데요. 프런트 패널의 우측 상단에 표시되는 아이콘을 더블 클릭하면, 위 그림과 같이 아이콘 편집기가 열리구요. 여기서 원하는 형태로 아이콘을 편집할 수 있습니다. 약간의 디자인 감각을 요구하는 작업이긴 합니다만, 그냥 디폴트로 제공하는 아이콘 보다는 나은 결과를 보이지 않을까 생각하구요.

이렇게 작성된 SubVI를 다른 프로그램에서 호출할 때는 위 그림과 같이 호출할 프로그램의 블록 다이어그램에서 함수 팔레트를 열어주고, 목록에서 VI 선택...을 클릭한 다음에 SubVI가 저장된 경로를 찾아서 열어주시면 됩니다.

반응형

'Programming > LabVIEW' 카테고리의 다른 글

배열 인덱스 함수와 배열 부분 대체 함수  (0) 2024.05.26
배열 초기화 & 배열 만들기 함수  (0) 2024.05.25
Event 구조  (2) 2024.05.23
Sequence 구조  (0) 2024.05.22
While 루프  (0) 2024.05.22