티스토리 뷰

안녕하세요. 구스입니다.


다른 언어에서 랩뷰 코드를 제어하기 위해서는 어떠한 방식이 필요할까 라는 의문을 가지고 있다가 관련된 내용을 한번 찾아보았습니다. 역시나 LabVIEW의 ActiveX를 이용하여 제어하는 방법이 가장 첫번째로 떠올랐는데요. 


ActiveX는 COM 혹은 OLE 기반으로 만들어진 기술을 이용하여 만들어진 함수 혹은 컴포넌트를 재사용하는데 이점을 가지고 있는 기술입니다. 


액티브X(ActiveX)는 마이크로소프트사가 개발한 재사용 가능한 객체지향적인 소프트웨어 구성 요소 개발에 사용되는 기술이다. 액티브X는 컴포넌트 오브젝트 모델과 객체 연결 삽입 (OLE)을 적용해 WWW으로부터 다운로드받은 컨텐츠들을 이용하는 데 이용된다. 액티브X는 전반적인 기술 혹은 기술을 구현하는데 필요한 구성요소를 가리키며, 액티브X컨트롤은 액티브X를 이용해 만든 작은 프로그램을 말한다. 대부분 액티브X는 인터넷 익스플로러의 플러그인을 만드는 데 사용된다


<참조 : 위키트리>


ActiveX를 이용하여 Excel등을 제어할 수도 있습니다. LabVIEW도 ActiveX 기반를 통해서 제어가 가능합니다. 이 글에서는 이와 관련된 내용에 대해서 알아보도록 할텐데요. 






LabVIEW에서 ActiveX를 사용하기 위해서는 Application에 대한 인보크노드 기반의 함수를 사용해야 합니다. 다른 언어에서 LabVIEW를 제어하고자할 때는 LabVIEW에 대한 Reference를 획득해야 하는데 이는 GetVIReference 함수를 사용할 수 있습니다. 


GetVIReference 함수는 LabVIEW.Application에 대한 ActiveX를 통해서 object 객체를 획득할 수 있습니다. 

파이썬을 예로 한번 들어볼까요.


파이썬에서 LabVIEW 개체에 대한 VI Reference를 획득하기 위해서는 아래와 같이 사용을 할 수 있습니다.


LabVIEW = win32com.client.Dispatch("Labview.Application")

VI = LabVIEW.GetVIReference(path)


LabVIEW라는 object에 설치된 실질적인 LabVIEW의 Application 개체를 집어넣은 것인데요. 이 개체를 사용하여 자신이 제어하고자는 VI의 파일 경로를 넣어주면 VI라는 개체에서 아래의 ActiveX 함수들을 사용할 수 있습니다. 



ActiveX를 통해서 사용할 수 있는 함수는 제한적이기 때문에 이 함수 리스트에 대한 API를 참고하여 제어를 하는게 필요합니다. 따라서 이와 관련된 함수 리스트를 한번 확인해보도록 하겠습니다.


LabVIEW에서 제공하는 ActiveX 기반의 함수 내역은 아래와 같습니다. 


