AGV処理フローテンプレートの使用

概要と概念

AGVシミュレーションを簡単にするために、FlexSimには、AGVシミュレーションプロジェクトで使用可能な事前に構築されたAGV処理フローテンプレートがいくつか用意されています。これらの処理フローテンプレートには、ほとんどではないにしても多くのAGVシステムのシミュレーションを比較的容易にする、事前に構築された高度なロジックが組み込まれています。使用可能な処理フローテンプレートのセットは次のとおりです。

すべての処理フローが同じコアモデル設計を中心に動作するのに対して、各処理フローは徐々に機能や洗練さを増して行きます。処理フロー間に特有の違いについては、このトピックの後半で詳しく説明します。下の画像は、最も洗練された処理フローテンプレートである高度なAGVを示しています。

これらの処理フローの中からAGVシミュレーションプロジェクトに最適なものが見つかる場合もありますが、これらの処理フローには、シミュレーションの要件に合わせてカスタマイズするための出発点にするという意図もあります。これらの処理フローでサポートされていない機能が必要な場合は、必要な機能を実装する最もシンプルなAGV処理フローを選択してから、それを必要な追加の機能で拡張することができます。

このトピックでは、タスクシーケンスロジックの構築に関連付けられたさまざまな概念を取り上げます。そのため、このトピックを先に進める前に、タスクシーケンスロジックに関する主要な概念を確認しておくことをお勧めします。

AGV処理フローテンプレートを設定する

AGV処理フローテンプレートを設定するには:

  1. AGV処理フローを追加する - ツールバーで、[処理フロー]ボタンをクリックして、メニューを開きます。[オブジェクトの処理フローを追加]をポイントして、AGV処理フローの1つを選択し、新しい処理フローテンプレートを作成します。
  2. 処理フローにオブジェクトを添付する - 新しく作成された処理フローで、何も選択されないように空白の領域をクリックします。[プロパティ]の[処理フローインスタンス]グループで、[エンティティの追加 (インスタンス)]ボックスを探します。このボックスの横にある[サンプラー]ボタン をクリックして、サンプリングモードに入ります。その後で、3DビューでAGVをクリックします。これで[エンティティの追加]ボックスに表示されるようになります。必要に応じてこの手順を繰り返して、さらにAGVを追加します。
  3. 適切な接続でAGVネットワークを構成する - 主として、ネットワークにはNextWorkPoint接続のループが必要です。これを行うには、あるコントロールポイントと別のコントロールポイントを「A」接続して[NextWorkPoint]を選択します。AVGがこのループを辿ってピックアップするアイテムを探します。これらのコントロールポイントが、AVGがやるべき作業を見つける、システム内の「作業ポイント」になります。詳細については、後述する「作業ポイントループを作成する」を参照してください。
  4. AGVが実行する作業を追加するようにモデル内のオブジェクトを構成する - AGVWorkという名前のグローバルアイテムリストがモデルのツールボックスに追加されます。AGVが実行する作業を生成するには、アイテムをこのリストに配置します。これを行うには、固定リソースを使用して、それらのプロパティの[出力]ペインに移動し、[輸送を使用]を選択して、次のように動作を選択します。[リストを使用]>[アイテムリストにプッシュ(タスクシーケンスなし)]。詳細については、後述する「ジョブディスパッチング」を参照してください。

AGV処理フローテンプレートでAGV動作を駆動する方法

このセクションでは、AGV処理フローテンプレートでタスク実行者のタスクロジックを実装する方法について詳しく説明します。

AGVは、本質的に、AGVパスネットワークに接続されたタスク実行者です。したがって、すべての移動タスクがAGV移動ネットワークを介して実行されます。つまり、タスク実行者をAGVネットワークに接続する場合は、その動作の輸送または移動の側面を定義することになります。

AGVネットワークへのタスク実行者の接続

輸送または移動 タスク実行者をどのように移動させるか?

または、AGV処理フローテンプレートをAGVに添付する場合は、AGVのタスクシーケンス生成ジョブディスパッチングの両方の動作を定義することになります。

AGV処理フローテンプレートへのタスク実行者の接続

タスクシーケンス生成 タスクシーケンスをどのように定義するか?

ジョブディスパッチング 誰がまたは何がどんなジョブを実行するか?

