You are here

LabVIEW Tech-Tip 17호: X컨트롤의 활용

X컨트롤이란?

X컨트롤이란, LabVIEW에 기본적으로 존재하는 컨트롤들을 사용자가 새롭게 정의하여 하는 것을 의미합니다. 여기서 사용자 정의는 컨트롤의 단순한 모양의 변화 뿐 아니라, 컨트롤 내부에 사용자가 개발한 부가적인 기능을 프로그래밍하여 포함시킬 수 있습니다. X컨트롤은 LabVIEW 블록다이어그램 상에서 볼 때는 하나의 객체로 보이지만, 실제 그 내부에는 이미 사용자가 개발한 기능을 자체적으로 수행하게 됩니다. 그럼 실제 X컨트롤을 어떻게 사용하고 활용하는지 살펴보기로 하겠습니다.

 

X 컨트롤 따라하기 예제 다운로드 


시작하기에 앞서…

여기에서는 의존적 링 컨트롤을 구현하는 간단한 X컨트롤을 생성함으로써, 기본적인 X컨트롤의 사용방법을 알아보도록 하겠습니다. 아래 그림과 같이 첫번째 링 컨트롤은 디바이스를 선택하는 링컨트롤이며, 두번째 링 컨트롤은 테스트를 선택하는 링 컨트롤입니다. 

 

 

이때 첫번째 링컨트롤에서 선택하는 디바이스에 따라서, 두번째 링컨트롤에서 선택할 수 있는 테스트 항목들이 달라집니다. 이러한 컨트롤은 실제 테스트 어플리케이션에서 많이 사용되는 사례입니다. 그렇다면 X컨트롤을 생성하는 방법으로 본격적으로 살펴보도록 하겠습니다.

 

셋업

먼저 본 문서는 LabVIEW 2011버전으로 제작되었습니다. 본 실습은 2009 이후 버전에서 가능합니다만, VI스니핏 기능이 일부 제한이 될 수 있습니다. LabVIEW 2011 버전이 없을 경우, 평가판을 사용하시길 추천해드립니다.

X컨트롤 활용 따라하기

1. LabVIEW를 실행하고 새 프로젝트를 엽니다.

 

 

위 그림처럼 두 개의 링 컨트롤을 각각 생성합니다. 

 

2. 프로젝트 탐색기의 내 컴퓨터에서 마우스 오른쪽 버튼을 누르고 새로만들기>>버츄얼폴더를 선택하고 Source Files라고 입력합니다.(생성하는 링 컨트롤을 프로젝트 탐색기에서  관리하기 편리하도록 폴더를 생성하여 관리합니다.)

 

 

3. 먼저 Select Device 를 하는 링1을 생성합니다.

 A. 프로젝트>>내 컴퓨터>>Source Files에서 마우스 오른쪽 버튼을 클릭하여 새로만들기>>컨트롤을 선택합니다. 
 

  컨트롤을 사용자가 원하는 컨트롤을 생성할 수 있습니다. 단, 컨트롤 편집에는 블록다이어그램이 존재하지 않습니다. 

 

  B. 컨트롤 편집 창에 시스템>>>>링&열거형>>시스템 링 객체를 선택합니다.

 

C. 링의 아이템을 입력하기 위해 시스템 링을 선택하고 마우스 오른쪽 버튼 메뉴의 아이템 편집을 선택합니다.

 

D. 다음과 같이 아이템을 입력합니다. 

 

 
E. 객체의 글자크기를 키우기 위해 시스템 링을 선택한 후, 메뉴바에서 글자크기를 24로 변경합니다.

 

 
F. Select Device 를 선택한 후 마우스 오른쪽 버튼 메뉴에서 아이템 비활성화를 선택합니다. 이렇게 하면 Select Device만 비활성화 됩니다.

             

 
G. 저장버튼을 눌러 링1.ctl로 저장합니다. 

 


4. 두번째 Select Test 를 선택하는 시스템 링인 링2를 생성합니다. 

A. 링1과 마찬가지로 시스템 링을 선택하고 크기를 조정한 후 링2.ctl로 저장하여 시스템링의 편집을 마칩니다. 여기서 링2의 아이템은 편집하지 않습니다. 그 이유는 링1의 아이템 선택에 따라 링2의 아이템내용이 달라지게 되므로 링2의 아이템은 프로그램적으로 입력하게 됩니다.

 


 
이제 그림과 같은 X컨트롤을 생성합니다. 
 

 
5. 프로젝트 탐색기의 내 컴퓨터에서 마우스 오른쪽 클릭하고 새로 만들기»X컨트롤을 선택하여 새로운 X컨트롤을 프로젝트에 추가합니다.

 


