You are here

ActiveX와 LabVIEW

이 문서에서는 ActiveX와 LabVIEW에서의 다양한 사용에 대해 소개합니다.

 

목차:

  • ActiveX 개요
  • LabVIEW에서 ActiveX 자동화
  • ActiveX 컨테이너로서 LabVIEW
  • ActiveX 이벤트 및 LabVIEW
  • OLE 배리언트와 LabVIEW에 대한정보

 

ActiveX 개요
ActiveX는 사용자가 코드를 재사용하고 어플리케이션 자동화를 가능케 하는 Microsoft 사의 기술입니다. COM(Component Object Model) 기술에 기반하고 있는 ActiveX는 OLE(Object Linking and Embedding)라고 하는 이전 기술을 확장시킨 것입니다. 기본 원칙은 각 프로그램마다 구성 요소를 재생성 하지 않고 사용자가 기존 어플리케이션을 응용할 수 있는 함수입니다. LabVIEW 4.1에서는 사용자가 클라이언트로 ActiveX 서버에 접근하는 기능을 제공했습니다. LabVIEW 5.0에서는 LabVIEW를 서버로 변환시킬 수 있었습니다. 그리고 LabVIEW 5.1부터는 ActiveX 이벤트도 지원하고 있습니다.

 

ActiveX 자동화
ActiveX/COM은 ActiveX 기술을 통해 한 프로그램이 다른 프로그램을 제어하는 과정을 지칭합니다. 네트워킹과 매우 유사하게 하나의 프로그램은 클라이언트로 작용하고 다른 프로그램은 서버로 작용합니다. 이때 LabVIEW는 클라이언트 또는 서버로 사용될 수 있습니다. 두 프로그램(클라이언트와 서버)은 각각에 독립적으로 동작하지만 서로 간에 정보를 공유할 수 있습니다. 이러한 정보의 공유는 자동화 서버가 노출시키게 되는 ActiveX 개체와 클라이언트가 통신을 통해 이루어집니다. ActiveX 개체에는 클라이언트에서 접근할 수 있는 속성(Property)과 메소드(Method)를 갖습니다. 속성이란 비유하자면 개체의 특성이며 이는 다른 프로그램에서 설정하거나 검색할 수 있습니다. 메소드란 개체가 수행하는 기능으로 외부 프로그램에서 호출이 가능합니다. ActiveX 속성의 예로는 프로그램 이름, 윈도우의 높이 또는 폭을 들을 수 있으며 메소드로는 save 또는 print와 같은 기능이 있습니다.

 

ActiveX 컨트롤과 컨테이너

ActiveX 컨테이너를 사용하여 VI 프런트패널에 ActiveX 객체를 임베드 합니다. 이를 통해 Windows 어플리케이션이 나타나서 LabVIEW 컨트롤과 상호작용하게 됩니다. 두 타입의 ActiveX 객체를 ActiveX 컨테이너에 놓을 수 있습니다. 새 ActiveX 컨트롤 또는 문서를 생성할 수 있습니다. 또한 기존 ActiveX 컨트롤 또는 문서를 삽입할 수도 있습니다.

ActiveX 컨테이너에서 마우스 오른쪽 버튼을 클릭한 후 바로 가기 메뉴에서 고급≫디자인 모드를 선택하여, VI를 편집하는 동안 컨테이너를 디자인 모드로 디스플레이 합니다. 디자인 모드에서, 이벤트는 발생하지 않으며 이벤트 처리 또한 수행되지 않습니다. 기본 모드는 실행 모드이며, 일반 사용자 환경에서처럼 객체를 바로 사용할 수 있습니다.

 

ActiveX 이벤트

ActiveX 이벤트를 다룰 때, 이벤트를 등록하고 해당 이벤트를 핸들링 할 콜백 VI를 생성해야 합니다. 다음 단계를 따라 LabVIEW에서 ActiveX 이벤트를 등록하고 처리합니다. ActiveX 컨테이너에 새 컨트롤을 생성합니다. 또한, 컨스트럭터 노드를 사용하여 .NET 객체를 생성하거나 오토메이션 참조 번호를 사용하여 LabVIEW로부터ActiveX 객체를 호출합니다. 블록다이어그램에 [이벤트 콜백 등록] 함수를 놓습니다. 참조 번호 또는 객체를 [이벤트 콜백 등록] 함수의 이벤트 입력에 연결합니다.

