タスク2.2 - 調整されたロードタスクを作成する
タスクの概要
このチュートリアルタスクでは、調整されたロードタスクを作成する方法を学びます。調整されたタスクは、特定のタスクを完了するために2人以上のオペレーターが必要になるタスクです。
これまでのところを再確認すると、2人のオペレーターが標準サイズのボックスを1つのキューから2つのプロセッサに輸送するシステムのシミュレーションモデルを作成しました。ここでは、ビジネスシステム用のシミュレーションモデルを作成する必要があると考えてみてください。その場合には次のことを考慮する必要があります。
- 輸送する必要があったボックスにはさまざまな重量がある
- ボックスの重量が40を超えると、職場の規制により2人のオペレーターがそれを輸送する必要がある
このチュートリアルでは、そのようなシステムをモデル化します。通常、2人のオペレーターは彼ら自身で標準サイズのボックスを輸送するでしょう。しかし時には、大きなボックスを輸送するために協力して作業する必要があり、こういった特殊なタスクを処理するために、調整されたタスクロジックを設計する必要があります。
まず処理フローロジックを編集し、40を超える重さのボックスを作成することもできるようにします。ボックスが40より大きい場合は、標準のボックスより大きく表示され、赤く表示されるようにボックスのビジュアルを変更するロジックを設計します。これらの変更は、重いボックスを標準のボックスと視覚的に区別するのに役立ちます。次に、3DモデルのLargeQueueの内側に重いボックスを置くロジックを設計します。
その後、調整されたタスクを処理するために処理フローに2つのトラックを追加します。1つのトラックが、重いボックスのロードと輸送を担当する主オペレーターをコントロールします。2番目のトラックは、輸送タスクを支援する支援オペレーターをコントロールします。処理フローの調整アクティビティを使用して、2人のオペレーターが同時にこれらのタスクに取り組むようにします。調整されたタスクの構築に関連する処理とアクティビティの詳細な説明については「調整されたタスクと処理フローの調整」を参照してください。
作業が完了すると、シミュレーションモデルは次の画像のように動作します。
ステップ1 ボックスの重さを変えるためのアクティビティを追加する
このステップでは処理フローを変更し、重いボックスを作成してそれらをLargeQueueに置く新しいアクティビティを追加します。作業が完了すると、処理フローは次のようになります。
現時点では、これらのアクティビティの追加と処理フローへの接続のみを行います。次のステップでプロパティを編集してロジックを追加します。
これらのアクティビティを追加して接続するには:
- 処理フローを開いてアクティブにした状態で、[ボックスを作成]図形のスタックブロックの最後に次のアクティビティを追加します。
- 1つの[ラベルを割り当て]アクティビティ([ベーシック]の下)
- 1つの[決定]アクティビティ([ベーシック]の下)
- これらのアクティビティの名前を次のように変更します。
- 別の[コンテナ]形状([表示]の下)を処理フローに追加します。
- [プロパティ]で、この処理形状の名前を「重いボックスを作成」に変更します。
- [色]ボックスをクリックして、図形の色を赤に変更します。
- [重いボックスを作成]図形の内側に、次のアクティビティを追加してスタックブロックを作成します。
- 2つの[ビジュアルを変更]([ビジュアル]で)
- 1つの[オブジェクトを移動]([オブジェクト]で)
- これらのアクティビティの名前を次のように変更します。
- [決定:標準または重量?]アクティビティから、[ビジュアルを変更:大きなボックスのサイズ変更]までの2つ目のコネクターを作成します。
アクティビティ | 新しい名前 |
---|---|
ラベルを割り当て | ラベルを割り当て:重量 |
決定 | 決定:標準または重量? |
アクティビティ | 新しい名前 |
---|---|
ビジュアルを変更(最初) | ビジュアルを変更:大きなボックスのサイズ変更 |
ビジュアルを変更(2番目) | ビジュアルを変更:赤色 |
オブジェクトを移動 | オブジェクトを移動:LargeQueueへ |
シミュレーションモデルを保存することをおすすめします。
ステップ2 重いボックスのロジックを追加する
このステップでは、重いボックスを作成してそれらをLargeQueueに置くアクティビティを追加して、処理フローを変更します。これらのボックスのサイズを変更し、ボックスのサイズが大きく、赤くなるようにします。また、ボックスの到着率を少し遅くするようにも変更します。
以下は、新規および変更されたアクティビティが機能する方法の概要です。
アクティビティ | 説明 |
---|---|
ソース:アイテムの到着 | ボックスが10秒ごとに到着するようにこのアクティビティを変更します。 |
ラベルを割り当て:重量 | トークンに[重量]というラベルを追加して、1から50の間の重量をボックスにランダムに割り当てます。この値を割り当てるには、均一統計分布を使用します。この分布では、ほとんどの場合、標準のボックス(40未満の重量のボックス)が作成されます。しかし時おり、大きなボックス(40以上の重さ)が作成される場合があります。 |
決定:標準または重量? | このアクティビティでは[重量]に割り当てられた値を確認します。このラベルの値が40より大きい場合、トークンが[重いボックスを作成]図形のアクティビティに送信されます。値が40未満の場合は、[標準輸送タスク]図形のアクティビティに進みます。 |
ビジュアルを変更:大きなボックスのサイズ変更 | このアクティビティは、[重量]ラベルが40より大きいため、重いと分類されるボックスに関連付けられるトークンを受け取ります。これらのボックスは、3Dモデルで大きく表示されるようにサイズ変更されます。標準のボックスの大きさは0.61 x 0.61 x 0.3です。大きなボックスを1 x 1 x 0.8に設定します。 |
ビジュアルを変更:赤色 | このアクティビティは、3Dモデルで重いボックスが赤くなるように重いボックスを変更します。 |
オブジェクトを移動:LargeQueueへ | このアクティビティは、3DモデルのLargeQueueの内側に重いボックスを置きます。 |
このロジックを作成するには:
- [ソース:アイテムの到着]アクティビティをクリックして選択します。[プロパティ]で、[時刻0で到着]チェックボックスをオンにします。
- [到着時間間隔]ボックスに「
10.00
」と入力します。 - [ラベルを割り当て:重量]アクティビティをクリックして選択します。[プロパティ]で、[ラベルの割り当て先]ボックスの横にある矢印をクリックしてメニューを開きます。[トークンラベル]をポイントし、[ボックス]を選択します。
- [追加]ボタン をクリックして、新しいラベルを追加します。
- [名前]ボックスに、「
Weight
」と入力します。 - [値]ボックスの横にある矢印をクリックして、メニューを開きます。[統計分布]をポイントし、[Uniform]を選択して分布の選択を開きます。
- [最小]ボックスに「
1.00
」と入力します。 - [最大]ボックスに「
50.00
」と入力します。 - [決定:標準または重量?]アクティビティをクリックして選択します。[プロパティ]で、[トークンを送信]ボックスの横にある矢印をクリックして、メニューを開きます。[条件付きで決定]を選択します。
- [ 条件 ]ボックスに「
token.Box.Weight < 40
」と入力します。 - [ビジュアルを変更:大きいボックスのサイズ変更]アクティビティをクリックして選択します。[プロパティ]の[ビジュアルを変更]ボックスの横にある[追加]ボタンをクリックしてメニューを開きます。[回転、サイズ、場所を設定]を選択します。
- [設定]メニューをクリックし、[サイズ]を選択します。
- [オブジェクト]ボックスに「
token.Box
」と入力します。 - [Z]ボックスに「
0.8
」と入力します。 - [ビジュアルを変更:赤色]アクティビティをクリックして選択します。[プロパティ]の[ビジュアルを変更]ボックスの横にある[追加]ボタンをクリックしてメニューを開きます。[オブジェクトの色を設定]を選択します。
- [オブジェクト]ボックスに「
token.Box
」と入力します。 - [色]ボックスの横にある矢印をクリックして、メニューを開きます。[赤]を選択します。
- [オブジェクトを移動:LargeQueueへ]アクティビティをクリックして選択します。[プロパティ]で、[オブジェクト]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[ボックス]を選択します。
- [目的地]ボックスの横にある[サンプラー]ボタン をクリックしてサンプリングモードに入ります。
- 3Dモデルで、[LargeQueue]をクリックしてメニューを開きます。[LargeQueue]を選択します。
シミュレーションモデルを実行:
ご覧のとおり、最終的にはLargeQueueに表示されるいくつかの大きな赤いボックスが表示されます。今のところ、大きなボックスはキューに残ります。これは大きなボックスをキューから移動するロジックがまだ作成されていないためです。このチュートリアルの残りのステップでそれを行います。
ステップ3 調整されたタスクアクティビティを追加する
このステップでは、処理フローに3Dモデルのロジックをコントロールするアクティビティを追加します。作業が終了すると、処理フローは次の画像のようになります。
ここでは、これらのアクティビティの処理フローへの追加のみを行います。後のステップで、プロパティを編集して機能を追加します。
これらのアクティビティを追加するには:
- 2つの[コンテナ]形状([表示]の下)を処理フローに追加します。
- 2つの図形の[重量輸送タスク]と[二次輸送タスク]の名前を変更します。
- [プロパティ]で、両方の形状の[色]ボックスを変更して各形状の色を赤に変更します。
- [重量輸送タスク]図形で、次のアクティビティを含むスタックブロックを作成します。
- 1つの[リソースを取得]([共有アセット]の下)
- 1つの[分割]([調整]の下)
- これらのアクティビティの名前を次のように変更します。
- [重量輸送タスク]図形で、次のアクティビティを含むスタックブロックを作成します。
- 1つの[リソースを取得]([共有アセット]の下)
- 1つの[移動]([タスクシーケンス]の下)
- 1つの[タスクシーケンスを作成]([タスクシーケンス]の下)
- これらのアクティビティの名前を次のように変更します。
- 次のアクティビティをこの順番で[重量輸送タスク]図形に追加します。ただし、それらをフローティング状態にして、未接続のままにします。
- 1つの[同期]([調整]の下)
- 1つの[ロード]([タスクシーケンス]の下)
- 1つの[同期]([調整]の下)
- 1つの[移動]([タスクシーケンス]の下)
- 1つの[同期]([調整]の下)
- 1つの[アンロード]([タスクシーケンス]の下)
- 1つの[同期]([調整]の下)
- 1つの[タスクシーケンスを終了]([タスクシーケンス]の下)
- [タスクシーケンスを終了]と一緒にスタックされた1つの[リソースをリリース]([共有アセット]の下)
- 4つの[同期]アクティビティのサイズを変更して、[重量輸送タスク]と[二次輸送タスク]の両方の図形にまたがるようにします。
- これらのアクティビティの名前を次のように変更します。
- [取得:主オペレーター]アクティビティを含むスタックブロックをクリックして選択します。Ctrl+Cで目的のスタックブロックをコピーします。Ctrl + Vでこのスタックブロックを貼り付けます。元のスタックブロックと平行になるように、[二次輸送タスク]の内側に配置します。
- コピーしたアクティビティの名前を次のように変更します。
- [移動]アクティビティ([タスクシーケンス]で)を[二次輸送タスク]図形に追加します。これを[移動:MainOpからプロセッサへ]アクティビティ([重量輸送タスク]形状内)と平行になるように配置します。
- このアクティビティの名前を[移動:AsstOpからプロセッサへ]に変更します。
- [二次輸送タスク]図形の下に次のアクティビティを含むスタックブロックを作成します。
- 1つの[タスクシーケンスを終了]([タスクシーケンス]の下)
- 1つの[リソースをリリース]([共有アセット]の下)
- 1つの[シンク]([ベーシック]の下)
- これらのアクティビティの名前を次のように変更します。
アクティビティ | 新しい名前 |
---|---|
取得 | 取得:プロセッサ |
分割 | 分割:調整されたタスクの作成 |
アクティビティ | 新しい名前 |
---|---|
取得 | 取得:主オペレーター |
移動 | 移動:MainOpからLargeQueueへ |
TSを作成 | メインタスクシーケンスを作成 |
アクティビティ | 新しい名前 |
---|---|
同期(最初) | 同期:LargeQueueで両方のオペレーター |
ロード | LargeQueueでボックスをロード |
同期(2番目) | 同期:両方のオペレーターがボックスをロード |
移動 | 移動:MainOpからプロセッサへ |
同期(3番目) | 同期:プロセッサで両方のオペレーター |
アンロード | プロセッサでボックスをアンロード |
同期(4番目) | 同期:両方のオペレーターがリリース準備完了 |
TSを終了 | メインタスクシーケンスを終了 |
リリース | リリース:主オペレーター |
アクティビティ | 新しい名前 |
---|---|
取得:主オペレーター(コピー) | 取得:支援オペレーター |
メインタスクシーケンスを作成 | 支援タスクシーケンスを作成 |
移動:MainOpからLargeQueueへ(コピー) | 移動:AsstOpからLargeQueueへ |
アクティビティ | 新しい名前 |
---|---|
TSを終了 | 支援タスクシーケンスを終了 |
リリース | リリース:支援オペレーター |
シンク | シンク:調整されたタスクの完了 |
処理フローがこのステップの冒頭に表示した画像のようになることを確認します。
ステップ4 アクティビティを接続する
前のステップではいくつかの調整アクティビティ([分割]アクティビティと[同期]アクティビティ)を追加しました。これらのアクティビティのロジックでは、アクティビティ間のコネクターを正しく設定する必要があります。詳細については、「処理フロー調整」を参照してください。そのため、このステップではすべてのアクティビティを正しく接続する作業を行います。特に重要な点は、コネクターのランキングが正しくなるように必ずアクティビティを正しい順序で接続することです。これらのステップを正確な順序で実行するようにしてください。
作業が完了すると、処理フローは次の画像のようになります。
これらのアクティビティを接続するには:
- [オブジェクトを移動:LargeQueueへ]アクティビティから[取得:プロセッサ]アクティビティまで伸びるコネクターを作成します。
- [分割:調整されたタスクの作成]アクティビティから[取得:主オペレーター]アクティビティまで伸びるコネクターを作成します。
- [分割:調整されたタスクの作成]アクティビティから[取得:支援オペレーター]アクティビティまで伸びる2つ目のコネクターを作成します。
- [重量輸送タスク]図形のアクティビティ間に次のようなコネクターを作成します。
- [移動:MainOpからLargeQueueへ]アクティビティから[同期:LargeQueueで両方のオペレーター]アクティビティまで
- [同期:LargeQueueで両方のオペレーター]アクティビティから[LargeQueueでボックスをロード]まで
- [ボックスをLargeQueueでロード]から[同期:両方のオペレーターがボックスをロード]アクティビティまで
- [同期:両方のオペレーターがボックスをロード]アクティビティから[移動:MainOpからプロセッサへ]アクティビティまで
- [移動:MainOpからプロセッサへ]アクティビティから[同期:プロセッサで両方のオペレーター]アクティビティまで
- [同期:プロセッサで両方のオペレーター]アクティビティから[プロセッサでボックスをアンロード]アクティビティまで
- [プロセッサでボックスをアンロード]アクティビティから[同期:両方のオペレーターがリリース準備完了]アクティビティまで
- [同期:両方のオペレーターがリリース準備完了]アクティビティから[メインタスクシーケンスを終了]アクティビティまで
- [二次輸送タスク]図形アクティビティ間に次のようなコネクターを作成します。
- [移動:AsstOpからLargeQueueへ]アクティビティから[同期:LargeQueueで両方のオペレーター]アクティビティまで
- [同期:LargeQueueで両方のオペレーター]アクティビティから[同期:両方のオペレーターがボックスをロード]アクティビティまで
- [同期:両方のオペレーターがボックスをロード]アクティビティから[移動:AsstOpからプロセッサへ]アクティビティまで
- [移動:AsstOpからプロセッサへ]アクティビティから[同期:プロセッサで両方のオペレーター]アクティビティまで
- [同期:プロセッサで両方のオペレーター]アクティビティから[同期:両方のオペレーターがリリース準備完了]アクティビティまで
- [同期:両方のオペレーターがリリース準備完了]アクティビティから[支援タスクシーケンスを終了]アクティビティまで
- [リリース:主オペレーター]から[イベントを待つ:処理完了時] スタックブロック([処理ボックス]形状内)まで伸びるコネクターを作成します。
- 新しく作成したコネクターをクリックして選択します。[プロパティ]の[線のスタイル]グループで、[タイプ]メニューを開き、[分割]を選択します。
シミュレーションモデルを保存することをおすすめします。
ステップ5 重量輸送タスクロジックを編集する
このステップでは、重量輸送タスクトラックでオペレーターのタスクをコントロールするロジックを作成します。このアクティビティが機能する方法の概要を次に示します。
アクティビティ | 説明 |
---|---|
取得:プロセッサ | このアクティビティはボックスを輸送するいずれかのプロセッサの取得を試みます。プロセッサがフローアイテムを受け取ることができない場合、トークンはプロセッサが使用可能になるまでこのアクティビティで待機します。プロセッサが使用可能な場合は、トークンがリソースを取得し、そのトークンを次の下流オブジェクトにリリースします。リソースを取得したら、取得した特定のプロセッサへの参照を含む、[プロセッサ]という名前のラベルをトークンに割り当てます。 |
分割:調整されたタスクの作成 | [分割]アクティビティでは、受信トークンを2つの同一のトークンに分割し、それぞれの発信コネクターからリリースします。これら2つのトークンを使用して、2つのオペレーターを同期させて、タスクを協調できます。一方のトークンは主オペレーターをコントロールし、もう一方のトークンは支援オペレーターをコントロールします。元のトークンのラベルのコピーを使用して、2番目のトークンを独立したトークンとして作成します。 |
取得:主オペレーター | このアクティビティでは、輸送タスクに取り組むオペレーターの取得を試みます。オペレーターがタスクで作業できない場合、トークンはオペレーターが使用可能になるまでこのアクティビティで待機します。オペレーターがタスクで作業できる場合は、トークンはリソースを取得し、そのトークンを次の下流オブジェクトにリリースします。リソースを取得したら、取得した特定のオペレーターへの参照を含む[MainOperator]というラベルをトークンに割り当てます。これを使用して、残りのタスクをこのオペレーターに割り当てます。 |
メインタスクシーケンスを作成 | このアクティビティでは、主オペレーターが実行するタスクのシーケンスとして、一連のタスク(ロードとアンロード)を設定します。 |
移動:MainOpからLargeQueueへ | このアクティビティでは、主オペレーターに3DモデルのLargeQueueに移動するよう指示します。[MainOperator]ラベルを使用して、前のアクティビティで取得したのと同じオペレーターにタスクを割り当てます。 |
同期:LargeQueueで両方のオペレーター | このアクティビティにより、支援オペレーターもキューに移動し、大きなボックスのロードを支援する準備ができるまで、主オペレーターが待てるようになります。主オペレーターをコントロールするトークンは、支援オペレーターをコントロールするトークンがこのアクティビティに到達するまで待機します。このアクティビティにはデフォルト設定を使用します。 |
LargeQueueでボックスをロード | このアクティビティでは、LargeQueueでボックスをロードするように主オペレーターに指示します。[MainOperator]ラベルを使用して、前のアクティビティで取得したのと同じオペレーターにタスクを割り当てます。また、[ボックス]ラベルを使用して、どのアイテムを輸送する必要があるかをオペレーターに伝えます。 |
同期:両方のオペレーターがボックスをロード | このアクティビティにより、主オペレーターが大きなボックスをロードするまで、支援オペレーターが待機できるようになります。支援オペレーターをコントロールするトークンは、主オペレーターをコントロールするトークンがこのアクティビティに到達するまで待機します。このアクティビティにはデフォルト設定を使用します。 |
移動:MainOpからプロセッサへ | このアクティビティでは、主オペレーターに、以前に取得したプロセッサまで移動するように指示します。[MainOperator]ラベルを使用して、前のアクティビティで取得したのと同じオペレーターにタスクを割り当てます。また、[プロセッサ]ラベルを使用して、主オペレーターに移動先のプロセッサを指示します。 |
同期:プロセッサで両方のオペレーター | このアクティビティにより、ボックスをアンロードする前に主オペレーターと支援オペレーターの両方がプロセッサに到着できるようになります。支援オペレーターをコントロールするトークンは、主オペレーターをコントロールするトークンがこのアクティビティに到達するまで待機します。このアクティビティにはデフォルト設定を使用します。 |
プロセッサでボックスをアンロード | このアクティビティでは、主オペレーターにプロセッサでボックスをアンロードするように指示します。[MainOperator]ラベルを使用して、前のアクティビティで取得したのと同じオペレーターにタスクを割り当てます。また、[ボックス]ラベルを使用して、どのアイテムを輸送する必要があるかをオペレーターに伝えます。どのプロセッサがフローアイテムを受け取るべきかをオペレーターに知らせるために、[プロセッサ]ラベルを使用します。 |
同期:両方のオペレーターがリリース準備完了 | このアクティビティにより、主オペレーターが大きなボックスをアンロードするまで、支援オペレーターが待てるようになります。支援オペレーターをコントロールするトークンは、主オペレーターをコントロールするトークンがこのアクティビティに到達するまで待機します。このアクティビティにはデフォルト設定を使用します。 |
メインタスクシーケンスを終了 | このアクティビティは、主オペレーターの一連のタスクを完了として指定します。 |
リリース:主オペレーター | このアクティビティは主オペレーターをリリースし、他のタスクで作業できるようにします。オペレーターをリリースするために[MainOperator]ラベルを使用します。 |
このロジックを作成するには:
- [取得:プロセッサ]アクティビティをクリックし選択します。このアクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
- [リソース:プロセッサ]共有アセットをクリックしてサンプリングします。
- [プロパティ]で、[ラベルに割り当てる]ボックスの横にある矢印をクリックしてメニューを開きます。[トークンラベル]をポイントし、[Processor]を選択します。
- [取得:主オペレーター]アクティビティをクリックして選択します。このアクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
- [リソース:オペレーター]共有アセットをクリックしてサンプリングします。
- [プロパティ]の[ラベルに割り当てる]ボックスに、「
token.MainOperator
」と入力します。 - [メインタスクシーケンスを作成]アクティビティをクリックして選択します。[プロパティ]で、[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントして[MainOperator]を選択します。
- [割り当て先]ラジオボタンの下のボックスで、テキストを「token.MainTaskSequence」に変更します。
- [移動:MainOpからLargeQueueへ]アクティビティをクリックして選択します。[プロパティ]で、[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[MainTaskSequence]を選択します。
- [目的地]ボックスの横にある[サンプラー]ボタン をクリックしてサンプリングモードに入ります。
- 3Dモデルで、[LargeQueue]をクリックしてメニューを開きます。[LargeQueue]を選択します。
- [ボックスをLargeQueueでロード]アクティビティをクリックして選択します。[プロパティ]で、[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[MainTaskSequence]を選択します。
- [アイテム]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントして[ボックス]を選択します。
- [移動:MainOpからプロセッサへ]アクティビティをクリックして選択します。[プロパティ]で、[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[MainTaskSequence]を選択します。
- [目的地]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[プロセッサ]を選択します。
- [プロセッサでボックスをアンロード]アクティビティをクリックして選択します。[プロパティ]で、[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[MainTaskSequence]を選択します。
- [アイテム]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントして[ボックス]を選択します。
- [ステーション]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[プロセッサ]を選択します。
- [メインタスクシーケンスを終了]アクティビティをクリックして選択します。[プロパティ]で、[タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[MainTaskSequence]を選択します。
- [リリース:主オペレーター]アクティビティをクリックして選択します。[プロパティ]で、[割り当て先のリソース]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントして[MainOperator]を選択します。
シミュレーションモデルを保存することをおすすめします。
ステップ6 二次輸送タスクロジックを編集する
このステップでは、二次輸送タスクトラックでオペレーターのタスクをコントロールするロジックを作成します。このアクティビティが機能する方法の概要を次に示します。
アクティビティ | 説明 |
---|---|
取得:支援オペレーター | このアクティビティでは、輸送タスクに取り組むオペレーターの取得を試みます。オペレーターがタスクで作業できない場合、トークンはオペレーターが使用可能になるまでこのアクティビティで待機します。オペレーターがタスクで作業できる場合は、トークンはリソースを取得し、そのトークンを次の下流オブジェクトにリリースします。リソースを取得したら、取得した特定のオペレーターへの参照を含む[AssistingOperator]というラベルをトークンに割り当てます。これを使用して、残りのタスクをこのオペレーターに割り当てます。 |
支援タスクシーケンスを作成 | このアクティビティでは、支援オペレーターが実行するタスクのシーケンスとして、一連のタスク(ロードとアンロード)を設定します。 |
移動:AsstOpからLargeQueueへ | このアクティビティでは、支援オペレーターに3DモデルのLargeQueueに移動するよう指示します。 |
同期:LargeQueueで両方のオペレーター | このアクティビティにより、支援オペレーターもキューに移動し、大きなボックスのロードを支援する準備ができるまで、主オペレーターが待てるようになります。主オペレーターをコントロールするトークンは、支援オペレーターをコントロールするトークンがこのアクティビティに到達するまで待機します。このアクティビティにはデフォルト設定を使用します。 |
同期:両方のオペレーターがボックスをロード | このアクティビティにより、主オペレーターが大きなボックスをロードするまで、支援オペレーターが待機できるようになります。支援オペレーターをコントロールするトークンは、主オペレーターをコントロールするトークンがこのアクティビティに到達するまで待機します。このアクティビティにはデフォルト設定を使用します。 |
移動:AsstOpからプロセッサへ | このアクティビティは、支援オペレーターに、以前に取得したプロセッサに移動するように指示します。どのプロセッサに移動すべきかを主オペレーターに指示するために、[プロセッサ]ラベルを使用します。 |
同期:両方のオペレーターがリリース準備完了 | このアクティビティにより、主オペレーターが大きなボックスをアンロードするまで、支援オペレーターが待てるようになります。支援オペレーターをコントロールするトークンは、主オペレーターをコントロールするトークンがこのアクティビティに到達するまで待機します。このアクティビティにはデフォルト設定を使用します。 |
支援タスクシーケンスを終了 | このアクティビティは、支援オペレーターの一連のタスクを完了として指定します。 |
リリース:支援オペレーター | このアクティビティは、他のタスクで作業できるように支援オペレーターをリリースします。 |
シンク:調整されたタスクの完了 | このアクティビティは、フローアイテムにリンクされたトークンを処理フローから削除します。 |
このロジックを作成するには:
- [取得:支援オペレーター]アクティビティをクリックして選択します。このアクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
- [リソース:オペレーター]共有アセットをクリックしてサンプリングします。
- [プロパティ]の[ラベルに割り当てる]ボックスに、「
token.AssistingOperator
」と入力します。 - [支援タスクシーケンスを作成]アクティビティをクリックして選択します。[プロパティ]で、[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントして[AssistingOperator]を選択します。
- [割り当て先]ラジオボタンの下のボックスで、テキストを「token.AssistingTaskSequence」に変更します。
- [移動:AsstOpからLargeQueueへ]アクティビティをクリックして選択します。[プロパティ]で、[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントして[AssistingTaskSequence]を選択します。
- [目的地]ボックスの横にある[サンプラー]ボタン をクリックしてサンプリングモードに入ります。
- 3Dモデルで、[LargeQueue]をクリックしてメニューを開きます。[LargeQueue]を選択します。
- [移動:AsstOpからプロセッサへ]アクティビティをクリックして選択します。[プロパティ]で、[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントして[AssistingTaskSequence]を選択します。
- [目的地]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[プロセッサ]を選択します。
- [支援タスクシーケンスを終了]アクティビティをクリックして選択します。[プロパティ]で、[タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントして[AssistingTaskSequence]を選択します。
- [リリース:支援オペレーター]アクティビティをクリックして選択します。[プロパティ]で、[割り当て先のリソース]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントして[AssistingOperator]を選択します。
シミュレーションモデルを保存することをおすすめします。
ステップ7 シミュレーションモデルを実行してテストする
シミュレーションモデルを実行:
ご覧のとおり、LargeQueueに大きなボックスが表示されると、最終的にはいずれかのオペレーターがそれをロードするために移動します。もう1人のオペレーターが同様にボックスをロードするために移動すると、2人のオペレーターがボックスをいずれかのプロセッサに輸送します。[分割]と[同期]アクティビティにより、2人のオペレーターが同時に自分のタスクを実行できるようになります。
調整されたタスクの唯一の欠点は、2人のオペレーターが調整されたタスクを処理するときにまったく同じ移動パスをたどるため、3次元のビジュアル化で2人のパスが統合し、おかしな表示になることです。これを修正するための1つの方法は、支援オペレーターにわずかなオフセットを与える、いくつかの[ビジュアルを変更]アクティビティを適用することです。しかし、これを適切に実行するのは少し難しいので、おかしな表示のまま使用したほうが簡単と思われるかもしれません。
結論
これで、調整されたタスクのチュートリアルは終了です。ここまでで、パラレルトラックを構築して調整されたタスクを構築する方法、および、2人のオペレーターを同期する調整処理フローアクティビティの使用方法の概要をご理解いただけたのではないかと思います。