デフォルトでは、タスク実行者はFIFOロジック(先入れ先出し)を使用してタスクを処理します。それらは単純に、受信され、タスク実行者のタスクキューに追加された順番でタスクを完了させるだけです。ただし、優先度レベル、プリエンプト、ラベル、リストなどの条件付きロジックを使用して、重要度の低いタスクの前に重要度の高いタスクをタスク実行者に実行させることができます。
優先度レベルは、あるタスクの重要度を他のタスクよりも上にするためにタスクに割り当てることができる番号またはラベルです。
プリエンプトは、タスク実行者が現在のタスクから割り込みを受けてより重要なタスクを処理するかどうかを決定します。また、中断されたアクティブタスクに起こることにも影響します。たとえば、プリエンプトは、アクティブなタスクがプリエンプトタスクの完了後に最初から再開されるかどうか、またはタスクを完全に削除する必要があるかどうかを判断できます。
以下は、優先度とプリエンプトシステムが必要となる可能性があるシナリオの例です。
このトピックの残りの部分では、重要な概念と、優先度とプリエンプトシステムを作成するためのさまざまな方法について説明します。
次のセクションでは、標準の3Dロジックを使用している場合にタスクの優先度を追加する方法について説明します。
デフォルトでは、別の優先度を割り当てない限り、すべてのタスクの優先度の値は0です。優先度番号が大きいタスクは、優先度番号が小さいタスクよりも先に完了します。たとえば、優先度が10のタスクは、優先度が1のタスクよりも先に完了します。
優先度番号の背景にある深い意味または方法は完全にユーザー次第です。シミュレーションモデルで優先度レベルを広範囲に使用する予定の場合は、優先度レベルの追跡と管理を検討することをおすすめします。参考のために、モデルのドキュメントにレベルとその意味を書き留めておくことをおすすめします。
3Dオブジェクトで標準ロジックを使用してタスクを作成している場合は、タスクを作成したのと同じエリアで優先度またはプリエンプトの値を割り当てるプロパティを探します。
個々の処理フロータスクアクティビティに優先度レベルやプリエンプト値を追加することはできません。つまり、他の方法を使用して優先度ロジックを再作成する必要があります。一般に、最善の方法は、ラベル、リスト、[決定]アクティビティなどのその他の条件付きロジックを組み合わせて使用することです。
たとえば、タスク実行者が他のアイテムを輸送する前に急ぎ注文アイテムを輸送する必要があるシステムをモデル化しているとします。この種類のシステムを作成するには、次のようにします:
このシステムの実例についてはタスクロジックチュートリアル1.3を完了してみてください。
標準ロジックと処理フローの両方を使用してタスクをタスク実行者に割り当てるモデルがある場合は、両方のシステムと互換性のある優先度とプリエンプトの戦略を使用する必要があります。[タスクシーケンスを作成]アクティビティでは、処理フロー内のタスクにのみ優先度とプリエンプトを追加できるので、処理フロー内でタスクシーケンスを作成し、それらのタスクシーケンスをタスクのグローバルリストにプッシュする必要があります。これら2つの方法を組み合わせるための主要な概念と方法の詳細については、「3Dタスクロジックでの処理フローの使用」を参照してください。
プリエンプトは、タスク実行者がアクティブなタスクから割り込みを受けてプリエンプトするタスクを処理するかどうかを決定します。また、オペレーターがタスクからプリエンプトされたときにアクティブタスクに何が起こるかを決定します。
たとえば、中断されたタスクを、タスク実行者のタスクリストの最後に単純に再追加させることができます。タスク実行者はその後、プリエンプトタスクを終了したときに割り込まれたタスクに取り組みます。あるいは、実行中のタスクを完全に中止し、タスク実行者により処理されないようにすることもできます。
次の表は、使用可能なさまざまなプリエンプトオプションについて説明しています。
値 | 名前 | 説明 |
---|---|---|
0 | プリエンプトしない | タスクはタスク実行者をプリエンプトしません。 |
1 | プリエンプトのみ | タスク実行者は現在アクティブなタスクシーケンスをプリエンプトし、タスクシーケンスキューに戻してから、後で完了します。プリエンプトされたタスクシーケンスは、タスクシーケンスキューの先頭に自動で配置されます。その後、タスク実行者が元のタスクシーケンスに戻ったとき、そのタスクシーケンスにある現在のタスクは完了していないため、それを再び終わらせます。 |
2 | プリエンプト+アクティブを中断 | タスク実行者は現在アクティブなタスクシーケンスを停止し、元のタスクに戻ることがないように破棄します。 |
3 | プリエンプト+すべてを中断 | タスク実行者は現在アクティブなタスクシーケンスを停止し、破棄し、そのタスクシーケンスキュー内のすべてのタスクを破棄します。 |
タスク実行者がプリエンプトのタスクに取り組んでいる際に、別のプリエンプトタスクを同時に受け取る可能性があります。その場合、タスクロジックは以下のルールを使用します: