You are here

NI-DAQmx의 웨이브폼 및 단일 포인트 I/O

데이터 수집(DAQ) 드라이버 소프트웨어 세계에서 드라이버 소프트웨어는 사용하기 쉬우면서도 입력 수집 성능이 뛰어나야 합니다. 대부분의 경우, 성능의 많은 부분이 복잡하고 수많은 입력 및 출력 변수를 노출시켜 얻어지는 것이므로 어플리케이션 프로그래밍 인터페이스(API)의 복잡함과 성능의 두 가지 요소 중 하나는 다른 요소에 비해 떨어질 수 밖에 없습니다. 이처럼 방대한 수의 변수는 사용자에게 엄청난 부담을 줄 뿐 아니라 PC의 복잡함 및 PC와 주변 장치간 상호작용 방식과 관련하여 사용자에게 너무 높은 수준의 이해를 요구할 수도 있습니다. 입력 및 출력 변수는 DAQ 장치의 스캔 속도를 정의하는 것만큼이나 간단명료하지만 DMA 및 인터럽트 기반 데이터 전송을 위해 16진법 메모리 위치를 제공하는 것만큼 복잡해질 수도 있습니다. NI-DAQmx 드라이버 소프트웨어를 최신 하드웨어 및 소프트웨어 기술을 응용하여 사용이 매우 간편하면서도 단일 포인트 및 웨이브폼 I/O에 고성능을 제공합니다. (이 예제는 LabVIEW 7.x 버전에 해당합니다. LabVIEW 8.x 버전에서는 한글 메뉴를 통하여 더 간단하게 작성하실 수 있습니다.)

 

목차

  • 최적화를 위한 다형성 구조

  • 잘 정의된 드라이버 상태 모델

  • 여러 가지 데이터타입 옵션 ‐ 바이너리, 스케일 및 웨이브폼

  • NI-DAQmx - 어려운 측면 처리

  • 연속 및 단일 포인트 작동을 위한 최적화

 

최적화를 위한 다형성 구조 
다형성이란 LabVIEW를 통해 특정 입력 및 출력 터미널 세트에 대해 다양한 데이터타입을 받을 수 있는 VI(LabVIEW의 프로그램 또는 서브루틴)로 정의됩니다. 이 기능은 호환 불가능 데이터타입(예: 숫자 및 텍스트 데이터)을 포함하여 데이터를 스프레드시트에 저장하는 등의 특정 함수를 수행하는 VI에 유용합니다. NI-DAQmx는 LabVIEW의 다형 기술을 사용하여 36개의 읽기 함수(아날로그, 디지털 입력 함수 포함)를 하나의 VI에 제공할 수 있습니다. 하나의 함수 팔레트에 36개의 읽기 VI가 있다는 것을 상상할 수 있습니까? 이 기술은 매우 깔끔하고 이해하기 쉬운 드라이브 VI 팔레트를 제공할 뿐 아니라 NI-DAQmx의 성능을 최적화합니다. 이 드라이버는 지정된 태스크에 필요한 입력만을 노출시킴으로써 그 태스크에 절대적으로 필요하고 중요한 입력만 폴링해야 합니다.

 


그림 1. NI-DAQmx는 10개의 아날로그 입력 함수를 포함하여 36개의 읽기 함수를 하나의 VI에 제공합니다.

잘 정의된 드라이버 상태 모델 
겉으로는 분리되어 보이는 상위 함수의 경우 하드웨어 설정이 변하지 않더라도 같은 하드웨어 레지스터에 반복해서 쓰는 것이 일반적입니다. 이러한 비효율성을 제거하는 한 가지 방법은 사용자가 하위 함수에 액세스해서 설정된 사항과 그렇지 않은 사항을 계속적으로 추적할 수 있게 하는 것입니다. 하지만 이 방법은 금방 복잡해져 초보사용자의 수준을 훨씬 능가하게 됩니다. NI-DAQmx에서 사용되는 또 다른 방법은 드라이버가 하드웨어에 설정된 사항 뿐 아니라 설정된 방식까지도 지속적으로 인식하도록 잘 정의된 상태 모델이 있는 드라이버 소프트웨어를 설계하는 것입니다. 드라이버가 하드웨어의 상태를 인식하면 필요한 하드웨어 설정된 수행되어 결과적으로 구성 및 수집 성능이 최적화됩니다. 잘 정의된 NI-DAQmx 상태 모델은 또한 런타임 시 수행되는 구성의 양을 최소화하므로 런타임 성능을 최적화합니다. 잘 정의된 상태 모델을 이용할 경우 더 복잡한 어플리케이션으로 발전하는 단순 어플리케이션에 일관된 VI 또는 함수 세트를 활용할 수 있다는 장점이 있습니다. 예를 들어, 사용자가 Read VI만 이용할 경우 드라이버는 읽기 작업이 수행되기 전에 장치가 구성되어야 한다는 것을 압니다.

 


