LabVIEW 플러그 앤 플레이 인스트루먼트 드라이버 개발

개요

이 문서에서는 드라이버 개발자를 대상으로 LabVIEW 플러그 앤 플레이 드라이버의 표준과 사용 사례를 소개하고 VI 구성, 인스트루먼트 I/O, 스타일 및 에러 리포트를 위한 표준을 설명합니다. 또한 인스트루먼트 드라이버 구성요소와 이러한 구성요소를 통합하는 방법도 설명하고 유용한 인스트루먼트 드라이버를 개발하는 과정도 살펴봅니다.

인스트루먼트 드라이버 개발자를 위한 기타 리소스에는 인스트루먼트 드라이버 템플릿과 인스트루먼트 드라이버 가이드라인이 있으며, 이러한 리소스는 NI Instrument Driver Network (ni.com/idnet)에서 사용할 수 있습니다.

이 문서를 활용하기 위해서는 인스트루먼트 컨트롤의 기본적인 내용을 이해하고 LabVIEW 작동 방법에 대해 잘 알고 있어야 합니다. 또한 Virtual Instrument Software Architecture (VISA) 어플리케이션 프로그래밍 인터페이스 (API)도 잘 알고 있어야 합니다.

내용

LabVIEW 플러그 앤 플레이 인스트루먼트 드라이버란?

LabVIEW 플러그 앤 플레이 인스트루먼트 드라이버는 프로그램 가능한 인스트루먼트를 컨트롤하는 VI 세트입니다. 각 VI는 설정, 트리거링, 인스트루먼트에서 측정값 읽기와 같은 인스트루먼트 작업에 해당합니다. 인스트루먼트 드라이버를 사용하면 사용자가 자신의 컴퓨터에서 직접 인스트루먼트를 이용할 수 있으므로 각 인스트루먼트에 대한 프로그래밍 프로토콜을 따로 배울 필요가 없어 개발 시간과 비용이 절약됩니다. 잘 정리된 오픈 소스 인스트루먼트 드라이버를 사용하면 최종 사용자가 자신의 필요에 맞게 작업을 정의하여 성능을 향상시킬 수 있습니다. 또한 모듈형 설계를 사용하면 드라이버를 사용자 정의하기 쉽습니다.

모든 LabVIEW 인스트루먼트 드라이버에 한 가지 표준 구조를 사용하면 다음과 같은 이점을 얻을 수 있습니다.

  • 인스트루먼트 드라이버 일관성을 개선하여 최종 사용자가 이점을 누릴 수 있습니다.
  • 드라이버의 품질을 향상시킵니다.
  • 중복된 작업을 최소화합니다.
  • 다양한 소스의 인스트루먼트 드라이버를 같은 방법으로 사용할 수 있어 최종 사용자가 더욱 쉽게 사용할 수 있습니다.
  • 인스트루먼트 드라이버 개발자를 위해 인스트루먼트 드라이버 개발 과정이 간단해졌습니다.

LabVIEW Instrument Driver Network에는 GPIB, USB, TCP/IP, VXI, RS-232, PXI 인스트루먼트를 비롯하여 다양한 프로그래밍 가능 인스트루먼트 드라이버가 포함되어 있습니다. 인스트루먼트 드라이버에는 직관적인 프런트패널이 있는 상위 레벨 VI가 포함되어 있습니다. 이를 통해 최종 사용자는 인스트루먼트의 원격 기능을 신속하게 테스트하고 확인할 수 있으며, 하위 레벨 인스트루먼트 컨트롤, 인스트루먼트별 명령과 구문을 알 필요가 없습니다. 사용자는 블록다이어그램에서 인스트루먼트 드라이버 VI를 SubVI로 사용하여 VI를 구축해 인스트루먼트 컨트롤 어플리케이션을 생성할 수 있습니다.

LabVIEW 플러그 앤 플레이 인스트루먼트 드라이버 모델

프로그램 가능한 인스트루먼트에는 대부분 많은 수의 함수와 모드가 있습니다. 따라서 인스트루먼트 컨트롤 어플리케이션을 개발하는 인스트루먼트 드라이버 개발자와 사용자에게 유용한 설계 모델을 제공해야 합니다. LabVIEW 플러그 앤 플레이 인스트루먼트 드라이버 모델에는 외부 구조 및 내부 구조 가이드라인이 둘 다 포함되어 있습니다. 외부 구조는 인스트루먼트 드라이버가 사용자와 시스템의 다른 소프트웨어 구성요소와 어떻게 상호작용하는지 보여줍니다. 내부 구조는 인스트루먼트 드라이버 소프트웨어 모듈의 내부 구성을 보여줍니다.

인스트루먼트 드라이버의 외부 구조

인스트루먼트 드라이버는 사용자가 상위 레벨 어플리케이션에서 호출하는 API VI로 구성됩니다. 다음 그림은 인스트루먼트 드라이버가 시스템의 나머지 부분과 어떻게 상호작용하는지 보여줍니다.

그림 1: LabVIEW 인스트루먼트 드라이버의 외부 구조

외부 구조는 인스트루먼트 드라이버가 대화식 인터페이스와 프로그래밍 인터페이스 둘 다를 제공하는 방법을 보여줍니다. 어플리케이션 프로그래밍 인터페이스 (API)는 최종 사용자 시스템에서 사용자가 호출하여 사용할 수 있는 인스트루먼트 드라이버 VI 세트입니다. 예를 들어, 제조업체의 테스트 시스템은 인스트루먼트 드라이버를 호출하여 멀티미터 또는 오실로스코프와 통신할 수 있습니다.

최종 사용자는 인스트루먼트 드라이버 프런트패널을 통해 API에 대해 살펴볼 수 있습니다. 인스트루먼트 드라이버 VI의 프런트패널을 대화식으로 실행하면 최종 사용자가 각 컨트롤이 인스트루먼트에 어떤 영향을 미치는지 파악할 수 있습니다. 세팅을 파악한 후에는 어플리케이션에서 인스트루먼트 드라이버 VI를 통합할 수 있습니다.

Virtual Instrument Software Architecture (VISA) I/O 인터페이스는 드라이버가 인스트루먼트 하드웨어와 통신하기 위해 사용하는 LabVIEW 함수 세트입니다. VISA는 GPIB, USB, 시리얼 및 기타 인스트루먼트 버스를 제어하는 확립된 표준 계측 인터페이스입니다. VISA 함수 및 컨트롤에 대한 설명은 LabVIEW 도움말을 참조하십시오.

지원 VI는 최종 사용자가 직접 액세스할 수 있도록 의도한 VI가 아닙니다. 따라서 지원 VI는 인스트루먼트 드라이버 API의 일부가 아닙니다. 예를 들어, 인스트루먼트 드라이버는 일반적으로 초기화 중 기본 설정 VI를 호출하여 나머지 인스트루먼트 드라이버 VI에서 강력하게 제어할 수 있는 상태로 인스트루먼트를 설정합니다. 초기화 및 리셋 VI만 기본 설정 VI를 SubVI로 사용하므로 지원 VI로 간주됩니다.

인스트루먼트 드라이버 내부 설계 모델

인스트루먼트 드라이버의 내부 구조에 따라 인스트루먼트 드라이버 VI의 구조가 결정됩니다. 모든 사용자가 액세스할 수 있는 API VI는 인스트루먼트 기능에 기반한 모듈형 계층구조로 구성되어 있습니다.

