NI-DAQmxは、バッファなしで継続的に集録または生成されるハードウェアタイミングによるシングルポイントサンプルモードをサポートします。確定的な周期での入力や出力を必要とする制御アプリケーションには、ハードウェアタイミングによるシングルポイントモードがLabVIEW Real-Timeプラットフォームで一般的に使用されます。ソフトウェア操作がハードウェアタイミングに追いついているかどうかを確認するには、遅延チェックが必要です。NI-DAQmx 7.4で導入された変更により、リアルタイムプラットフォームのハードウェアタイミングによるシングルポイント操作を実行する場合の柔軟性が向上しました。NI-DAQmx 7.4以降では遅延チェックに関する以下の3つのオプションがあります。
1)厳密な遅延チェック(次のサンプルクロックまで待機)
2)FIFOオーバーフロー遅延チェック(見過ごしたサンプルを報告)
3)遅延チェックなし
このチュートリアルでは、この3つの遅延チェックモードを説明します。また、NI-DAQmx 7.4の新機能の使用方法を示すサンプルアプリケーションも用意されています。このアプリケーションは、シングルポイントのNI-DAQmxタスクを使用するリアルタイムアプリケーションでの共通の要件に基づいています。これらのサンプルは、基本的なサンプルでより複雑なアプリケーション設計の参考になります。このサンプルは制御アプリケーションに関するものですが、Hardware-in-the-Loop(HIL)、イベント応答タスク、インライン信号操作など、その他のシングルポイントアプリケーションにも適用できます。
各アプリケーション例は、NI-DAQmx 7.4の新機能に加えて、特定のサンプルアプリケーションの使用方法、およびタイミング図、LabVIEWブロックダイアグラムを説明します。また、実装の詳細、最適化、エラー条件の詳細情報も記載されています。
NI-DAQmx 7.4以降には、「DAQmx 次のサンプルクロックまで待機(Wait For Next Sample Clock)」VIがあります。これは、ハードウェアタイミングによるシングルポイントタスクで確実にハードウェア層とソフトウェア層を同期化します。このVIは、ブロックダイアグラムの実行をハードウェア信号(指定タスクのサンプルクロックなど)に関連付け、制御ループのリアルタイム実行全体に対するフィードバックを提供します。
図1. 「DAQmx次のサンプルクロックまで待機」VI
「DAQmx次のサンプルクロックまで待機」VIは、配線されたタスクに次のサンプルクロックパルスが発生するまで待機します。このVIの呼び出しの間に余分なサンプルクロックパルスが発生する場合、次の呼び出しはエラーまたは警告を返し、次のサンプルクロックパルスを待機します。その他のDAQmx関数の後に「DAQmx次のサンプルクロックまで待機」VIを配置して呼び出すと、このVIに配線されたタスクの次のサンプルクロックまですべての関数が実行完了するかを確認できます。このVIの詳細については、『NI-DAQmxヘルプ』を参照してください。
メモ: 柔軟性が向上したことにより、NI-DAQmx 7.4以降では、NI-DAQmx 7.3に含まれている「DAQmx読み書き遅延チェック(DAQmx Is Read or Write Late)」VIを使用する場合は、動作が変わります。NI-DAQmx 7.4以降では、「DAQmx読み書き遅延チェック」VIは遅延チェックを実行しません。「DAQmx読み書き遅延チェック」VIが使用されているアプリケーションでは、配置されていもプログラムは実行しますが、遅延エラーや遅延警告は通知されません。「DAQmx次のサンプルクロックまで待機」VIに置換するか、またはこのチュートリアルに記載されている別の方法をお勧めします。
厳密な遅延チェックを行う別の方法は、DAQmx Real-Timeプロパティノードの「見過ごしたサンプルを報告」プロパティを使用します。ハードウェアタイミングによるシングルポイントアナログ入力に対してこのプロパティをTRUEに設定すると、「DAQmx読み取り」VIでFIFOにサンプルがあるどうかをチェックします。FIFOにサンプルがある場合、「DAQmx読み取り」VIはソフトウェアがハードウェアレートに追いついていないことを示すエラーを返します。この遅延チェックは、アナログ入力操作の遅延のみを確認し、アナログ入力タスクに関連するその他の操作が完了したかは確認しません。
図2. DAQmx Real-Timeプロパティノード
メモ: 「見過ごしたサンプルを報告」プロパティはハードウェアタイミングによるシングルポイントアナログ入力のタスクのみサポートされています。このプロパティは、「DAQmx次のサンプルクロックまで待機」VIと一緒に使用しないでください。
3番目の方法は、「DAQmx次のサンプルクロックまで待機」VIや「見過ごしたサンプルを報告」プロパティを使用せず、遅延チェックを実行しない方法です。このモードでは、NI-DAQmxは遅延チェックを行わないので、NI-DAQmx関数によるソフトウェアがハードウェアレートに追いついていないことを示すエラーや警告も報告されません。上級ユーザの方にはパフォーマンスを向上できますが、システムがハードウェアレートに追いついていることを確認する外部ハードウェアが必要となります。
要件
入出力タスクをハードウェアタイミングで制御する必要があります。サンプルクロックエッジが検出されると同時に出力値を更新しなければなりません。
解決法
「DAQmx次のサンプルクロックまで待機」VIを使用して、新しいサンプルクロックエッジが発生したかどうかを確認します。
利点
制約事項
読み取り、処理、書き込みの各操作は、デバイスがデータの集録を開始した時間から次のサンプルクロックエッジの検出までの時間内に行われる必要があります。
サンプルアプリケーション
このようなアプリケーション例として、特定の数のアナログ入力チャンネルからサンプルを読み取り、制御アルゴリズム(PIDなど)でデータを処理し、新しい値をアナログ出力チャンネルに書き込むアナログ制御ループが挙げられます。
図3.タイミング図
実装例
図4. ブロックダイアグラムの例
メモ
要件
入出力タスクをハードウェアタイミングで制御する必要があります。サンプルクロックエッジが検出されると同時に出力値を更新しなければなりません。また、タイムクリティカルループとそれより優先度の低いプロセスとの間でデータを交換する必要があります。
解決法
利点
制約事項
読み取り、処理、書き込みの各操作は、デバイスがデータの集録を開始した時間から次のサンプルクロックエッジの検出までの時間内に行われる必要があります。
サンプルアプリケーション
このようなアプリケーション例には、特定の数のアナログ入力チャンネルからサンプルを読み取り、制御アルゴリズム(PIDなど)でデータを処理して新しい値をアナログ出力チャンネルに書き込むアナログ制御ループが挙げられます。アプリケーションでは、優先度の低いプロセスから受け取るブール値に基づいて制御ループを停止するために、リアルタイムFIFOが使用されます。同様に、リアルタイムFIFOを使用して、PIDパラメータを動的に変更したり、集録したデータや制御出力値を優先度の低いプロセスへ転送してデータログ作成やリモート監視を行うこともできます。
図5. タイミング図
実装例
図6. ブロックダイアグラムの例
メモ
要件
アナログ入力タスクをハードウェアタイミングで制御する必要があります。出力タスクは、サンプルクロックエッジでハードウェア同期を行う必要がありません。
解決法
DAQmx Real-Time→見過ごしたサンプルを報告プロパティを使用します。これにより、読み取り操作にて1つ前のサンプルのA/D変換が、次のサンプルが読み取られる前に完了しない場合、エラーを返します。
利点
制約事項
出力の更新はハードウェアタイミングに基づいていないため、ソフトウェアジッタの影響を受けます。
サンプルアプリケーション
このようなアプリケーション例として、特定の数のマルチプレクサを用いたアナログ入力チャンネルからサンプルを読み取り、制御アルゴリズム(PIDなど)でデータを処理してソフトウェアタイミングタスクによって新しい値をアナログ出力チャンネルに書き込むアナログ制御ループが挙げられます。
図7. タイミング図
実装例
図8. ブロックダイアグラムの例
メモ
要件
ハードウェアタイミングによるカウンタ入力操作を使用して、この制御ループを駆動します。
解決法
「DAQmx次のサンプルクロックまで待機」VIを使用して、カウンタ操作をカウンタのサンプルクロックと同期させます。
利点
制約事項
読み取り、処理、書き込みの各操作は、デバイスがデータの集録を開始した時間から次のサンプルクロックエッジの検出までの時間内に行われる必要があります。
サンプルアプリケーション1
このようなアプリケーション例には、デジタルラインをあからじめ定義された制御論理に基づいて制御しながらエッジをカウントエッジするカウンタ入力タスクを実行する制御ループが挙げられます。このアプリケーション例は、リアルタイムFIFOを介して通信を実行します。
図9. タイミング図
実装例
図10. ブロックダイアグラムの例
サンプルアプリケーション2
別のアプリケーション例として、パルス周波数モードでパルス幅変調(PWM)を生成し、制御信号を離散的な入力を監視してその値によってカウンタ出力タスクを更新する制御ループが挙げられます。このサンプルアプリケーションは、リアルタイムFIFOを介して通信します。
図11. タイミング図
実装例
図12. ブロックダイアグラムの例
メモ
要件
この入出力タスクはハードウェアタイミングをサポートしていません。
解決法
タイミングループを使用して、タイミング重視のループにソフトウェアタイミングを適用します。オンデマンドタイミングでNI-DAQmxタスクを使用するように構成します。
利点
制約事項
入出力サンプルがソフトウェアジッタの影響を受けます。
サンプルアプリケーション
このようなアプリケーション例には、デジタルI/O制御ループが挙げられます。アプリケーションは、複数の離散的な入力の状態を監視し、対応する出力を制御アルゴリズムに基づいて切り替えます。ハードウェアタイミングは、NI-DAQmxのシングルポイントデジタルI/Oタスクでは使用できません。
図13. タイミング図
実装例
図14. ブロックダイアグラムの例
メモ
要件
入出力タスクをハードウェアタイミングで制御する必要があります。サンプルクロックエッジが検出されると同時に出力値を更新しなければなりません。ただし、このアプリケーションでタイミングループも使用します。
解決法
「DAQmxタイミングソースを作成(Create Timing Source)」VIを使用して、I/O操作と制御アルゴリズムを含むタイミングループを駆動するタイミングソースを作成します。
利点
制限事項
通常のLabVIEW Whileループと比較して負荷が多少増加します。
サンプルアプリケーション
このようなアプリケーション例には、特定の数のアナログ入力チャンネルからサンプルを読み取り、制御アルゴリズム(PIDなど)でデータを処理して新しい値をアナログ出力チャンネルに書き込むアナログ制御ループが挙げられます。
図15. タイミング図
実装例
図16. ブロック図16. ブロックダイアグラムの例
メモ