AGV処理フローテンプレートを使用している場合は、タスク実行者ロジックのアイテムフローとルーティングの側面のほとんどがユーザーに任されます。この側面は、別の処理フローなどを使用することによって、固定リソースの接続を通して定義できます。

アイテムフローとルーティング アイテムをどこに移動させる必要があるか?

タスクシーケンス生成

タスクシーケンス生成 タスクシーケンスをどのように定義するか?

AGV処理フローテンプレートは、追加されたAGVのすべてのタスクシーケンス生成を処理します。

作業ポイントルーピング

AGV処理フローは、AGVに定義された「作業ポイント」のループに沿って移動するように指示します。AGVは、各作業ポイントで次にやるべきことを決定します。このループは、ループ内でまとめて"NextLookForWork"コントロールポイント接続に接続されるコントロールポイントのセットです。作業ポイントのそれぞれが、AGVがその場所でピックアップする必要のあるアイテムが存在するかどうかを確認しに行く場所です。ピックアップするアイテムが存在しない場合は、AGVが次の作業ポイントに進みます。

基本AGV処理フローは、名前のとおり、このルーピング動作の最も基本的な実装です。他の処理フローは徐々に洗練さが増して行きます。主な目的は洗練さを増すことそれ自体ではなく、AGVが作業ポイントで下すことができる一連の選択肢を改善することです。それらの選択肢の核心として、すべての処理フローが同じことを実行します。つまり、AGVが現在の作業ポイントで何かをやるべきかどうかをチェックして、そうでない場合は、次の作業ポイントに移動して、同じことを繰り返します。

ジョブディスパッチング

ジョブディスパッチング 誰がまたは何がどんなジョブを実行するか?

AGV処理フローテンプレートを使用している場合は、ジョブディスパッチングロジックが、コントロールポイント、AGV処理フローテンプレート、およびAGVWorkという名前のグローバルリストの組み合わせによって処理されますこのグローバルリストは、AGV処理フローテンプレートが使用されるたびに自動的に作成されます。固定リソースがフローアイテムのAGV輸送をリクエストする必要がある場合は、それがアイテムをAGVWorkグローバルリストにプッシュします。ここでは、リスト上にプッシュされるアイテムを「ジョブ」と表現します。処理フローテンプレートは、すぐにリストからジョブをプルしてアイテムの位置を割り出し、それを[AGVWork]リストに戻しますが、このとき、そのアイテムに関連付けられた作業ポイントによってパーティション分割されます。こうして、AGVがこれらの作業ポイントに到着すると、その作業ポイントのパーティションからプルしてどの作業が存在するかを表示します。

下の画像は、基本AGVの処理フローロジックを示しています。ここでは、処理フローが[AGVWork]リストからプルして、正しい作業ポイントを割り出してから、そのアイテムをリストパーティションに戻します。

この作業パーティション分割メカニズムが実装されている場合は、AGVが3Dモデル内の位置でジョブを問い合わせることができます。これにより、前述した作業ポイントルーピングが可能になります。留意すべき重要な点は、ジョブディスパッチングは3Dシミュレーションモデル内のAGVとアイテムの位置によってほぼ決定されることです。AGVは、作業ポイントに到着すると、ロードするアイテムなどの使用可能なタスクが存在するかどうかを確認します。そのポイントでやるべきことがある場合、AGVはそれらのタスクに着手します。そうでない場合は、次の作業ポイントに移動します。

まとめ

ディスパッチング決定
リソース選択

AGV処理フローテンプレートは、即時リソース選択を行いません。つまり、新しいジョブが到着する(アイテムがAGVWorkリストにプッシュされる)と、そのジョブはすぐにはリソースに割り当てられません。代わりに、AGVがその作業ポイントに到着するまで待機します。こうして、作業ポイントに最初に到着したAGVによってリソース選択が決定されます。これは、一般的に、ジョブがそれに最も近いAGVによってピックアップされることを意味します。

この遅延リソース選択は、ジョブの場所に近いアイテムをドロップオフするAGVが存在する可能性があるが、ジョブが到着した後であるため、メリットがあります。ロジックに即時実行リソース選択が含まれている場合は、AGVがその時間にビジーで、ジョブを最適ではないAGVにディスパッチしたことになります。

ジョブ選択