다음 그림은 LabVIEW 인스트루먼트 드라이버의 내부 구조를 보여줍니다. 최종 사용자가 어플리케이션에서 인스트루먼트를 올바르게 제어하는 데 필요한 정도로 세분화되어 있습니다. 예를 들어, 최종 사용자는 시작할 때 모든 인스트루먼트를 한 번에 초기화하고 인스트루먼트를 여러 개 설정한 다음 여러 인스트루먼트를 동시에 트리거할 수 있습니다. 또한, 인스트루먼트를 한 번 초기화하고 설정한 후에는 해당 인스트루먼트에서 여러 번 트리거하고 읽을 수 있습니다.

이 모델은 최종 사용자에게 일관된 인스트루먼트 드라이버 모델을 제공합니다. 따라서 사용자가 인스트루먼트 드라이버 하나를 파악하면 이때 얻은 지식을 다른 LabVIEW 인스트루먼트 드라이버에 적용할 수 있습니다.

그림 2: LabVIEW 인스트루먼트 드라이버의 내부 구조

인스트루먼트 드라이버 API VI

인스트루먼트 드라이버 API VI는 다음 6개 항목으로 구성되어 있습니다.

초기화 -- 모든 LabVIEW 인스트루먼트 드라이버에는 초기화 VI가 포함되어야 합니다. 이 VI는 인스트루먼트와의 통신을 설정합니다. 따라서 처음에 호출되는 인스트루먼트 드라이버 VI입니다. 경우에 따라 이 VI는 인스트루먼트 ID 쿼리와 리셋 작업을 수행합니다. 또한 인스트루먼트를 기본 전원 켜짐 상태 또는 다른 상태로 설정할 수 있습니다.

설정 -- 설정 VI는 특정 작업을 수행하도록 인스트루먼트를 설정하는 소프트웨어 루틴의 모음입니다. 일반적으로 인스트루먼트 드라이버 API에는 여러 설정 VI가 포함되는데, 인스트루먼트 드라이버에 대한 설정 VI 수는 인스트루먼트의 고유한 기능에 따라 달라집니다. 이러한 VI를 호출하면 인스트루먼트에서 측정하거나 시스템을 시뮬레이션할 준비가 됩니다.

작업/상태 -- 작업/상태 VI에는 두 가지 타입이 있습니다. 작업 VI는 인스트루먼트가 테스트 및 측정 작업을 시작하거나 종료하도록 시킵니다. 여기에는 트리거를 활성화하거나 자극을 생성하는 작업이 포함됩니다. 작업 VI는 인스트루먼트 셋팅을 변경하지 않기 때문에 설정 VI와는 다르지만, 대신 인스트루먼트가 현재 설정에 따라 작업을 수행하도록 지시합니다. 상태 VI는 인스트루먼트의 현재 상태 또는 대기 중인 작업의 상태를 가져옵니다. 상태 VI는 일반적으로 다른 함수에서 필요로 할 때 생성됩니다.

데이터 -- 데이터 VI는 데이터를 인스트루먼트에 전달하거나 인스트루먼트에서 받습니다. 측정된 값이나 웨이브폼을 읽는 VI, 웨이브폼이나 디지털 패턴을 소스 인스트루먼트로 다운로드하는 VI 등을 예로 들 수 있습니다. 이 항목의 구체적인 루틴은 인스트루먼트에 따라 달라집니다.

유틸리티 -- 유틸리티 VI는 리셋 및 셀프 테스트와 같은 다양한 보조 작업을 수행하며, 인스트루먼트 설정의 저장 및 호출과 교정 등 사용자 정의 루틴을 포함할 수 있습니다.

닫기 -- 닫기 VI는 소프트웨어와 인스트루먼트 사이의 연결을 종료합니다. 모든 LabVIEW 인스트루먼트 드라이버는 닫기 VI를 포함해야 합니다.

초기화와 닫기를 제외한 각 VI 항목에는 여러 모듈형 VI가 포함되어 있습니다. 인스트루먼트 드라이버 개발에서 대부분의 중요한 작업은 인스트루먼트 드라이버 API VI의 초기 설계와 구성에 있습니다.

NI에서 템플릿 VI를 다운로드하여 필요에 맞춰 사용자 정의해 초기화, 닫기, 리셋, 셀프 테스트, 개정 쿼리 등 거의 모든 인스트루먼트에서 일반적으로 수행되는 작업을 수행할 수 있습니다. 템플릿 VI에는 특정 인스트루먼트용 인스트루먼트 드라이버에 필요한 수정 지침이 포함되어 있습니다. 템플릿 VI를 사용자 정의하는 방법에 대한 자세한 정보는 LabVIEW 인스트루먼트 드라이버 템플릿 섹션을 참조하십시오.

이러한 일반적인 기능 외에 인스트루먼트별 작업을 수행하는 VI를 추가할 수 있습니다. 사용자가 개발하는 구체적인 VI는 인스트루먼트의 고유한 기능에 따라 달라지지만, 가능하면 위에서 설명한 6가지 인스트루먼트 드라이버 VI 항목을 따르는 것이 좋습니다.

그림 2와 같이 내부 설계 구조를 사용하면 최종 사용자가 인스트루먼트 드라이버 VI를 결합하여 어플리케이션을 생성할 수 있습니다. 아래 그림의 블록다이어그램은 인스트루먼트 드라이버 API VI가 HP34970A 수집 시스템을 프로그램적으로 제어하는 방법을 보여줍니다.

그림 3: HP34970A 전류 측정의 예 VI 블록다이어그램

그림 4는 인스트루먼트 드라이버 API VI 중 하나의 블록다이어그램을 보여줍니다. 이 VI는 내장된 LabVIEW 함수와 VISA 함수를 사용하여 명령 문자열을 작성해 인스트루먼트로 전송합니다. VISA 함수는 디바이스 관리, 표준화된 인스트루먼트 I/O, 에러 핸들링을 수행합니다. 아래 그림 4의 VI는 문자열 포맷 작업을 결합한 후 결과 문자열을 VISA 쓰기 함수에 연결하여 명령 문자열을 작성합니다. VISA 쓰기 함수는 명령 문자열을 인스트루먼트로 전송합니다. VISA 읽기 함수는 인스트루먼트의 응답 문자열을 반환합니다. 그런 다음 반환된 응답 문자열은 최종 사용자의 어플리케이션에서 사용할 수 있도록 숫자 배열로 포맷됩니다. 응답 문자열을 다시 포맷하면 사용자가 선호하는 포맷으로 응답 데이터를 볼 수 있어 유용합니다. 에러 쿼리 VI는 에러가 있는지 확인하고 에러 클러스터를 업데이트합니다.

그림 4: 명령 문자열 생성

인스트루먼트 드라이버와 함께 배포되는 추가 VI

내부 구조에서 설명하는 API VI 외에도 인스트루먼트 드라이버에는 예제 VI와 VI 트리 VI도 포함되어 있습니다.

인스트루먼트 드라이버의 예제 VI

모든 인스트루먼트 드라이버에는 예제 VI가 포함되어 있습니다. 이러한 예제는 기본적인 테스트 및 측정 작업을 위한 인스트루먼트 드라이버 VI를 인스트루먼트와 결합하는 방법을 보여줍니다. 예제에서는 공통 작업 모드에 맞춰 인스트루먼트를 설정하고 트리거링하고 측정하면서 테스트 및 측정 기능을 어떻게 사용하는지 보여줍니다. 또한 예제 VI는 인스트루먼트와의 통신을 확인합니다. 이러한 예제는 *.bin3 파일을 생성하여 NI 예제 탐색기에 추가해야 합니다.  다음 그림은 HP34970A 전류 측정 예제 VI의 프런트패널을 보여줍니다.

