タスク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つの[ソース
    • 1つの[キュー
    • 2つの[プロセッサ
    • 1つの[オペレーター
    • 1つの[シンク
    • 1つの[形状]([ビジュアル]グループの下)
  2. このステップのはじめに画像で示したレイアウトとほぼ同じレイアウトになるように、オブジェクトを移動します。
  3. 分かりやすくするために、オブジェクトの名前を次のように変更します。
  4. オブジェクト 新しい名前
    Source1 ソース
    Queue1 キュー
    Operator1 オペレーター
    Sink1 シンク
    Shape1 水飲み場
  5. 次のポート接続(A接続)を作成します。
    • ソース]を[キュー]に接続する
    • キュー]を[Processor1]と[Processor2]に接続する
    • Processor1]と[Processor2]を[シンク]に接続する

このセクションの冒頭に表示した画像のようにモデルがなっていることを確認します。

ステップ2 アイテムリストを作成する

このステップでは、キューからプロセッサへの輸送準備ができているアイテムを追跡するグローバルリストを作成します。このリストにはアイテムが含まれるため、アイテムリストを作成します。次に、キューの設定を変更して、入ってくるすべてのアイテムをこの新しいリストにプッシュします。

リストを作成してキューを更新するには:

  1. 左側のペインで、[ツールボックス]タブをクリックします。
  2. [ツールボックス]で[追加]ボタン をクリックして、メニューを開きます。[グローバルリスト]をポイントし、[アイテムリスト]を選択します。リストのプロパティウィンドウが自動的に開きます。
  3. プロパティウィンドウの上部にある名前ボックスで、アイテムリストの名前を「ItemsToTransport」に変更します。
  4. このアイテムリストのデフォルト設定を使用します。[OK]ボタンをクリックして変更を保存し、ウィンドウを閉じます。
  5. ItemsToTransportリストが[ツールボックス]の[グローバルリスト]グループに表示されていることを確認します。
  6. 3Dモデルで[キュー]をダブルクリックして、プロパティウィンドウを開きます。
  7. フロー]タブで[輸送を使用]チェックボックスをオンにします。
  8. 輸送を使用]チェックボックスの横にある矢印をクリックしてメニューを開きます。[リストを使用]をポイントして、[アイテムリストにプッシュ(タスクシーケンスなし)]を選択し、ピックリストオプションを開きます。
  9. リスト]ボックスでItemsToTransportリストが現在選択されているリストであることを確認します。また、キューがフローアイテムをリストにプッシュする際に、[アイテムにデータを保存]ボックスにリストされるとおりに、アイテムで3つのラベルが作成されることに注意してください。

シミュレーションモデルを保存することをおすすめします。

ステップ3 輸送タスクシーケンスにアクティビティを追加する

このステップでは、アクティビティを一般的な処理フローに追加して、単純なロードとアンロードのタスクシーケンスを作成します。この処理フローには3つのセクションがあります。

  • 共有アセット]セクションには、リスト共有アセットとリソース共有アセットが含まれます。
  • タスク作成]セクションでは、オペレーターの輸送タスクを作成します。
  • 輸送タスク]セクションには、ベーシックなロードとアンロードのタスクシーケンスが含まれます。

作業が完了すると、処理フローは次の画像のようになります。

現時点では、これらのアクティビティの追加と処理フローへの接続のみを行います。後のステップで、プロパティを編集して機能を追加します。

これらのアクティビティを追加して接続するには:

  1. メインツールバーで[処理フロー]ボタンをクリックして、メニューを開きます。[一般的な処理フロー]を選択します。
  2. [クイックプロパティ]の[処理フローの名前]ボックスで、現在のテキストを削除し、処理フローの名前を「オペレータータスク」に変更します。
  3. ライブラリの[フローチャート]グループで、3つの[処理]形状を新しい処理フローに追加します。
  4. 分かりやすくするために、3つの処理形状の名前を次のように変更します。
    • 共有アセット
    • タスク作成
    • 輸送タスク
  5. ライブラリから、次の共有アセットを[共有アセット]形状に追加します。
    • リスト]([共有アセット]の下)
    • リソース]([共有アセット]の下)
  6. 分かりやすくするために、これらの共有アセットの名前を次のように変更します。
  7. 共有アセット 新しい名前
    リスト リスト:ItemsToTransport
    リソース リソース:オペレーター

  8. ライブラリから、次のアクティビティを[タスク作成]形状に追加します。
    • スケジュールソース]([トークンの作成]の下)
    • リストからプル]([共有アセット]の下)
    • トークンを作成]([ベーシック]の下)
  9. スケジュールソース]から[リストからプル]までのコネクターを作成します(アクティビティの下部中央にマウスをポイントしてコネクター アイコンに変更するまでそのままにします。他のアクティビティにスナップするまで、コネクターをクリックしてドラッグします)。
  10. リストからプル]アクティビティと[トークンを作成]アクティビティをスタックブロックに結合します。
  11. トークンを作成]アクティビティの最後から[リストからのプル]アクティビティにループするコネクターを作成します。
  12. 分かりやすくするために、これらのアクティビティの名前を次のように変更します。
  13. アクティビティ 新しい名前
    ソース ソース:シミュレーションを開始
    リストからプル ItemsToTransportリストからプル
    トークンを作成 輸送タスクでのトークンを作成

  14. 輸送タスク]形状で、次のアクティビティを追加してスタックブロックを作成します。
    • ラベルを割り当て]([ベーシック]の下)
    • リソースを取得]([共有アセット]の下)
    • タスクシーケンスを作成]([タスクシーケンス]の下)
    • ロード]([タスクシーケンス]の下)
    • アンロード]([タスクシーケンス]の下)
    • 移動]([タスクシーケンス]の下)
    • タスクシーケンスを終了]([タスクシーケンス]の下)
    • リソースをリリース]([共有アセット]の下)
    • シンク]([ベーシック]の下)
  15. 分かりやすくするために、これらのアクティビティの名前を次のように変更します。
    アクティビティ 新しい名前
    ラベルを割り当て ラベルを割り当て:目的地
    取得 オペレーターを取得
    TSを作成 タスクシーケンスを作成
    ロード キューでアイテムをロードする
    アンロード 目的地でアイテムをアンロードする
    移動 キューに戻る
    TSを終了 タスクシーケンスを終了
    リリース オペレーターをリリース
    シンク シンク:タスクを完了

