解決策
このエラーは、DAQデバイスがデータの収集を停止した後にDAQmx 読み取りVIがデータを収集しようとしたときに発生します。
このエラーの一般的な発生の1つは、タスクが有限収集用に構成されているにも関わらず、DAQmx読み取りVIがWhileループ内で使用される場合です。DAQmxタイミングVIのサンプルモード入力が有限サンプルに設定されている場合、DAQデバイスは設定したサンプル数のデータを一度に収集するため、DAQmx読み取りVIが再度呼び出されるとデータ収集を停止して、エラー-200278を返します。
メモ: DAQmxタイミングVIのサンプルモード入力を明示的に設定しない場合、デフォルト値は有限サンプルです。連続サンプルを希望する場合は、この入力を明示的に構成する必要があります。
このエラーを解決するための解決策がいくつかあります。
解決策 1: Whileループを削除する
有限収集を実行している場合、有限の期間で設定したサンプル数の単一配列のみを収集しているため、Whileループはほとんど不要です。この場合、最も簡単な解決策は、下図のサンプルコードのように、Whileループを削除することです。
解決策 2: 連続サンプルモードに構成する
Whileループが必要な場合、別の解決策は有限サンプルではなく連続サンプルモードにタスクを構成することです。このオプションが選択されると、DAQデバイスはタスクが明示的に停止されるまでデータ収集を続けます。
解決策 3: Whileループで収集を再スタートする
有限サンプルモードでWhileループを使用する必要がある場合、最初の読み取りが完了した後、データの取得を継続するにはタスクを再スタートする必要があります。これは、下図のサンプルコードのように、ループ内でタスクを開始および停止することで実現できます。
メモ: パフォーマンスを改善するには、上図に示すように、Whileループに入る前にDAQmxタスクを手動でコミット状態に移行する必要があります。コミット状態およびその他のDAQmxタスク状態の詳細については、NI-DAQmxヘルプ:タスク状態モデルを参照してください。
解決策 4: Whileループ内でDAQmxタスク完了確認VIを使用する
場合によっては、収集が完了する前にすべての有限サンプルからサブセット(一部のデータ)を取得する必要があります。この場合、収集するサンプルの総数より少ないサンプル数を手動で指定できます。
下図のサンプルコードでは、DAQmx読み取りプロパティのステータス>>チャンネル毎の有効なサンプル数を使用して、現在DAQmxバッファにあるサンプル数を判断し、その時点でバッファで使用可能なサンプル数の読み取り要求を行います。
DAQmx読み取りVIが呼び出された後、DAQmxタスク関数確認VIは、有限収集が完了したかどうかを判断するために使用されます。