RTターゲットのリアルタイムオペレーティングシステム (RTOS) はプリエンプティブであるため、確定的タスクによってターゲットのプロセッサが占有される可能性があります。このような場合、確定的タスクによってすべてのプロセッサリソースが使用され、非確定的タスクが実行できなくなります。確定的タスクを非確定的タスクと分けることで、確定的タスクの確定性を維持しながら非確定的タスクを適宜実行するためのタイミング手法を使用することができます。

Real-TimeタイミングVI、タイミングストラクチャまたは外部タイミングソースを使用してループの実行レートを設定し、ループを制御できます。

メモ RTターゲットによっては、ミリ秒タイミングエンジンを自動的に無効にするものもあります。詳細については、各RTターゲットのドキュメントを参照してください。
メモ Real-Timeモジュール8.0より前のバージョンでは、ミリ秒タイミングエンジンに0.07%のエラーがありました。アプリケーションが0.07%のエラーに対処するコードを含む場合は、このコードを削除するか、Real-Timeモジュール8.0より前のバージョンの動作を有効にする必要があります。このタスクの情報については、技術サポートデータベースを参照してください。

Real-TimeタイミングVIで制御ループのタイミングを設定する

RTターゲットのループのタイミングを設定するには、Real-TimeタイミングVIである「待機」と「次の倍数まで待機」を使用します。Real-TimeタイミングVIによって、RTターゲットで実行するRTOSのミリ秒またはマイクロ秒タイマを使用してループの分解能を制御できます。

「待機」VI

「待機」VIは、VIを指定した時間だけスリープ状態にします。たとえば、RTターゲットで実行するVIで、「待機」VIのカウンタ単位をミリ秒に設定して使用すると、ループレートを最大1 kHzまで設定できます。「待機」VIの実行時にRTOSのミリ秒タイマの値が112 msでカウント入力が10に設定されている場合、VIはミリ秒タイマが122 msになるまでスリープ状態になり、返りません。

以下の図は、「待機」VIによるリアルタイムアプリケーションのタイミング設定を示しています。このアプリケーションは、Function A、Function Bを順に実行し、Function Bの実行後に「待機」VIによって10 ms間スリープ状態となります。

「次の倍数まで待機」VI

「次の倍数まで待機」VIは、RTOSミリ秒タイマまたはマイクロ秒タイマの値がカウント入力の値の倍数になるまでスレッドをスリープ状態にします。たとえば、「次の倍数まで待機」VIのカウント入力が10 ms、RTOSミリ秒タイマの値が112 msである場合、「次の倍数まで待機」VIを呼び出すVIは、ミリ秒タイマの値が120 msになるまでスリープ状態になります。これは、「次の倍数まで待機」VI実行後に達する10 msの最初の倍数が120 msであるためです。

以下の図は、「次の倍数まで待機」VIによるリアルタイムアプリケーションのタイミング設定を示しています。アプリケーションは、Function A、Function Bを実行し、RTOSミリ秒タイマの値が「次の倍数まで待機」VIのカウント入力で指定された20 msの倍数になるまでスリープ状態になります。

上の図では、「次の倍数まで待機」VIの実行時間は、Function AとFunction Bの実行によって異なります。「次の倍数まで待機」VIは、Function AとFunction Bの実行後、オペレーティングシステムタイマが次の20 msの倍数になるまで実行されます。

Real-TimeタイミングVIの実行順序を定義する

「待機」VIと「次の倍数まで待機」VIは、予期しないタイミング動作の原因となる可能性があるため、他のLabVIEWコードと並列で実行しないでください。タイミングストラクチャまたは優先度がタイムクリティカルであるVIでは、タイミングVIが並列に配置された他のLabVIEWコードとシーケンス的に実行されるよう、1つのスレッドのみを使用できます。このような場合、VIコンパイル時に並列コードパスがシーケンス化されます。タイミングVIの実行順序は、その時々のコンパイルによって異なります。一方、コードがタイミングストラクチャやタイムクリティカルVIの中にない場合は、タイミングVIが他のLabVIEWコードと並列実行されます。したがって、タイミングVIの作用が変化します。

詳細に定義されたタイミング動作を実現するためには、シーケンスストラクチャを使用して特定の実行順序を強制的に維持する必要があります。以下のブロックダイアグラムでは、VIは「次の倍数まで待機」VIによってミリ秒タイマが100 msの倍数に達するまで、スリープ状態になります。VIのスリープ状態が解除されると、VIはシーケンスストラクチャの次のフレームの実行を開始します。

タイミングストラクチャを使用してRTターゲットVIのタイミングを設定する

タイミングストラクチャは、サブダイアグラムを時間制限付きで指定された優先度の順に従って実行します。タイミングストラクチャの優先度設定は、同じターゲットで実行されている他のタイミングストラクチャに相対して決定されます。

注意 LabVIEWでは、VI優先度とタイミングストラクチャ優先度という2つの独立し互いに関連する優先度スキームが使用されます。タイミングストラクチャ優先度は数値で表され、ターゲット上で実行される他のタイミングストラクチャに対し、値が高いほど優先度が高いことを示します。ただし、タイミングストラクチャ優先度はすべて、VI優先度レベルの高優先度とタイムクリティカルの間に位置します。このような不正な動作を回避するために、アプリケーション内で1つの優先度スキームだけを使用することを推奨します。アプリケーション内でタイミングストラクチャを使用する場合、すべてのVIを低優先度に設定してください。