그림 5: HP34970A 전류 측정 예제 VI의 프런트패널

VI 트리 VI

사용자 대부분은 LabVIEW 함수 팔레트에서 인스트루먼트 드라이버 VI에 액세스합니다. 그러나 VI 트리 VI를 사용하면 최종 사용자가 전체 인스트루먼트 드라이버 계층구조를 한 눈에 볼 수 있습니다. VI 트리 VI는 아래 그림과 같이 인스트루먼트 드라이버의 기능 구조를 보여주도록 설계된 실행할 수 없는 VI입니다.

그림 6: HP34970A VI 트리 VI의 블록다이어그램

LabVIEW 인스트루먼트 드라이버 개발

이 섹션에서는 LabVIEW 플러그 앤 플레이 인스트루먼트 드라이버 개발 절차에 대해 설명합니다. 이상적인 LabVIEW 인스트루먼트 드라이버를 사용하면 최종 사용자가 인스트루먼트의 모든 기능을 제어할 수 있습니다. 멀티미터나 카운터/타이머 등 다양한 인스트루먼트 타입의 필수 기능을 일일이 특정할 수 없으므로 이 섹션에서는 모든 드라이버에 적용되는 아키텍처 가이드라인을 중점적으로 다룹니다. 이러한 가이드라인을 사용하면 일관된 방식으로 드라이버를 구성하고 패키징하는 동시에 인스트루먼트에 필요한 특별한 기능을 구현할 수 있습니다.

아래 3단계 프로세스를 완료하면 LabVIEW 인스트루먼트 드라이버를 개발할 수 있습니다. 1단계에서는 인스트루먼트 드라이버 구조를 설계합니다. 2단계에서는 인스트루먼트 드라이버 프로젝트 마법사를 사용하여 새 인스트루먼트 드라이버 VI를 생성합니다. 3단계에서는 개발자 정의 VI를 추가하고 예제 VI를 생성합니다.

1단계: 인스트루먼트 드라이버 구조 설계

이상적인 인스트루먼트 드라이버는 더도 덜도 말고 사용자에게 필요한 작업만 수행합니다. 모두에게 꼭 맞는 특정한 타입의 드라이버 설계란 있을 수 없지만 인스트루먼트를 자세히 연구하고 컨트롤을 모듈형 VI로 그룹화하면 사용자 대부분을 만족시킬 수 있을 것입니다.

인스트루먼트에서 프로그램 가능한 컨트롤의 수가 증가하면 인스트루먼트 드라이버의 모듈형 설계에 대한 필요성 역시 커집니다. 한 가지 VI로 인스트루먼트의 모든 기능을 구현하려고 하지 마십시오. 그렇다고 VI 하나가 한 가지 기능을 제어하는 인스트루먼트 드라이버를 설계하는 것도 정답은 아닙니다.  이렇게 하면 수백 가지 VI가 포함된 API가 생성될 수 있습니다. 이러한 경우 최종 사용자는 어쩔 수 없이 명령 순서와 상호작용에 관한 인스트루먼트 관련 규칙을 파악해야 할 수도 있습니다. 모듈형 설계를 사용하면 인스트루먼트를 제어하는 데 필요한 프로그래밍이 간단해집니다.

개별 VI를 개발하기 전에 인스트루먼트 드라이버의 전체 구조를 정합니다. 어플리케이션과 최종 사용자를 고려하여 인스트루먼트 드라이버를 설계합니다.

인스트루먼트에 대한 이해가 설계 과정에 매우 중요함

다음 단계는 LabVIEW 인스트루먼트 드라이버의 구조를 개발하는 한 가지 접근 방식을 간략하게 보여줍니다.

  1. 인스트루먼트의 작동을 숙지합니다. 운영 매뉴얼을 자세히 읽습니다. VI를 개발하기 전에 대화식으로 인스트루먼트를 사용하는 방법을 학습합니다.
  2. 실제 테스트 설정에서 인스트루먼트를 사용해 보면 실제 경험을 얻을 수 있습니다. 운영 매뉴얼에 간단한 테스트를 설정하는 방법이 나와 있을 수 있습니다.
  3. 매뉴얼의 프로그래밍 섹션을 살펴봅니다. 제시된 지침을 읽어보면서 사용 가능한 컨트롤, 함수와 그 구성을 알아봅니다. 프로그램적 사용에 가장 적합한 기능을 결정합니다.
  4. 기존 인스트루먼트 드라이버 중에 유사한 인스트루먼트를 제어하는 인스트루먼트 드라이버가 있는지 살펴봅니다. 같은 제품군에 속한 인스트루먼트의 경우 프로그래밍 명령 세트가 유사한 경우가 많기 때문에 이러한 명령 세트를 현재 인스트루먼트에 맞춰 수정할 수 있습니다.
  5. 드라이버 구조 개발에 도움이 되도록 단일 작업이나 함수를 수행하는 데 함께 사용되는 컨트롤을 찾습니다. 일반적으로 매뉴얼의 각 섹션은 인스트루먼트 드라이버의 기능 그룹에 대응하므로 드라이버 구조 개발 시 참조하면 유용합니다.

인스트루먼트 명령을 구성하여 드라이버 구조 개발

인스트루먼트 드라이버의 구성은 인스트루먼트 드라이버 구성요소 VI의 계층구조와 전체적인 관계를 정의합니다.

인스트루먼트 드라이버에는 모든 인스트루먼트에 공통적인 API VI와 인스트루먼트의 특별한 기능을 보여주는 API VI, 이렇게 두 가지 타입이 있습니다. 템플릿 인스트루먼트 드라이버 VI (초기화, 닫기, 리셋, 셀프 테스트, 개정 쿼리, 에러 쿼리)는 공통적인 작업을 수행합니다. 인스트루먼트 드라이버 개발자는 인스트루먼트의 특별한 기능을 보여주는 VI를 정의합니다. 일부 인스트루먼트 드라이버는 스위치 인스트루먼트의 “경로” 또는 “스캔”과 같은 추가적인 항목을 정의할 수도 있습니다.

일반 VI와 개발자 정의 VI를 항목으로 그룹화합니다. 항목이란 유사한 작업을 수행하는 VI의 그룹입니다. VI의 가장 일반적인 항목은 설정, 작업/상태, 데이터, 유틸리티입니다.

다음 표는 간단한 오실로스코프 인스트루먼트 드라이버의 구성 사례를 보여줍니다. 계층구조의 가장 높은 레벨에는 템플릿 VI (초기화 및 닫기)와 일반적인 VI 항목이 있습니다.

표 1: 간단한 오실로스코프 구조의 예

VI 계층구조타입
초기화 VI(템플릿)
예제 VI
웨이브폼 오토셋업 및 읽기 예제
(개발자 정의)
설정 VI
오토셋업
수직으로 설정
수평으로 설정
트리거 설정
수집 모드 설정
(개발자 정의)
(개발자 정의)
(개발자 정의)
(개발자 정의)
(개발자 정의)
데이터 VI
웨이브폼 읽기
측정 읽기
고급 VI
시작
웨이브폼 가져오기
측정 가져오기
(개발자 정의)
(개발자 정의)