그림 2. NI-DAQmx를 이용하여 반복 읽기를 수행하는 보다 효율적인 방법

Read VI를 루프 안에 놓는 것이 반복 읽기를 수행하는 가장 간단한 방법입니다. 그러나 읽기를 수행할 때마다 장치를 구성하는 것은 그다지 효율적이지 않습니다. 좀더 효율적으로 반복 샘플을 얻으려면 루프의 읽기 VI 앞뒤에 시작 및 중지를 구성하면 됩니다. 드라이버는 이 방법을 이용하여 한번의 장치 구성으로 여러 번 읽기를 수행하고 장치를 재설정할 수 있습니다. NI-DAQmx 장치 드라이버는 잘 정의된 상태 모델을 갖추었기 때문에 일관된 VI 세트를 유지하면서 단순한 단일 VI 어플리케이션에서 더 복잡하고 효율적인 어플리케이션으로 발전할 수 있습니다.

여러 가지 데이터타입 옵션 ‐ 바이너리, 스케일 및 웨이브폼 
LabVIEW의 다형성 기능은 드라이버 API에 다음 두 가지 장점을 제공합니다.

각각의 다형성 VI는 특정 함수에 대해 드라이버가 폴링해야 하는 입력의 개수를 최소화합니다. 
각각의 다형성 VI는 출력 데이터타입을 사용자의 성능 및 사용하기 쉬운 요건에 맞게 맞춤화할 수 있습니다.

아날로그 입력 데이터를 수집할 때 Read VI가 나타낼 수 있는 데이터타입으로는 바이너리, 스케일 또는 웨이브폼의 세 가지가 있습니다.

 

그림 3. NI-DAQmx Read VI는 LabVIEW에서 바이너리, 스케일 또는 웨이브폼 데이터타입을 수집할 수 있습니다.

 

바이너리 데이터타입은 ADC(analog-to-digital converter)의 가장 기본적인 데이터를 나타냅니다. 교정 계수는 적용될 수도 있고 그렇지 않을 수도 있는데 이 데이터는 분석을 수행하기 전에 엔지니어링 단위로 변환됩니다. 그러나 바이너리 데이터는 풋프린트가 가장 작아 데이터 수집 드라이버의 데이터 조작 양을 최소화하므로 전송 및 저장에 가장 효율적입니다.

스케일 데이터는 입력 또는 보다 고급형 엔지니어링 단위(예: ft-lb, °C 및 인치) 대비 볼트로 확장된 바이너리 데이터입니다. NI-DAQmx는 스케일 데이터를 유용한 엔지니어링 단위로 검색하여 사용자가 프로그램상에서 수행해야 하는 변환의 양을 최소화합니다. 스케일 데이터는 바이너리 데이터만큼 전송에 효율적이지는 않지만 대부분의 다기능 DAQ 장치의 처리속도를 능가하는 속도로 전체 PCI 버스에서 스트리밍이 가능합니다.

웨이브폼 데이터타입은 유용한 엔지니어링 단위의 스케일 데이터 뿐만 아니라 수집 시간(t(0))과 데이터 포인트(pt)간 시간단계도 포함하기 때문에 가장 사용하기가 쉽습니다. 이 모든 정보는 하나의 데이터타입에 포함되기 때문에 FFT(고속 퓨리에 변형)와 기타 타이밍 및 전환 측정 같은 분석 함수를 한 단계에서 수행할 수 있습니다.

 


그림 4. LabVIEW에서 웨이브폼 데이터타입을 사용한 수집 및 분석

 


그림 5. LabVIEW에서 스케일 데이터타입을 사용한 수집 및 분석

 

