チュートリアルタスク1.3 - リストを使用したタスク
タスクの概要
このタスクでは、処理フローでリストを使用してタスクを構築する方法について学習します。リストはリソースといくつかの点で類似していますが、独自のカスタム基準を使用してタスクの並べ替えや優先順位付けを行えるという利点があります。このチュートリアルでは、リストを使用してタスクを構築する際の利点と欠点についても説明します。
作業が終了すると、シミュレーションモデルは次のモデルのような動作をします。
ステップ1 3Dモデルをコピーして変更する
このステップでは、リソースロジックの作成に使用したシステムをコピーします。作業が完了すると、3Dモデルは次の画像のようになります。
平面をコピーする前に、前のチュートリアルタスクの最後でモデルに加えた変更の一部も取り消すことに注意してください。3Dモデルにこれらの変更を加えるには:
[Processor1B ]から[Operator2A ]へのセンターポート接続を削除します(ポート接続を削除するには、接続している2つのオブジェクトをクリックしながら、[W]キーを長押しします)。
[Processor1B ]をダブルクリックして、プロパティを開きます。
[プロセッサ ]タブで[処理にオペレーターを使用 ]チェックボックスをオフにします。
[OK ]ボタンをクリックしてウィンドウを閉じ、変更を保存します。
[ResourceLogic ]平面をクリックして選択します。(オレンジ色のものです)。
[Ctrl + C]キーを押して、平面とその上にあるすべてのオブジェクトをコピーします。モデルの空白部分をクリックして、元の平面の選択を解除します。[Ctrl + V]を押して平面をコピーします。
コピーした平面を選択した状態で、[クイックプロパティ]で、平面の名前を「ListLogic 」に変更します。
[色]ボックスの横にある矢印をクリックして、色選択ツールメニューを開きます。赤の最も淡い色合いを選択します。
コピーされた平面上の各3Dオブジェクトの名前を、[Queue3 ]、[Operator3A ]、[Processor3A ]など、2 から3 に置き換えて変更します。
[Operator3A ]を右クリックして、メニューを開きます。[オブジェクトグループ ]をポイントし、[ResourceOperators ]グループの横にチェックマークがあることを確認します。これは、Operator3Aが現在このグループに属していることを意味します。このオペレーターをこのグループから削除するには、[ResourceOperators ]をクリックします。
前のステップを繰り返して、次のオブジェクトを次のグループから削除します。
[ResourceOperators ]グループから[Operator3B ]を削除します。
[ResourceProcessors ]グループから[Processor3A ]を削除します。
[ResourceProcessors ]グループから[Processor3B ]を削除します。
[Operator3A ]を右クリックして、メニューを開きます。[オブジェクトグループ ]をポイントし、[新しいグループに追加 ]を選択します。
グループプロパティウィンドウで、グループの名前を「ListOperators 」に変更します。
[サンプラー ]ボタン をクリックして、サンプリングモードに入ります。
3Dモデルで[Operator3B ]をクリックしてサンプリングし、グループに追加します。
グループプロパティウィンドウを閉じます。
[Processor3A ]を右クリックしてメニューを開きます。[オブジェクトグループ ]をポイントし、[新しいグループに追加 ]を選択します。
グループプロパティウィンドウで、グループの名前を「ListProcessors 」に変更します。
[サンプラー ]ボタン をクリックして、サンプリングモードに入ります。
3Dモデルで[Processor3B ]をクリックしてサンプリングし、グループに追加します。
グループプロパティウィンドウを閉じます。
3Dモデルがこのステップの冒頭に表示した画像のようになっていることを確認します。
ステップ2 リストを使用してタスクを作成する
このステップでは、アクティビティを一般的な処理フローに追加して、リストを使用して輸送タスクロジックを作成するタスクフローを構築します。
作業が完了すると、処理フローは次の画像のようになります。
現時点では、これらのアクティビティの追加と処理フローへの接続のみを行います。後のステップで、プロパティを編集して機能を追加します。
これらのアクティビティを追加して接続するには:
メインツールバーで[処理フロー ]ボタンをクリックして、メニューを開きます。[Add a General Process Flow ]を選択します。
処理フローの空白をクリックして、何も選択されていない状態にします。[クイックプロパティ]で、処理フローの名前を「ListLogic 」に変更します。
処理フローを開き、有効にした状態で、ライブラリから2つの[処理 ]形状([フローチャート ]の下)をドラッグします。
[クイックプロパティ]で、最初の形状の名前を[キューがリストへタスクをプッシュ ]に変更します。
[色 ]ボックスの横にある矢印をクリックして赤に変更します。ListLogic平面の色と一致するように、赤を使用します。
2つ目の形状の名前を[オペレーターがリストからタスクをプル ]に変更します。前のステップを繰り返して、2つ目の形状の色も赤に変更します。
[キューがリストへタスクをプッシュ ]形状で、次のアクティビティを追加してスタックブロックを作成します。
イベントトリガーソース (トークンの作成 の下)
[リストにプッシュ ]([共有アセット ]の下)
シンク (ベーシック の下)
スタックブロックの右側に[リスト ]共有アセットを追加します。
アクティビティと共有アセットの名前を次のように変更します。
アクティビティ
新しい名前
リスト
リスト:輸送するアイテム
ソース(イベントトリガー)
ソース:アイテムがキューに入る
リストにプッシュ
リストにプッシュ:輸送するアイテム
シンク
シンク:アイテムがプッシュ済み
[オペレーターがリストからタスクをプル ]形状で、次を含むスタックブロックを作成します。
[スケジュールソース ]([トークン作成 ]で)
[リソースを取得 ]([共有アセット ]で)
新しく作成されたスタックブロックの下に、次のアクティビティを含む2つ目のスタックブロックを作成します。
[リストからのプル ]([共有アセット ]で)
[ロード ]([タスクシーケンス ]で)
[移動 ]([タスクシーケンス ]で)
遅延 (ベーシック の下)
[リソースを取得 ]([共有アセット ]で)
[アンロード ]([タスクシーケンス ]で)
[イベントを待つ ]([ベーシック ]の下)
[リソースをリリース ]([共有アセット ]で)
スタックブロックの右側に2つの[リソース ]共有アセットを追加します。
アクティビティと共有アセットの名前を次のように変更します。
アクティビティ
新しい名前
リソース(1つ目)
リソース:演算子
リソース(2つ目)
リソース:プロセッサ
ソース(スケジュール)
ソース:シミュレーションを開始する
取得(1つ目)
オペレーターを取得
リストからプル
リストからプル:輸送するアイテム
ロード
アイテムをキューからロードする
移動
ScanStationに移動する
遅延
遅延:スキャンアイテム
取得(2つ目)
プロセッサを取得する
アンロード
プロセッサのアイテムをアンロード
イベントを待つ
イベントを待つ:処理完了
リリース
プロセッサをリリースする
[オペレーターを取得 ]から[リストからプル:輸送するアイテム ]へのコネクターを作成します。
[プロセッサをリリース ]から[リストからプル:輸送するアイテム]にループバックするコネクターを作成します。
処理フローの空白スペースをクリックして、何も選択されていないことを確認します。[クイックプロパティ]で[その他のプロパティ ]ボタンをクリックします。
[変数 ]タブで[追加 ]ボタン をクリックして新しい変数を作成します。
[名前 ]ボックスで、変数の名前を「NumberOfOperators 」に変更します。
[タイプ ]メニューが[数 ]に設定されていることを確認します。
[デフォルト値 ]ボックスで、現在の値を削除し、「Group("ListOperators").length
」と入力します。
このコードの意味
このコードは、現在[ListOperators ]グループに属するメンバー数を処理フローに伝えます。コード[.length
]は、グループ内のメンバーの数を示します。
処理フローで輸送タスクを行う各オペレーター用のトークンを作成するために、この変数が必要になります。このグループにオペレーターを追加、またはグループからオペレーター削除すると、リセット時に処理フローが自動的に更新されます。
[OK ]ボタンをクリックしてウィンドウを閉じ、変更を保存します。
処理フローがこのステップの冒頭に表示した画像のようになっていることを確認します。
ステップ3 リストにプッシュロジックを作成する
リストを扱うときの注意点として、通常は複数のフローを扱うため、リストはリソースよりやや複雑であるということがあります。ここでフロー という用語は、処理フローを通過する2つの異なるトークンのストリームを指します。1つのトークンフローで3Dモデル内のアイテムのフローを管理し、輸送の準備ができたら、タスクリストにそれらをプッシュします。トークンのもう1つのフローは、3Dモデル内のオペレーターのフローを管理し、リストからアイテムをプルして一連のタスクを完了するように指示します。
このステップでは、[キューがリストへタスクをプッシュ]処理フローのアクティビティのプロパティを編集します。これらのアクティビティは、輸送する必要があるアイテムのフローを本質的にコントロールします。つまり、フローアイテムがキューに入ると、フローアイテムはリストにプッシュされ、輸送されるまでそこで待機します。
各アクティビティと共有アセットの機能の概要を次に示します。
アクティビティ
説明
リスト:輸送するアイテム
このリストは、Queue3で、プロセッサに輸送する準備ができている、すべてのフローアイテムへの参照を格納します。
ソース:アイテムがキューに入る
[イベントトリガーソース]は、3Dモデルでイベントをリッスンするイベントリスニングアクティビティです。フローアイテムがQueue3に入ると、このアクティビティはトークンを作成し、これを次の下流アクティビティにリリースします。このトークンに、イベントをトリガーする特定のフローアイテムへの参照を含む、[FlowItem ]という名前のラベルを割り当てます。
リストにプッシュ:輸送するアイテム
このアクティビティは、キューにあるすべてのフローアイテムを[輸送するアイテム]リストにプッシュします。アイテムがリストにプッシュされると、[FlowItem ]ラベルを使用して特定のフローアイテムへの参照が保持されます。
シンク:アイテムがプッシュ済み
このアクティビティは、処理フローからトークンを削除します。デフォルト設定を使用します。
この機能を作成するには:
[ソース:アイテムがキューに入る ]アクティビティをクリックして選択します。[感嘆符 ]ボタン をクリックして、サンプリングモードに入ります。
3Dモデルで[Queue3 ]をクリックして、メニューを開きます。[Queue3:エントリ時 ]を選択します。
[クイックプロパティ]の[ラベルの割り当て ]テーブルで、[ラベル名または値 ]列の下の[入るアイテム ]行にあるセルをクリックします。「FlowItem 」と入力します。
[オペレーション ]の[入るアイテム ]行にあるセルをクリックしてメニューを開きます。[割り当てる ]を選択します。
このラベルの役割
標準のオブジェクトベースのイベントには、特定のパラメータが関連付けられています。この場合、[入るアイテム]パラメータには、イベントをトリガーしたフローアイテムへの参照が含まれています。通常、この情報の一部は、他の処理フローアクティビティが参照できるラベルに入れて保持します。
このチュートリアルでは、[FlowItem ]というラベル名を使用して、この処理フローでこのラベルを参照する他の場所がより明確にわかるようにしています。
[リストにプッシュ:輸送するアイテム ]アクティビティをクリックして選択します。[感嘆符 ]ボタン をクリックして、サンプリングモードに入ります。
[リスト:輸送するアイテム ]共有アセットをクリックして選択します。このアクティビティと共有アセットが青い線でリンクされます。
[クイックプロパティ]で[プッシュ値 ]ボックスの横にある矢印をクリックして、メニューを開きます。[Token Label ]をポイントし、次に[FlowItem ]を選択します。
次のステップでは、オペレーターがリストからアイテムをプルし、輸送タスクを開始させるロジックを設定します。
ステップ4 リストからプルロジックを作成する
このステップでは、[オペレーターがリストからタスクをプル]処理フローのアクティビティのプロパティを編集します。前のステップでは、リストを使用する処理フローに通常複数のトークンフローがあることを学びました。この処理フローでは、1つのトークンフローがフローアイテムをコントロールし、もう1つがオペレーターをコントロールします。
このステップでは、オペレーターをコントロールするロジックを設計します。この一連のアクティビティでは、リストからアイテムをプルし、そのアイテムを輸送するよう、利用可能なオペレーターに指示します。前の処理フローでトークンがフローアイテムをどのように表していたかを確認してください。この処理フローでは、トークンはタスク実行者を表します。
各アクティビティと共有アセットの機能の概要を次に示します。
アクティビティ
説明
リソース:演算子
この共有アクティビティを3Dモデルの[ListOperators ]グループにリンクし、このグループのオペレーターを輸送タスクのために取得できるようにします。
リソース:プロセッサ
この共有アクティビティを3Dモデルの[ListProcessors ]グループにリンクして、このグループのプロセッサを一度に1つのフローアイテムに制限して取得できるようにします。
ソース:シミュレーションを開始する
シミュレーションが開始すると、このアクティビティは[ListOperators ]グループ内の各オペレーター用のトークンを作成します。ここで、このアクティビティを、チュートリアルの前半で設定した[NumberOfOperators ]処理フロー変数を参照するように設定します。このアクティビティは、シミュレーションの開始時にグループ内のオペレーターの数を参照して、作成するトークンの数を決定します。
オペレーターを取得
このアクティビティは、輸送タスクを処理するためのリソース(オペレーターの1つ)を取得しようとします。オペレーターがタスクで作業できない場合、トークンはオペレーターが使用可能になるまでこのアクティビティで待機します。オペレーターがタスクで作業ができる場合は、トークンがリソースを取得し、そのトークンを次の下流オブジェクトにリリースします。リソースが取得されると、トークンに、取得した特定のオペレーターへの参照を含む[Operator ]という名前のラベルを割り当てます。
リストからプル:輸送するアイテム
このアクティビティは、[輸送するアイテム]リストからフローアイテムをプルします。リストからプルされたフローアイテムへの参照を含む[TransportedItem ]というラベルをトークンに割り当てます。
アイテムをキューからロードする
このアクティビティは、選択する必要があるフローアイテムと、そのフローアイテムの場所をオペレーターに指示します。
ScanStationに移動する
このアクティビティは、[ScanStation3]オブジェクトに移動するようオペレーターに指示します。
遅延:スキャンアイテム
このアクティビティは、コンピュータでフローアイテムをスキャンするのにかかる時間をシミュレーションします。遅延を1秒に設定します。
プロセッサを取得する
このアクティビティは、オペレーターがフローアイテムをアンロードする準備ができるとプロセッサの取得を試みます。プロセッサが使用可能な場合は、トークンがリソースを取得し、そのトークンを次の下流オブジェクトにリリースします。リソースが取得されると、トークンに、取得した3Dモデル内のプロセッサへの参照を含む[Processor ]という名前のラベルを割り当てます。
プロセッサのアイテムをアンロード
このアクティビティは、フローアイテムをアンロードする場所をオペレーターに指示します。このタスクが終了すると、トークンは[リストからプル]アクティビティにループバックし、同じ処理を繰り返します。
イベントを待つ:処理完了
これはイベントリスニングのアクティビティです。つまり、3Dモデル内のオブジェクトをリッスンし、イベントが発生すると、トークンを次の下流アクティビティにリリースします。このアクティビティは、プロセッサがアイテムの処理を終了するまで待機してから、トークンを次のアクティビティにリリースします。
プロセッサをリリースする
このアクティビティは、別のフローアイテムを受け入れることができるようにプロセッサをリリースします。[Processor ]ラベルを使用してプロセッサをリリースします。
このロジックを作成するには:
[リソース:オペレーター ]共有アセットをクリックし、選択します。[クイックプロパティ]で[参照 ]ボックスの横にある矢印をクリックして、メニューを開きます。[グループ ]をポイントし、[ListOperators ]を選択します。
[リソース:[プロセッサ ]共有アセットをクリックして選択します。[クイックプロパティ]で[参照 ]ボックスの横にある矢印をクリックして、メニューを開きます。[グループ ]をポイントし、[ListProcessors ]を選択します。
[ソース:シミュレーションを開始 ]アクティビティをクリックして選択します。[到着 ]テーブルの[クイックプロパティ]で、[数量 ]列の下のセルをクリックします。そのセルを選択した状態で、テーブルの下にある[到着1:数量 ]ボックスの横にある矢印をクリックしてメニューを開きます。[処理フロー変数 ]をポイントし、[NumberOfOperators ]を選択します。
この処理フロー変数の役割
このチュートリアルの前半では、[NumberOfOperators ]という処理フロー変数を作成し、現在[ListOperators ]グループに属するメンバーの数を処理フローに伝えるようにしました。[スケジュールソース]アクティビティが輸送タスクを処理できる各オペレーター用のトークンを作成するには、この変数が必要になります。このグループにオペレーターを追加、またはグループからオペレーター削除すると、このアクティビティは、シミュレーションモデルをリセット時に自動的に更新します。
[オペレーターを取得 ]アクティビティをクリックして選択します。アクティビティの横にある[感嘆符 ]ボタン をクリックして、サンプリングモードに入ります。
[リソース:オペレーター ]共有アセットをクリックして選択します。このアクティビティと共有アセットが青い線でリンクされます。
[ラベルに割り当てる ]ボックスで、現在のテキストを削除して「token.Operator
」と入力します。
[リストからプル:輸送するアイテム ]アクティビティをクリックして選択します。アクティビティの横にある[感嘆符 ]ボタン をクリックして、サンプリングモードに入ります。
[リスト:輸送するアイテム ]共有アセットをクリックして選択します。このアクティビティと共有アセットが青い線でリンクされます。
[クイックプロパティ]で、[割り当て先 ]ボタンの下の現在のテキストを削除し、「token.TransportedItem
」と入力します。
[アイテムをキューからロード ]アクティビティをクリックして選択します。[クイックプロパティ]で[タスク実行者/シーケンス ]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル ]をポイントし、[Operator ]を選択します。
[アイテム ]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル ]をポイントし、[TransportedItem ]を選択します。
[ScanStationに移動 ]アクティビティをクリックして選択します。[クイックプロパティ]で[タスク実行者/シーケンス ]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル ]をポイントし、[Operator ]を選択します。
[目的地 ]ボックスの横にある[サンプラー ]ボタン をクリックしてサンプリングモードに入ります。
3Dモデルで、[ScanStation3 ]をクリックしてメニューを開きます。[ListLogic/ScanStation3 ]を選択します。
[遅延 ]アクティビティをクリックして選択します。[遅延時間 ]ボックスの[クイックプロパティ]で、現在のテキストを削除し、「1.00
」と入力します。
[プロセッサを取得 ]アクティビティをクリックして選択します。アクティビティの横にある[感嘆符 ]ボタン をクリックして、サンプリングモードに入ります。
[リソース:プロセッサ ]共有アセットを選択してサンプリングします。このアクティビティと共有アセットが青い線でリンクされます。
[クイックプロパティ]の[ラベルに割り当てる ]ボックスで、現在のテキストを削除して「token.Processor
」と入力します。
この式の意味
[リソースを取得]アクティビティがリソースを取得すると、入るトークンにラベルが追加されます。このラベルには、取得した3Dモデル内のプロセッサへの参照が含まれています。
デフォルトのラベル名のリソース を使用できますが、より良いモデル管理のために、より直感的な名前をラベルに割り当てると便利です。このチュートリアルでは、ラベル名を「Processor 」に変更して、この処理フローでこのラベルを参照する他の場所がより明確にわかるようにしています。
[プロセッサのアイテムをアンロード ]アクティビティをクリックして選択します。[クイックプロパティ]で[タスク実行者/シーケンス ]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル ]をポイントし、[Operator ]を選択します。
[アイテム ]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル ]をポイントし、[TransportedItem ]を選択します。
[ステーション ]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル ]をポイントし、[Processor ]を選択します。
[イベントを待つ:処理完了時 ]アクティビティをクリックして選択します。[オブジェクト ]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル ]をポイントし、[Processor ]を選択します。
[イベント ]ボックスの横にある[サンプラー ]ボタン をクリックして、サンプリングモードに入ります。
3Dモデルで、[Processor3A ]をクリックしてメニューを開きます。[処理完了時 ]を選択します。
[プロセッサをリリース ]アクティビティをクリックして選択します。[割り当て先のリソース ]の横にある矢印をクリックして、メニューを開きます。[トークンラベル ]をポイントし、[Processor ]を選択します。
モデルをリセットして実行します。
ご覧のように、リストを使用する処理フローは、リソースのみを使用する処理フローが実行できるすべてを実行できます。2つのモデルは同じように動作します。リストロジックを使用する唯一の欠点は、最初の設定が少し複雑なことです。リストを使用する場合は、ロジックをより綿密に検討する必要があります。
リストを使用する利点とは?リストを使用する主な利点の1つは、かなり複雑なロジックを組み込むことができるということです。リストを使用して、特定のタスクへの優先順位付け、リストフィールドに基づいたオペレーターへのタスクの割り当て、タスクの並べ替えなどを行うことができます。次のステップでは、リストを使用して輸送タスクを優先度で並べ替える方法を示します。
ステップ5 ラベルを使用してタスクに優先順位を付ける
このステップでは、リストを使用して、フローアイテムに優先度を追加します。オペレーターは、優先度の低いフローアイテムの前に優先度の高いフローアイテムを輸送します。このロジックを作成するには、すべてのフローアイテムに[RushOrder ]というラベルを追加します。このラベルは、フローアイテムが急ぎ注文かを示す真または偽の値(1が真、0が偽)のいずれかになります。アイテムの30%が急ぎ注文になるように設定します。また、ロジックを見やすくするため、急ぎ注文のアイテムの色を赤に変更します。
最後に、[リストからプル:輸送するアイテム ]アクティビティのプロパティを編集し、オペレーターが急ぎ注文アイテムを先に輸送するようにします。このアクティビティに、[RushOrder]値が高いアイテムから先にリストからプルされるようにするクエリを追加することで、このロジックを作成します。
このロジックを作成するには:
3Dモデルで[Source3 ]をダブルクリックして、[プロパティ]ウィンドウを開きます。
[トリガー ]タブで[追加 ]ボタン をクリックして、メニューを開きます。[作成時 ]をポイントしてこのトリガーを追加します。
[OnCreation ]ボックスの横にある[追加 ]ボタン をクリックして、メニューを開きます。[データ ]をポイントし、[ラベルを設定 ]を選択します。ピックリストオプションウィンドウが表示されます。
[ラベル ]ボックスで、現在のテキストを削除し、「RushOrder
」と入力します。
[値 ]ボックスで、現在のテキストを削除し、「bernoulli(30, 1, 0)
」と入力します。
このコードの意味
bernoulli統計分布は、ラベルに特定の値を特定の時間の割合で割り当てます。この場合、分布は、時間の30%で1の値を返します(これは、「真」であり、急ぎ注文であることを意味します)。残りの時間は0の値を返します(これは、「偽」であることを意味します)。つまり、フローアイテムの30%は急ぎ注文であることを示します。
[OnExit ]ボックスの横にある[追加 ]ボタン をクリックして、メニューを開きます。[ビジュアル ]をポイントし、[オブジェクトの色を設定 ]を選択します。ピックリストオプションウィンドウが表示されます。
[色 ]ボックスで、現在のテキストを削除し、「Color.byNumber(item.RushOrder)
」と入力します。
このコードの意味
このコードは、フローアイテムがソースを離れるときにフローアイテムの色を変更するようにソースに指示します。[RushOrder ]ラベルを使用して、そのラベルの数値に基づいて色を割り当てます。値が1のアイテムは赤色に変更されます。値が0のアイテムは黒色です。
[OK ]ボタンを押して変更を保存し、プロパティウィンドウを閉じます。
ListLogic プロセスフローで[リスト:輸送するアイテム ]共有アセットをクリックして選択します。[クイックプロパティ]で[エントリを表示 ]ボタンをクリックして、エントリウィンドウを開きます。後でモデルを実行するときにこれを使用するので、必要に応じて側面に移動してください。
リスト共有アセットの[クイックプロパティ]に戻り、[詳細 ]ボタンをクリックしてリストのプロパティを開きます。
[フィールド ]タブで[追加 ]ボタン をクリックして、メニューを開きます。[ラベル ]を選択し、ラベルフィールドをリストに追加します。
[ラベルフィールド ]ボックスで、現在のテキストを削除し、「RushOrder
」と入力します。
[バックオーダー ]タブで[プッシュですべての値を再評価 ]チェックボックスをオンにします。
[OK ]ボタンをクリックして変更を保存し、ウィンドウを閉じます。
ListLogic プロセスフローで[リストからプル:輸送するアイテム ]アクティビティをクリックして選択します。[クイックプロパティ]で[クエリ/オブジェクト ]ボックスの横にある矢印をクリックして、メニューを開きます。[ORDER BY (Sort) ]をポイントし、[RushOrder ]を選択します。このボックスに表示されるクエリで、[ASC
]を[DESC
]に変更します。
モデルを実行する前にリストエントリを開くと、シミュレーションの実行中に表示できて便利です。[リスト:輸送するアイテム ]共有アセットをクリックして選択します。[クイックプロパティ]で[エントリの表示 ]ボタンをクリックします。
モデルをリセットして実行します。3Dモデルだけでなく、リストのエントリの動きにも注目してください。
オペレーターは常に赤色の急ぎ注文アイテムを他のアイテムより前に優先して輸送していることを確認してください。オペレーターが急ぎ注文アイテムをすぐに取らない場合、それは通常、その急ぎ注文アイテムが、オペレーターのトークンが[リストからプル]アクティビティが到着した後にキューに到着したためです。
リストを使用すると、この種の複雑なタスクロジックを構築できます。タスク実行者がタスクの並べ替え、フィルタリング、または優先順位付けを行う必要があるシステムに最適です。
ステップ6 その他のタスクを追加する
前のタスクでわかったように、タスク実行者がキュー内の急ぎ注文フローアイテムの1つをピックアップしないことが時々あります。この問題は、タスク実行者が既にロードタスクを開始した後に急ぎ注文アイテムがキューに到着するという、微妙なタイミングの問題によって生じます。この問題は、[リストからプル]アクティビティの前に[移動]アクティビティを追加するだけで解決できます。このようにして、タスク実行者はリストからアイテムをプルする前にキューに戻ります。これにより、優先度の高いアイテムが常に最初に選択されるようになります。
作業が終了すると、処理フローは次の画像のようになります。
これらの変更を行うには:
処理フローを開いてアクティブにした状態で[移動 ]アクティビティをドラッグし、それを2つ目のスタックブロックの一番上に追加します。
このアクティビティの名称を[キューに移動する ]に変更します。
[クイックプロパティ]で[実行者/タスクシーケンス ]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル ]をポイントし、次に[オペレーター ]を選択します。
[目的地 ]ボックスの横にある[サンプラー ]ボタン をクリックしてサンプリングモードに入ります。
3Dモデルで[Queue3 ]をクリックして、メニューを開きます。サンプリングするには[ListLogic/Queue3 ]を選択します。
モデルをリセットして実行します。
これでオペレーターは、急ぎ注文したアイテムがキューに入っているときはいつでもそのアイテムを受け取ります。このステップの主な注意点として、タスクの順序とシーケンス確立が重要であることを覚えておいてください。これはオペレーターの動作に、わずかながら重大な影響を与える可能性があります。
結論
処理フローでリストを使用して輸送タスクを構築しました。これには次のような利点があります。
リストにはリソースと同じ多くの利点がある - リソースを使用するロジックと同様に、リストは比較的使いやすく、ロジックは見やすく、簡単にカスタマイズできます。
タスクの並べ替えや優先順位付けが可能である - リストを使用すると、先に完了するタスクを決定するなど、より複雑なタスクロジックを作成できます。
ただし、リストを使用したタスクロジックの構築には、いくつかの欠点があります。
リソースほど直感的に使用できない - リストは、より深いレベルでロジックがどのように機能するかを考える必要があるため、設定が少し複雑になることがあります。リストロジックを設定する際には、より多くの要素を考慮する必要があります。たとえば、シミュレーションモデルのどのイベントがリストへのアイテムのプッシュを引き起こすか、また、どのイベントがそのリストからアイテムのプルを引き起こすかなどのロジックを、細かく考える必要があります。また、処理フロー内のトークンが3Dモデルにおいてどのようにリンクされるのかについても、より慎重に検討する必要があります(それらがフローアイテムやタスク実行者を表しているか、など)。
必ずしも予想どおりに動作するとは限りません - イベントのタイミングやタスクのシーケンスが、予期しない形でオペレーターの動作に影響を与えることがあります。ただし、予期しない動作が発生した場合でも、処理フローのトラブルシューティングや修正は非常に簡単です。
ここまでで、ローカル リストを使用してタスクロジックを作成する方法を学びました。次のチュートリアルでは、グローバル リストを使用する方法を学習し、さまざまなタイプのタスクロジックを構築するためのさらに多くの可能性を探ります。「チュートリアルタスク1.4 - グローバルリストを使用したタスク 」に進みます。