タスク4.2 - 処理フローを使用したAGV
タスクの概要
AGVシミュレーションをさらに簡単にするために、FlexSimにはAGVシミュレーションプロジェクトで使用できる2つの事前に作成されたAGV処理フローテンプレートがあります。これらの処理フローテンプレートには、ほとんどのAGVシステムに必要な基本ロジックがすでに用意されています。次の画像は、AGVテンプレートの縮小版を示しています。
このチュートリアルタスクでは、処理フローテンプレートを設定する方法を学びます。また、ピックアップエリア、ドロップオフエリア、パークポイントの作成方法も学びます。チュートリアルの最後に、システムをより効率的にするためにコントロールポイントの感度を調整する方法を学びます。
AGVテンプレートの機能の詳細を説明することはこのチュートリアルの範囲を超えていますが、この処理フローによってこのAGVシステムのほぼすべてのロジックが制御されるとお考えください。AGV処理フローテンプレートをより詳細に確認し、どのように機能するかを学ぶようにしてください。テンプレートは機能ごとにまとめられており、理解しやすいように自己文書化されます。
作業が完了すると、モデルは次の画像のようになります。
ステップ1 AGV処理フローテンプレートを追加する
このステップでは、AGV処理フローテンプレートを作成し、AGVを処理フローにアタッチします。このステップでわかるように、基本的な設定は非常に簡単です。処理フローテンプレートを作成したら、AGVを処理フローにアタッチする必要があります。次に、輸送タスクをAGVWorkというグローバルリストにプッシュするようにプロセッサを設定します。これは、AGV処理フローを設定したときに自動的に作成されます。AGVが処理フローにアタッチされると、ディスパッチャーオブジェクトは不要になるため、削除できます。
また、処理フローを正しく機能させるために、「次の作業を検索」ループも作成する必要があります。「次の作業を検索」ループは、基本的にはループ内で互いに接続される一連のコントロールポイントです。この経路が設定されると、システム内のAGVはネットワーク上を継続的にループして、処理する輸送タスクを探します。このステップでは、AGVのメインネットワークに「次の作業を検索」システムを設定します。
処理フローを追加してロジックを設定するには:
- メインツールバーで[処理フロー]ボタンをクリックして、メニューを開きます。[タスク実行者処理フローを追加]をポイントし、[AGV]を選択してこの処理フローテンプレートを作成します。
- 新しく作成された処理フローで、何も選択されないように空白の領域をクリックします。[クイックプロパティ]の[処理フローインスタンス]グループで、[エンティティの追加 (インスタンス)]ボックスを見つけます。このボックスの横にある[サンプラー]ボタン をクリックして、サンプリングモードに入ります。
- 3Dモデルで[AGV1]をクリックします。これで[エンティティの追加]ボックスに表示されるようになります。
- 前のステップを繰り返してAGV2も処理フローにアタッチします。
- AGVが処理フローにアタッチされたので、3DモデルのAGVDispatcherを削除できます。
- 3Dモデルで、[ステージング1]プロセッサをダブルクリックして、プロパティウィンドウを開きます。[フロー]タブで、[輸送を使用]ボックスの横にある矢印をクリックしてメニューを開きます。[リストを使用]をポイントし、[アイテムリストにプッシュ(タスクシーケンスなし)]を選択して、ピックリストウィンドウを開きます。
- [リスト]ボックスに現在選択されている「AGVWork」リストが表示されていることを確認します。残りのプロパティはデフォルト設定のままにします。
- [OK]ボタンをクリックして変更を保存し、プロパティウィンドウを閉じます。
- 上記のステップを繰り返して、AGVWorkリストを[ステージング2]プロセッサにも追加します。
- 2台のAGVが現在[AGVEntryPoint]コントロールポイント上にある場合は、それらをコントロールポイントから遠ざけるようにドラッグし、コントロールポイントが表示されるようにします。
- [AGVEntryPoint]コントロールポイントから[MainDropOffPoint]コントロールポイントに接続(A接続)を作成してメニューを開きます。[NextLookForWork]を選択します。2つのコントロールポイントが接続されていることを示す赤い線が表示されます。
- この処理を繰り返して、残りのコントロールポイント間でループする「次の作業を検索」接続を次の順序で作成します。
- [MainDropOffPoint]コントロールポイントから[MainPickUpPoint]コントロールポイントまで
- [MainPickUpPoint]コントロールポイントから左下のコントロールポイントまで
- 左下のコントロールポイントから右下のコントロールポイントまで
- 右下のコントロールポイントから右下のコントロールポイントまで
- 右下のコントロールポイントから右上のコントロールポイントまで
- 右上のコントロールポイントから[AGVEntryPoint]コントロールポイントまで
シミュレーションモデルをリセットして実行します。
前のチュートリアルタスクの最後に説明したように、AGV1とAGV2がデッドロックする問題がありました。幸い、この問題は発生しません。実行する必要がある実際の処理があるかどうかにかかわらず、両方のAGVが継続的にシステムを巡回し処理を探すためです。AGV処理フローのテンプレートはこのロジックを自動的に作成します。
ステップ2 ピックアップエリアを追加する
このステップでは、ピックアップエリアを追加し、ピックアップコントロールポイントを位置コントロールポイントに接続する方法を学習します。最大10個のアイテムのAGVによる輸送を待つことができるピックアップステーションを作成します。
このステップが終了すると、3Dモデルは次の画像のようになります。
ピックアップエリアを作成するには:
- AGVネットワークの左下コーナーから左方向に16単位の長さの水平AGVパスを作成します。両端に1単位のスペースを残してください。
- 上から下に向かって3単位の長さの垂直AGVパスを作成します。パスは前のパスから1単位左、1単位下にある必要があります。
- 左から右に向かって18単位の長さの水平パスを作成します。前のパスから1単位右下にある必要があります。
- 下から上へ向かって3単位の長さの垂直パスを作成します。前のパスから1単位右上にある必要があります。
- これらのパスを結合するには、ライブラリの[結合パス]ツールを使用します。メインのAGVパスを最初と最後に作成した新しいパスに結合します。結合するパスが他のパスと同じ方向に進むようにしてください。
- 上下のパスに10個のコントロールポイントを追加し、それらを約3単位離します。
- 分かりやすくするために、AGVが通過する順序で新しいコントロールポイントの名前を「PickUp1」、「PickUp2」などに変更します。
- [MainPickUpPoint]コントロールポイントから[PickUp1]コントロールポイントへのコントロールポイント接続(A接続)を作成してメニューを開きます。[PickUpPoints]を選択します。2つのコントロールポイントが接続されていることを示す緑色の線が表示されます。
- 前のステップを繰り返して、MainPickUpPointから10個すべてのピックアップコントロールポイントまでのピックアップコントロールポイントを作成します。
- [DeliverySchedule]処理フローを開きます。
- [ソース:医療品の配送]アクティビティをクリックして選択します。[クイックプロパティ]の[到着]グループで、[量]列の最初の行にあるセルを見つけます。このセルに「
10
」と入力します。
モデルをリセットして実行します。
フローアイテムがキューに入り、プロセッサがそれらの処理を開始します。次に、プロセッサはそれらを[MainPickUpPoint]コントロールポイントに渡し、そこで[MainPickUpPoint]コントロールポイントはアイテムを10個のピックアップポイントのうちのいずれかに転送します。AGVがMainPickUpPointを通過して処理を探している場合、AGVはそれらをピックアップエリアに転送します。次にAGVはフローアイテムをロードし、それらを目的地に輸送します。
モデルの実行時間を十分に長くしておくと、AGVはすべてのアイテムを輸送します。この状況では、AGVは処理する輸送タスクがそのエリアにないため、ピックアップエリアに入らずに無視します。
ステップ3 ドロップオフエリアを追加する
AGV輸送のピックアップポイントを作成できるのと同じ方法で、固定リソースのドロップオフポイントも作成できます。このステップでは、その方法を説明します。
このステップが終了すると、3Dモデルは次の画像のようになります。
ドロップオフエリアを作成してグローバルリストを使用するには:
- 3Dモデルで、[DropOff]シンクを削除します。
- AGVネットワークの左上コーナーから左方向に12単位の水平AGVパスを作成します。両端に1単位のスペースを残してください。
- 上から下に向かって3単位の長さの垂直AGVパスを作成します。パスは前のパスから1単位左、1単位下にある必要があります。
- 左から右へ12単位の長さの同一の水平パスを作成します。前のパスから1単位右下にある必要があります。
- これらのパスを結合するには、ライブラリの[結合パス]ツールを使用します。メインのAGVパスを最初と最後に作成した新しいパスに結合します。結合するパスが他のパスと同じ方向に進むようにしてください。
- 上下のパスに4つのコントロールポイントを追加し、パスに沿って等間隔に配置します。
- 分かりやすくするために、AGVがそれらを通過する順序で新しいコントロールポイントの名前を「DropOff1」、「DropOff2」などに変更します。
- ライブラリから、このエリアに[キュー]を追加します。
- 分かりやすくするために、新しいキューの名前を「LoadingDock」に変更します。
- [LoadingDock]キューから[MainDropOffPoint]コントロールポイントまでの接続(A接続)を作成します。
- [MainDropOffPoint]コントロールポイントから[DropOff1]コントロールポイントまでの接続(A接続)を作成してメニューを開きます。[DropoffPoints]を選択します。水色の線が表示され、位置コントロールポイントがドロップオフコントロールポイントに接続されていることを示します。
- 必要に応じて前のステップを繰り返して、他の3つのドロップオフコントロールポイントに追加のドロップオフコントロールポイントを作成します。
シミュレーションモデルがこのステップの冒頭に表示した画像のようになっていることを確認します。
ステップ4 リストを使用してアイテムの目的地を設定する
このステップでは、アイテムを下流のオブジェクトに搬送するためのさまざまな方法について学びます。ポート接続を使用するのではなく、「ItemsReadyForDelivery」という名前のグローバルアイテムリストからアイテムをプッシュおよびプルします。また、代わりに[Dropoff]シンクをキューに変更します。
リストは、正しく設定するには少し注意を払う必要がありますが、長距離になる可能性があるポート接続をする必要がないため、AGVモデルでのアイテムのルーティングに適しています。リストを使用すると、さまざまな始点とさまざまな目的地を持つモデルで、多対多のポートルーティングを単純化することもできます。
グローバルアイテムリストを作成するには:
- [ツールボックス]で[追加]ボタン をクリックして、メニューを開きます。[グローバルリスト]をポイントし、[アイテムリスト]を選択します。
- [リストプロパティ]ウィンドウで、リスト名を「ItemsReadyForDelivery」に変更します。
- [ラベルフィールド]ボックスで、現在のテキストを削除し、「
LoadType
」と入力します。 - すべての式フィールドを削除します。
- [OK]ボタンを押して変更を保存し、ウィンドウを閉じます。
- [ステージング1]プロセッサをダブルクリックして、プロパティウィンドウを開きます。[フロー]タブで、[ポートに送信]ボタンの横にある矢印をクリックしてメニューを開きます。[リストを使用]をポイントし、[アイテムリストにプッシュ]を選択します。
- [リスト]ボックスの横にある矢印をクリックして、メニューを開きます。[ItemsReadyForDelivery]を選択します。
- [OK]ボタンをクリックして変更を保存し、ウィンドウを閉じます。
- [ステージング2]プロセッサについても前の手順を繰り返します。
- [LoadingDock]キューをダブルクリックして、プロパティウィンドウを開きます。[フロー]タブの[入力]グループで、[プル]チェックボックスをオンにします。
- このボックスの横にある矢印をクリックして、メニューを開きます。[リストを使用]をポイントして、[アイテムリストからプル]を選択します。
- [リスト]ボックスの横にある矢印をクリックして、メニューを開きます。[ItemsReadyForDelivery]を選択します。
- [OK]ボタンをクリックして変更を保存し、ウィンドウを閉じます。
モデルをリセットして実行します。
最初のAGVはDropOff 4でドロップオフし、2番目のAGVはDropOff 3でドロップオフします。
ステップ5 パークポイントを追加する
このステップでは、さらに3台のAGVをモデルに追加して合計5台にします。また、それぞれのAGVにパークポイントを作成します。パークポイントは、シミュレーションモデルが最初に実行を開始するときにAGVが出発する場所です。シミュレーションの実行中にバッテリーが少なくなると、AGVはパークポイントに戻ってバッテリーを充電できます。
このステップが終了すると、3Dモデルは次の画像のようになります。
AGVを追加してパークポイントを作成するには:
- ライブラリから、3つの[TaskExecuter]オブジェクトを3Dモデルに追加します。
- 分かりやすくするために、これらのAGVの名前を「AGV3」、「AGV4」、「AGV5」に変更します。
- [AGV]処理フローを開きます。
- 何も選択されないようにするために、空白の領域をクリックします。[クイックプロパティ]の[処理フローインスタンス]グループで、[エンティティの追加 (インスタンス)]ボックスを見つけます。このボックスの横にある[サンプラー]ボタン をクリックして、サンプリングモードに入ります。
- 3Dモデルで[AGV3]をクリックします。これで[エンティティの追加]ボックスに表示されるようになります。
- 前のステップを繰り返して、他の2つの新しいAGVも処理フローにアタッチします。
- 「AGV1」と「AGV2」を[AGVEntryPoint]コントロールポイントから離すようにドラッグし3Dモデルに表示されるようにします。
- AGV2からAGVEntryPointコントロールポイントへのポート接続(A接続)を作成してメニューを開きます。[トラベラーAGV]を選択します。2番目のAGVが接続されていることを示す赤い線が表示されます。
- 前のステップを繰り返して、残りのAGVをコントロールポイントに接続します。
- コーナーから約4単位離れた左上コーナーに、6単位の垂直AGVパスを作成します。
- 新しいパスをクリックして選択します。[クイックプロパティ]で、[双方向]チェックボックスをオンにします。
- Ctrl+Cを押して選択したパスをコピーします。Ctrl+Vを押してパスのコピーをモデル内に貼り付けます。
- 前の手順を繰り返して5つのパスを作成します。それらが互いにおよそ4単位離れるようにパスを空けてください。
- ライブラリの[結合パス]ツールを使用して、各パークパスをメインのAGVネットワークに結合します。
- 作成した新しい結合パスの1つをクリックして選択します。[クイックプロパティ]で、[双方向]チェックボックスをオンにします。
- 前のステップを繰り返して、すべての新しい結合パスを双方向パスに変更します。
- ライブラリから、いずれかのパークパスの中央にコントロールポイントを追加します。
- 5つすべてのパークパスについてこのステップを繰り返します。
- 分かりやすくするために、これらの新しいコントロールポイントの名前を「ParkPoint1」、「ParkPoint2」などに変更します。
- [AGVEntryPoint]コントロールポイントから[ParkPoint1]コントロールポイントへのポート接続(A接続)を作成してメニューを開きます。[ParkPoints]を選択します。2番目のAGVが接続されていることを示す濃い緑色の線が表示されます。
- 前のステップを繰り返して、[AGVEntryPoint]コントロールポイントを残りのパークポイントに接続します。
シミュレーションモデルをリセットして実行します。
シミュレーションが開始すると、5台すべてのAGVが指定されたパークポイントから出発し、その後ネットワーク全体を移動して輸送タスクを処理します。AGVは一時的に停止しなければならないことがあります。次のステップで、AGVがコントロールポイントで待機する時間を減らす方法を学びます。
モデルの実行時間を十分に長くしておくと、AGVはすべてのアイテムを輸送します。この状況が発生すると、AGVはシステムのまわりをループするのではなく、バッテリーを充電するために最終的にすべてパークポイントに戻ります。
ステップ6 コントロールポイントの感度を変更する
前のステップで、AGVは、その前方のパスにいるAGVがコントロールポイントから退出するのを待つ間、停止する必要がある場合があることが分かりました。これは、AGVネットワークに、パス上の次のコントロールポイントが利用可能かどうかを判断することで、クラッシュを回避できる高度な先読みメカニズムがあるためです。次のコントロールポイントを使用できない場合、AGVは現在のコントロールポイントで待機します。
デフォルトでは、コントロールポイントは、それを要求したAGVが次のコントロールポイントに到達するまで解放されません。コントロールポイントの感度を変更して、コントロールポイントが別のAGVにより割り当てられる前に、AGVがコントロールポイント自体をクリアするだけで済むようにできます。このステップで[割り当て解除タイプ]プロパティを変更して、この感度を変更する方法を学習します。
AGVシステムのコントロールポイントの感度を変更するには:
- 3Dモデルに表示されるように、5台のAGVを[AGVEntryPoint]コントロールポイントから離すようにドラッグします。
- [AGVEntryPoint]コントロールポイントをクリックして選択します。[クイックプロパティ]で、[割り当て解除タイプ]メニューをクリックして開きます。[現ポイント通過時に割り当て解除]を選択します。
- メインAGVネットワーク上のすべてのコントロールポイントに対して前のステップを繰り返します。
- ツールボックスで、[AGVネットワーク]をダブルクリックして[ネットワークプロパティ]ウィンドウを開きます。
- [割り当て解除タイプ]タブで、タイプメニューから[現ポイント通過時に割り当て解除]を選択します。
- [割り当て解除の時期]の見出しの下にある最初のメニューをクリックして開きます。[センター]を選択します。
- [OK]ボタンを押して変更を保存し、ウィンドウを閉じます。
シミュレーションモデルをリセットして実行します。
これにより、AGVはシステム全体を移動するようになるので、より効率的になります。AGVはそれほど頻繁にデッドロックすることはなく、ネットワーク全体に素早く効率的に間隔を空けて配置されます。
結論
ここでは、AGV処理フローテンプレートによって、ピックアップポイント、ドロップオフポイント、パークポイントなど、さらに複雑なAGVの動作を可能にする方法を学びました。また、システムをより効率的にするために必要に応じてコントロールポイントの感度を調整する方法も学びました。次のチュートリアルでは、AGVが必要に応じて複数の階に移動できるように、AGVシステムにエレベーターを追加する方法を学びます。「チュートリアル4.3 - AGVでエレベーターを使用する」に進みます。