タイミングループ

タイミングループは、ループのサブダイアグラム (フレーム) の各反復を指定した周期で実行します。マルチレートタイミング機能、ループ実行のフィードバック、ダイナミックに変化するタイミング特性、異なる実行優先度を含むVIを開発するには、タイミングループを使用します。

タイミングループを構成ダイアログボックスでは、タイミングループの実行のタイミングソース、周期、優先度、その他の上級オプションを設定できます。

タイミングループは他の動作に先行するため、プロセッサリソースを占有する場合があります。タイミングループによってすべてのプロセッサリソースが使用され、ブロックダイアグラム上の他のタスクが実行できない可能性があります。最も優先度が高い確定的タイミングループの反復は、確定的タスクを実行するために必要な時間と優先度が低いタスクを実行するための待機時間を考慮した周期を設定する必要があります。以下のタイミングループには、50 ms間データを集録するサブVIが含まれています。

タイミングループの周期は100ミリ秒であるため、各反復でループは50ミリ秒待機状態になります。タイミングループが待機状態の間、LabVIEWはブロックダイアグラム上の低優先度タスクを実行します。

タイミングシーケンス

タイミングシーケンスは、1つ以上のタスクサブダイアグラム (フレーム) で構成されます。フレームは順番に実行され、内部または外部タイミングソースによってタイミング設定することが可能です。実行のフィードバック、ダイナミックに変化するタイミング特性、異なる実行優先度を含むVIを開発するには、タイミングシーケンスを使用します。

タイミングシーケンスを構成ダイアログボックスでは、タイミングシーケンス実行のタイミングソース、優先度、その他の上級オプションを設定できます。

フレームストラクチャ付きタイミングループ

タイミングループにフレームを追加して、複数のサブダイアグラムを順番に実行することができます。フレーム付きのタイミングループは、標準のタイミングループにシーケンスストラクチャを配置した場合と同様に動作します。

外部タイミングソースを使用して確定的アプリケーションのタイミングを設定する

RTターゲットで実行されるNIドライバは、LabVIEWスレッドでスリープモードを実行し、ドライバが特定のイベントを検出するとスリープモードを解除するVIまたは関数をサポートします。たとえば、NI-DAQmxとNIデータ収集ハードウェアを使用して、リアルタイムアプリケーションのタイミングを設定できます。スリープモードを実行しドライバイベントを待機するVIと関数の詳細については、各NIドライバのドキュメントを参照してください。

NI-DAQmxでリアルタイムアプリケーションのタイミングを設定する

NIデータ収集ハードウェアとNI-DAQmxを使用して、ループレートをハードウェアクロックのレートと一致させることができます。以下の方法で、NI-DAQmxでリアルタイムアプリケーションのタイミングを設定できます。

  • ハードウェアタイミングによるシングルポイント―NI-DAQmxは、ハードウェアタイミングによるシングルポイントサンプルモードをサポートします。このモードでは、サンプルがハードウェアタイミングによってバッファなしで継続的に集録または生成されます。確定的な周期での入力や出力を必要とする制御アプリケーションでは、ハードウェアタイミングによるシングルポイントサンプルモードを使用します。ハードウェアタイミングによるシングルポイント操作で確定的アプリケーションのタイミングを設定する方法については、『NI-DAQmxヘルプ』の「NI-DAQmxシングルポイントリアルタイムアプリケーション」のトピックを参照してください。
  • カウンタタイマ―ハードウェアタイミングによるカウンタ入力操作を使用して、制御ループを駆動します。カウンタ操作をカウンタのサンプリングクロックと同期するには、「DAQmx次のサンプリングクロックまで待機」VIを使用します。カウンタ入力操作による確定的アプリケーションのタイミング設定の詳細については、『NI-DAQmxヘルプ』の「ハードウェアタイミングによるカウンタタスク」を参照してください。
  • タイミングストラクチャのDAQmxタイミングソース―マルチレートアプリケーションでは、タイミングストラクチャにハードウェアタイミングを使用することが理想的です。デフォルトでは、タイミングストラクチャはWindowsまたはRTターゲットのリアルタイムオペレーティングシステムの1 kHzクロックをタイミングソースとして使用します。またNI-DAQmxを使用して、DAQデバイス上で使用されている外部信号をタイミングストラクチャのタイミングソースとして使用することもできます。タイミングストラクチャとハードウェアクロックを同期するためのタイミングソースを作成するには、「DAQmxタイミングソースを作成」VIを使用します。DAQデバイスの外部信号を使用してタイミングストラクチャを制御する方法については、『NI-DAQmxヘルプ』の「タイミングループを使用したハードウェアタイミングによる入出力同時アップデート」を参照してください。

NIデータ収集ハードウェアとNI-DAQmxソフトウェアを使用して制御ループのタイミングを設定する方法については、『NI-DAQmxヘルプ』を参照してください。『NI-DAQmxヘルプ』を開くには、スタート→すべてのプログラム→National Instruments→NI-DAQ→NI-DAQmxヘルプを選択します。