ジョブ選択は、AGVが作業ポイントに到着したときに実行されます。そこでは、その場所で実施すべき作業が存在するかどうかを確認しようとします。これは、その作業ポイントの[AGVWork]リストのパーティションからプルすることによって実行されます。AGV処理フローの[ここにロードするアイテムはあるか?]アクティビティのプルクエリをカスタマイズすることによって優先順位付けやフィルタリングなどを定義できます。

ある作業ポイントのどこにもロード可能なアイテムが存在しない場合は、AGVが次の作業ポイントに移動するだけです。

アイテムフローとルーティング

アイテムフローとルーティング アイテムをどこに移動させる必要があるか?

アイテムフローとルーティングは、主に、ユーザーが処理します。固定リソースをいつものように使用することも、独自の処理フロー経由のルーティングを定義することもできます。つまり、標準のシミュレーションモデルで3Dオブジェクトフローを接続するときに使用されるものと同じ方法が、AGV処理フローテンプレートの使用時にも適用されます詳細については、「3Dオブジェクトフローを接続する」を参照してください。

標準ルーティングとの唯一の違いは、フローアイテムの移動先を決定したら、そのアイテムをAGVWorkリストにプッシュする必要があることです。加えて、目標目的地を参照しているアイテムに対して「目的地」というラベルを設定する必要があります。これは、[輸送を使用]フィールドの[アイテムリストにプッシュ(タスクシーケンスなし)]オプションを使用して行うことができます。

AGVネットワークに固定リソースを接続する

AGV処理フローテンプレートを使用する場合は、通常、AGVネットワークを使用する場合と同様に固定リソースをネットワークに接続します。唯一の違いは、接続されたら、接続先のコントロールポイントを作業ポイントループに含める必要があることです。

作業ポイントループを作成する

前述したように、AGVは、ループ内を移動しながら、作業する輸送タスクを探します。これを有効にするには、AGVネットワークで作業ポイントループを作成する必要があります。これは、基本的に、ループ内で互いに接続される一連のコントロールポイントです。

作業ポイントループを作成するには:

  1. Aキーを長押しして接続モードに入ります。接続モードに入ると、マウスポインターが、チェーンリンクシンボルが横に付いたプラス記号()に変わります。
  2. AGVが作業ポイントループ内で通過する最初の上流コントロールポイントをクリックします。マウスを動かすと、クリックしたオブジェクトとカーソルの間に黄色の線が表示されます。
  3. それがハイライト表示されるように、接続する2番目のコントロールポイントの上にカーソルを置きます。コントロールポイントをクリックしてメニューを開きます。[NextWorkPoint]を選択します。コントロールポイントが接続されたことを示す赤い線が表示されます。
  4. このプロセスを繰り返し、ループにさらにコントロールポイントを追加します。最後のコントロールポイントが最初のコントロールポイントに接続され、ループを作成していることを確認してください。

このループを構築したら、シミュレーションモデルを実行できます。AGVは、システムの周りをループしながら作業を探します。

AGV処理フローテンプレート

前述したように、使用可能なAGV処理フローテンプレートが複数存在します。これらには次のものが含まれます。

すべての処理フローで同じコア作業ポイントルーピングロジックが使用されますが、それぞれで柔軟性と能力が向上した機能が1つ前の処理フローに追加されます。さらに、この単純なものから複雑なものへの進歩によって、独自のカスタムロジックを追加するための簡略化された出発点を選択することができます。

このセクションでは、処理フローテンプレートのそれぞれとそれらの機能について説明します。

基本AGV

基本AGV処理フローは、作業ポイントルーピングメカニズムの最も基本的な実装です。これは、単純な作業パーティション分割メカニズムを作業生成処理の一部として実装します。AGVのルーピングロジックは、できるだけ単純でもあります。

  1. 現在のポイントでロードするアイテムが存在するかどうかをチェックします。
  2. 現在のポイントでロードするアイテムが存在する場合は、ロードし、その目標目的地に移動して、それをアンロードするという工程を繰り返します。
  3. ロードするものがない場合は、次の作業ポイントに移動して繰り返します。

次の作業ポイントを決定する

後述する他の機能を使用する次の作業ポイントの決定では、AGV処理フローがAGVコントロールポイント接続の便利な機能を使用します。この機能によって、モデル内のコントロールポイント接続のセットがパーティション分割されたリストとして表現されます。つまり、接続先のコントロールポイントまたはオブジェクトを取得するために、処理フローは、関連するリストの現在の作業ポイントのパーティションから単にプルします。

