解決策
データの読み取りには、2つの側面があります。実際の信号がどれくらい速くデジタル化されているか(どのくらい速度が速いのか?)、ハードウェアFIFOから一度にソフトウェアがどれだけのデータを取り出すか(どれくらい量なのか?)の2点です。これらのハードウェアとソフトウェアの構成は相互に依存しています。
ハードウェア側では、DAQmxタイミング関数はデバイス/センサからデータ収集デバイス上にあるハードウェアFIFOへのデータフローのレートを決定します。ソフトウェア側では、DAQmx読み取り関数はPCバッファからソフトウェアへのデータ転送を決定します。下図を参照してください。
Part 1: デバイス/センサからDAQデバイス上にあるハードウェアFIFOへ
概要DAQmxタイミング関数は、デバイスからサンプルを取得する回数とレートを制御します。この関数は、有限、連続、およびハードウェアタイミングシングルポイントの3つの異なるサンプルモードがあります。どのモードを選択するかで取得できるサンプル数が変わります。
DAQmxタイミング関数は、多態性VIです。ここで説明するインスタンスは
サンプルクロックです。DAQmxタイミング関数における他のインスタンスの詳細については、
DAQmxヘルプを参照してください。
どれくらい量なのか?有限集録の場合、DAQmxタイミング関数の
サンプル/チャンネル入力は、各チャンネルで読み取られるサンプル数を決定します。つまり、
サンプル/チャンネルは収集されるデータのチャンクサイズを設定します。
連続取得の場合、チャンネルごとのサンプルは各チャンネルに指定されたPCバッファのサイズを決定します。
連続集録の場合、
サンプル/チャンネルは各チャンネルに指定されたPCバッファのサイズを決定します。
どのくらい速いのか?DAQmxタイミング関数の
レート入力は、サンプルが取得され、ハードウェアFIFOに置かれる速度を決定します。レートを指定する値は、DAQmxタイミング関数のソース入力で指定されたタイムベースに依存します。指定されたレートは、ソースの除数でなければなりません。 たとえば、Xシリーズデバイスにおけるデフォルトのソースは、オンボードクロック(100 MHz)です。取得可能な取得レートの詳細については、
DAQデバイスは実際にどの程度のサンプルレートまで設定できますか? および
LabVIEWでDAQデバイスが指定したサンプルレートでサンプリングされない、または
Xシリーズユーザマニュアルの9-1ページを参照してください。
Part 2: ハードウェアFIFOからPCバッファおよびプログラミング環境へ
どれくらい量なのか?DAQmx読み取り関数の
サンプル/チャンネル入力数は、PCバッファからプログラミング環境に取得するサンプル数を決定します。選択されたデータ転送メカニズム(DMA、割り込み、プログラムI/O、またはUSBバルク)は、サンプルが実際にハードウェアFIFOからPCバッファへどのように転送するのかを決定します。詳細については、
NI-DAQmxヘルプ: データ転送メカニズムを参照してください。プログラムI/O方式を使用する場合、DAQmx読み取り関数はハードウェアFIFO自体から直接サンプルを取得します。ハードウェアタイミングである他のすべての転送メカニズムを使用する場合、サンプル数はDAQmxタイミング関数で指定されたレートの1/10にすることを推奨します。たとえば、DAQmxタイミング関数のレート入力が1000(Hz)の場合、DAQmx読み取り関数のサンプル/チャンネル数は100を超えないようにしてください。これは、PCバッファの上書きまたはアンダーライトエラーにならないようにするためです。
メモ: サンプル/チャンネル入力は、DAQmx読み取り関数で複数サンプルを読み取るように設定されている場合にのみ利用できます。
収集が有限サンプル(DAQmxタイミング関数のサンプルモード入力)に設定しており、
サンプル/チャンネル数が
-1である、未配線、または設定されていない場合、DAQmx読み取り関数はすべてのサンプルをPCバッファに格納して読み取るまで待機します。取得モードが連続サンプルである場合、現在PCバッファ内で使用可能なすべてのサンプルが読み取られます。
どのくらい速いのか?データ転送メカニズムをプログラムI/Oとして実行する場合、DAQデバイス上のハードウェアFIFOからプログラミング環境にサンプルを読み取る速度は、読み取り関数が呼び出される頻度に依存します。DAQmx読み取り関数はよくwhileループ内にあるため、DAQmx読み取り関数の実行頻度はループレートによって決まります。ソフトウェアの速度は、プロセッサ速度および同時に存在しているプロセス数にも依存します。他のデータ転送メカニズムを使用する場合、サンプルがハードウェアFIFOからPCバッファに取り込まれる速度は、プログラムの実行速度とは無関係です。このような理由で、PCバッファの使用を強制するプログラムI/Oメカニズム以外のメカニズムを使用することがしばしば望ましく、DAQmx読み取り関数が読み取りのために複数のサンプルを適時保存することができます。
まとめどのくらいの速度でデータを収集するかを決定する際には、収集に対して両方のステップが合意されなければならないことに留意してください。データがハードウェアFIFOからPCバッファに転送される速度は、データがハードウェアFIFO自体に取得される速度と比較して、速すぎたり遅すぎたりしてはいけません。速すぎる場合や遅すぎる場合は、PCバッファエラーが発生します。バッファエラーの詳細については、
NI-DAQmx上書きおよびオーバーフローエラーの理解と回避方法を参照してください。