6. 프로젝트 탐색기에 X컨트롤이 추가되고, X컨트롤 하위에 필요한 다양한 파일들이 생성된 것을 확인할 수 있습니다.

 


7. 첫 번째로 데이터1.ctl을 수정합니다. 데이터 파일의 기능은 X컨트롤이 블록 다이어그램에서 사용될 때, 나타나는 X컨트롤의 데이터 타입을 정의합니다. 이 파일의 구성은 하나의 “Data”라는 라벨의 컨트롤을 가지고 있습니다. X컨트롤은 문자열을 반환하기 때문에 기본 숫자형 컨트롤을 문자열 컨트롤로 대체해야 합니다. 이를 위해 컨트롤을 마우스 오른쪽 클릭하고 대체»문자열&경로»문자열 컨트롤을 선택합니다.

 

 

8. Ctrl+S를 입력하여 변경 사항을 저장합니다. 

 

 
9. 다음으로 외관1.vi를 편집합니다. 

 

 
10. 이 VI는 XControl의 실제 기능의 로직을 설계하는 vi입니다. 처음 열게 되면 아래와 같은 내용의 텍스트를 볼 수 있습니다. 외관.vi를 개발하는 기본적인 내용을 설명하고 있으니 간단하게 살펴보신 후 선택하여 삭제합니다.

 


 
11. 앞서 제작했던 프로젝트 탐색기 Source Files 폴더의 Ring1.ctl과 Ring2.ctl을 외관1.vi의 프런트 패널에 드래그하여 아래 그림과 같이 위치시킵니다.

    

 
12. 오른쪽 클릭 후 보이는 아이템»라벨을 선택하여 X컨트롤에 들어가는 각각의 링의 라벨을 숨깁니다. 

 

 

13. 윈도우의 크기를 조정하여 링 컨트롤만 보이도록 하는 것입니다. 이것은 외관1.vi 윈도우의 크기가 곧 향후 사용하게 되는 X컨트롤의 크기가 되기 때문에 최대한 불필요한 내용들은 프론트패널에서 제거하고 윈도우 크기를 최소화해야 합니다.  

 

 
14. 이제 X컨트롤의 기능을 프로그래밍하기 위해 블록 다이어그램으로 이동합니다. 이미 많은 코드가 기본적으로 생성되어 있는 것을 확인할 수 있습니다. 

 

이미 존재하는 블록 다이어그램의 어떤 코드도 제거하지 마십시요. 각 이벤트들은 X컨트롤의 기능을 구현하는데 필요한 다양한 변화들에 대한 변경사항들을 처리하게 됩니다. X컨트롤은 단순히 컨트롤이므로 존재하는 컨트롤 항목에 대한 이벤트 외에 다른 이벤트에 대해서는 고려할 필요가 없습니다.

15. 기본적으로 존재하는 이벤트 외에 추가적으로 생성한 컨트롤에서 발생이 예상되는 이벤트를 추가합니다. 예상되는 이벤트는 다음과 같습니다.

A. 사용자가 링1의 값을 변경할 때 : 링1의 아이템 선택에 따라 링2의 아이템들을 다르게 업데이트 함

B. 링2의 값을 변경할 때 : X컨트롤이 선택한 테스트 아이템을 블록 다이어그램으로 업데이트

 

16. 위의 두 가지 이벤트를 새 이벤트 케이스를 추가하기 위해 이벤트 케이스의 경계에서 마우스 오른쪽 클릭하고 이벤트 케이스 추가를 선택합니다.

 

 

17. 이벤트 소스에서 링1을 선택하고 이벤트에서 값 변경을 선택한 후 확인을 클릭합니다. 

 


 
18. 링1 이벤트 케이스에 해당하는 프로그래밍을 진행합니다. 프로그램은 미리 제공해 드리는 예제파일을 사용하도록 합니다. 
아래 그림을 드래그 하여 해당케이스로 드래그 하시거나, 프로젝트 탐색기의 Source File 폴더에 존재하는 링1.png 을 이벤트 케이스내의 왼쪽 상단 구석으로 드래그합니다. 본 png파일은 VI 스니핏 기능을 이용하여 제작된 것이므로 바로 코드로 전환되는 것을 확인할 수 있습니다. 

 


 
19. 아직 완료 되지 않는 코드를 아래의 과정을 따라 완성합니다.

A. 블록다이어그램에 존재하는 링1 객체를 클릭하여 마우스 오른쪽 버튼을 클릭하고 생성»참조를 선택하여 링1에 대한 참조를 생성합니다. 

