DAQmx読み取りまたはプロパティノードでLabVIEWエラー-200279が発生する

更新しました Nov 14, 2023

使用製品

ハードウェア

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

ソフトウェア

  • LabVIEW

ドライバ

  • NI-DAQmx

問題

データを連続的に収集するためにLabVIEWでDAQmx読み取りを使用してDAQmxアプリケーションを実行すると、次のエラーが発生します。


エラーコード -200279がDAQmx Read (Analog 1D Wfm NChan NSamp).viで発生

考えられる理由:
アプリケーションがハードウェア集録に追いついていません。
  利用できるすべてのサンプルを読み取る代わりに、バッファサイズを増やす、データをより頻繁に読み取る、または固定のサンプル数を指定して読み取るのいずれかを行うと、問題が解決される可能性があります。


このエラーの原因とその解決方法を教えてください。

解決策


通常、データはDAQmx PCバッファにおいて次の2つの理由のいずれかで上書きされます。

連続サンプリングされたDAQmxアプリケーションの読み取り速度はサンプルレートより遅く、上書きが発生するまでDAQmx PCバッファにサンプルが蓄積されます。

エラー-200279は、多くの場合、DAQmxタスクが以下のDAQmxタイミングVIで指定されたサンプルレートより遅い読み取り速度による結果です。

このエラーをトラブルシューティングする際には、アプリケーションの読み取り速度とサンプルレートが同じであることを確認する必要があります。

DAQmxアプリケーションの読み取り速度は、DAQmx読み取りVIで要求しているサンプル数のほかに、DAQmx読み取りVIがすぐに呼び出された回数の両方に依存しているため、DAQmx読み取りVIで必要なサンプル数を明示的に制御するか、下図のようにDAQmx読み取りVIを含むwhileループがWait(ms)関数などを使用して1秒間に実行される回数を明示的に制御することで読み取り速度を調整することができます。

メモ: DAQmx読み取りVIは、要求されたサンプル数が使用可能になるまで自動的に待機するため、通常特定のアプリケーションでこれらの要因の1つを制御するだけで構いません。

Whileループが予想よりも遅く実行されている場合は、ロギング、後処理、解析、ユーザーインターフェイス(UI)機能などの他のプロセスを収集ループ外に移動するために、生産者/消費者アーキテクチャを実装する必要があります 。 

基本的な生産者/消費者アーキテクチャの実装方法の詳細については、Application Design Patterns: Producer/Consumerを参照してください。 

Whileループのパフォーマンスを向上させることができない場合は、代わりにアプリケーションのサンプルレートを下げる必要があります。

DAQmx読み取りVIを含むコードで実行のハイライトを使用しないでください。実行が遅くなり、バッファオーバーフローが発生します。


DAQmx PCバッファが小さすぎるためタスクに必要なデータ量が保持されず、DAQmx PCバッファに上書きされてデータが全く収集されません。

このエラーは、ホスト側のデータバッファのサイズを手動で大きくすることによって解決することがあります。ただし、データがDAQmxバッファから十分に速く読み取られないためにエラーが発生している場合(理由1を参照)、バッファサイズを大きくするとエラーの発生が遅れるだけで完全に除去されません 。

バッファサイズを増やす方法については、DAQmx Buffer Size Allocation for Finite or Continuous Acquisitionを参照してください。

追加情報

DAQmxアプリケーションの読み取り速度は、読み取りごとに収集されるサンプル数と1秒あたりにおける読み取り数の2つの要因によって決まります。

読み取り速度とサンプルレートを同じに設定しても、プログラムは期待どおりの速度で実行できない場合があります。これはwhileループ内で処理していることが多く、各反復に予想以上の時間がかかる場合に発生します。これにより、DAQmx読み取りが期待どおりに行われず、サンプルがバッファに溜まります。以下に示すようなループベンチマーク手法を使用して、whileループが実際に期待される速度で実行されていることを確認できます。
 

追加のトラブルシューティングの考慮事項:

有限サンプリングと連続サンプリング
アプリケーションによっては、連続サンプリングを必要とせず、読み取り時に有限数のサンプルだけで事足りる場合があります。この場合、DAQmxタイミングVIのサンプルモードを連続サンプルの代わり、有限サンプルに設定することを検討することができます。この構成では、サンプルが利用可能になるまでにすべてのループサイクルが待機します(つまり、1 kHzで100サンプルを読み取ると、読み取り時に0.1秒待つことになります)。これは、サンプルが読み取り間に失われ、読み取りが呼び出されるとすぐにサンプルが使用できなくなることを意味します。 ただし、上記のシナリオ2が発生していない限り、これによりエラーが軽減されます。

DAQmxプロパティノードによるバッファ監視
バッファリングされた連続収集中に、現在の構成がバッファにどのように影響するかについての詳細情報を得る目的でバッファを監視することができます。収集中に利用可能な要素数が連続的に増加する場合は、最終的にバッファがあふれないように、上記のアクションの1つを行います。バッファで使用可能なデータ量を監視するには、DAQmx読み取りプロパティノードを使用して、ステータス:チャンネル毎の有効なサンプル数プロパティを読み取ります。

LabVIEWデータフローを制御して上書きエラーを回避する
LabVIEWはデータフロー言語であり、ブロックダイアグラム上の位置に関係なく、VIまたは構造体がすべての入力を受け取るとすぐに実行できることを意味します。エラーワイヤを入力として使用して、VIまたは構造体が別のものよりも先に実行されないようにする手法は、この手法で役立ちます。エラーワイヤがVI AをVI Bに接続する場合、Aが実行され、エラークラスタがAからBに渡されるまで、Bは必要な入力をすべて保持しません。LabVIEWのデータフローの詳細については、LabVIEWヘルプ: ブロックダイアグラムのデータフローを参照してください

連続的なDAQmx収集では、DAQmxタスクを開始VIが実行されてからDAQmxタスクを停止VIまたはDAQmxタスクをクリアVIが実行されるまで、バッファにデータが書き込まれます。DAQmxタスクを開始VIが実行されてから最初のDAQmx読み取りVIが実行されるまでの間、DAQmx PCバッファはデータで満たされています。この間隔が長すぎると、バッファが完全に満たされ、DAQmx読み取りVIがバッファからデータを取り出す前に初期データが上書きされて、エラー-200279が発生します。

以下のコードスニペットは、データフローの実行によってバッファオーバーフローエラーが発生する一般的なシナリオを示しています。最初のスニペットでは、DAQmxタスクを開始VIがファイルを開く/作成/置換VI(ポップアップダイアログを表示する)の後に実行されるという保証はないため、ファイルを選択している間に測定値はバッファをいっぱいにして、PCバッファを上書きする可能性があります。

この問題を回避するには、2番目のスニペットのとおりに各関数のエラー入力と出力端子を接続して、ファイルを開く/作成/置換VIの実行が完了した後でDAQmxタスクを開始VIが実行されるようにします。

ダイナミック信号収集(DSA)デバイスのサンプルレート
ナショナルインスツルメンツのDSAデバイスは、ノイズをシェーピングし歪みを低減することにより信号の完全性を最大限にする24ビットのデルタシグマ型アナログ-デジタルコンバータ(ADC)を使用します。これらの特化されたADCは、いくつかの利用可能なサンプルレートを達成するために離散的整数倍で分割されたマスタタイムベースを使用します。その結果、すべてのDSAデバイスには利用可能なサンプルレートの数が限られています。 

たとえば、NI 9234には合計31個のサンプルレートがあり、最小サンプルレートは1.652 kS/sです。使用可能なサンプルレート値および数はDSAデバイスによって異なり、デバイス仕様マニュアルに記載されています。

NI 9234デバイスのサンプルレートがDAQmxタイミングVIまたはプロパティノードを使用して最小レートより下に設定されている場合、実際のサンプルレートはDAQmx APIのバックグラウンドでデバイスに使用可能な最小レートまで強制されます。したがって、実際に発生しているよりもはるかに低いサンプルレートで収集されている可能性があります。その結果、エラー-200279が発生する可能性があります。 

データ収集にDSAデバイスを使用している場合、可能なサンプリングレートを考慮し、アプリケーションを適切に設計してください。

メモ: DAQmxタイミングプロパティノードを使用し、サンプルクロック:レートプロパティを読み取り、DAQmxタイミングVIで設定されたレートに関係なく、デバイスが実際に使用しているサンプルレートを確認してください。