NextWorkPoint接続に関連付けられたサンプルリストを以下に示します。

各パーティションは接続の所有者を表し、そのパーティションのエントリは接続そのものです。たとえば、上のリストでは、ControlPoint36ControlPoint9へのNextWorkPoint接続があります。

この機能は、コントロールポイント接続のクエリをリストからのプルと同じぐらい単純にするため、処理フローからコントロールポイント接続に簡単にアクセスできるようになります。

また、上の図の注目点は、ControlPoint9ControlPoint10のそれぞれに2つのNextWorkPoint接続があることです。これは、作業ポイントループ内の「分岐」を表します。分岐の可能性が、処理フローが最初にリストからエントリをプルしてから、次の作業ポイントが決定された時点でリストに戻す理由です。

エントリがリストに戻されると、そのパーティションの最後にプッシュされます。これは、次のAGVの到着時に作業ポイントが選択されないことを意味します。このデフォルトの動作では、作業ポイントループ内に分岐が存在する場合にラウンドロビン効果が発揮されます。もちろん、必要に応じてこの動作をカスタマイズすることができます。

予定作業ありAGV

予定作業ありAGV処理フローは、基本AGVと同じ機能を実装しますが、AGVが作業を発見可能な場所を定義するためのより洗練されたメカニズムを追加します。これは、作業生成処理内の作業パーティション分割ロジックをさらにカスタマイズすることによって行われます。この新しいロジックを以下に示します。

このロジックは、WorkForwardingコントロールポイント接続を使用して、アイテムの位置から1つ以上の他の作業ポイントに作業を「転送」させます。これにより、AGVは、実際に特定の位置に移動しなくても、その位置に使用可能な作業があるかどうかを「確認」することができます。そのため、各作業ポイントでより多くの位置がロード元として「認識」されることにより、ループ内の作業ポイントの数を減らすことができます。

作業転送を有効にするには:

  1. 予定作業ありAGV処理フローを追加します。
  2. モデル内のAGVを処理フローに添付します(また、他のAGV処理フローからそれらを削除します)。
  3. アイテムがピックアップされるコントロールポイントから作業ポイントループ内の作業ポイントへのWorkForwarding接続を追加します。

作業転送状況の構成方法の例を以下に示します。

0/1/複数個のWorkForwarding接続

処理フローの新しい作業転送処理は、作業転送動作には3つの異なる可能性があることを示します。

  1. アイテムの位置に、0個のWorkForwarding接続が含まれている。
  2. アイテムの位置に、1個のWorkForwarding接続が含まれている。
  3. アイテムの位置に、複数個のWorkForwarding接続が含まれている。

0個のWorkForwarding接続

アイテムの位置に0個のWorkForwarding接続が含まれている場合は、ロジックが基本AGVと同様に動作します。アイテムの位置が作業ポイントであると仮定して、そのパーティションにプッシュします。

1個のWorkForwarding接続

アイテムの位置に1個のWorkForwarding接続が含まれている場合は、ロジックがアイテムの位置の代わりに単一の接続先のコントロールポイントを使用して、アイテムをその接続先のコントロールポイントのパーティションにプッシュします。

複数個のWorkForwarding接続

アイテムの位置に複数個のWorkForwarding接続が含まれている場合は、ロジックが実際に接続先の作業ポイントのすべてのリストパーティションにアイテムをプッシュします。その後で、それらの作業ポイントのいずれかにあるAGVがそれ自体をアイテムに割り当てると、処理が他のすべてのリストプッシュを中断して、原則、それらのパーティションからアイテムを削除します。これは、システム内のアイテムを輸送するジョブは、ループ内の複数の作業ポイントから見えることを意味します。これにより、AGVをいつどこでどのアイテムに割り当てるかの定義の柔軟性が大幅に向上します。

ベーシックパーキング付きAGV

ベーシックパーキング付きAGV処理フローは、次の2つの追加の機能で予定作業ありAGVを補足します。

  1. AGVは、作業が現在の作業ポイントに到着するまでパークして待機できます。
  2. AGVは、容量を1より大きくすると、一度に複数のアイテムをロードできます。