(개발자 정의)
(개발자 정의)
(개발자 정의)
유틸리티 VI
리셋
셀프 테스트
개정 쿼리
에러 쿼리
(템플릿)
(템플릿)
(템플릿)
(템플릿)
닫기 VI(템플릿)


설계 예제

대부분의 인스트루먼트 매뉴얼에서 제공되는 구성 정보를 참조하면 인스트루먼트 드라이버 VI에 어떤 파라미터를 포함할지 결정할 수 있습니다. 특히 매뉴얼의 프로그래밍 섹션에서는 명령을 측정 설정, 트리거링, 측정 읽기등과 같은 카테고리로 그룹화할 수 있습니다. 이러한 그룹은 드라이버 계층구조의 모델로 사용합니다. 드라이버 구조 개발에 도움이 되도록 단일 작업이나 함수를 수행하는 데 함께 사용되는 컨트롤을 찾습니다. 모듈형 드라이버에는 각 컨트롤 그룹에 해당하는 개별 VI가 포함되어 있습니다.

아래 표는 단순 DMM의 인스트루먼트 명령이 개발자 정의 인스트루먼트 드라이버 VI에 어떻게 대응하는지를 보여줍니다.

표 2: 인스트루먼트 드라이버 VI와 매뉴얼 섹션, 명령의 관계

가상 인스트루먼트 터미널인스트루먼트 명령
초기화 ID 쿼리?

리셋?
입력/출력 설정 *IDN?

*RST

측정 설정

측정 함수
범위
분해능
전원 라인 사이클 수

측정 설정 SENS:FUNC <function selection>
<function selection>:RANGE;
<function selection>:RES;
<function selection>:NPLC;

트리거 설정

트리거 소스
트리거 지연
트리거 카운트
샘플 카운트

트리거링 작업 TRIG:SOUR
TRIG:DEL
TRIG:COUN
SAMP:COUN
측정값 읽기 판독측정값 읽기
다음 명령을 사용하여 측정값을 가져옵니다.
INIT;
FETCH;


인스트루먼트 매뉴얼은 인스트루먼트 드라이버를 구성하는 방법에 대한 많은 정보를 제공할 수 있지만 매뉴얼에만 의존하면 안 됩니다. 인스트루먼트 사용에 관해 습득한 지식이 주요한 가이드라인이어야 합니다. 단일 VI 안에 여러 가지 다른 명령 그룹에 속한 명령을 포함해야 하는 경우가 많습니다. 다른 경우에는 매뉴얼에 나오는 여러 명령을 하나의 그룹으로 만들어 두 개 이상의 VI로 나누어야 합니다. 이때, 인스트루먼트 매뉴얼이 트리거 준비 완료 및 실행을 실제로 수행하는 명령과 함께 트리거 설정 명령을 그룹화하는 방법을 고려합니다. 이 경우, 명령을 두 가지 VI 즉, 트리거를 설정하는 VI와 인스트루먼트를 준비 완료하거나 트리거하는 VI로 분리합니다.

2단계: 인스트루먼트 드라이버 프로젝트 마법사를 사용하여 새 인스트루먼트 드라이버 생성

LabVIEW 인스트루먼트 드라이버 구조를 설계한 후에는 인스트루먼트 드라이버 프로젝트 마법사를 사용하여 새 인스트루먼트 드라이버를 생성한 다음 인스트루먼트와 함께 작동하도록 새 인스트루먼트 드라이버 VI를 수정합니다. 

인스트루먼트 드라이버 마법사 사용

LabVIEW 8.x 및 이후 버전에서는 인스트루먼트 드라이버 프로젝트 마법사를 사용하여 새 인스트루먼트 드라이버 프로젝트를 생성할 수 있습니다. 

다음 단계에 따라 인스트루먼트 드라이버 마법사를 사용하여 인스트루먼트 드라이버를 생성합니다.

  1. LabVIEW 시작하기 윈도우에서 도구≫인스트루먼트≫인스트루먼트 드라이버 프로젝트 생성을 선택하여 인스트루먼트 드라이버 프로젝트 마법사를 시작합니다.
  2. 프로젝트 타입 메뉴에서 템플릿으로부터 새 드라이버 만들기를 선택하고 소스 드라이버 메뉴에서 인스트루먼트 타입을 선택합니다.
  3. 다음을 선택합니다.
  4. 드라이버 식별자를 생성합니다. 드라이버 식별자는 드라이버를 잘 나타내야 합니다.
  5. 다음을 선택합니다.
  6. 아이콘 색상과 타입을 선택합니다.
  7. 마침을 선택합니다. 이렇게 하면 프로젝트 윈도우LabVIEW 도움말이 표시됩니다.

3단계: 인스트루먼트 드라이버 API VI 추가

인스트루먼트 드라이버의 기능을 정의하고 인스트루먼트의 특별한 기능에 액세스하는 개발자 정의 API VI를 추가합니다. 

인스트루먼트 드라이버 VI 마법사 사용

인스트루먼트 드라이버 VI 마법사를 사용하여 인스트루먼트가 지원하는 VI를 추가로 생성할 수 있습니다. 디지털 멀티미터 템플릿과 같은 클래스 템플릿에서 드라이버를 생성했는데 인스트루먼트가 해당 클래스 템플릿에서 수행하지 않는 추가 기능을 지원할 수도 있습니다. 이 경우, 기존 VI와 구조를 참조하여 지원되는 각 기능에 대한 추가 VI를 생성해야 합니다. 예를 들어, 오실로스코프에는 일반적으로 많은 타입의 트리거가 있는데 오실로스코프 템플릿에 에지 트리거링에 대한 지원만 포함되어 있습니다. 인스트루먼트가 추가 트리거 타입을 지원하면 추가 인스트루먼트 드라이버 VI를 사용하여 이 기능을 추가하십시오.