38개 이상의 데이터 분석 및 전처리 VI가 웨이브폼 파형 내에 포함된 정보를 이용할 수 있기 때문에 사용자의 프로그래밍 양이 줄어듭니다.

 

어려운 측면을 처리하는 NI-DAQmx  
NI-DAQmx는 PC의 컴퓨팅 파워를 연구하여 사용자가 자주 사용하는 입력 매개변수를 추출합니다. 예를 들어 NI-DAQmx는 사용자가 DAQ 장치의 제품 매뉴얼을 참조하여 가용 게인을 결정한 다음 특정 읽기에 최적인 게인을 결정하도록 하는 대신 엔지니어링 단위의 입력 한계(상한 및 하한)만 요구합니다. 다시 말해, NI-DAQmx는 필요한 변환을 수행하여 최적의 게인을 선택합니다. 사용자는 열전쌍의 값을 읽을 때 입력 읽기에 적용되어야 할 게인이 아닌 예상 온도 범위를 NI-DAQmx에 제공합니다. 이 예에서는 변환되어야 할 바이너리 데이터가 아닌 도(°C) 단위의 NI-DAQmx로부터 읽기 값이 반환될 수 있습니다.

NI-DAQmx는 또한 데이터 수집의 전문가가 아니라도 쉽게 이용할 수 있도록 입력 수집 메모리 할당을 처리합니다. 사용자가 원하는 데이터 수집 속도와 데이터 포인트를 NI-DAQmx에 제공하기만 하면 NI-DAQmx가 데이터 버퍼에 할당할 메모리 양을 최적화합니다. 물론 NI-DAQmx에서 이 메모리 할당 기능을 무시하고 PC 버퍼의 크기를 직접 제어할 수도 있지만 이 정도 수준의 복잡함이 문제가 되지 않을 경우에만 이용할 것을 권합니다.

연속 및 단일 포인트 작동 최적화 
NI-DAQmx는 동일한 기본 함수를 사용하여 같은 API 내에서 소프트웨어 타이밍 또는 하드웨어 타이밍 단일 포인트 I/O 및 웨이브폼 I/O를 수행할 수 있습니다. 그러나 드라이버가 프로그래밍을 단순하게 만든다는 것이 처리 속도가 높지 않다는 것을 의미하지는 않습니다. 최고 성능의 연속 웨이브폼 수집을 위해 NI-DAQmx는 더블 버퍼링 입력 방식을 구현합니다.

 


그림 6. NI-DAQmx 더블 버퍼 입력 방식

 

보이지 않는 곳에서 NI-DAQmx는 데이터 수집 장치에서 오는 데이터를 저장할 PC 버퍼를 할당합니다. 이 버퍼 내에서 데이터 수집 장치는 어플리케이션이 데이터를 판독할 때와 동시에 데이터를 쓸 수 있습니다. NI-DAQmx는 더블 버퍼링과 주로 관련 있는 수많은 복잡한 매개변수를 처리하고 있지만 예상치 못한 상황이 발생할 경우 즉각적으로 에러가 처리될 것을 확인할 수 있습니다. LabVIEW가 이러한 연속 웨이브폼 더블 버퍼링 방식을 구현하는 과정이 아래 나와 있습니다.

 

그림 7. 연속 웨이브폼 더블 버퍼링 방식의 LabVIEW 구현

 

고급 사용자는 버퍼의 새로운 포인트 개수 확인 기능, 버퍼에서 백로그된 포인트 개수 질의 기능, 버퍼에서 검색할 데이터 포인트 선택 기능 등 더블 버퍼링 방식의 고급 기능 중 일부가 유용하다는 것을 알 수 있을 것입니다.

NI-DAQmx는 연속 작동의 성능에 맞게 최적화되었을 뿐 아니라 단일 포인트 입력 작동 시 성능에 대해서도 최적화되었기 때문에 50 kS/s 이상의 속도를 제공합니다. 이러한 성능의 대부분은 메모리 맵핑된 레지스터의 구현으로 인한 것입니다.

 

그림 8. 메모리 맵핑된 레지스터는 소프트웨어 어플리케이션이 하드웨어 레지스터에 액세스할 수 있는 속도를 증가시킵니다.

 

운영 체제 내에서 하드웨어 액세스는 운영 체제의 커널 공간에서 발생하는 반면 소프트웨어 어플리케이션은 사용자 공간에서 실행됩니다.