ベーシックパーキング

この処理フローは、パーキングに関連付けられたAGVのメインコントロールループに決定ロジックを追加します。

AGVがやるべきことが見つからす、空の場合は、使用可能なParkPoints接続が存在するかどうかをチェックします。また、リスト機能を使用して、ParkPoints接続に関連付けられたリストパーティションからプルします。やるべきことが見つかった場合は、AGVがそのパーキング位置に移動して、作業がその作業ポイントに到着するまで待機します。

パーキング機能をモデルに追加するには:

  1. ベーシックパーキング付きAGV処理フローを追加します。
  2. モデル内のAGVを処理フローに添付します(また、他のAGV処理フローからそれらを削除します)。
  3. ループ内の作業ポイントからAGVをパークさせたい複数のコントロールポイントへのParkPoints接続を追加します。

パーキング位置の接続方法の例を以下に示します。

注意すべき重要事項:

  • AGVは、空で、その作業ポイントでやるべきことが見つからない場合は、必ず、使用可能なパークポイントに移動します。
  • AGVは、作業がその作業ポイントに到着するまで待機します。

これらの事項は、作業ポイントループの設計、各作業ポイントで使用可能なパーキング位置の数、および作業転送の定義方法に精通している必要があることを意味します。たとえば、すべてのAGVを格納可能な単一のパーキングエリアがある場合は、すべての作業が少なくともそのパーキングエリアに関連付けられた作業ポイントに転送される必要があります。そうでない場合は、すべてのAGVがパークされ、そのいずれでも新しい作業の到着を確認できないという状況に陥る可能性があります。これは、それらの位置がパークエリアの作業ポイントに転送されないためです。

または、パーキングエリアの容量を制限できます。たとえば、単一のパーキング位置を施設内の複数の作業ポイントの近くまたはそのポイントに配置することができます。このメリットは、AGVはそれ自体を複数のパーキング位置に分散させることができるため、作業が到着したときにピックアップ位置の近くに配置できることです。デメリットは、自由度の高い作業転送を行わない状況で同じ位置から大量のジョブが押し寄せてきた場合は、すべての作業を処理する単一のまたはほんの少しのAGVしか用意できず、他のAGVはその作業を確認できないためパークされることです。

パーキング戦略のメリット/デメリットに関係なく、この処理フローは、パーキングをサポートする単一の出発点を提供します。必要に応じて、ここからカスタマイズすることができます。たとえば、AGVがパークする必要がある場合の決定処理とパーク後にAGVをアクティブにする方法を改善できます。

マルチアイテム容量

ベーシックパーキング付きAGV処理フローは、AGVのCapacityプロパティ一が1より大きく設定された場合に一度に複数のアイテムをロードできる能力も追加します。

この変更によって、主に、より洗練されたロード処理とアンロード処理が追加されます。

アイテムがロードされると、すぐにそのアンロードに進む代わりに、処理がアイテムを[ロードされたアイテム]内部リストにプッシュします。AGVに別のアイテムをロードするためのより多くの容量がある場合は、AGVがメインコントロールループに戻って、次の作業ポイントに移動します。

一方、AGVの容量がいっぱいになった場合は、AGVがアンロード処理にジャンプします。ここで、AGVは、アンロードする最適なアイテムを、ローカルの[ロードされたアイテム]リストからプルして探し出し、最も近いアンロード位置に優先順位を付けます。その後で、その位置でアンロードします。

AGVは、メインコントロールループの一部として日和見的なアンロードも実行します。作業ポイントに到着して、その作業ポイントを目的地としたアイテムがロードされていることを発見すると、その位置にアンロードします。

UnloadToEmpty

また、処理フローは、UnloadToEmptyという名前の処理フロー変数も追加します。これはブール値(1か0)です。この値を1に設定した場合は、AGVがそのアンロードを開始すると、空になるまで継続します。

この変数の定義するには、処理フローの空白のエリアをクリックして、[プロパティ]の[処理フロー変数]ペインで値を定義します。

発見的パーキング付きAGV

発見的パーキング付きAGV処理フローは、次の2つの追加の機能でベーシックパーキング付きAGVを補足します。

  1. AGVが指定された位置でパークすべきかどうかを判断するためにヒューリスティックを使用します。
  2. バッテリー追跡を実装し、ユーザー定義のしきい値を下回るとパークして再充電します。