다음 단계에 따라 인스트루먼트 드라이버 마법사를 사용하여 인스트루먼트 드라이버를 생성합니다.

  1. 인스트루먼트 드라이버 프로젝트를 엽니다.
  2. 프로젝트 탐색기 윈도우에서 LabVIEW 인스트루먼트 드라이버 프로젝트 라이브러리 (.lvlib)를 마우스 오른쪽 버튼으로 클릭하고 바로 가기 메뉴에서 새로 만들기≫인스트루먼트 드라이버 VI를 선택하여 인스트루먼트 드라이버 VI 마법사를 표시합니다.
  3. 인스트루먼트 드라이버 VI 마법사의 시작 페이지에서 다음 옵션 중 하나를 선택하고 다음 버튼을 클릭합니다.
    1. 인스트루먼트 드라이버 템플릿 VI로부터 생성 - 템플릿 VI로부터 인스트루먼트 드라이버 VI를 생성합니다.
    2. 기존 VI로부터 복사 - 기존의 인스트루먼트 VI와 SubVI를 복사하고 설정합니다.
    3. 사용자 VI 설정 - 인스트루먼트 명령을 설정하고 응답을 분석하는 방법을 지정하고 연결된 인스트루먼트와 상호작용하며 새 인스트루먼트 드라이버 VI에 해당하는 인스트루먼트 I/O와 문자열 포맷/분석 코드를 생성합니다.
    4. 새 VI 추가 - VISA 리소스 이름 컨트롤 및 인디케이터와 에러 클러스터 컨트롤 및 인디케이터만을 포함한 인스트루먼트 드라이버 VI를 생성합니다.
  4. 인스트루먼트 드라이버 VI 마법사의 두 번째 페이지에서:
    1. 시작 페이지에서 인스트루먼트 드라이버 템플릿 VI로부터 생성을 선택한 경우 템플릿으로부터 복제 페이지에 있는 사용 가능한 인스트루먼트 드라이버 VI 템플릿에서 VI를 선택한 후 다음 버튼을 클릭합니다.
    2. 시작 페이지에서 기존 VI로부터 복사를 선택한 경우 VI 탐색 페이지의 탐색 버튼을 클릭하여 프로젝트에 추가하고자 하는 VI를 검색하고 선택한 후 다음 버튼을 클릭합니다.
    3. 시작 페이지에서 사용자 VI 설정을 선택한 경우 VI 타입 선택 페이지에서 설정 VI 또는 측정 VI를 선택한 후 다음 버튼을 클릭합니다. 명령을 인스트루먼트에 보내는 VI를 생성하려면 설정 VI를 선택합니다. 명령을 인스트루먼트에 보낸 후 인스트루먼트의 응답을 읽는 VI를 생성하려면 측정 VI를 선택합니다.
    4. 시작 페이지에서 새 VI 추가를 선택한 경우 6 단계로 진행합니다.
  5. 시작 페이지에서 사용자 VI 설정을 선택한 경우 컨트롤 설정 페이지를 설정한 후 다음 버튼을 클릭합니다. 그렇지 않다면 다음 단계로 진행합니다.
    1. 데이터 타입 풀다운 메뉴에서 각각의 파라미터에 적합한 데이터 타입을 선택합니다.
    2. 데이터 타입 풀다운 메뉴 옆에 있는 숫자 입력 상자에서 각 파라미터의 기본값을 설정합니다.
    3. 명령 미리보기 텍스트 박스에 설정된 명령 문자열을 확인합니다.
    4. VI 타입 선택 페이지에서 설정 VI를 선택한 경우 명령 테스트 섹션의 풀다운 메뉴에서 인스트루먼트를 선택합니다. VI 타입 선택 페이지에서 측정 VI를 선택한 경우 다음 버튼을 클릭한 후 명령 테스트 섹션의 풀다운 메뉴에서 인스트루먼트를 선택합니다.
    5. 테스트 실행 버튼을 클릭하여 설정한 명령을 테스트합니다. LabVIEW는 명령 미리보기 텍스트 박스의 명령을 인스트루먼트에 보내고 사용된 바이트 박스에 인스트루먼트에 쓰여진 바이트의 개수를 나타냅니다. 명령에 성공하면 밝은 녹색 불이 들어옵니다. VISA가 에러를 반환하면 빨간색 불이 들어옵니다. 에러 설명 버튼을 클릭하면 에러가 표시됩니다. VI 타입 선택 페이지에서 측정 VI를 선택한 경우 LabVIEW는 인스트루먼트의 응답을 읽고 이를 응답 텍스트 박스에 표시합니다. 응답 데이터 타입 설정 섹션에서 응답 데이터 타입을 선택할 수 있습니다.
  6. VI 프로퍼티 페이지에서 VI 이름, 경로, 아이콘, 설명을 편집한 후 다음 버튼을 클릭합니다.
  7. 요약 페이지에서, 새로 만든 VI 정보를 확인한 후 마침 버튼을 클릭하여 인스트루먼트 드라이버 프로젝트에 인스트루먼트 드라이버 VI와 모든 SubVI를 추가하고 VI를 엽니다. 템플릿 VI 또는 기존 VI에서 VI를 생성한 경우, LabVIEW는 프로젝트 라이브러리에 있는 기존 VI와 동일한 이름을 갖고 있으나 다른 커넥터 팬을 지닌 SubVI의 이름을 변경합니다. LabVIEW 프로젝트 라이브러리에 있는 기존 VI와 동일한 이름 및 동일한 커넥터 팬을 갖는SubVI를 복사하지 않습니다. 새 VI는 LabVIEW가 추가하지 않은 모든 SubVI가 있을 위치에 프로젝트 라이브러리에 있는 기존 VI를 사용합니다.


• VI: 이름 및 프로퍼티
• 컨트롤/인디케이터: 명명 및 데이터 형
• VI 프런트패널
• 아이콘 및 커넥터 팬
• 블록다이어그램
• 문서

각 VI를 수정한 후에는 함수 팔레트 메뉴를 생성합니다. 따라서 사용자가 함수 팔레트에서 인스트루먼트 드라이버를 설치하고 사용할 수 있으며 인스트루먼트 드라이버에 액세스할 수 있습니다. 일관성을 위해 인스트루먼트 드라이버가 인스트루먼트 드라이버 VI 서브팔레트에 표시되어야 합니다. 서브팔레트 내에서 인스트루먼트 VI의 구조는 아래 그림과 같이 내부 설계 모델과 같아야 합니다.

그림 7: FL45 서브팔레트의 예

프런트패널 스타일

프런트패널에는 인스트루먼트의 작동에 필요한 컨트롤 외에 VISA 리소스 이름 컨트롤, VISA 리소스 이름 출력 인디케이터, 에러 입력 컨트롤, 에러 출력 인디케이터가 포함되어야 합니다. VISA 세션 핸들에 대한 자세한 내용은 드라이버 지원 라이브러리 섹션을 참조하십시오. LabVIEW 7.1 또는 이전 버전에서 에러 입력과 에러 출력 파라미터에 대한 자세한 내용은 LabVIEW 사용자 매뉴얼 (아래 링크)의 6장을 참조하십시오. LabVIEW 8.0 또는 이후 버전에서는 LabVIEW 도움말 (아래 링크)의 에러 핸들링 항목을 참조하십시오.

프런트패널을 설계할 때 다음 스타일 가이드라인을 사용하면 다른 LabVIEW 프런트패널과 일관성을 유지할 수 있습니다. 인스트루먼트 드라이버 프런트패널 생성을 위한 전체 요구사항과 권장사항은 인스트루먼트 드라이버 가이드라인의 컨트롤/인디케이터: 명명 및 데이터 형과 프런트패널 섹션을 참조하십시오.

  1. 모든 라벨에 기본 (어플리케이션) 폰트를 사용합니다. LabVIEW에 이 폰트가 포함되어 있으므로 다른 모든 사용자가 이 폰트를 사용할 수 있습니다.
  2. 컨트롤과 인디케이터 이름은 굵은체로 포맷합니다. 컨트롤 라벨 (예: 트리거 소스 설정, VISA 리소스 이름, 에러 입력, 에러 출력)과 잘 알려진 약어 (예: AC 또는 FM)에서 각 단어의 첫 번째 문자를 대문자로 표시합니다.
  3. 컨트롤 라벨에서 기본 정보를 일반 텍스트로 표시하고 괄호로 둘러싸면 기본값이 기본 도움말 윈도우에 나타납니다. 이렇게 하면 블록다이어그램에서 VI에 연결할 수 있습니다. 예를 들어, 항목 0에서 DC 전압의 기본값을 갖는 함수 선택자 링 컨트롤의 라벨을 함수 (0:DCV)로 지정하고 자동 활성화됨을 나타내는 TRUE가 기본값으로 설정된 불리언 스위치 라벨을 자동 트리거 지연 (T:On)으로 지정합니다.
  4. VISA 리소스 이름 컨트롤은 왼쪽 상단에, VISA 리소스 이름 인디케이터는 오른쪽 상단에, 에러 입력 컨트롤은 왼쪽 하단에, 에러 출력 컨트롤은 오른쪽 하단에 놓습니다.
  5. 모든 컨트롤과 인디케이터 설명을 편집합니다. 컨트롤 생성 설명에 대한 자세한 내용은 LabVIEW 도움말을 참조하십시오.