シミュレーションモデルを保存することをおすすめします。

ステップ5 タスク作成アクティビティを編集する

このステップでは、処理フローの[タスク作成]セクションでアクティビティのプロパティを編集します。このセクションの各アクティビティが機能する方法の概要を次に示します。

アクティビティ 説明
ソース:シミュレーションを開始 [スケジュールソース]アクティビティでは、シミュレーションの開始直後にトークンを1つ作成し、そのトークンを[リストからプル]アクティビティに送信します。このトークンを作成した後は、追加のトークンは作成されません。トークンは、シミュレーションが終了するまで他の2つのアクティビティをループし続けます。
ItemsToTransportListからプルする このアクティビティをItemsToTransportListにリンクすると、トークンが入力されるたびにこのリストからアイテムがプルされます。リストにアイテムがない場合、トークンはバックオーダーを作成し、アイテムが利用可能になるまでこのアクティビティで待機します。

また、リストからプルされたフローアイテムへの参照を含む「pulledItem」というラベルをトークンに追加します。
輸送タスクでトークンを作成する トークンがこのアクティビティに入ると、処理フローの[輸送タスク]セクションの最初のアクティビティでトークンが作成されます。新しく作成されたトークンは、輸送タスクシーケンスを開始します。また、リストからプルしたフローアイテムへの参照を含む、新しく作成されたトークンにラベルを割り当てます。

輸送タスクが完了している間に、[トークンを作成]アクティビティでトークンを待機させないため、子トークンではなく独立したトークンとして作成します。子トークンの詳細については、「サブ処理フロー」を参照してください。

これらのプロパティを編集するには:

  1. スケジュールソース]アクティビティをクリックして選択します。このアクティビティではデフォルトのプロパティを使用するため、次の画像と設定が一致することを確認してください。
  2. ItemsToTransportリストからプル]アクティビティをクリックして選択します。このアクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
  3. 処理フローの[ItemsToTransportリスト]をクリックしてサンプリングします。リストがリンクされていることを示す青い線が表示されます。
  4. [クイックプロパティ]で、[割り当て先]オプションが選択されていることを確認します。その下のボックスで、分かりやすくするために、テキストを「token.pulledItem」に変更します。
  5. 輸送タスクでトークンを作成]アクティビティも同様に選択した状態で、このアクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
  6. ラベルを割り当て:目的地]アクティビティをクリックしてサンプリングします。このアクティビティでトークンが作成されることを示す青い線が表示されます。
  7. [クイックプロパティ]で、[次の形式で作成]メニューをクリックし、[独立したトークン]を選択します。
  8. 作成されたトークンにラベルを割り当て]で、[追加]ボタン をクリックして、作成される子トークンへのラベルを追加します。
  9. 名前]ボックスに、「FlowItem」と入力します。
  10. ]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[pulledItem]を選択します。

シミュレーションモデルを保存することをおすすめします。

ステップ6 輸送タスクシーケンスを編集する

このステップでは、処理フローの[輸送タスク]セクションでアクティビティのプロパティを編集し、簡単な輸送タスクシーケンスを作成します。このセクションの各アクティビティが機能する方法の概要を次に示します。

