優先度が異なるVIを使用して確定的アプリケーションを作成する
- 更新日2025-02-20
- 6分で読める
確定的タスクと非確定的タスクを分け、十分なプロセッサリソースが割り当てられるように確定的タスクを個々のVIに配置します。これらのVIに優先度を付け、適切な実行システムにカテゴリ分けすることで、各VIに割り当てられるプロセッサリソースを制御できます。
各VIは、指定された優先度と実行システムに応じて、1つの実行システムスレッドに割り当てられます。スレッドは、その順序にしたがってプロセッサで実行されます。
VIに優先度を割り当てる
プロジェクトエクスプローラウィンドウでVIを右クリックし、ショートカットメニューからプロパティを選択して、VIプロパティダイアログボックスを開きます。VIプロパティダイアログボックスのカテゴリプルダウンメニューから実行を選択し、VIの優先度を設定可能な実行ページを開きます。VIの優先度のレベルは、下記のリストから選択できます (優先度の低い順)。
- バックグラウンド (最下位)
- 低 (通常)
- 中
- 高
- タイムクリティカル (最上位)
LabVIEWで作成されたVIはすべて、優先度がデフォルトで「低」に設定されます。ただし、サブVIは発呼者VIの優先度を継承します。たとえば、タイムクリティカルVIによって呼び出されたサブVIの優先度はタイムクリティカルとなります。タイムクリティカルに設定されたVIは、他の優先度のVIよりも先に実行されます。タイムクリティカルVIは、すべてのタスクが完了するまでプロセッサリソースを解放しません。ただし、確定的VIがプロセッサリソースを独占しないよう、プロセッサリソースの制御を解放するように明示的に指定することもできます。
上記の5つの優先度以外に、「サブルーチン」という優先度を設定することもできます。優先度をサブルーチンに設定したVIは、他のVIと実行時間を共有しません。サブルーチンの優先度でVIを実行すると、VIはそのVIを中で実行しているスレッドの制御を行い、その発呼者と同じスレッドで実行します。優先度がサブルーチンのVIも含めて、他のVIは現在実行されているサブルーチンVIが終了するまでそのスレッドで実行されません。
VIを実行システムに割り当てる
VIの実行システムを変更するにはプロジェクトエクスプローラウィンドウでVIを右クリックし、ショートカットメニューからプロパティを選択して、VIプロパティダイアログボックスを開きます。VIプロパティダイアログボックスのカテゴリプルダウンメニューから実行を選択し、VIの実行システムを設定可能な実行ページを開きます。VIは、以下の6つの実行システムにカテゴリ分けできます。
- ユーザインタフェース
- 標準
- 計測器I/O
- データ収集
- その他1
- その他2
デフォルトではすべてのVIが標準実行システムで実行されますが、別の実行システムに割り当てることもできます。サブVIは、これら6つの実行システム以外に、「発呼者と同じ」に指定することもできます。「発呼者と同じ」に設定されたサブVIは、そのサブVIを呼び出すトップレベルVIと同じ実行システムで実行されます。
ユーザインタフェース以外の実行システムには、指定された優先度でVIを実行するためのスレッドキューがあります。たとえば、同じ実行システムに割り当てられた3つのVIがある場合、1つのVIの実行中は他の2つのVIはキューの中で待機状態になります。すべてのVIの優先度が同じであると仮定した場合、1つのスレッドは一定の時間実行されます。その後、そのスレッドはキューの末尾に移動し、次のスレッドが実行されます。実行が完了したスレッドは、実行システムのキューから削除されます。
ユーザインタフェース実行システムは、すべてのユーザインタフェースタスクを処理します。その他の実行システムは、ユーザインタフェースの管理の役割は果たしません。VIのユーザインタフェースを更新する必要がある場合、タスクの実行権がユーザインタフェース実行システムに渡され、その実行システムによってユーザインタフェースが更新されます。
確定的VIを協調的に実行する
確定的VIはプリエンプティブであるため、プロセッサリソースを独占することができます。確定的VIによってすべてのプロセッサリソースが占有され、優先度が低いタスク (低優先度のVIやRTターゲットのFTPサーバなど) の実行が不可能となる場合があります。
したがって、確定的VIを作成する場合は、コードの確定性を損なわずに優先度が低いタスクが実行できるように、定期的にリソースを解放するよう構成する必要があります。確定的VIのタイミングを設定することで、協調的にリソースを解放することができます。