아이콘 및 커넥터 팬

커넥터 팬의 왼쪽 상단 터미널은 VISA 리소스 이름 컨트롤을 위해, 오른쪽 상단 터미널은 VISA 리소스 이름 출력 인디케이터를 위해 예약되어 있습니다. 후속 에러 터미널에 연결을 단순화하기 위해 왼쪽 하단 터미널은 에러 입력 컨트롤을 위해, 오른쪽 하단 터미널은 에러 출력 인디케이터를 위해 예약되어 있습니다. 나중에 커넥터 팬에 컨트롤 또는 인디케이터를 추가할 수 있기 때문에 현재 컨트롤과 인디케이터 수보다 더 많은 터미널이 있는 커넥터 팬 패턴을 선택합니다. 이렇게 미리 조치하면 패턴을 변경하고 수정된 SubVI에 대한 호출의 모든 인스턴스를 대체하지 않을 수 있습니다. 입력을 왼쪽에 놓고 출력을 오른쪽에 놓으면 블록다이어그램에서 왼쪽에서 오른쪽으로 데이터가 더욱 원활하게 흐릅니다.

모든 VI에는 의미 있는 아이콘을 사용합니다. 가능한 한 Icon Art Glossary에 있는 아이콘을 사용합니다. 또한 다른 인스트루먼트 드라이버의 유사한 VI에서 아이콘을 가져와 사용하거나 labview\examples\instr\insticon.llb 디렉토리에 있는 아이콘 라이브러리 Icon256.vi를 사용할 수 있습니다. 사용자가 드라이버 API에서 VI를 식별할 수 있도록 아이콘 상단에 인스트루먼트 드라이버 접두어를 포함합니다. VI 기능을 나타내는 문양과 이미지를 사용하여 아이콘을 생성합니다. 아래 그림은 Icon256.vi의 샘플 설정 아이콘을 보여줍니다.

그림 8: 샘플 아이콘

의미 있는 아이콘 생성 및 커넥터 팬 디자인에 대한 구체적인 요구사항 및 권장사항은 인스트루먼트 드라이버 가이드라인의 아이콘 및 커넥터 팬 섹션을 참조하십시오.

블록다이어그램

프런트패널을 디자인한 다음 블록다이어그램을 생성합니다. 문자열로 포맷 함수를 사용하여 인스트루먼트 명령 문자열을 생성합니다. 이 확장 가능한 함수는 여러 값과 여러 데이터 타입을 문자열로 포맷합니다. 함수를 두 번 클릭하고 문자열로 포맷 대화 상자를 사용하여 포맷 명령을 입력합니다. 또한 참/거짓 문자열 추가와 라인 선택 함수를 사용하여 문자열을 조작합니다. 예를 들어, 참/거짓 문자열 추가 함수를 사용하여 프런트패널 불리언의 값을 문자열로 변환합니다. 이 함수는 한 번에 적절한 문자열을 선택하여 명령 문자열에 연결합니다. 라인 선택 함수를 사용하여 텍스트 링 값을 문자열로 변환합니다. 이 함수는 라벨 값에 따라 적절한 문자열을 선택해 명령 문자열과 연결합니다. 이러한 함수에 대한 설명은 LabVIEW 도움말 (아래 링크)을 참조하십시오. 아래 그림의 블록다이어그램은 명령 문자열 작성 시 자주 사용되는 방법을 보여줍니다.

그림 9: 문자열 작성 기술

많은 인스트루먼트가 SCPI (Standard Commands for Programmable Instruments) 프로그래밍 명령 세트와 구문을 준수합니다. SCPI 기반 인스트루먼트를 사용하면 여러 명령을 결합하여 I/O 쓰기 작업 하나로 전송할 수 있습니다. 위에서 설명한 문자열 함수를 사용하면 명령이 여러 개 포함된 문자열을 작성할 수 있습니다. 결합된 문자열을 VISA 쓰기 함수에 연결합니다.

블록다이어그램은 최종 사용자가 VI의 작동 방식을 파악할 수 있는 주된 방법이기 때문에 가능한 한 읽기 쉽게 만들어야 합니다. 인스트루먼트 드라이버 블록다이어그램에 대한 대부분의 권장사항은 모든 LabVIEW 어플리케이션의 모범 사례와 유사합니다. 여기에는 다이어그램의 왼쪽에서 오른쪽 레이아웃을 따르고 와이어 꺾임을 최대한 줄이고 효율적이고 일관된 코딩 기술을 사용하는 것이 포함됩니다. 인스트루먼트 드라이버 블록다이어그램을 생성하는 데 필요한 구체적인 요구사항 및 권장사항은 인스트루먼트 드라이버 가이드라인의 블록다이어그램 섹션을 참조하십시오.

아래 그림의 블록다이어그램은 인스트루먼트 드라이버 가이드라인에서 자세히 설명하는 요구사항 및 권장사항을 따릅니다.

그림 10: 스타일 가이드라인을 따르는 간단한 블록다이어그램

참조 항목:
LabVIEW 사용자 매뉴얼
LabVIEW 도움말: 에러 핸들링

드라이버 지원 라이브러리

인스트루먼트 드라이버 개발을 위한 LabVIEW 도구에는 사용자 드라이버 생성의 출발점이 되는 템플릿 VI 라이브러리, 템플릿을 사용자 정의하는 인스트루먼트 드라이버 프로젝트 마법사, 인스트루먼트 I/O를 수행하는 VISA 함수, 의미 있는 아이콘을 생성하는 데 도움이 되는 아이콘 라이브러리, 지원 파일과 함수가 있습니다. 이 섹션에서는 VISA 함수와 인스트루먼트 드라이버 템플릿 VI에 대해 설명합니다.

VISA

VISA 함수에는 인스트루먼트 드라이버가 프로그램 가능한 인스트루먼트와 통신하는 데 사용하는 I/O 인터페이스가 포함되어 있습니다. VISA는 VXI, GPIB, 시리얼, TCP/IP, 다른 타입의 인스트루먼트를 제어하는 단일 인터페이스 라이브러리입니다. VISA 함수 및 컨트롤에 대한 설명은 LabVIEW 도움말 (아래 링크)의 VISA VI 및 함수 항목을 참조하십시오.

대부분 인스트루먼트 드라이버 VI의 프런트패널에는 VISA 리소스 이름 컨트롤과 VISA 리소스 이름 출력 인디케이터가 있습니다. 이러한 컨트롤과 인디케이터는 인스트루먼트 드라이버 SubVI 사이에 세션 정보를 전달합니다. VSIA 리소스 이름은 VI가 작동하는 리소스를 나타냅니다. 또한 인스트루먼트 드라이버의 다른 세션을 차별화합니다.

VISA 리소스 이름은 디바이스 I/O 세션의 고유한 식별자 참조입니다 (초기화 VI 제외). VI가 통신하는 디바이스를 식별하며 I/O를 수행하는 데 필요한 모든 설정 정보를 전달합니다.