アクティビティ 説明
ラベルを割り当て:目的地 キューがItemsToTransportリストにフローアイテムをプッシュすると、フローアイテムを2つの下流プロセッサのうちのいずれかに割り当てる「destination」というラベルがフローアイテムに作成されます。このアクティビティでは、このラベルを参照する「itemDestination」というラベルが作成されます。これにより、フローアイテムをどのプロセッサに輸送すべきかをオペレーターに通知する動的な参照が作成されます。
オペレーターを取得 このアクティビティはいずれかのオペレーターを取得しようとします。オペレーターが利用可能な場合、そのオペレーターに輸送タスクが割り当てられます。オペレーターが利用可能でない場合、トークンはどちらかが利用可能になるまで、このアクティビティで待機します。これらのタスクがどのオペレーターに割り当てられたのかを追跡するために、トークンに「operator」というラベルを作成します。
タスクシーケンスを作成 このアクティビティでは、割り当てられたオペレーターが実行するタスクのシーケンスとして、一連のタスクを設定します。
キューでアイテムをロードする ピックアップする必要があるフローアイテムと、そのフローアイテムをピックアップする場所をオペレーターに指示します。
目的地でアイテムをアンロードする フローアイテムを輸送するプロセッサをオペレーターに指示します。
キューに戻る 別のタスクセットを開始するために、オペレーターをキューに戻します。
タスクシーケンスを終了 このアクティビティは、タスクシーケンスの終了処理を指示します。
オペレーターをリリース オペレーターをリリースして、別のタスクセットで作業できるようにします。
シンク:タスクを完了 この一連の輸送タスクで使用されたトークンを破棄します。

このロジックを作成するには:

  1. 輸送タスク]でスタックブロックをクリックして選択します。
  2. ラベルを割り当て:目的地]アクティビティの[クイックプロパティ]で、[追加]ボタン をクリックして入るトークンにラベルを追加します。
  3. 名前]ボックスに、「itemDestination」と入力します。
  4. ]ボックスの横にある矢印をクリックして、メニューを開きます。[Token Label]をポイントし、次に[FlowItem]を選択します。ボックスは「token.FlowItem」を読み込みます。このボックスでFlexScriptの最後に「.destination」を追加します。
  5. オペレーターを取得]アクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
  6. リソース:オペレーター](処理フロー内)をクリックしてサンプリングします。リソースが現在リンクされていることを示す青い線が表示されます。
  7. オペレーターを取得]アクティビティの[クイックプロパティ]で、[割り当て先]ラベルを「token.operator」に変更します。
  8. タスクシーケンスを作成]アクティビティをクリックして選択します。[クイックプロパティ]で[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[operator]を選択します。これにより、作成中のタスクシーケンスは、先ほど取得したオペレーターに割り当てられます。他の設定はデフォルト値のままにします。このアクティビティにより、「taskSequence」という新しいラベルがトークンに作成されることが分かります。このシーケンスのタスクはすべて、このラベルを通じてシーケンスに割り当てられます。
  9. キューでアイテムをロードする]アクティビティの[クイックプロパティ]で、[実行者/タスクシーケンス]のデフォルトが「token.taskSequence」であることを確認します。
  10. アイテム]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[FlowItem]を選択します。
  11. 目的地でアイテムをアンロードする]アクティビティの[クイックプロパティ]で、[実行者/タスクシーケンス]のデフォルトが「token.taskSequence」であることを確認します。
  12. キューに戻る]アクティビティに対して同じ処理を繰り返します。次に、[目的地]ボックスの横にある[サンプラー]ボタン をクリックしてサンプリングモードに入ります。
  13. 3Dモデルで[キュー]を選択してメニューを開きます。メニューから[キュー]を選択してサンプリングします。
  14. タスクシーケンスを終了]はデフォルト設定のままにします。[タスクシーケンス]ボックスが「token.taskSequence」となっていることを確認してください。これは、タスクシーケンスの終了処理の実行を指示します。
  15. オペレーターをリリース]アクティビティの[クイックプロパティ]で[割り当て先のリソース]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[operator]を選択します。

シミュレーションモデルを保存することをおすすめします。

ステップ7 シミュレーションモデルをテストする

この時点で、シミュレーションモデルを実行し、ベーシックな移動タスクシーケンスが正しく実行されていることを確認します。モデルをリセットして実行します。

タスク実行者は3Dモデルで、フローアイテムのプロセッサへの輸送を交互に行うはずです。

トークンが最初に[タスク作成]セクションを移動してリストからアイテムをプルし、トークンを[輸送タスク]セクションに送信していることを確認してください。フローアイテムが輸送に利用できない場合、リスト共有アセットに赤のバックオーダーが作成されます。

また、オペレーターがタスクに割り当てられると、リソース共有アセットに割り当てられたものとして表示されます。オペレーターが3Dモデルで輸送タスクを実行する間に、フローアイテムはタスクシーケンス内を移動します。

結論

これで、リストとリソースを使用したベーシックな輸送タスクシーケンスが構築されました。次のチュートリアルでは、高度な機能を得るために、リソースをリストのようにする方法を学習します。「チュートリアルタスク1.2 - リソースをリストのように機能させる」に進みます。