오류 -200279 : DAQmx에서 수집을 유지할 수 없습니다

업데이트 됨 Oct 20, 2020

해당 제품

하드웨어

  • USB-6009
  • PXI Multifunction I/O Module
  • PXI Analog Input Module
  • PXI Sound and Vibration Module

소프트웨어

  • LabVIEW

드라이버

  • NI-DAQmx

문의사항

LabVIEW에서 DAQmx Read를 사용해서 데이터를 연속으로 수집 중, 다음과 같은 에러가 발생합니다 :


Error -200279 occurred at DAQmx Read (Analog 1D wfm NChan NSamp).vi

Possible reason(s):
The application is not able to keep up with the hardware acquisition.
Increasing the buffer size, reading the data more frequently, or specifying a fixed number of samples to read instead of reading all available samples might correct the problem.


이 오류의 원인은 무엇이며 어떻게 해결합니까?

해결책

이 오류는 PC 버퍼 오버 플로우로 인해 발생합니다. PC 버퍼는 DAQ하드웨어와 LabVIEW의 어플리케이션 메모리 사이에 있는 컴퓨터에 존재하는 버퍼입니다. 하드웨어는 일정한 샘플속도로 데이터를 수집하고, LabVIEW에서는 일정 주기로 데이터를 읽어옵니다. 이 두 속도의 차이는 읽는 속도에 영향을 줄 수 있습니다. 보통, 데이터가 DAQmx PC 버퍼에 덮어 씌워(Overwrite)지는 이유는 2가지입니다.
  1. DAQmx의 읽는 속도가 설정된 하드웨어의 샘플속도보다 느릴 때
  2. DAQmx의 PC 버퍼가 너무 작을 때  


경우 1. DAQmx의 읽는 속도가 설정된 하드웨어의 샘플속도보다 느릴 때

이 오류 -200279 는 종종 아래의 DAQmx 태스크의 샘플 속도보다 DAQmx read의 읽는 갯수가 작을 때의 결과입니다. 

이 오류를 해결하는 방법은 첫 번째로 LabVIEW 어플리케이션의 읽기 속도와 샘플 속도를 동일하게 유지하는 것입니다.

DAQmx 어플리케이션의 읽기 속도는 DAQmx 읽기 당 요청되는 샘플 수와 DAQmx Read 함수가 1초에 loop안에서 호출되는 속도에 따라 달라집니다. DAQmx Read 함수를 명시적(explicit)으로 제어하여 읽기 속도를 조정할 수 있습니다. DAQmx Read에 필요한 샘플 수 또는 DAQmx Read를 포함하는 while 루프가 기다림 (Wait) (ms)와 같은 노드를 사용하여 초 단위로 실행되는 횟수를 명시적으로 제어할 수 있습니다 : 

참고 : DAQmx Read는 요청 된 샘플 수가 사용 가능할 때까지 자동으로 대기하므로 일반적으로 특정 어플리케이션에서 이러한 요소 중 하나를 제어하기 만하면됩니다.