VISA 리소스 이름 출력VISA 리소스 이름과 같은 식별자 정보를 포함하고 있습니다. 이 함수는 참조를 VI 밖으로 빼내어 같은 인스트루먼트에 액세스하는 다른 후속 VI로 전달합니다. VISA 리소스 이름을 함께 연결하면 데이터 의존성이 설정됩니다.

또한 VISA 리소스 이름을 블록다이어그램의 VISA 함수 안팎으로 전달합니다.

인스트루먼트 드라이버 템플릿 VI

instr.lib 폴더에 있는 LabVIEW 인스트루먼트 드라이버 템플릿에는 대부분의 인스트루먼트에 공통적으로 필요한 VI 세트가 포함되어 있습니다. NI는 이러한 템플릿을 주기적으로 업데이트하고 LabVIEW 최신 버전에 포함합니다. 이러한 VI는 인스트루먼트 드라이버 개발을 위한 시작점으로 사용할 수 있습니다. 템플릿은 구조가 단순하고 유연하며 모든 LabVIEW 드라이버에 대한 표준 형식을 설정합니다.

템플릿 VI에는 특정 인스트루먼트의 VI를 수정하는 지침이 포함되어 있습니다. 템플릿 VI는 메시지 기반 인스트루먼트 (GPIB, VXI, 시리얼)와 VXI 레지스터 기반 인스트루먼트에 사용합니다. 템플릿은 IEEE 488.2 규격 인스트루먼트용으로 설계되었기 때문에 IEEE 488.2 규격 인스트루먼트에 템플릿을 사용할 경우 최소한의 내용만 수정하면 됩니다. 그 외 인스트루먼트에 사용할 때는 해당하는 경우 인스트루먼트 특정 명령을 대체하여 VI의 쉘 또는 패턴으로 템플릿 VI를 사용합니다.

참조 항목:
LabVIEW 도움말: VISA VI와 함수

주의 사항

VI 문서화하기

생성한 VI를 문서화하면 각 인스트루먼트 드라이버에 대한 정보가 LabVIEW 기본 도움말 윈도우에 표시됩니다. VI 문서화에 대한 자세한 내용은 LabVIEW 도움말 (아래 링크)의 VI 문서화하기 항목을 참조하십시오.

도움말≫기본 도움말 표시를 선택하여 기본 도움말 윈도우에 액세스합니다. 커서를 프런트패널 또는 블록다이어그램 객체 위로 움직이거나 프런트패널 또는 블록다이어그램의 오른쪽 위 모서리에 있는 아이콘 위로 움직이면 기본 도움말 윈도우에 해당 객체에 대한 설명이 나타나고 여기에는 문서가 포함되어 있습니다.

또한 프런트패널과 블록다이어그램에 독립 라벨을 사용하면 사용자에게 유용합니다. 블록다이어그램에서 모든 터미널 라벨 (일반 텍스트)을 표시하고 경계선은 투명하게 지정합니다. 케이스와 시퀀스 구조에 표시되는 독립 라벨에 굵은체 텍스트를 사용하여 설명이 눈에 잘 띄도록 하고 VI를 더 쉽게 이해하고 수정할 수 있도록 합니다.

에러 리포트

인스트루먼트 드라이버의 에러 리포트는 대부분의 다른 LabVIEW 어플리케이션의 에러 리포트와 비슷합니다. VISA 함수는 에러 입력 클러스터의 불리언 상태를 확인하여 이전에 실행된 VI 또는 함수에서 에러가 발생했는지 살펴봅니다. VI 또는 함수가 에러를 감지하면 VISA 함수는 자신의 일상적인 작업을 수행하지 않습니다. 대신 에러 정보를 수정 없이 에러 출력 클러스터로 전달합니다. VI 또는 함수가 에러를 감지하지 않으면 VISA 함수는 정상적으로 실행되고 에러 발생 여부를 확인합니다. 에러가 발생했으면 함수는 에러 출력 클러스터에서 새로운 에러 정보를 반환합니다. 그러지 않으면 함수는 에러 출력 클러스터에서 에러 입력 정보를 반환합니다. 첫 번째 에러는 후속 VI (또는 사용자가 정의한 다른 동작)가 실행되지 않고 에러 코드와 에러 소스가 최상위 프런트패널로 전달되도록 합니다. 또한 경고 (에러 코드 및 에러 불리언이 FALSE로 설정된 소스 메시지)는 에러 동작을 트리거하지 않고 전달됩니다.

VISA 에러 코드 외에, 아래 표에 나열된 에러 및 경고 코드는 인스트루먼트 드라이버를 위해 예약되어 있습니다. 인스트루먼트 드라이버 VI는 적절한 조건이 발생하면 에러 코드를 반환해야 합니다. 이전 인스트루먼트 드라이버 및 이전 인스트루먼트 드라이버 템플릿에서는 인스트루먼트 관련 에러의 경우 -1300과 같은 에러 코드를 볼 수 있었습니다. 그러나 인스트루먼트 드라이버 표준을 준수하기 위해 다음 표의 코드를 사용하십시오.

표 3: 인스트루먼트 드라이버 에러 코드 10진 코드

10진 코드16진 코드의미
00에러 없음: 호출 성공
1073481728 ~ 10734837753FFC0800 ~
3FFC0FFF
경고: 개발자 정의 경고
-1074003951BFFC0011에러: ID 쿼리 실패
-1074000000BFFC0F80에러: 인스트루먼트 정의 에러
-1073999873
~ -1074001919
BFFC0801 ~
BFFC0FFF
에러: 개발자 정의 에러


초기화 VI가 "ID 쿼리 실패" 에러를 사용합니다. 에러 쿼리 VI는 “인스트루먼트 정의 에러 코드”를 사용합니다.


쿼리 인스트루먼트 상태

거의 모든 인스트루먼트에는 인스트루먼트 정의 에러를 보고하는 메커니즘이 있습니다. 인스트루먼트 정의 에러에는 명령 에러, 실행 에러, 쿼리 에러가 있습니다. 최근에 제조된 많은 인스트루먼트에는 인스트루먼트 에러가 발생했는지 확인하는 쿼리 명령이 포함되어 있습니다. SCPI 인스트루먼트의 경우 인스트루먼트 에러를 가져오는 표준 명령은 “SYST:ERR?”입니다. 이 명령에 대한 응답에는 에러 코드와 에러 메시지가 포함되어 있습니다. 에러가 발생하지 않았다면 응답은 0 “에러 없음”입니다.

인스트루먼트가 "SYST:ERR?" 명령을 지원하지 않지만 IEEE 488.2 상태 레지스터를 지원하면 표준 이벤트 상태 레지스터를 쿼리하여 에러가 발생했는지 확인할 수 있습니다.

인스트루먼트 드라이버 VI의 에러 쿼리 VI를 사용하여 사용자에게 인스트루먼트 에러를 보고하는 인스트루먼트 에러 리포트 메커니즘을 구현할 수 있습니다. 인스트루먼트 드라이버는 인스트루먼트 드라이버에서 인스트루먼트 에러를 다시 정의하지 않습니다. 대신 에러 쿼리 VI가 인스트루먼트에서 보고하는 에러 코드와 관련 메시지를 보고합니다.

