• 要件—入出力タスクをハードウェアタイミングで制御する必要があります。サンプリングクロックエッジが検出されると同時に出力値を更新しなければなりません。
  • 解決法—「DAQmx次のサンプリングクロックまで待機」関数/VIを使用して、新しいサンプリングクロックエッジが発生したかどうかを確認します。

    利点

    • 現在の反復の出力サンプルは、次の反復の入力サンプルと確実に一致します。
    • 「DAQmx次のサンプリングクロックまで待機」関数/VIが次のサンプリングクロックエッジが発生する前に開始されると、NI-DAQmxによってエラーが返されます。
    • 入出力ジッタがハードウェアクロックの数ナノ秒のジッタの範囲内になります。

    制約事項

    読み取り、処理、書き込みの各操作は、デバイスがデータの集録を開始した時間から次のサンプリングクロックエッジの検出までの時間内に行われる必要があります。

  • サンプルアプリケーション: ハードウェアタイミングによる入出力同時アップデート

    この種類のアプリケーションの例には、特定の数のアナログ入力チャンネルからサンプルを読み取り、制御アルゴリズム (PIDなど) でデータを処理し、新しい値をアナログ出力チャンネルに書き込むアナログ制御ループが挙げられます。



    LabVIEWサンプル: ハードウェアタイミングによる入出力同時アップデート

    メモ このサンプルはLabVIEWユーザ向けに書かれていますが、基本的な概念はLabWindows/CVIなどの他のアプリケーション開発環境にも共通します。

    LabVIEWサンプル

    • 「DAQmx次のサンプリングクロックまで待機」VIをハードウェアタイミングタスクに配線します。データフローの配線により、「DAQmx次のサンプリングクロックまで待機」VIが必ずAO書き込み関数の呼び出し後に実行されるようにすることができます。
    • 「DAQmx次のサンプリングクロックまで待機」VIが次のサンプリングクロックエッジ検出前に開始されないと、NI-DAQmxによってエラーが返されます。

    サンプルブロックダイアグラム



    メモ
    • LabVIEWループ内では、「DAQmx次のサンプリングクロックまで待機」VIは1つしか使用できません。1つのループ内に複数のハードウェアタイミングシングルポイントI/Oタスクを配置した場合、「DAQmx次のサンプリングクロックまで待機」VIをそのループ内のハードウェアタイミングシングルポイントタスクの1つに接続してください。
    • サイクルのオーバーフローが発生した場合にエラーではなく警告が発信されるようにするには、DAQmx Real-Time→遅延エラーを警告に変換プロパティをTRUEに設定します。
    • 「DAQmx次のサンプリングクロックまで待機」VIには、ポーリングモードと割り込みまで待機するモードの2つのモードがあります。これらの値を変更するには、DAQmx Real-Time→次のサンプリングクロック待機モードまで待機プロパティを使用します。デフォルトである割り込みまで待機するモードでは、タイムクリティカルループが次のサンプリングクロックを待機している間に、優先度の低いプロセスを実行することができます。ポーリングモードでは、高いサンプリングレートを指定できますが、タイムクリティカルループが次のサンプリングクロックを待機している間に、優先度の低いプロセスを実行することができません。
    • アナログDAQmx読み取りVIのアナログインスタンスには、ポーリングモードと割り込みまで待機するモードの2つのモードがあります。これらの値を変更するには、DAQmx読み取り→上級→待機モードプロパティを使用します。割り込みまで待機するモードでは、タイムクリティカルループが要求されたサンプル変換の完了を待機している間に、優先度の低いプロセスを実行することができます。ポーリングモードでは、高いサンプリングレートを指定できますが、タイムクリティカルループが要求されたサンプル変換の完了を待機している間に、優先度の低いプロセスを実行することができません。
    • このセクションで示すアプリケーションでは、「DAQmx次のサンプリングクロックまで待機」VIとDAQmx読み取りVIのアナログインスタンスの両方が割り込みまで待機するモードに設定されています。この設定を変更するには、DAQmx読み取り→上級→待機モードプロパティ、DAQmx Real-Time→次のサンプリングクロック待機モードまで待機プロパティを使用します。