[이벤트 콜백 등록] 함수의 이벤트 입력 옆에 있는 아래 화살표를 클릭하고 바로 가기 메뉴에서 이벤트를 선택합니다. (옵션) 콜백 VI에 전달하려는 데이터를 사용자 파라미터 입력에 연결합니다. 이 파라미터에 클러스터를 포함하여 모든 LabVIEW 데이터 타입을 연결할 수 있습니다. VI 참조 입력에서 마우스 오른쪽 버튼을 클릭한 후 바로 가기 메뉴에서 콜백 VI 생성을 선택합니다. LabVIEW는 선택한 이벤트와 사용자 파라미터에 연결한 데이터에 기초하여 VI를 생성합니다. LabVIEW는 콜백 VI를 VI 참조 입력에 연결합니다. 사용하려는 VI의 커넥터 팬이 이벤트 데이터의 커넥터 팬과 일치하는 한 기존의 VI를 콜백 VI로 사용할 수 있습니다. 콜백 VI는 재호출이어야 하고 콜백 VI에 대한 참조는 엄격히 타입되어야 합니다. 콜백 VI를 열고 블록다이어그램을 편집하여 이벤트를 처리합니다.

콜백 VI는 다음의 요소를 포함합니다:

이벤트 공통 데이터는 다음의 요소를 포함합니다. 이벤트 소스는 또는 ActiveX와 같은 이벤트의 소스를 지정하는 숫자 컨트롤입니다. 1의 값은 ActiveX 이벤트를 나타냅니다. 이벤트 타입은 어떤 이벤트가 발생했는지 지정합니다. 이는 사용자 인터페이스 이벤트에서는 열거형 타입이며 .NET, ActiveX와 다른 이벤트 소스에서는 32비트 부호 없는 정수 타입입니다. ActiveX 이벤트일 경우, 이벤트 타입은 등록된 이벤트의 메소드 코드 또는 ID를 나타냅니다. 타임스탬프는 이벤트가 생성된 시간을 밀리초 단위로 지정하는 타임스탬프입니다. 컨트롤 참조는 이벤트가 발생한 ActiveX 객체, 또는 오토메이션 참조 번호의 참조입니다. 이벤트 데이터는 콜백 VI가 처리하는 이벤트에 특정한 파라미터의 클러스터입니다. LabVIEW는 [이벤트 콜백 등록] 함수로부터 이벤트를 선택할 때 적절한 이벤트 데이터를 결정합니다. 이벤트에 관련된 데이터가 없는 경우, LabVIEW는 콜백 VI에 이 컨트롤을 생성하지 않습니다. 이벤트 데이터 출력은 콜백 VI가 처리한 이벤트에 특정한 편집 가능한 파라미터의 클러스터입니다. 이 원소는 이벤트가 출력 파라미터를 가지고 있을 때에만 사용 가능합니다.

LabVIEW에서 ActiveX 자동화
앞서 언급했듯이 LabVIEW는 ActiveX 클라이언트와 서버를 모두로 지원합니다. 즉, LabVIEW를 사용해 LabVIEW 프로그래밍 인터페이스로부터 다른 프로그램과 인터페이스를 구성할 수 있다는 의미입니다. 이 경우, LabVIEW는 자동화 클라이언트로 작용하고 자동화 서버(다른 프로그램)의 정보를 요청합니다. 마찬가지로, 다른 ActiveX 자동화 클라이언트는 LabVIEW ActiveX 자동화 서버와 인터페이스를 구성할 수 있습니다. 이를 수행하는데 사용되는 일반적 프로그램은 Microsoft Visual Basic과 Microsoft Visual C++입니다.

자동화 클라이언트로서 LabVIEW
LabVIEW는 모든 자동화 서버와 함께 자동화 클라이언트로 작용할 수 있도록 하는 함수를 갖습니다. 아래 다이어그램은 LabVIEW에서 사용되는 프로그래밍 흐름과 각 블록에 관련된 함수를 보여줍니다.


 
그림 1.

일반적으로, 어떤 프로그램의 ActiveX 자동화 서버에 대한 정보는 프로그램 문서나 프로그램의 유형 라이브러리를 검색하여 얻을 수 있습니다. LabVIEW가 Microsoft Office 프로그램의 자동화 클라이언트로 사용되는 경우도 있으며 그 개체 모델을 Microsoft에서 온라인으로 이용할 수 있습니다.

 

