• 要件—ハードウェアタイミングによるカウンタ入力操作を使用して、制御ループを駆動します。
  • 解決法—「DAQmx次のサンプリングクロックまで待機」関数/VIを使用して、カウンタ操作をカウンタのサンプリングクロックと同期化します。

    利点

    • カウンタタスクにおいて、制御ループのソフトウェア処理を実行する柔軟なタイミングとイベント検出が可能になります。つまり、制御ループで動的なクロックレートを使用できます。
    • 「DAQmx次のサンプリングクロックまで待機」関数/VIが次のサンプリングクロックエッジが検出される前に開始されないと、NI-DAQmxによってエラーが返されます。

    制約事項

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

  • サンプルアプリケーション: ハードウェアタイミングによるカウンタタスク

    このようなアプリケーションの例には、デジタルラインを事前定義された制御論理に基づいて制御しながらカウントエッジなどのカウンタ入力タスクを実行する制御ループが挙げられます。このサンプルアプリケーションは、リアルタイムFIFOを介して通信します。LabWindows/CVIでは、リアルタイムFIFOの代わりにスレッドセーフキューを使用します。

    タイミングダイアグラム



    サンプルアプリケーション2: ハードウェアタイミングによるカウンタタスク

    別のアプリケーションの例として、パルス周波数モードでパルス幅モジュレーションを生成することで、制御信号を離散的な入力を監視してその値によってカウンタ出力タスクを更新する制御ループが挙げられます。このサンプルアプリケーションは、リアルタイムFIFOを介して通信します。LabWindows/CVIでは、リアルタイムFIFOの代わりにスレッドセーフキューを使用します。

    タイミングダイアグラム



    LabVIEWの例: ハードウェアタイミングによるカウンタタスク

    メモ このサンプルはLabVIEWユーザ向けに書かれていますが、基本的な概念はLabWindows/CVIなどの他のアプリケーション開発環境にも共通します。
    • 「DAQmx次のサンプリングクロックまで待機」VIをカウンタ入力タスクに配線します。
    • 「DAQmx次のサンプリングクロックまで待機」VIが次のサンプリングクロックエッジ検出前に実行されると、NI-DAQmxによってエラーが返されます。

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



    サンプル2

    • 「DAQmx次のサンプリングクロックまで待機」VIをカウンタ出力タスクに配線します。
    • 「DAQmx次のサンプリングクロックまで待機」VIが次のサンプリングクロックエッジ検出前に実行されないと、NI-DAQmxによってエラーが返されます。

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



    メモ
    • LabVIEWループ内では、「DAQmx次のサンプリングクロックまで待機」VIは1つしか使用できません。1つのループ内に複数のハードウェアタイミングI/Oタスクを配置した場合、「DAQmx次のサンプリングクロックまで待機」VIをそのループ内のハードウェアタイミングシングルポイントタスクに接続できません。
    • サイクルのオーバーフローが発生した場合にエラーではなく警告が発信されるようにするには、DAQmx Real-Time→遅延エラーを警告に変換プロパティをTRUEに設定します。
    • ハードウェアタイミングによるカウンタ操作では、マルチプレクスアナログ入力のような変換時間がありません。したがって、リアルタイムFIFOはLabVIEWループ内のどこにでも配置できます。
    • NI-DAQmxでは、カウンタ書き込み実行中にサンプリングクロックエッジが検出できなかった場合に復旧するためのメカニズムがあります。この書き込み復旧メカニズムが正常に完了しないと、NI-DAQmxはエラーを返し、そのタスクの後続の操作がハードウェアタイミングで実行されなくなります。
    • DAQmx Real-Time→書き込み回復モードプロパティでは、復旧メカニズムのモードを割り込みまで待機かポーリングのどちらかで選択できます。デフォルトである割り込みまで待機するモードでは、NI-DAQmxの復旧中に優先度の低いプロセスを実行することができます。一方ポーリングモードでは、サンプリングレートを高速に設定できます。