while 루프에서 예상외의 지연때문에 속도가 느려지는 경우, 데이터 수집 이외의 기능들(로깅 후 처리, 분석 및 사용자 인터페이스 (UI)은 다른 루프로 컨트롤 하는 것이 좋습니다. 방법으로는 생산자 / 소비자 패턴이 있습니다. 

기본 생산자 / 소비자 패턴을 구현하는 방법은 다음의 기술문서를 참고하세요. (Application Design Patterns : Producer/Consumer (어플리케이션 디자인 패턴 : 생산자/소비자)

While 루프의 속도를 높일 수 없다면, 어플리케이션의 샘플 속도를 낮추는 방법도 있습니다. 
 


경우 2. DAQmx의 PC 버퍼가 너무 작을 때  

이 오류의 다른 원인으로는 PC의 데이터 버퍼의 크기가 작아서 생기는 문제이며, 해결방법은 버퍼의 크리를 늘리는 것입니다. 그러나, 이 문제의 원인이 경우1에 해당할 경우(DAQmx 버퍼에서 읽기속도가 느린 경우), 버퍼 크기를 늘리는 것은 에러 발생이 지연될 뿐, 완벽한 문제 해결방법이 되지 않습니다.

버퍼 크기를 늘리는 방법은 다음의 문서를 참조하십시오. (유한 또는 연속 수집을 위한 DAQmx 버퍼 크기 할당)

추가 정보

DAQmx 어플리케이션의 읽기 속도는 한번 읽기 당 수집 할 샘플 수와 초당 읽기 수의 두 가지 요소에 의해 결정됩니다.

읽기 속도와 샘플 속도를 동일하게 설정하더라도 프로그램은 예상 한 속도로 수행 할 수 없습니다. 이것은 while 루프 내부의 리소스 문제에 따라 예상보다 한 회전이 오래걸릴 수 있기 때문입니다. 이로 인해 DAQmx 읽기의 속도가 늦어지게 되고 읽지 못한 대기 샘플들이 버퍼에 축적됩니다. 아래에 표시된 것과 같은 루프 벤치마킹 기술을 사용하여 while 루프가 실제로 원하는 속도로 수행되는지 확인할 수 있습니다.

추가 문제 해결 고려 사항 :

유한 샘플링 vs 연속 샘플링
일부 응용 프로그램은 연속 샘플링을 필요로하지 않을 수 있으며 판독시 유효한 샘플 수만 필요합니다. 이 경우, 당신은 연속 샘플 대신 유한 샘플의 DAQmx 타이밍 VI의 샘플 모드를 설정 고려할 수 있습니다. 이 구성에서 모든 루프 사이클은 샘플을 사용할 수 있게되기 전에 잠시 기다립니다 (즉, 1 kHz에서 100 샘플을 읽으면 읽음에서 0.1 초를 기다린다는 의미입니다). 이것은 샘플이 읽기간에 손실되고 그 샘플이 읽기가 호출 되자마자 사용 가능하지 않음을 의미합니다. 그러나 위에서 언급한 시나리오 2를 경험하지 않으면 오류를 완화해야합니다.

DAQmx 프로퍼티 노드를 이용한 버퍼 모니터링
연속 버퍼링 수집 중에 버퍼를 모니터링하여 현재 구성이 버퍼에 미치는 영향에 대한 자세한 정보를 얻을 수 있습니다. 획득 중에 사용 가능한 요소의 수가 계속 증가하면 결국 버퍼 오버플로를 방지하기 위해 위에 나열된 작업 중 하나를 수행하십시오. 버퍼에서 사용 가능한 데이터의 양을 모니터링하려면 DAQmx Read 프로퍼티 노드를 Status:Available Samples Per Channel 하여 Status:Available Samples Per Channel 프로퍼티를 읽습니다.

덮어 쓰기 오류를 피하기 위해 LabVIEW Dataflow 제어
LabVIEW는 데이터 흐름 언어입니다. 즉, VI 또는 구조가 블록 다이어그램에서의 위치와 상관없이 모든 입력을 수신하자 마자 실행될 수 있습니다. 오류 와이어를 입력으로 사용하여 VI 또는 구조가 다른 것보다 먼저 실행되지 않도록하는 것이 유용합니다. 에러 와이어가 VI A와 VI B를 연결하면 A가 실행되고 에러 클러스터가 A에서 B로 전달 될 때까지 B는 필요한 입력을 모두 가지지 않습니다. LabVIEW에서 데이터 흐름에 대한 더 자세한 정보는 LabVIEW Help : Block Diagram Data Flow. (LabVIEW 도움말 : 블록 다이어그램 데이터 흐름 ) 을 참조하십시오. 

지속적인 DAQmx 수집에서, DAQmx 작업 시작 VI가 실행될 때부터 DAQmx 작업 중지 VI 또는 DAQmx 작업 지우기 VI가 실행될 때까지 버퍼에 데이터가 기록됩니다. DAQmx 작업 시작 VI가 실행되는 시점과 첫 번째 DAQmx 읽기가 실행되는 시점 사이에 DAQmx PC 버퍼가 데이터로 채워집니다. 이 간격이 너무 길면 버퍼가 완전히 채워지고 DAQmx 읽기 VI가 버퍼에서 꺼내어 오류 -200279가 발생하기 전에 초기 데이터를 덮어 씁니다.

아래의 코드 조각은 데이터 흐름 실행으로 인해 버퍼 오버플로 오류가 발생할 수있는 일반적인 시나리오를 보여줍니다. 첫 번째 스 니펫에서는 DAQmx Start Task VI가 Open / Create / Replace file VI (팝업 대화 상자 생성) 다음에 실행된다는 보장이 없으므로 측정이 버퍼를 채우는 동안 파일을 선택하면 PC 버퍼 덮어 쓰기의 위험이 있습니다.

이 문제를 피하려면 각 함수의 에러 입력과 출력 터미널을 연결하여 두 번째 코드가 보여 주듯이 DAQmx Start Task VI가 Open / Create / Replace File VI 실행을 마친 후에 실행되도록하십시오 :

DSA (Dynamic Signal Acquisition) 장비의 샘플 속도
National Instruments의 DSA 디바이스는 잡음을 줄이고 왜곡을 줄임으로써 신호 무결성을 극대화하는 24 비트 델타 시그마 아날로그 - 디지털 컨버터 (ADC)를 사용합니다. 이러한 특수 ADC는 사용 가능한 샘플 속도를 달성하기 위해 이산 정수 배수로 나누어 진 마스터 타임베이스를 사용합니다. 결과적으로 모든 DSA 장치의 사용 가능한 샘플 속도는 제한적입니다.

예를 들어, NI 9234는 총 31 개의 가능한 샘플 속도를 가지며 최소 샘플링 속도는 1.652 kS/s입니다. 사용 가능한 샘플 속도의 수와 값은 DSA 장치에 따라 다르므로 장치 사양 설명서에 지정해야합니다.

9234 디바이스의 샘플링 속도가 DAQmx Timing VI 또는 프로퍼티 노드를 사용하여 최소 속도보다 낮게 설정되면 실제 샘플 속도는 DAQmx API 백그라운드에서 디바이스에 사용 가능한 최소 속도까지 강제 설정됩니다. 결과적으로 실제로 발생하는 것보다 훨씬 낮은 샘플 속도에 적합한 읽기 속도로 응용 프로그램을 설계 할 수 있으며 이로 인해 오류 -200279가 발생할 수 있습니다.

수집에 DSA 장치를 사용하는 경우 가능한 샘플링 속도를 고려하고 응용 프로그램을 적절하게 설계하십시오.

참고 : DAQmx 타이밍 프로퍼티 노드를 사용하고 Sample Clock:Rate 프로퍼티를 읽으면 DAQmx 타이밍 VI에서 설정한 속도와 관계없이 디바이스에서 실제로 어떤 샘플 속도가 사용되고 있는지 확인할 수 있습니다.