메소드설명
AbortVI 실행을 강제 종료합니다. 세부사항
CallVI를 SubVI로 호출합니다. 세부사항
Call2VI를 SubVI로 호출합니다. 선택적으로, VI의 프런트패널을 열고 호출이 끝난 이후 닫을 수 있습니다. 또한 VI가 호출되었을 때 VI를 정지할 수 있습니다. 세부사항
CenterFrontPanelLabVIEW 프런트패널 윈도우를 자동으로 컴퓨터 스크린의 중심에 놓을지를 지정합니다. 세부사항
CloseFrontPanelLabVIEW 프런트패널 윈도우를 닫습니다. 세부사항
DisconnectFromLibrary소유하는 LabVIEW 프로젝트 라이브러리로부터 VI를 연결 해제합니다. 세부사항
ExportVIStringsVI와 LabVIEW 프런트패널 객체에 대한 다음 문자열을 태그된 텍스트 파일로 반출합니다: VI 이름과 설명, 객체 캡션 라벨, 객체 독립 라벨, 기본 데이터(문자열, 테이블, 경로, 배열 기본 데이터), 프라이빗 데이터(리스트박스 아이템 이름, 테이블 행과 열 헤더, 그래프 플롯 이름, 그래프 커서 이름, 그래프 주석 이름, 탭 컨트롤 페이지 캡션), 다형성 VI 데이터(다형성 VI와 선택자 바로 가기 메뉴의 인스턴스 이름). 세부사항
FPGetRuntimePos런타임에서 LabVIEW 윈도우 위치를 반환합니다. 세부사항
FPRunTimePosRunCenteredVI가 실행될 때마다 프런트패널이 중심에 오도록 VI를 설정합니다. 세부사항
FPRunTimePosRunCustomVI가 실행될 때마다 프런트패널을 이동할 사용자 위치를 설정합니다.세부사항
FPRunTimePosRunMaxVI가 실행될 때마다 프런트패널이 최대화되도록 VI를 설정합니다. 세부사항
FPRunTimePosRunMinVI가 실행될 때마다 프런트패널이 최소화되도록 VI를 설정합니다. 세부사항
FPRunTimePosRunUnchangedVI가 실행 중일 때 프런트패널이 움직이지 않도록 VI를 설정합니다. 세부사항
GetControlValue이름있는 LabVIEW 컨트롤 또는 인디케이터의 값을 배리언트 데이터로 얻습니다. LabVIEW [배리언트를 데이터로] 함수를 사용하여 데이터를 다른 LabVIEW 데이터 타입으로 변환합니다. 세부사항
GetLockStateVI의 잠금 상태를 반환하고 VI의 암호가 암호 캐시에 있는지 여부를 나타냅니다. 세부사항
GetVIDependencies이 메소드는 VI의 VI 의존성의 이름과 경로를 반환합니다. 이 메소드를 사용하여 VI의 VI 의존성의 전체 세트 중 특정한 부분을 반환할 수 있습니다. 이 메소드는 프로젝트 라이브러리, X컨트롤, 클래스, statechart와 같이 VI가 아닌 객체의 의존성은 반환하지 않습니다. 세부사항
ImportVIStringsVI와 LabVIEW 프런트패널 객체에 대한 다음 문자열을 태그된 텍스트 파일로부터 반입합니다: VI 이름과 설명, 객체 캡션 라벨, 객체 독립 라벨, 기본 데이터(문자열, 테이블, 경로, 배열 기본 데이터), 프라이빗 데이터(리스트박스 아이템 이름, 테이블 행과 열 헤더, 그래프 플롯 이름, 그래프 커서 이름, 그래프 주석 이름, 탭 컨트롤 페이지 캡션), 다형성 VI 데이터(다형성 VI와 선택자 바로 가기 메뉴의 인스턴스 이름). 세부사항
MakeCurValueDefaultLabVIEW 프런트패널의 모든 컨트롤의 기본값을 현재값으로 변경합니다. 이 메소드는 편집 모드에서만 사용 가능합니다. 세부사항
OpenFrontPanelLabVIEW 프런트패널 윈도우를 엽니다. 프런트패널이 이미 열려있는 경우, 이 메소드는 프런트패널 윈도우의 상태를 이 메소드에 연결한 상태로 변경합니다. CloseFrontPanel 메소드를 사용하여 프런트패널 윈도우를 닫습니다. 또한 FPState 프로퍼티를 사용하여 이미 열려있는 프런트패널 윈도우의 상태를 설정합니다. 세부사항
PrintPanelLabVIEW 프런트패널만 현재 프린터에서 인쇄합니다. 이 메소드를 사용하여 블록다이어그램, 컨트롤 리스트, 또는 다형성 VI 프런트패널을 인쇄할 수 없습니다. 세부사항
PrintVIToHTMLVI 정보를 HTML 파일에 저장하고 그래픽을 외부 파일로 저장합니다.세부사항
PrintVIToPrinterVI 정보를 프린터로 인쇄합니다. 이 방법을 독립 어플리케이션 또는 DLL에서 사용하는 경우, LabVIEW는 프런트패널만을 인쇄합니다. 세부사항
PrintVIToRTFVI 정보를 RTF 파일로 저장합니다. 세부사항
PrintVIToTextVI 정보를 텍스트 파일로 저장합니다. 아이콘, 커넥터 팬, 프런트패널, 블록다이어그램, SubVI 아이콘 및 VI 계층구조를 텍스트에 저장할 수 없습니다. 세부사항
ReinitializeAllToDefaultLabVIEW 프런트패널의 모든 컨트롤의 현재값을 각각의 기본값으로 변경합니다. 세부사항
Revert변경을 무시하고 VI를 디스크에서 다시 로드합니다. 세부사항
RunLabVIEW의 실행 버튼과 비슷한 VI 실행을 시작합니다. 이 메소드는 파라미터를 통해서 전달된 데이터를 사용하는 대신 실행에 모든 프런트패널 컨트롤의 현재 값을 사용하기 때문에 VI를 호출하는 것과는 다릅니다. 이 메소드는 또한 VI의 ShowFPOnCall 프로퍼티와CloseFPAfterCall 프로퍼티를 무시합니다. 다른 VI에 의해 실행이 이미 활성화된 VI를 실행하기 위해서 이 메소드를 사용할 수 없습니다. 세부사항
SaveForPreviousLabVIEW 8.0 또는 이후 버전에서 읽을 수 있는 VI의 복사본을 저장합니다. 세부사항
SaveInstrumentVI를 저장하고 VI를 다른 어플리케이션 인스턴스의 저장 전의 편집된 버전과 동기화합니다. 세부사항
SaveRunTimeMenuLabVIEW 런타임 메뉴를 filePath로 지정된 파일에 저장합니다. 이 메소드는 VI가 실행 중일 때에만 동작합니다. 유효한 태그를 가진 메뉴 아이템만을 저장합니다. 세부사항
SetControlValue이름있는 LabVIEW 컨트롤 또는 인디케이터의 값을 설정합니다. 세부사항
SetLockStateVI의 잠금 상태를 설정합니다. Interactive가 거짓(기본)인 경우,Password를 사용하여 암호로 보호된 VI의 잠금을 해제하거나 보호되지 않은 VI에 암호를 설정할 수 있습니다. Interactive가 참인 경우, LabVIEW는 Password를 무시하고 잠금 상태를 변경하도록 요청하는 대화 상자를 디스플레이합니다. 세부사항
SetVIIcon파일로부터 VI 아이콘의 이미지를 설정합니다. 세부사항


가장 많이 사용되는 함수는 Abort, Call, Call2, CloseFrontPanel, OpenFronPanel, Run 정도가 되겠네요.



아무튼 결론을 지어보자면 C#, Python과 같은 타언어에서 이미 만들어진 vi를 제어하기 위해서는 ActiveX가 사용이 됩니다. ActiveX를 사용할 때는 LabVIEW.Application 개체를 통해서 VI 레퍼런스를 획득할 수 있으며, VI 레퍼런스를 통해서 위의 함수로 VI 실행에 대한 제어가 가능하게 됩니다.


그럼 이만 줄이겠습니다.


이 글이 도움이 되셨으면 아래의 하트를 눌러주세요.


댓글