タスク1.1 - リストとリソースを使用する
タスクの概要
この最初のチュートリアルタスクでは、共有アセットを使用して処理フローを構築する方法を学習します。次のテーブルに示すように、処理フローには目的の異なる3つのタイプの共有アセットがあります。
共有アセット | 説明 |
---|---|
リソース | 取得やリリースが可能な、供給に制限があるアセットを指します。商品、サービス、時間、材料、従業員などの供給をシミュレーションするために使用できます。 |
リスト | トークン、フローアイテム、タスク実行者、数値、文字列などをリストにプッシュまたはプルできます。これは、処理フロー内で、またはより動的なリソースとして、複数のトークンを同期するのに便利です。処理フローは処理フロー自体にローカルなリストを使用できます。または、シミュレーションモデルのグローバルリストに紐付けすることもできます。 |
ゾーン | 標準的なアクティビティでは利用できない統計情報を収集できます。また、特定の統計や他の基準に基づいて、処理フローのセクションへのアクセスを制限することもできます。 |
処理フローの3種類の共有アセットの詳細な説明と、他の処理フローアクティビティとの違いについては、「共有アセットについての主要な概念」を参照してください。
このチュートリアルタスクでは、リソースとリストを使用して2名のオペレーターの処理フローで輸送タスクシーケンスを構築する方法を学習します。また、モデル内のリソースやリストを3Dオブジェクトにリンクする方法も学習します。このモデルでは、リストは輸送する必要のあるフローアイテムを追跡し、リソースは輸送タスクを完了するために割り当てられたオペレーターを表します。
作業が終了すると、処理フローは次の画像のようになります。
また、2名のオペレーターがキューからフローアイテムをロードし、3Dモデルにある2つのプロセッサのいずれかでアンロードする際に、それらのオペレーターをコントロールします。
ラベルを使用して3Dモデルに接続する
このモデルでは、ラベルを広範に使用して処理フローのトークンを3Dモデル内のオブジェクトにリンクします。処理フローは、モデルの3Dオブジェクトへの参照を含むラベルを使用して、3Dモデルのロジックをコントロールできます。トークンが処理フローのアクティビティを移動すると、この参照を使用して、アクティビティのロジックを3Dモデルのオブジェクトに適用できます。処理フローでラベルを操作する方法をより深く理解するには、「ラベルについての主要な概念」を参照してください。
このモデルでは、次の目的でラベルを使用します。
- トークンを3Dモデル内のフローアイテムにリンクする - 「pulledItem」と呼ばれるラベルを作成して、処理フローのトークンを3Dモデルで輸送する必要があるフローアイテムにリンクさせます。また、このアイテムの値を、輸送タスクシーケンスを処理する処理フローのセクションでトークンのFlowItemラベルにコピーします。
- オペレーターにタスクシーケンスを割り当てる - この処理フローでリソースを獲得する際、「operator」と呼ばれるラベルをトークンで作成します。これにより3Dモデルで2名のオペレーターのいずれかがリソースにリンクされます。オペレーターが輸送タスクに割り当てられた後、このラベルはこのオペレーターを動的に割り当て、輸送タスクシーケンスのすべてのタスクを完了させるために使用されます。
- 動的にフローアイテムの目的地を設定する - フローアイテムのdestinationラベルは、フローアイテムをどのプロセッサに輸送するかを追跡します。処理フローでは、このラベルの値をトークンで一致する「itemDestination」というラベルにコピーし、これを輸送タスクシーケンスで使用します。
ステップ1 3Dモデルを構築する
このステップでは、基本的な3Dモデルを構築します。作業が完了すると、3Dモデルは次の画像のようになります。
このモデルを構築するには:
- ライブラリから次のオブジェクトをドラッグし、左から順にこの順番でモデルに配置します。
- 1つの[ソース]
- 1つの[キュー]
- 2つの[プロセッサ]
- 1つの[オペレーター]
- 1つの[シンク]
- 1つの[形状]([ビジュアル]グループの下)
- このステップのはじめに画像で示したレイアウトとほぼ同じレイアウトになるように、オブジェクトを移動します。
- 分かりやすくするために、オブジェクトの名前を次のように変更します。
- 次のポート接続(A接続)を作成します。
- [ソース]を[キュー]に接続する
- [キュー]を[Processor1]と[Processor2]に接続する
- [Processor1]と[Processor2]を[シンク]に接続する
オブジェクト | 新しい名前 |
---|---|
Source1 | ソース |
Queue1 | キュー |
Operator1 | オペレーター |
Sink1 | シンク |
Shape1 | 水飲み場 |
このセクションの冒頭に表示した画像のようにモデルがなっていることを確認します。
ステップ2 アイテムリストを作成する
このステップでは、キューからプロセッサへの輸送準備ができているアイテムを追跡するグローバルリストを作成します。このリストにはアイテムが含まれるため、アイテムリストを作成します。次に、キューの設定を変更して、入ってくるすべてのアイテムをこの新しいリストにプッシュします。
リストを作成してキューを更新するには:
- 左側のペインで、[ツールボックス]タブをクリックします。
- [ツールボックス]で[追加]ボタン をクリックして、メニューを開きます。[グローバルリスト]をポイントし、[アイテムリスト]を選択します。リストのプロパティウィンドウが自動的に開きます。
- プロパティウィンドウの上部にある名前ボックスで、アイテムリストの名前を「ItemsToTransport」に変更します。
- このアイテムリストのデフォルト設定を使用します。[OK]ボタンをクリックして変更を保存し、ウィンドウを閉じます。
- ItemsToTransportリストが[ツールボックス]の[グローバルリスト]グループに表示されていることを確認します。
- 3Dモデルで、[キュー]をクリックして、右側でそのプロパティを表示します。
- [出力]タブで、[輸送を使用]チェックボックスをオンにします。
- [輸送を使用]チェックボックスの下のボックスの横にある矢印をクリックしてメニューを開きます。[リストを使用]をポイントして、[アイテムリストにプッシュ(タスクシーケンスなし)]を選択し、ピックリストオプションを開きます。
- [リスト]ボックスでItemsToTransportリストが現在選択されているリストであることを確認します。また、キューがフローアイテムをリストにプッシュする際に、[アイテムにデータを保存]ボックスにリストされるとおりに、アイテムで3つのラベルが作成されることに注意してください。
シミュレーションモデルを保存することをおすすめします。
ステップ3 グループを作成しパラメータを追加する
このステップでは、グループを作成し、モデルにパラメータを追加します。これらのツールを使用すると、オペレーター操作時のモデルの堅牢性と拡張性が高くなります。
まず、オペレーター用のグループを作成します。
- 右側の[ツールボックス]の[追加]ボタン をクリックし、[グループ]オプションを選択します。[グループプロパティ]ウィンドウが表示されます。
- グループの名前を「オペレーター」に変更します。
- [メンバー]セクションで、[サンプラー]ボタン をクリックしてサンプリングモードに入ります。3Dモデルで作成した最初のオペレーターを選択します。
[グループプロパティ]ウィンドウは次のように表示されます。
次に、グループ内のオペレーター数を制御するパラメータを作成します。
- [ツールボックス]に戻ると、[モデルパラメータテーブル]が表示されています。その下にある[パラメータ]というオプションをダブルクリックして開きます。
- すでにデフォルトのパラメータがあります。[名前]列のセルを、たとえば「NumOperators」に変更します。
- [値]列のセルを選択します。表示されるドロップダウン矢印をクリックします。いくつかのセクションから成るポップアップが開きます。これから、これらの設定を更新します。
- [タイプ]セクションのドロップダウンを選択し、[整数]に変更します。
- [参照]セクションの[サンプラー]ボタン をクリックしてサンプリングモードに入ります。[ツールボックス]の[オペレーター]グループを見つけてサンプリングします。このグループのパスが編集フィールドに表示されます。
- [設定時]セクションの[追加]ボタン をクリックし、[グループメンバーを削除してコピー]を選択します。
- ポップアップをクリックオフして閉じます。パラメータテーブルの残り2つの列は、パラメータの機能などを記録しておく備考欄です。モデルの実行には影響しません。
- パラメータの[値]を2に変更します。
以上の変更を行うと、ポップアップは次のようになります。
以上の手順を完了すると、表示は次のようになります。
これで、「オペレーター」というグループが作成されました。このグループのサイズは、NumOperatorsパラメータで指定したサイズに基づいて変動します。値は2であるため、モデルをリセットすると、オペレーターの数は2になります。
シミュレーションモデルを保存することをおすすめします。
ステップ4 輸送タスクシーケンスにアクティビティを追加する
このステップでは、アクティビティを一般的な処理フローに追加して、単純なロードとアンロードのタスクシーケンスを作成します。この処理フローには3つのセクションがあります。
- [共有アセット]セクションには、リスト共有アセットとリソース共有アセットが含まれます。
- [タスク作成]セクションでは、オペレーターの輸送タスクを作成します。
- [輸送タスク]セクションには、ベーシックなロードとアンロードのタスクシーケンスが含まれます。
作業が完了すると、処理フローは次の画像のようになります。
現時点では、これらのアクティビティの追加と処理フローへの接続のみを行います。後のステップで、プロパティを編集して機能を追加します。
これらのアクティビティを追加して接続するには:
- メインツールバーで[処理フロー]ボタンをクリックして、メニューを開きます。[一般的な処理フローを追加]を選択します。
- [プロパティ]の[処理フローの名前]ボックスで、現在のテキストを削除し、処理フローの名前を「OperatorTasks」に変更します。
- ライブラリの[表示]グループで、3つの[コンテナ]形状を新しい処理フローに追加します。
- 分かりやすくするために、3つの処理形状の名前を次のように変更します。
- 共有アセット
- タスク作成
- 輸送タスク
- ライブラリから、次の共有アセットを[共有アセット]形状に追加します。
- [リスト]([共有アセット]の下)
- [リソース]([共有アセット]の下)
- 分かりやすくするために、これらの共有アセットの名前を次のように変更します。
- ライブラリから、次のアクティビティを[タスク作成]形状に追加します。
- [スケジュールソース]([トークンの作成]の下)
- [リストからプル]([共有アセット]の下)
- [トークンを作成]([ベーシック]の下)
- [スケジュールソース]から[リストからプル]までのコネクターを作成します(アクティビティの下部中央にマウスをポイントしてコネクター アイコンに変更するまでそのままにします。他のアクティビティにスナップするまで、コネクターをクリックしてドラッグします)。
- [リストからプル]アクティビティと[トークンを作成]アクティビティをスタックブロックに結合します。
- [トークンを作成]アクティビティの最後から[リストからのプル]アクティビティにループするコネクターを作成します。
- 分かりやすくするために、これらのアクティビティの名前を次のように変更します。
- [輸送タスク]形状で、次のアクティビティを追加してスタックブロックを作成します。
- 1つの[ラベルを割り当てる]([ベーシック]の下)
- 1つの[リソースを取得]([共有アセット]の下)
- [タスクシーケンスを作成]([タスクシーケンス]の下)
- 1つの[ロード]([タスクシーケンス]の下)
- 1つの[アンロード]([タスクシーケンス]の下)
- 1つの[移動]>[オブジェクトへ移動]([タスクシーケンス]の下)
- 1つの[タスクシーケンスを終了]([タスクシーケンス]の下)
- 1つの[リソースをリリース]([共有アセット]の下)
- 1つの[シンク]([ベーシック]の下)
- 分かりやすくするために、これらのアクティビティの名前を次のように変更します。
アクティビティ 新しい名前 ラベルを割り当て ラベルを割り当て:目的地 取得 オペレーターを取得 TSを作成 タスクシーケンスを作成 ロード キューでアイテムをロードする アンロード 目的地でアイテムをアンロードする 移動 キューに戻る TSを終了 タスクシーケンスを終了 リリース オペレーターをリリース シンク シンク:タスクを完了
共有アセット | 新しい名前 |
---|---|
リスト | リスト:ItemsToTransport |
リソース | リソース:オペレーター |
アクティビティ | 新しい名前 |
---|---|
ソース | ソース:シミュレーションを開始 |
リストからプル | ItemsToTransportリストからプル |
トークンを作成 | 輸送タスクでのトークンを作成 |
シミュレーションモデルを保存することをおすすめします。
ステップ5 共有アセットを3Dモデルにリンクする
この比較的短いステップでは、処理フローの共有アセットを3Dモデルのオブジェクトにリンクする方法を学習します。ステップ2で作成したのと同じ名前で、処理フローのItemsToTransportリストをグローバルリストにリンクします。
その後、リソース共有アセットを、ステップ3で作成したグループにリンクします。利用可能なリソースの数をパラメータテーブルで変更して、共通のタスクを完了するのに必要なオペレーターの数を試すことができます。
これらの変更を行うには:
- 処理フローで、[リスト:ItemsToTransport]共有アセットをクリックし選択します。[プロパティ]で、[リスト]ボックスの横にある矢印をクリックして、メニューを開きます。[グローバルリスト]をポイントし、[ItemsToTransport]を選択します。
- [リソース:オペレーター]共有アセットをクリックし、選択します。[プロパティ]で、[参照]ボックスの横にある[サンプラー]ボタンをクリックして、サンプリングモードに入ります。
- [ツールボックス]の[オペレーター]グループをクリックしてサンプリングします。[カウント]セクションが、たとえば[グループメンバー数]のように自動的に変更されます。
- シミュレーションコントロールパネルの[リセット]ボタンを押します。
- 3Dモデルで、第1のオペレーターの横に、作成した第2のオペレーターが表示されます。[オペレーター]グループを開くと、元のオペレーターの下に[Operator_2]が追加されています。
シミュレーションモデルを保存することをおすすめします。
ステップ6 タスク作成アクティビティを編集する
このステップでは、処理フローの[タスク作成]セクションでアクティビティのプロパティを編集します。このセクションの各アクティビティが機能する方法の概要を次に示します。
アクティビティ | 説明 |
---|---|
ソース:シミュレーションを開始 | [スケジュールソース]アクティビティでは、シミュレーションの開始直後にトークンを1つ作成し、そのトークンを[リストからプル]アクティビティに送信します。このトークンを作成した後は、追加のトークンは作成されません。トークンは、シミュレーションが終了するまで他の2つのアクティビティをループし続けます。 |
ItemsToTransportListからプルする | このアクティビティをItemsToTransportListにリンクすると、トークンが入力されるたびにこのリストからアイテムがプルされます。リストにアイテムがない場合、トークンはバックオーダーを作成し、アイテムが利用可能になるまでこのアクティビティで待機します。 また、リストからプルされたフローアイテムへの参照を含む「pulledItem」というラベルをトークンに追加します。 |
輸送タスクでトークンを作成する | トークンがこのアクティビティに入ると、処理フローの[輸送タスク]セクションの最初のアクティビティでトークンが作成されます。新しく作成されたトークンは、輸送タスクシーケンスを開始します。また、リストからプルしたフローアイテムへの参照を含む、新しく作成されたトークンにラベルを割り当てます。 輸送タスクが完了している間に、[トークンを作成]アクティビティでトークンを待機させないため、子トークンではなく独立したトークンとして作成します。子トークンの詳細については、「サブ処理フロー」を参照してください。 |
これらのプロパティを編集するには:
- [スケジュールソース]アクティビティをクリックして選択します。このアクティビティではデフォルトのプロパティを使用するため、次の画像と設定が一致することを確認してください。
- [ItemsToTransportリストからプル]アクティビティをクリックして選択します。このアクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
- [リスト:ItemsToTransport]共有アセット(処理フロー内)をクリックしてサンプリングします。リストがリンクされていることを示す青い線が表示されます。
- [プロパティ]で、[割り当て先]オプションが選択されていることを確認します。その下のボックスで、分かりやすくするために、テキストを「
token.pulledItem
」に変更します。 - [輸送タスクでトークンを作成]アクティビティも同様に選択した状態で、このアクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
- [ラベルを割り当て:目的地]アクティビティをクリックしてサンプリングします。このアクティビティでトークンが作成されることを示す青い線が表示されます。
- [プロパティ]で、[次の形式で作成]メニューをクリックし、[独立したトークン]を選択します。
- [作成されたトークンにラベルを割り当て]で、[追加]ボタン をクリックして、作成される子トークンへのラベルを追加します。
- [名前]ボックスに、「
FlowItem
」と入力します。 - [値]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[pulledItem]を選択します。
シミュレーションモデルを保存することをおすすめします。
ステップ7 輸送タスクシーケンスを編集する
このステップでは、処理フローの[輸送タスク]セクションでアクティビティのプロパティを編集し、簡単な輸送タスクシーケンスを作成します。このセクションの各アクティビティが機能する方法の概要を次に示します。
アクティビティ | 説明 |
---|---|
ラベルを割り当て:目的地 | キューがItemsToTransportリストにフローアイテムをプッシュすると、フローアイテムを2つの下流プロセッサのうちのいずれかに割り当てる「destination」というラベルがフローアイテムに作成されます。このアクティビティでは、このラベルを参照する「itemDestination」というラベルが作成されます。これにより、フローアイテムをどのプロセッサに輸送すべきかをオペレーターに通知する動的な参照が作成されます。 |
オペレーターを取得 | このアクティビティはいずれかのオペレーターを取得しようとします。オペレーターが利用可能な場合、そのオペレーターに輸送タスクが割り当てられます。オペレーターが利用可能でない場合、トークンはどちらかが利用可能になるまで、このアクティビティで待機します。これらのタスクがどのオペレーターに割り当てられたのかを追跡するために、トークンに「operator」というラベルを作成します。 |
タスクシーケンスを作成 | このアクティビティでは、割り当てられたオペレーターが実行するタスクのシーケンスとして、一連のタスクを設定します。 |
キューでアイテムをロードする | ピックアップする必要があるフローアイテムと、そのフローアイテムをピックアップする場所をオペレーターに指示します。 |
目的地でアイテムをアンロードする | フローアイテムを輸送するプロセッサをオペレーターに指示します。 |
キューに戻る | 別のタスクセットを開始するために、オペレーターをキューに戻します。 |
タスクシーケンスを終了 | このアクティビティは、タスクシーケンスの終了処理を指示します。 |
オペレーターをリリース | オペレーターをリリースして、別のタスクセットで作業できるようにします。 |
シンク:タスクを完了 | この一連の輸送タスクで使用されたトークンを破棄します。 |
このロジックを作成するには:
- [輸送タスク]でスタックブロックをクリックして選択します。
- デフォルトのラベルは
labelName
、[値]は0
と表示されています。[名前]ボックスの「labelName
」を「itemDestination
」に書き換えます。 - [値]ボックスの横にある矢印をクリックして、メニューを開きます。[Token Label]をポイントし、次に[FlowItem]を選択します。ボックスは「
token.FlowItem
」を読み込みます。このボックスでFlexScriptの最後に「.destination
」を追加します。 - [オペレーターを取得]アクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
- [リソース:オペレーター](処理フロー内)をクリックしてサンプリングします。リソースが現在リンクされていることを示す青い線が表示されます。
- [オペレーターを取得]アクティビティの[プロパティ]で、[割り当て先]ラベルを「
token.operator
」に変更します。 - [タスクシーケンスを作成]アクティビティをクリックして選択します。[プロパティ]で、[タスク実行者/ディスパッチャー]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[Operator]を選択します。これにより、作成中のタスクシーケンスは、先ほど取得したオペレーターに割り当てられます。他の設定はデフォルト値のままにします。このアクティビティにより、「taskSequence」という新しいラベルがトークンに作成されることが分かります。このシーケンスのタスクはすべて、このラベルを通じてシーケンスに割り当てられます。
- [キューでアイテムをロードする]アクティビティの[プロパティ]で、[実行者/タスクシーケンス]のデフォルトが「token.taskSequence」であることを確認します。
- [アイテム]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[FlowItem]を選択します。
- [目的地でアイテムをアンロードする]アクティビティの[プロパティ]で、[実行者/タスクシーケンス]のデフォルトが「token.taskSequence」であることを確認します。
- [アイテム]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[FlowItem]を選択します。[ステーション]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[itemDestination]を選択します。
- [キューに戻る]アクティビティの[プロパティ]で、[実行者/タスクシーケンス]のデフォルトが「token.taskSequence」であることを確認します。次に、[目的地]ボックスの横にある[サンプラー]ボタン をクリックしてサンプリングモードに入ります。
- 3Dモデルで[キュー]を選択してメニューを開きます。メニューから[キュー]を選択してサンプリングします。
- [タスクシーケンスを終了]はデフォルト設定のままにします。[タスクシーケンス]ボックスが「token.taskSequence」となっていることを確認してください。これは、タスクシーケンスの終了処理の実行を指示します。
- [オペレーターをリリース]アクティビティの[プロパティ]で、[割り当て先のリソース]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[operator]を選択します。
シミュレーションモデルを保存することをおすすめします。
ステップ8 シミュレーションモデルをテストする
この時点で、シミュレーションモデルを実行し、ベーシックな移動タスクシーケンスが正しく実行されていることを確認します。モデルをリセットして実行します。
タスク実行者は3Dモデルで、フローアイテムのプロセッサへの輸送を交互に行うはずです。
トークンが最初に[タスク作成]セクションを移動してリストからアイテムをプルし、トークンを[輸送タスク]セクションに送信していることを確認してください。フローアイテムが輸送に利用できない場合、リスト共有アセットに赤のバックオーダーが作成されます。
また、オペレーターがタスクに割り当てられると、リソース共有アセットに割り当てられたものとして表示されます。オペレーターが3Dモデルで輸送タスクを実行する間に、フローアイテムはタスクシーケンス内を移動します。
結論
これで、リストとリソースを使用したベーシックな輸送タスクシーケンスが構築されました。次のチュートリアルでは、高度な機能を得るために、リソースをリストのようにする方法を学習します。「チュートリアルタスク1.2 - リソースをリストのように機能させる」に進みます。