에러 쿼리 VI를 사용하여 인스트루먼트에 에러를 쿼리하지 않으면 최종 사용자가 단순 에러 핸들러를 사용하더라도 인스트루먼트 에러가 발생했다는 사실을 모르게 될 수도 있습니다. 이때, I/O 에러 없이 인스트루먼트에서 데이터를 보내고 받을 수 있지만 그렇다고 해서 인스트루먼트 에러가 없다는 뜻은 아닙니다.

대부분의 API VI는 모든 I/O 작업 후 에러 쿼리 VI를 호출하여 사용자가 인스트루먼트 에러 정보를 제때 얻을 수 있도록 지원합니다. 인스트루먼트 에러가 발생하면 단순 에러 핸들러 VI 호출과 같은 표준 LabVIEW 에러 핸들링 기술이 사용자에게 자동으로 에러를 알립니다. 에러가 감지되면 에러 쿼리 VI는 에러 코드 -1074000000 (16진수: BFFC0F80)으로 에러 클러스터를 업데이트하고 인스트루먼트에서 반환된 에러 정보를 소스 메시지에 포함합니다. LabVIEW 에러 핸들러 VI는 에러 코드 -1074000000을 인스트루먼트 특정 에러로 식별하고 적절한 에러 메시지를 생성합니다. 아래 그림은 에러 쿼리 VI의 프런트패널을 보여줍니다.

그림 11: 에러 쿼리 VI의 프런트패널


하위 레벨 API VI는 에러 쿼리 VI를 호출하지 않습니다. 많은 하위 레벨 API VI는 주로 성능을 개선하거나 인스트루먼트 작동을 더 많이 제어하도록 설계되었습니다. 예를 들어, 오실로스코프 인스트루먼트 드라이버는 웨이브폼 읽기 VI를 구현하여 채널 기반 웨이브폼 데이터를 반환할 수 있습니다. 고급 사용자가 더 많이 제어하도록 하려면 초기화 및 가져오기 VI를 구현해야 합니다. 하위 레벨 초기화 및 가져오기 VI를 사용하면 사용자가 작업이 발생할 때 더 많이 제어할 수 있으므로 하위 레벨 VI는 에러 쿼리 VI를 호출하지 않습니다.

일부 인스트루먼트에는 에러 큐가 있어 감지되면 에러와 이벤트를 저장합니다. 이 큐는 선입선출 (FIFO)이며 최소 길이는 메시지 두 개입니다. 오버플로우가 발생하면 인스트루먼트는 가장 최근에 발생한 에러/이벤트는 유지하고 가장 오래 전에 발생한 에러/이벤트는 큐 오버플로우 메시지로 대체합니다. 인스트루먼트 드라이버에서 이 큐를 사용하면 명령이 전송된 후 인스트루먼트를 쿼리하여 인스트루먼트 에러를 감지하고 보고할 수 있습니다. :SYST:ERR? 명령을 실행하면 SCPI 인스트루먼트는 큐에서 항목 하나를 반환하는데, 이 항목은 에러, 오버플로우 경고 또는 메시지 0 "에러 없음"일 수 있습니다. 전체 에러 큐를 가져오려는 최종 사용자가 있기 때문에 많은 인스트루먼트 드라이버는 에러 쿼리 (다중) VI도 포함합니다. 이 VI는 에러 큐가 빌 때까지 :SYST:ERR? 명령으로 인스트루먼트를 쿼리합니다.

인스트루먼트 드라이버 프로젝트 마법사가 생성하는 코드에는 에러 쿼리 VI가 포함되어 있습니다.

일반적으로 인스트루먼트 드라이버 VI는 입력 파라미터에서 범위 확인을 수행하지 않습니다. 사용자가 유효하지 않은 값을 전달하면 인스트루먼트는 인스트루먼트 특정 에러를 보고해야 합니다. 에러 쿼리 VI는 이 인스트루먼트 에러를 감지하여 범위를 벗어난 상태를 사용자에게 보고합니다. VI와 컨트롤 도움말에 범위 정보를 문서화하면 범위 이탈 에러가 발생하지 않습니다.

추가 스타일 가이드라인

사용자에게는 인스트루먼트 드라이버 간 일관성이 중요합니다. 레이아웃을 쉽게 파악할 수 있는 간단한 프런트패널과 블록다이어그램을 개발하면 코드 수정에 대한 최종 사용자의 부담을 덜 수 있습니다. 일부 사용자는 특별한 요구사항에 맞게 코드를 최적화하기 위해 코드를 수정해야 할 수도 있습니다. 스타일 가이드라인에 대한 자세한 내용은 인스트루먼트 드라이버 가이드라인을 참조하십시오.

작동 테스트

개발 중인 인스트루먼트 드라이버를 테스트합니다. 대부분의 사용자는 기본 도움말 윈도우를 사용하여 VI에 대한 입력을 결정하지만 기본 도움말 윈도우를 사용하지 않고 VI에 대한 입력을 결정하여 유효하지 않은 데이터를 VI에 전달하는 사용자가 있을 수 있습니다. 따라서 유효하지 않은 데이터, 경계 조건 및 범위, 비정상적인 입력 조합을 사용하여 VI를 테스트합니다. SubVI에 문자열 또는 배열 정보가 필요하면 VI 입력에 빈 배열 또는 빈 문자열을 연결합니다.

참조 항목:
LabVIEW 도움말: VI 문서화하기

결론

VI의 구조를 정의하는 것은 인스트루먼트 드라이버 개발의 가장 중요한 단계입니다. 관련 인스트루먼트 컨트롤은 모듈형 VI로 그룹화합니다. 각 VI는 프런트패널에서 인스트루먼트를 실제로 사용하는 방식으로 작업을 수행합니다. 이러한 타입의 구조를 사용하면 각 VI는 사용자에게 특정 인스트루먼트 작업을 수행하는 데 필요한 것을 정확히 제공합니다. 각 VI에 어떤 컨트롤이 속하는지 결정하는 것은 인스트루먼트 드라이버 개발에서 가장 큰 과제입니다.

최종 사용자에게 인스트루먼트 드라이버의 가장 중요한 기능은 논리적 구조, 문서, 에러 리포트입니다. 모든 설명 상자에 적절한 설명을 입력하고 블록다이어그램에서 설명과 함께 코드를 문서화합니다. 이 문서에 설명된 기술을 사용하여 VI에 유용한 에러 리포트를 작성합니다. 모든 VI를 철저히 테스트하여 올바르게 작동하는지 확인합니다.

인스트루먼트 드라이버 개발은 문자열을 작성해 인스트루먼트로 전송하는 것 이상입니다. 인스트루먼트 드라이버 프로젝트 마법사와 NI Instrument Driver Network (ni.com/idnet)에서 사용할 수 있는 수천 개의 인스트루먼트 드라이버를 활용하십시오. 템플릿은 대부분의 인스트루먼트에 공통된 VI를 포함하며 인스트루먼트 드라이버 VI의 원하는 스타일과 구조를 보여줍니다. 기존의 인스트루먼트 드라이버를 사용하면 나만의 인스트루먼트 드라이버를 개발하는 데 도움을 얻을 수 있습니다. VI를 개발할 때는 내부 설계 구조를 따르고 API VI가 속한 항목을 염두에 둡니다. 드라이버 개발 과정에서 인스트루먼트 드라이버 가이드라인을 참조하면 품질이 뛰어난 인스트루먼트 드라이버를 개발할 수 있습니다. 이러한 도구를 사용하면 다양한 사용자에게 적합한 인스트루먼트 드라이버를 설계할 수 있습니다.

Was this information helpful?

Yes

No