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 버퍼가 덮어써지는 경우 오버플로우 에러가 발생할 수 있습니다.
해결가능한 방법으로 아래의 항목들이 있습니다.
-
버퍼사이즈 증가
-
더 자주 데이터 읽어오기
-
읽을 셈플 개수를 고정으로 설정
-
문제해결을 위한 추가적인 방법
-
버퍼 모니터링
-
시그널익스프레스
-
프로그래밍 컨셉
-
예제 코드
버퍼사이즈 증가
데이터를 더 자주 읽어오기
간혹 수집루프 내에서 연산을 수행하는 경우 수집루프의 속도를 느려지게 하는 원인이 될 수 있습니다. 수집된 데이터에 대해 데이터저장과 같은 연산작업을 광범위하게 처리하는 경우 또는 상당한 연산시간을 필요로 하는 방식으로 데이터를 디스플레이 하는 경우가 이에 속합니다. 또한 DAQmx Start Task VI와 DAQmx Read VI 사이의 시간이 너무 긴 경우에도 덮어쓰기 현상이 발생할 수 있습니다.
어플리케이션을 구성할 때 저장, 연산, 디스플레이등의 작업은 병렬루프를 구성하여 수집루프와 다른 루프에서 처리하는 것이 데이터를 더 자주 읽어오는 방법이 될 수 있습니다. 디자인패턴 중 하나인 생산자/소비자 패턴 관련 기술문서를 참고할 수 있습니다. 버퍼가 덮어써지는 것을 방지하기 위해 DAQmx Start Task VI 이후 수집루프가 바로 실행될 수 있도록 구성합니다.
더 많은 프로그래밍 옵션 확인을 위해 아래의 ‘문제해결을 위한 추가적인 방법’ 부분에서 프로그래밍 컨셉과 예제코드를 참조.
읽을셈플개수를 고정으로 설정
에러 해결을 위해 읽을셈플 개수를 ‘사용가능한 모든셈플 읽어오기’ 설정에서 ‘고정크기 읽기’ 설정으로 변경.
이 명령을 완료하기위한 메모리가 충분하지 않습니다.
간혹 USB DAQ 장치를 사용하는 경우 또는 위에서 언급된 ‘연산으로 인한 루프속도 저하’로 인해 발생되는 경우가 있습니다. 이러한 경우 DAQmx 읽기 프로퍼티 노드와 ‘범위내 확인 및 강제변환 VI’를 사용하여 에러를 해결할 수 있습니다. (읽기 프로퍼티 노드의 ‘상태’ -> ‘채널당 사용 가능한 셈플’ 프로퍼티 선택)
문제해결을 위한 추가적인 방법
연속수집 또는 버퍼를사용한 수집 중 데이터 덮어쓰기에러가 발생하지 않는지 확인을위해 버퍼 모니터링을 수행할 수 있습니다. 버퍼내 ‘채널당 사용가능한 셈플’의개수가 지속적으로 증가하는경우 셈플링속도를 낮추거나, 버퍼사이즈를 키우는 설정 또는 채널당 읽을 셈플개수를 증가시켜주는 방법이있습니다. 아래 그림과같이 버퍼모니터링 구현가능.
- 버퍼에 남아있는 셈플의 크기를 가져오는경우 DAQmx 읽기 프로퍼티노드를 통해서만 확인가능합니다. 프로퍼티노드에서 ‘상태 -> 채널당 사용가능한 셈플’ 항목을 선택하여 출력을 확인합니다

- Traditional 버전의 NI-DAQ를사용하는경우 AI read함수의 Scan Backlog 출력을통해 버퍼에남은 셈플크기를 확인할수있습니다.
버퍼 덮어쓰기 에러의 경우 버퍼에 써지는 데이터의 속도가 읽기함수를 통해 읽어오는 데이터의 속도보다 더 빠른경우 발생합니다. 버퍼 underflow 에러의 경우는 읽기함수의 동작이 버퍼에 써지는 데이터의 속도보다 빠른경우 발생합니다. 이러한 에러를 방지하기 위해 읽을 데이터의 개수를 셈플링 속도의 약 1/10의 크기로 설정하는 것이 일반적인 방법입니다. 예를들어 초당 100개의 셈플을 수집하는 경우 읽을 셈플 개수는 10으로 설정하는 것입니다.
-
SignalExpress: Signal Express 와 LabVIEW는 다음 셈플들을 읽기에 앞서 버퍼로부터 각 셈플데이터 세트를 읽어옵니다. 따라서 연속수집 시 버퍼로부터 데이터를 읽어오는 시간보다 연산시간이 더 긴 경우 덮어쓰기 에러가 나타납니다. 아래에서는 후처리 연산의 속도증가를 통해 버퍼 덮어쓰기 에러를 방지하는 방법에 대해 설명합니다.
-
주파수분석과 관련된 연산을 하는경우 셈플링 속도 및 읽을 셈플 개수를 2의 거듭제곱 값으로 설정합니다. 이 방법은 주파수 분석 시 수학적 알고리즘에 근거하여 추천하는 설정 값입니다. ASC II 대신 TDMS형태로 파일을 저장합니다.
-
데이터 저장 시 ‘읽을셈플개수’를 증가 시킵니다. ‘읽을셈플개수’를 증가시키는 경우 컴퓨터에서 파일을 읽고 쓰는 횟수를 줄여 컴퓨터의 부하를 감소시킵니다.
-
많은양의 연산을 수행할 때 가장 간단한 형태로 수식을 구현합니다. 예를들어 익스프레스 VI를 사용하는 것 보다 로우레벨 함수를 사용하는 것이 더 효율적입니다.
-
가능한한 수집이 완료된 후 데이터를 수집하고 처리합니다.
-
프로그래밍컨셉랩뷰는 데이터흐름 언어입니다. 블록다이어그램 상의 위치와는 관계없이 함수의 모든 입력값이 받아지면 실행됩니다. 사용자에러 와이어를 입력으로 사용하여 실행 순서를 지정할 수 있습니다. VI A에서 VI B로 에러와이어가 연결 된 경우의 실행순서는
A의 실행 완료 후
B가 실행되어 집니다. LabVIEW의 데이터 흐름 관련 추가적인 정보는 다음 링크를 참조 바랍니다.
LabVIEW Help: Block Diagram Data Flow.
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 시작함수로 연결해 주어야합니다. 에러라인을 통한 실행순서 설정으로 파일경로를 지정하는 동안 버퍼에 데이터가 쌓이는 것을 방지할 수 있습니다.
-
예제코드
아래그림의경우 DAQmx시작함수와 Open Create Replace file VI 사이에 실행순서와관련한 어떠한 설정도 구성되지않은것을 볼 수 있습니다. 그로인해 파일경로를 지정하는동안 버퍼에 데이터가차면서 덮어쓰기에러가 발생할 수 있습니다. 아래와같은 코드구성은 잘못된 구성입니다.

-
아래 두번째 코드의 경우 에러라인을 통해 DAQmx 시작함수와 Open Create Replace file VI 사이에 실행순서를 설정해 주었습니다. 이로 인해 경로를 지정하는 동안 버퍼에 데이터가 쌓이는 것을 방지 할 수 있습니다. 이 연결구성이 덮어쓰기에러를 방지하기위한 코드가 되겠습니다.

관련 링크: KnowledgeBase 31T899KD: How Is the DAQmx Buffer Size Allocated for a Finite or Continuous Acquisition?LabVIEW Help: Block Diagram Data FlowWhite Paper: Application Design Patterns: Producer/ConsumerKnowledge 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