パーキングヒューリスティック

処理フローが使用するヒューリスティックは、システム内のアクティブなアイテムの総数を計算して、それをシステム内のアクティブなAGV容量の合計と比較することです。アクティブなアイテムの数は、輸送を要求したが、まだ出荷されていないアイテムの数です。アクティブなAGV容量は、システム内ですべての現在アクティブなAGV(パークされていないAGV)のすべてのアイテム容量の合計です。

AGVがパーキング位置のある作業ポイントに到着して、他にやるべきことが見つからなかった場合は、アクティブなアイテムアクティブなAGV容量を比較します。アクティブなAGV容量からAGVの容量を引いてもまだアクティブなアイテムの数を上回っている場合は、AGVがパークできます。それがアクティブなアイテムの数を下回っている場合は、AGVはアクティブな状態を維持する必要があります。これは、一般的に、現在未処理のジョブのすべてを処理するのに十分な数のAGVをアクティブにしておきたいという考え方に基づきます。

処理フローは、パーク中のAGVをアクティブにする場合も同じヒューリスティックを使用します。輸送用の新しいアイテムが到着すると、処理フローは、アクティブなAGV容量に照らしてアクティブなアイテムの数をチェックし、AGV容量が必要量を下回っていた場合は、パーク中のAGVをアクティブにしようとします。

バッテリー追跡

この処理フローは、バッテリー追跡も追加します。ここでは、バッテリー容量の割合としてBatteryRechargeThresholdBatteryResumeThresholdを定義します。AGVがBatteryRechargeThresholdを下回ると、すぐにパーキング位置を探して、そこでパークし、再充電します。BatteryResumeThresholdに達したら、アクティブにできるようになります。

今回のバッテリー追跡は、カスタマイズ例を示すことを主眼として実装されていることに注意してください。実際のシステムとは異なり、すべてのパーキング位置が再充電位置と仮定されています。

高度なAGV

高度なAGVは、次の2つの追加の機能で発見的パーキング付きAGVを補足します。

  1. 同じロード位置での複数の動的に選択されたピックアップ位置の有効化。
  2. 同じアンロード位置での複数の動的に選択されたドロップオフ位置の有効化。

ピックアップポイント

この処理フローは、ピックアップポイントを実装するように作業生成処理を調整します。アイテムが[AGVWork]リストにプッシュされると、処理が、標準のパーティション分割ロジックの実行に加えて、アイテムが1つ以上のPickupPoints接続を含む位置にあるかどうかも確認します。その場合は、処理が使用可能なピックアップポイント(まだ別のアイテムによって使用されていないポイント)を発見し、そのコントロールポイントにアイテムを移動します。

ピックアップポイント機能をモデルに追加するには:

  1. 高度なAGV処理フローを追加します。
  2. モデル内のAGVを処理フローに添付します(また、他のAGV処理フローからそれらを削除します)。
  3. ループ内の作業ポイントからアイテムをピックアップする1つ以上のコントロールポイントへの1つ以上のPickupPoints接続を追加します。

ピックアップポイントの接続方法の例を以下に示します。

ドロップオフポイント

処理フローは、アンロード処理も調整します。AGVは、アイテムのアンロードを開始するときに、目的地の位置にDropoffPoints接続があるかどうかをチェックします。その場合は、使用可能なドロップオフポイントを動的に選択して、そのポイントに移動し、アイテムをアンロードします。

アイテムをアンロードすると、取得処理を開始します。これは、AGVがアイテムをアンロードしてから、ドロップオフポイントが再び使用可能になる(誰かが来てドロップオフポイントからアイテムを削除するまたはアイテムが自動的に削除される)までにはある程度の時間がかかるという考え方に基づいています。デフォルトで、これは、DropoffRetrievalTime処理フロー変数で定義可能な遅延時間です。ただし、必要に応じてこの処理をカスタマイズすることができます。

ドロップオフポイント機能をモデルに追加するには:

  1. 高度なAGV処理フローが追加されていることを確認します。
  2. モデル内のAGVを処理フローに添付します。
  3. 目的地のコントロールポイントからAGVがアイテムをドロップオフする1つ以上のコントロールポイントへの1つ以上のDropoffPoints接続を追加します。

ドロップオフポイントの接続例を以下に示します。