B. 링1에 대한 참조를 케이스 구문 왼쪽의 프로퍼티 노드의 참조 입력에 연결합니다.

 

C. 이벤트 구조의 좌측 새 값 터미널의 출력을 배열인덱스 함수의 인덱스 입력에 연결합니다. 

 

 

 D. 링2에 대해서도 마찬가지로 참조를 생성하여 케이스 구문 우측의 프로퍼티 노드의 참조 입력에 연결합니다.

 

 
        E. 링1의 아이템을 선택할 경우 X컨트롤의 내부의 링2에 대한 값 변경외에는 다른 어떤 변화가 필요하지 않으므로 이벤트를 거쳐가는 Data In, Display State In, Action 입력을 각각 Data Out, Display State Out, Action에 바로 연결합니다.
 
20. 링2에 대해서도 이벤트 소스를 링2, 이벤트를 값변경으로 선택하여 이벤트를 추가합니다.

 

 
21. 링2 케이스에 대해서도 아래 그림이나, 또는 프로젝트 탐색기의 Source Files에 존재하는 링2.png 파일을 링2 이벤트케이스로 드래그 하여 코드를 추가합니다. 

 

 
22. 이때 컨트롤을 찾을 수 없다는 메시지가 발생할 수 있는데, 모두 무시를 선택합니다. 

 

 
23. 이 코드는 사용자가 링2 에서 아이템을 선택할 경우 이벤트를 발생시킵니다. 아이템을 Select Test를 선택할 경우에는 0번 케이스가 실행되어 이벤트를 무시하고, 다른 아이템을 선택하게 될 경우에는 선택한 아이템을 X컨트롤의 Data Out에 업데이트합니다. 그리고 동시에 Data Out이 변경되었다는 것을 Action Out 클러스터의 Data Changed? 불리언을 True 값으로 변경하여 값 변경을 LabVIEW에 알립니다.

 


 
24. 이제 완성되지 않은 와이어 연결을 마무리합니다. 

A. 이벤트 구조 내부의 Data In 컨트롤과 Data Out 인디케이터를 삭제하고 와이어들을 이벤트 구조의 해당 터널에 연결합니다.

B. 이벤트 구조 내의 Action In 컨트롤과 Action Out 인디케이터를 삭제하고 깨진 와이어들을 이벤트 구조의 해당 터널에 연결합니다.

C. 새 값 인디케이터를 삭제하고 이벤트 구조의 새 값 터미널에 와이어를 연결합니다.

D. Display State를 와이어 연결합니다:

E. 마지막으로 링2 참조를 생성하여 케이스 구조 내부의 프로퍼티 노드에 연결합니다.
 
 

 

25. 이제 X컨트롤이 완성되었습니다. Ctrl+S를 눌러 X컨트롤의 변경사항을 저장하고 프런트 패널과 블록 다이어그램을 닫습니다.
이제 생성한 X컨트롤의 기능을 확인합니다.

 

26. 프로젝트 탐색기의 내컴퓨터에서 마우스 오른쪽 버튼 메뉴에서 생성>>VI를 새VI를 생성합니다. 

 


27. 프로젝트 탐색기 상의 X컨트롤1.xctl을 방금 생성한 새 VI의 프런트 패널로 드래그합니다.

 

 
28. 사용자가 선택한 X컨트롤의 아이템에 대하여 데이터가 제대로 VI로 업데이트 되는지 확인하기 위해 X컨트롤 하단에 문자열 인디케이터을 추가합니다.

 

 
29. 블록 다이어그램으로 이동하여 X컨트롤1의 출력을 문자열 인디케이터 입력에 연결합니다. 30. 프런트 패널로 전환하여 연속실행 버튼을 클릭합니다. X컨트롤의 링1 값을 변화할 때 링2의 아이템이 어떻게 변하는지, 그리고 링2 값을 선택했을 때 아래 문자열 인디케이터에 선택한 값이 제대로 업데이트 되는 지를 확인합니다.
 

30.프런트 패널로 전환하여 연속실행 버튼을 클릭합니다. X컨트롤의 링1 값을 변화할 때 링2의 아이템이 어떻게 변하는지, 그리고 링2 값을 선택했을 때 아래 문자열 인디케이터에 선택한 값이 제대로 업데이트 되는 지를 확인합니다.



 

본 예제를 통해 사용자가 원하는 특별한 기능을 가진 X컨트롤을 생성하는 법을 배웠습니다. 응용하셔서 어플리케이션에 활용하시길 바랍니다.