자동화 서버로서 LabVIEW

LabVIEW 5.0 이상에서는 LabVIEW의 ActiveX 서버로의 사용을 지원합니다. 즉, ActiveX 자동화를 사용하여 다른 프로그램에서 LabVIEW 자동화 서버와 인터페이스를 구성할 수 있다는 의미입니다. 자동화 클라이언트를 사용하면 LabVIEW를 자동으로 시작하고 VI를 열어 실행시킬 수 있으며 그 데이터를 호출 프로그램으로 되돌려줄 수 있습니다. 이러한 작업은 "..\LabVIEW\resource" 디렉토리에 있는 LabVIEW 유형 라이브러리와의 인터페이스 구성을 통해 이루어집니다. 이 유형 라이브러리를 검색하여 LabVIEW가 내보내는 클래스에 대한 정보를 얻을 수 있습니다. 일반적으로 LabVIEW는 생성 가능한 클래스인 Application과 실행 배정 클래스인 Virtual Instrument를 내보냅니다. LabVIEW 유형 라이브러리가 내보내는 모든 속성과 메소드에 대한 내용은 LabVIEW 온라인 설명서를 참고하십시오. 그 외에도 LabVIEW 실행 파일을 ActiveX 자동화 서버로 사용할 수 있으며 LabVIEW 자체를 포함하는 자동화 클라이언트나 또 다른 LabVIEW 실행 파일에서도 액세스할 수 있습니다.

ActiveX 컨테이너로서 LabVIEW

LabVIEW는 LabVIEW 5.0에서부터 ActiveX 컨테이너와 ActiveX 컨트롤에 대한 지원을 도입했습니다. 일반적으로, 어떤 ActiveX 컨트롤도 LabVIEW에 내장시킬 수 있으며 LabVIEW는 이 컨트롤의 속성과 메소드를 사용할 수 있습니다. 아래에 ActiveX 컨테이너 사용에 대한 흐름도를 나타내었습니다.

 그림 2.

속성 노드와 호출 노드를 사용하여 사용 가능한 속성과 메소드를 살펴볼 수 있습니다. 단순히 참조를 노드에 연결하고 어떤 속성과 메소드를 이용할 수 있는지 살펴보면 됩니다.

 

ActiveX 이벤트 및 LabVIEW

ActiveX에 대한 LabVIEW의 지원은 LabVIEW 5.1 버전에서부터 더욱 확대되었습니다. LabVIEW는 컨테이너에 내장된 ActiveX 컨트롤을 통해 ActiveX 이벤트에 대한 지원을 도입했습니다. ActiveX 이벤트는 프로그래머가 특정한 상황에 대한 알림을 받고 그에 따라 조치를 취할 수 있도록 합니다. 보통, 프로그램은 이벤트가 발생할 때까지 기다리고 이벤트가 발생한 후에는 어떤 이벤트가 발생하였는가에 따라 프로그램 실행을 계속합니다. 아래에 LabVIEW에서 ActiveX 이벤트 시퀀스를 설정하기 위한 흐름도를 그에 대응하는 LabVIEW 함수와 함께 나타내었습니다.

 

 그림 3.

OLE 배리언트(OLE Variant)와 LabVIEW에 대한 정보

배리언트(Variant) 데이터 유형은 ActiveX/OLE에서 프로그램 간에 데이터를 전달할 때 사용됩니다. 배리언트는 모든 데이터 유형을 나타냅니다. 각 프로그램에서 공통 데이터 유형은 다르게 나타내어질 수 있기 때문에 프로그램 간에 데이터를 전달할 때 이 데이터 유형을 사용해야 합니다.
예를 들어, LabVIEW에서의 배열은 Visual Basic에서의 배열과 다르게 나타내어집니다. 따라서 데이터를 배리언트로 전달함으로써 이 정보를 하나의 ActiveX 구성 요소에서 다른 구성 요소로 전달할 수 있습니다. 한 프로그램에서 보낸 배리언트 데이터를 다른 프로그램에서 받은 후에 사용 가능한 데이터 유형으로 변환하는 것이 작용 원리입니다. LabVIEW에서 이러한 변환은 “배리언트를 데이터로” 함수를 사용해 이루어집니다. 이 함수를 사용하면 배리언트를 LabVIEW 데이터 유형으로 변환할 수 있습니다.