DAQmx 읽기함수나 프로퍼티 노드를 사용할 때 -200279에러가 발생하는 이유는 무엇입니까?



주요한 소프트웨어:
주요한 소프트웨어 버전: 9.0
문제가 해결된 소프트웨어 버전: N/A
부차적인 소프트웨어: Driver Software>>NI-DAQ

문제점:
DAQmx 읽기함수나 프로퍼티 노드를 사용할 때 -200279에러가 발생하는 이유는 무엇입니까?
 
LabVIEW DAQmx 읽기함수를 사용하여 연속 데이터수집을 진행할 때 아래와 같은 에러상태가 나타납니다.

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

Possible reason(s):
Measurements: Attempted to read samples that are no longer available. The requested sample was previously available, but has since been overwritten.
 
에러의 원인은 무었이며 어떻게 해결할 수 있나요


솔루션:
DAQmx 버퍼가 덮어써지는 경우 오버플로우 에러가 발생할 수 있습니다.
해결가능한 방법으로 아래의 항목들이 있습니다.

버퍼사이즈 증가
버퍼사이즈 증가 설정방법과 관련하여 다음 링크를 참조 KnowledgeBase 31T899KD: 연속수집또는유한수집에서버퍼사이즈할당방법

데이터를 자주 읽어오기

간혹 수집루프 내에서 연산을 수행하는 경우 수집루프의 속도를 느려지게 하는 원인이 될 수 있습니다. 수집된 데이터에 대해 데이터저장과 같은 연산작업을 광범위하게 처리하는 경우 또는 상당한 연산시간을 필요로 하는 방식으로 데이터를 디스플레이 하는 경우가 이에 속합니다. 또한 DAQmx Start Task VI와 DAQmx Read VI 사이의 시간이 너무 긴 경우에도 덮어쓰기 현상이 발생할 수 있습니다.

어플리케이션을 구성할 때 저장, 연산, 디스플레이등의 작업은 병렬루프를 구성하여 수집루프와 다른 루프에서 처리하는 것이 데이터를 더 자주 읽어오는 방법이 될 수 있습니다. 디자인패턴 중 하나인 생산자/소비자 패턴 관련 기술문서를 참고할 수 있습니다. 버퍼가 덮어써지는 것을 방지하기 위해 DAQmx Start Task VI 이후 수집루프가 바로 실행될 수 있도록 구성합니다.

더 많은 프로그래밍 옵션 확인을 위해 아래의 문제해결을 위한 추가적인 방법’ 부분에서 프로그래밍 컨셉과 예제코드를 참조.

읽을셈플개수를 고정으로 설정

에러 해결을 위해 읽을셈플 개수를 사용가능한 모든셈플 읽어오기’ 설정에서 고정크기 읽기’ 설정으로 변경.

명령을 완료하기위한 메모리가 충분하지 않습니다.
 
 
간혹 USB DAQ 장치를 사용하는 경우 또는 위에서 언급된 연산으로 인한 루프속도 저하’로 인해 발생되는 경우가 있습니다. 이러한 경우 DAQmx 읽기 프로퍼티 노드와 범위내 확인 및 강제변환 VI’를 사용하여 에러를 해결할 수 있습니다. (읽기 프로퍼티 노드의 상태’ -> ‘채널당 사용 가능한 셈플’ 프로퍼티 선택)
 
 
 
문제해결을 위한 추가적인 방법
연속수집 또는 버퍼를사용한 수집 데이터 덮어쓰기에러가 발생하지 않는지 확인을위해 버퍼 모니터링을 수행할 있습니다버퍼 채널당 사용가능한 셈플개수가 지속적으로 증가하는경우 셈플링속도를 낮추거나, 버퍼사이즈를 키우는 설정 또는 채널당 읽을 셈플개수를 증가시켜주는 방법이있습니다아래 그림과같이 버퍼모니터링 구현가능.
버퍼 덮어쓰기 에러의 경우 버퍼에 써지는 데이터의 속도가 읽기함수를 통해 읽어오는 데이터의 속도보다 더 빠른경우 발생합니다. 버퍼 underflow 에러의 경우는 읽기함수의 동작이 버퍼에 써지는 데이터의 속도보다 빠른경우 발생합니다. 이러한 에러를 방지하기 위해 읽을 데이터의 개수를 셈플링 속도의 약 1/10의 크기로 설정하는 것이 일반적인 방법입니다. 예를들어 초당 100개의 셈플을 수집하는 경우 읽을 셈플 개수는 10으로 설정하는 것입니다.
 
DAQmx 연속수집의 경우 데이터는 DAQmx읽기 VI를 통해 측정값이 버퍼에 기록됩니다. 버퍼에 쓰여지는 데이터는 DAQmx 태스크 시작 VI부터 DAQmx 태스크 정지 VI 또는 DAQmx Clear Task VI가 실행될 때 까지 계속됩니다. DAQmx 태스크 시작 VI가 실행되고 처음으로 DAQmx 읽기 함수가 실행되기 까지의 시간동안 버퍼는 데이터로 채워집니다. 만약 시작함수부터 읽기함수 까지의 시간간격이 너무 길어지는 경우 버퍼가 가득 차면서 DAQmx 읽기함수 실행 전 덮어쓰기에러’가 발생할 수 있습니다. (Error -200279)
 
덮어쓰기 에러는 Open File Dialog를 통해 데이터를 파일에 쓰는경우 자주 발생합니다. DAQmx시작함수가 Open File Dialog함수 이후에 실행될 수 있도록 에러라인으로 연결되어야 하지만, 그렇지 못한경우 파일경로를 지정하는 동안 버퍼에 데이터가 차면서 덮어쓰기에러가 발생하게 됩니다.
이 문제를 해결하기위해 Open File VI함수의 에러라인을 DAQmx 시작함수로 연결해 주어야합니다. 에러라인을 통한 실행순서 설정으로 파일경로를 지정하는 동안 버퍼에 데이터가 쌓이는 것을 방지할 수 있습니다.
 


관련 링크: KnowledgeBase 31T899KD: How Is the DAQmx Buffer Size Allocated for a Finite or Continuous Acquisition?
LabVIEW Help: Block Diagram Data Flow
White Paper: Application Design Patterns: Producer/Consumer
Knowledge Base 25LAM89M: Do I Lose the Data That Shows Up in the Scan Backlog During Continuous Data Acquisition?
White Paper: Getting Started with NI-DAQmx

첨부:





리포트 날짜: 10/26/2007
마지막 업데이트: 07/28/2015
문서 번호: 4EPF28F9