タスク5.2 - カスタムタスク実行者を作成する
タスクの概要
このチュートリアルタスクでは、タスクの実行後にデフォルトの場所に戻るオペレーターをモデル化して、既存のタスク実行者を変更する方法を学習します。一定の時間内に新しいタスクが来なければ、オペレーターは休憩室に行き、仕事を待ちます。作業が終了すると、モデルは次の画像のようになります。
ステップ1 タスク実行者処理フローにアクティビティを追加する
このステップでは、オブジェクトの処理フローにアクティビティを追加して、カスタムの固定リソースを構築します。この固定リソースでは、3つのフローアイテムを受け取り、アイテムをバッチ処理し、次の下流リソースにアイテムをリリースします。作業が完了すると、処理フローは次の画像のようになります。
現時点では、これらのアクティビティの追加と処理フローへの接続のみを行います。後のステップで、プロパティを編集して機能を追加します。
これらのアクティビティを追加して接続するには:
- メインツールバーで[処理フロー]ボタンをクリックして、メニューを開きます。[タスク実行者処理フローを追加]をポイントし、[空白]を選択します。
- [プロパティ]の[処理フローの名前]ボックスで、現在のテキストを削除し、処理フローの名前を「OperatorLogic」に変更します。
- ライブラリから、[スケジュールソース]アクティビティ([トークンの作成]の下)を追加します。
- ライブラリから、次のアクティビティを追加して、スタックブロックを作成します。
- [イベントを待つ]アクティビティ
- [決定]アクティビティ
- ライブラリから、次のアクティビティを追加して、2つ目のスタックブロックを作成します。
- [移動]アクティビティ
- [イベントを待つ]アクティビティ
- ライブラリから、次のアクティビティを追加して、3つ目のスタックブロックを作成します。
- [移動]アクティビティ
- [イベントを待つ]アクティビティ
- 分かりやすくするために、これらのアクティビティの名前を次のように変更します。
- 次のアクティビティからコネクターを作成します。
- [ソース:シミュレーションを開始]から[イベントを待つ:オペレーターは利用可能か?]アクティビティに
- [決定:タスクはあるか?]から[キューに戻る]アクティビティに
- [イベントを待つ:10秒で可能なタスクか?]から[休憩室へ移動]アクティビティに
- [決定:タスクはあるか?]アクティビティから[キューに戻る]アクティビティへのコネクターをクリックして選択します。
- [プロパティ]の[名前]ボックスに「
No
」と入力します。 - [イベントを待つ:10秒で可能なタスクか?]から[休憩室へ移動]アクティビティへのコネクターに対して前のステップを繰り返します。
- 3つのスタックブロックの最後から[イベントを待つ:オペレーターは利用可能か?]アクティビティにループするコネクターを作成します。
- [決定:タスクはあるか?]アクティビティから[イベントを待つ:オペレーターは利用可能か?]アクティビティにループするコネクターをクリックして選択します。
- [プロパティ]の[名前]ボックスに「
Yes
」と入力します。 - [イベントを待つ:10秒で可能なタスクか?]から[イベントを待つ:オペレーターは利用可能か?]アクティビティにループするコネクターに対して前のステップを繰り返します。
アクティビティ | 新しい名前 |
---|---|
ソース | ソース:シミュレーションを開始 |
最初のイベントを待つ | イベントを待つ:オペレーターは利用可能か? |
決定 | 決定:タスクはあるか? |
最初の移動 | キューに戻る |
2番目のイベントを待つ | イベントを待つ:10秒で可能なタスクか? |
2回目の移動 | 休憩室へ移動 |
3番目のイベントを待つ | イベントを待つ:タスクはあるか? |
シミュレーションモデルを保存することをおすすめします。
ステップ2 アクティビティの最初のブロックを編集する
このステップでは、最初の3つの処理フローのアクティビティのプロパティを編集します。最初に、オペレーターをインスタンスとして処理フローに添付する必要があります。これにより、currentキーワードを使用してオペレーターを動的に参照することができるようになります。また、より複雑なモデルを簡単に拡張できるようになります。各オブジェクトの処理フローをコピーせずに、別のオペレーターを処理フローへの添付として追加できます。
最初の3つのアクティビティが機能する方法の概要を次に示します。
アクティビティ | 説明 |
---|---|
ソース:シミュレーションを開始 | [スケジュールソース]アクティビティでは、シミュレーションの開始直後にトークンを1つ作成し、そのトークンを[イベントを待つ]アクティビティに送信します。このトークンを作成した後は、追加のトークンは作成されません。トークンは、シミュレーションが終了するまで他の2つのアクティビティをループし続けます。このアクティビティにはデフォルトのプロパティを使用します。 |
イベントを待つ:オペレーターは利用可能か? | [イベントを待つ]アクティビティはイベントリスニングのアクティビティです。つまり、リスニング対象のイベントが発生するまで、トークンはこのアクティビティで待機します。この[イベントを待つ]アクティビティは、各タスクまたはタスクシーケンスの終了時にオペレーターが利用可能になったときにリッスンします。オペレーターに別のタスクシーケンスが割り当てられている場合、このタスクへの参照を含む「nextTask」というラベルが追加されます。 |
決定:タスクはあるか? | この[決定]アクティビティでは、nextTaskラベルを確認します。このラベルに有効なタスクシーケンスへの参照がある場合、「Yes」という名前のコネクターを介して送信され、トークンはこれらのアクティビティを再びループします。ない場合は、「No」という名前のコネクターを介してトークンを送信し、アクティビティの次のシーケンスを開始します。 |
これらのプロパティを編集するには:
- 処理フローの空白スペースをクリックして、何も選択されていないことを確認します。
- [プロパティ]の[処理フローインスタンス]グループで、[エンティティの追加 (インスタンス)]リストを探します。[サンプラー]ボタン をクリックして、サンプリングモードに入ります。
- 3Dモデルで、[オペレーター]をクリックして、サンプリングします。
- [イベントを待つ:オペレーターは利用可能か?]アクティビティをクリックして選択します。[プロパティ]の[オブジェクト]ボックスに「
現在 (インスタンスなし)
」が表示されていることを確認します。 - [イベント]ボックスの横にある[サンプラー]ボタンをクリックして、サンプリングモードに入ります。
- 3Dモデルで、[オペレーター]をクリックして、メニューを開きます。[On Resource Available]を選択して、このイベントをサンプリングします。
- 次に、[ラベル照合/割り当て]テーブルを探します。[Label Name or Value]列の[Next TS]行に「
nextTask
」と入力します。 - [Operation]列のセルをクリックして、メニューを開きます。[assign]を選択します。
- [決定:タスクはあるか]アクティビティをクリックして選択します。[プロパティ]で、[トークンを送信]ボックスの横にある矢印をクリックして、メニューを開きます。[条件付きで決定]を選択し、ピックリストオプションを開きます。
- [条件]ボックスに「
token.nextTask
」と入力します。 - [真]ボックスに「
"Yes"
」と入力します。 - [偽]ボックスに「
"No"
」と入力します。
シミュレーションモデルを保存することをおすすめします。
ステップ3 アクティビティの2つ目のブロックを編集する
このステップでは、残りの処理フローのアクティビティのプロパティを編集します。各アクティビティの機能の概要を次に示します。
アクティビティ | 説明 |
---|---|
キューに戻る | トークンがこのアクティビティに到達すると、[キュー]にオペレーターを送り、ロードタスクがあるかを確認します。 |
イベントを待つ:10秒で可能なタスクか? | オペレーターはキューで10秒間待機します。10秒後にロードタスクが使用可能になると、トークンは最初のスタックブロックにループバックし、処理フローは繰り返されます。10秒以内にタスクがない場合、トークンは次のアクティビティに移動します。 |
休憩室へ移動 | トークンがこのアクティビティに到達すると、[休憩室]にオペレーターを送ります。 |
イベントを待つ:タスクはあるか? | オペレーターは、別のロードタスクが利用可能になるまで、休憩室で待機します。 |
これらのプロパティを編集するには:
- [キューに戻る]アクティビティをクリックして選択します。[プロパティ]で、[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[current(インスタンスオブジェクト)]を選択します。
- [目的地]ボックスの横にある[サンプラー]ボタン をクリックしてサンプリングモードに入ります。
- 3Dモデルで、[Queue2]をクリックして、メニューを開きます。[Queue2]を選択します
- [イベントを待つ:10秒で可能なタスクか?]アクティビティをクリックして選択します。[プロパティ]の[オブジェクト]ボックスに「
現在 (インスタンスなし)
」が表示されていることを確認します。 - [イベント]ボックスの横にある[サンプラー]ボタンをクリックして、サンプリングモードに入ります。
- 3Dモデルで、[オペレーター]をクリックして、メニューを開きます。[タスク開始時]を選択して、このイベントをサンプリングします。
- [最大待機タイマーの使用]チェックボックスをオンにします。
- [時間]ボックスに「
10.00
」と入力します。 - [待機タイマー実行時]の横にある[プロパティを編集]ボタン をクリックして、ピックリストオプションの一部を開きます。
- [トークンをリリース]の横にある矢印をクリックして展開します。
- [目的地]ボックスに「
"No"
」と入力します。 - [休憩室に移動]アクティビティをクリックして選択します。[プロパティ]で、[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[current(インスタンスオブジェクト)]を選択します。
- [目的地]ボックスの横にある[サンプラー]ボタン をクリックしてサンプリングモードに入ります。
- 3Dモデルで、[休憩室]をクリックして、メニューを開きます。[休憩室]を選択します。
- [イベントを待つ:10秒で可能なタスクか?]アクティビティをクリックして選択します。[プロパティ]の[オブジェクト]ボックスに「
現在 (インスタンスなし)
」が表示されていることを確認します。 - [イベント]ボックスの横にある[サンプラー]ボタンをクリックして、サンプリングモードに入ります。
- 3Dモデルで、[オペレーター]をクリックして、メニューを開きます。[タスク開始時]を選択して、このイベントをサンプリングします。
シミュレーションモデルを保存することをおすすめします。
ステップ4 モデルを実行する
この時点でモデルの準備は完了しています。リセットして実行してみましょう。オペレーターがアイテムをプロセッサに輸送していることが確認できます。オペレーターが輸送オペレーションを完了し、することが何もなくなると、トークンが処理フローを通過して、キューに移動するようにオペレーターに指示することが確認できます。オペレーターは、キューで10秒間何もしなかった場合は休憩室に移動し、そこで待機することになります。
結論
これで、「カスタムオブジェクトを作成する」チュートリアルは終了です。処理フローによって、シミュレーションモデルでカスタマイズ可能なカスタムオブジェクトを簡単に作成する方法が理解いただけたと思います。