タスクロジックでリストを使用する
概要
トピック「タスクシーケンスロジックについての主要な概念」で説明したように、リストの使用がジョブディスパッチングを実装するための最も強力なメカニズムの1つです。このトピックでは、リスト、具体的には、タスクシーケンスリストを使用したディスパッチングの特定の例を実装する方法を説明します。
このトピックでは、ジョブディスパッチングの問題を解決する例を提示します。この例ではタスクシーケンス生成メカニズム用の処理フローを使用しますが、他のタスク生成方法でも機能します。
ジョブディスパッチング | 誰がまたは何がどんなジョブを実行するか? |
---|
このシナリオでは、リストをジョブのリストとして位置付けることによってコアディスパッチング決定が解決されます。このケースでは、ジョブが次のようにタスクシーケンスによって表現されます。
タスクシーケンスのリストを使用したディスパッチング | |
---|---|
リソース選択 | リソース選択は、タスクシーケンスが作成され、リストにプッシュされるときに実行されます。リストのバックオーダーで待機しているリソースが存在する場合は、それらのバックオーダーがバックオーダーキューの方法に基づいて履行されます。 |
ジョブ選択 | アクティブなジョブのセットは、タスクシーケンスをリストにプッシュすることによって管理されます。ジョブ選択は、プルクエリによって選択要件と優先度付けが定義されるリストからリソースがプルしたときに実行されます。リストが取得するリソースのゲートキーパーになるため、個々のタスク実行者のタスクシーケンスキューイングロジックは関係ありません。 |
以下は、このようなシステムの設定方法の大まかな概要です。
- グローバルタスクシーケンスリストを作成する - ツールボックスで、処理フローが作成したタスクシーケンスを格納するタスクリストを作成します。
- 3Dモデルのタスク実行者にトリガーを追加する - [リソース利用可能時]トリガーをすべてのタスク実行者に追加します。このトリガーは、タスク実行者が空いて新しいタスクシーケンスで作業できるようになったときに起動します。トリガーの起動時にグローバルリストからタスクをプルするようタスク実行者に指示する命令を追加します。
- 処理フローでタスクシーケンスを作成する - タスクの完全なセットを作成し、それらをタスクシーケンス内に配置します。次に、作成したグローバルリストにタスクシーケンスを送付します。
- 標準3Dタスクロジックを設定する - 標準3Dタスクをタスク実行者に割り当てる方法を変更する必要はありません。このようなタスクは、通常の手順を使用して作成できます。
タスクシーケンスとタスク実行者の処理方法の詳細については、「タスク実行プログラムがタスクを処理する方法」を参照してください。
グローバルタスクシーケンスリストを作成する
グローバルタスクシーケンスリストはジョブボードとして機能し、そこからタスク実行者が必要なタスクのリストをプルします。
グローバルタスクシーケンスリストを設定するには:
- 左のペインで[ツールボックス]タブをクリックして、[ツールボックス]を開きます。
- [追加]ボタン をクリックして、メニューを開きます。[グローバルリスト]をポイントし、[タスクシーケンスリスト]を選択します。
- リストのプロパティで、リストの名前を「利用可能なタスク」など、覚えやすい名前に変更します。
- 必要に応じて、リストエントリの追跡に役立つカスタムフィールドを追加または削除します。
- [OK]ボタンを押して変更を保存し、ウィンドウを閉じます。
- 今作成したリストがツールボックスに表示されていることを確認します。
リストの一般的な情報については、「リストについての主要な概念」を参照してください。
リソース利用可能時トリガーを追加する
グローバルタスクシーケンスリストを作成したら、3Dモデル内のすべてのタスク実行者に[リソース利用可能時]トリガーを追加する必要があります。その後、タスク実行者が空いてタスクを処理できる場合はいつでもこのリストからプルするようにトリガーを設定します。このトリガーを追加するには:
- 3Dモデルで、タスク実行者をクリックして、右側でそのプロパティを表示します。
- [トリガー]セクションで、[追加]ボタン をクリックして、メニューを開きます。[リソース利用可能時]を選択します。
- [リソース利用可能時]ボックスの横にある[追加]ボタン をクリックして、メニューを開きます。[リストを使用]をポイントし、[タスクシーケンスリストからプル]を選択します。
- ピックリストのプロパティウィンドウで、[リスト]メニューをクリックし、タスク実行者が使用するグローバルリストの名前を選択します。
- 必要に応じて、[クエリ]ボックスにクエリを追加して、どのタスクシーケンスを他のタスクシーケンスより先にプルするかをタスク実行者に指示します。
- 3Dモデル内のすべてのタスク実行者に対して前の手順を繰り返します。
トリガーの一般的な情報については、「イベントについての主要な概念」を参照してください。
処理フローでタスクシーケンスを作成する
処理フローライブラリに、タスクシーケンスを作成アクティビティが含まれています。
このアクティビティを使用して、タスクシーケンスを作成できます。一連の処理フロータスクの開始時に[タスクシーケンスを作成]アクティビティを使用してタスクシーケンスを作成し、タスクシーケンスに名前を割り当てます。次に、タスクアクティビティを完了させる順に追加します。
処理フローでタスクシーケンスを作成し、それをグローバルタスクシーケンスリストにプッシュするには:
- リスト共有アセットを処理フローに追加します。[リスト]ボックスで、メニューを使用して、事前に作成したグローバルタスクシーケンスリストにリンクします。
- シミュレーションモデル内のどのイベントを介してトークンの作成がトリガーされ、それによってタスクシーケンスが作成されるかについて考えます。特定のイベントが発生するのをリッスンする[イベントトリガーソース]を使用することもできます。たとえば、輸送される必要があるキューに入るアイテムなどです。
- [タスクシーケンスを作成]アクティビティを処理フローに追加します。アクティビティのプロパティで、[タスク実行者/ディスパッチャー]ボックスの横にある[削除]ボタン をクリックして、現在選択されているタスク実行者がいないことを確認します。
- 必要に応じて、タスクシーケンス全体の[優先度]プロパティと[プリエンプト]プロパティに値を割り当てることができます。
- [割り当て先]オプションの下のボックスで、
taskSequence
というコード部分を削除し、それをタスクシーケンスに付けるカスタム名に置き換えます。たとえば、最終的なコードはtoken.MyTaskSequence
やtoken.TransportTasks
などとなります。 - [送付と待機]チェックボックスをオフにします。これにより、トークンがすぐに次のリストへプッシュアクティビティに進みます。
- タスクシーケンスを作成アクティビティの後で、タスクシーケンスをグローバルタスクシーケンスリストにプッシュするリストにプッシュアクティビティを追加します。アクティビティを処理フロー内のリストにリンクします(グローバルタスクシーケンスリストに関連付けられている必要があります)。
- [プッシュ値]ボックスで、先ほど作成したカスタムタスクシーケンスの名前に値が割り当てられていることを確認します。
- タスクシーケンスを構成する残りのタスクアクティビティを追加します。各タスクアクティビティのプロパティで、[実行者/タスクシーケンス]ボックスを、先ほど作成したカスタムタスクシーケンスにタスクを追加するように変更します(例:
token.TransportTasks
)。 - 最後に、タスクシーケンスを終了アクティビティを追加します。アクティビティのプロパティで、[タスクシーケンス]ボックスが先ほど作成したカスタムタスクシーケンスを参照するように変更されていることを確認します(例:
token.TransportTasks
)。
このシステムの実例についてはタスクロジックチュートリアル1.4を完了してみてください。