AGVネットワークは、自動誘導車両(AGV)や他のタスク実行者をシミュレートしながら移動経路を作成するのに役立ちます。
AGVモジュールは、自身のAGVオブジェクトタイプをライブラリに追加しません。代わりに、AGVネットワーク上のコントロールポイントにタスク実行者を接続します。これらのタスク実行者はAGV定義のロジックを使用して移動します。
AGVネットワークに接続されたタスク実行者には、処理フローの[イベントを待つ]または[イベントトリガーソース]アクティビティでサブスクライブできる追加イベントが与えられます。
AGVは以下の統計を追跡できます。
[AGVタイプ]タブには次のプロパティがあります。
パスまたはコントロールポイントを右クリックし、[AGVネットワークプロパティ]を選択すると、[AGVタイプ]ページが表示されます。
ここでは、モデルのパスクラスのセットを追加、削除、並べ替え、名前変更できます。パスクラスは、パスごとにAGV速度を分類するために特に使用されます。パスクラスを追加すると、順方向速度と逆方向速度の両方に関して、そのパスクラスに関連付けられた新しい速度行が各AGVタイプテーブルに追加されます。
ここでは、モデルのロードタイプのセットを追加、削除、並べ替え、名前変更できます。ロードタイプは、AGVで運ぶもののカテゴリをユーザーが定義した一覧です。これにより、AGVの現在のロードでAGV速度を分類できます。
これは各移動オペレーションの始まりで起動するトリガーです。このトリガーの主な目的はAGVの現在のロードタイプを設定することです。
ここでは、モデルのAGVタイプの一覧を追加、削除、並べ替え、名前変更できます。
AGVタイプ仕様テーブルでは、パスクラス、ロードタイプ、AGV方向、加速、減速、非アイドルバッテリー使用量ごとに最大速度を定義します。
各AGVタイプには、バッテリー容量(アンペア時間)、アイドルバッテリー使用量(アンペア)、充電率(アンペア)が定義されています。さらに、各AGVタイプには、非アイドルバッテリー使用量(アンペア)がロードタイプごとに分類されています。各AGVはその最大バッテリー容量でシミュレーションを開始し、シミュレーションの間、バッテリー使用量を追跡します。アイドル状態になると、そのアイドル状態のバッテリー使用量が適用されます。移動オペレーションを行う際のバッテリー使用量は常にその時のロードタイプに基づきます。AGVに充電を設定すると、完全に充電されるか、その次の移動オペレーションが始まるまでその充電率で充電されます。バッテリーレベルを問い合わせる、充電を始める、バッテリーレベルを手動で設定するなどの方法については、agvinfo()コマンドのドキュメントを参照してください。
ロードされたアイテムをAGVにAGVのトレーラーとして接続することもできます。これにより、ロードされたアイテムは、AGVで運ばれる代わりに、AGVの後ろについてそのパスを進みます。[ロードをトレーラーとして添付]ボックスを選択し、[トレーラーギャップ]を定義します。トレーラーギャップは、AGVの後ろと牽引するアイテムの前までの間のギャップの距離です。
通常、宛先まで移動するタスクをAGVに与えるとき、停止のところで完全に減速してその移動タスクを終えることをAGVに求めます。しかしながら、まだ動いている状態で移動タスクを終えることを求める場合もあります。送付をその場で決定する場合などです。その場合、移動タスクにゼロ以外の終了速度を定義できます。これを行うと、実際には、終了時のAGVの位置と同様に、移動タスクの終了時間が早めにシフトされます。言い換えると、動いているうちに宛先のコントロールポイントで終了する代わりに、定義された終了速度でAGVがコントロールポイントに近づいている間に移動タスクが終了します。後続の移動タスクをAGVにすぐに与えない場合、AGVは停止まで減速し、移動タスクが完了してからコントロールポイントに到着します。ただし、新しい移動タスクをAGVにすぐに与える場合、続けて新しいタスクに取りかかります。前のタスクの終了速度から始め、元の宛先のコントロールポイントを通過して移動します。
[ウェイポイント]タブには次のプロパティがあります。
ウェイポイントは、AGVがコントロールポイントを通過するときに発生するAGVコントロールロジックを定義するために使用されます。しかしながら、今後は、AGVコントロールについてはウェイポイントの代わりに処理フローを使用することをお勧めします。FlexSimはテンプレートAGVコントロール処理フローを提供します。これは、AGVコントロールロジックを定義するための出発点として使用できます。
パスまたはコントロールポイントを右クリックし、[AGVネットワークプロパティ]を選択すると、[ウェイポイント]ページが表示されます。
ここでは、各ウェイポイントを追加、削除、並べ替え、名前変更できます。
ウェイポイントロジックを起動するタイミングがこれで定義されます。オプションは次のとおりです。
ウェイポイントを起動する場合は1を返し、起動しない場合は0を返すフィールド。
ウェイポイントのコード。
このウェイポイントの一部であるコントロールポイントのリスト。ここでは、メンバーリストを追加、削除、並べ替えできます。
詳細については、「ウェイポイントのトリガーアクション」を参照してください。
[コントロールポイントの接続]タブには、次のプロパティがあります。
パスまたはコントロールポイントを右クリックし、[AGVネットワークプロパティ]を選択すると、[コントロールポイントの接続]ページが表示されます。
各コントロールポイントの接続に対して、3Dビューで表示するかどうかとその色を定義できます。また、必要に応じて接続を追加、削除、名前変更できます。
接続のリストボックスを選択した場合、モデル内の接続がすべて、パーティション分割されたグローバルリストに追加されます。これにより、処理フローでAGVコントロールロジックを簡単に定義できます。AGVが指定の宛先に到着したとき、AGVの現在のコントロールポイントに関連付けられているさまざまなリストパーティションからプルすることで何をするか決定できます。たとえば、AGVでできる作業が与えられているコントロールポイントを近くで見つけたり、駐車場所を見つけたり、次のポイントに進んで作業を探したりできます。これらのオペレーションは、グローバルリストの現在のコントロールポイントのパーティションからプルすることで実行できます。
コントロールポイント接続には、次の3つの接続タイプのいずれかが与えられます。
コントロールポイントは、ウェイポイントのトリガーアクションなど、さまざまなトリガーアクションを介して利用できます。あるいは、cpconnection()コマンドで手動アクセスすることで利用できます。
[累積タイプ]タブには、次のプロパティがあります。
[累積タイプ]を利用すると、累積パス、すなわち、AGVが近接性を検出し、互いの衝突を回避するパスのパラメータを定義できます。
パスまたはコントロールポイントを右クリックし、[AGVネットワークプロパティ]を選択すると、[AGVタイプ]ページが表示されます。
累積タイプはページ上部にあるコンボボックスやボタンで追加、削除、名前変更、並べ替えします。
パスに累積タイプを割り当てるには、パスをクリックし、右にある[クイックプロパティ]で[累積タイプ]ドロップダウンから目的のタイプを選択します。
これらのプロパティは、2つのAGVが共通の累積パス上で近接性を検出する仕組みを定義します。
あるパスに累積タイプを定義すると、AGVネットワークでは、そのパス上の交点が割り当てとして処理されます。AGVがコントロールポイントとコントロールエリアを割り当てる方法と同様に、AGVは、交点を通過する前に、累積パス上で交点を割り当てる必要があります。[累積タイプ]ページで、停止距離を定義できます。これは交点前の距離であり、AGVがそれを割り当てできない場合、AGVは交点前で停止する必要があります。停止距離は間隔でもあり、交点を通過してこの距離だけ空いたら、AGVは交点を解放し、別のAGVに利用させることができます。以上の距離はいずれも、AGVがパスに入るとき、パスから出るとき、パス上にいるときで分類されます。すでにパス上にいるか、パス上に残っている場合、距離はパスの幾何的配置によって分類されます。すなわち、AGVから離れるか、AGVに向かうように交点は分岐します。
ここでは、交点の停止距離を定義します。距離ごとに、距離自体とAGVの端を定義します。これにより、停止距離でAGVのどの部分が停止するべきかが決定されます。通常、停止距離はAGVの前縁に基づきます。特定のフィールド内をクリックすると、定義している距離や端が右側の図に表示され、フィールドが正確に何を定義しているか把握するのに役立ちます。
ここでは、交点のクリア距離を定義します。停止距離と同様に、距離自体とAGVの端を定義します。通常、クリア距離はAGVの後縁に基づきます。特定のフィールド内をクリックすると、定義している距離や端が右側の図に表示され、フィールドが正確に何を定義しているか把握するのに役立ちます。
交点の割り当てに適用される特別な規則がいくつかあります。
多くのユーザーは、この累積オプションを自らの課題の完璧な解決策と考えるかもしれません。確かに、累積によって多くのシミュレーションシナリオが容易になるものの、その一方で、新たな複雑さや潜在的な問題が生まれるのも事実です。これは、累積を使用すべきではない、という意味ではありません。発生する大半の問題は、適切なノウハウで簡単に解消できます。むしろ、累積を使用するかどうかを判断する前に、累積の仕組みを十分に理解すべきです。
累積の使用に伴う主な複雑さは、新しい割り当て方式にあります。この方式は、コントロールポイントとコントロールエリアに使用される標準の割り当て方式とは異なりますが、標準の割り当て方式と共に使用されます。そのため、状況によっては、これら2つの割り当て方式が互いに「競合」し、システムのデッドロックを引き起こすことがあります。この問題は特に、交点が接近したエリアで発生する確率が高く、こうしたエリアでは、コントロールエリアを使用して相互にトラフィックが排除されます。
問題となる状況の例を次の図に示します。
この状況では、AGV_7はコントロールエリアの後の交点を割り当てたものの、コントロールエリア自体はまだ割り当てていません。この場合、画面下中央のAGV、AGV_9が先にコントロールエリアを割り当てるため、深刻な問題が発生します。AGV_7はAGV_9が所有しているコントロールエリアを割り当てることができず、AGV_9はAGV_7が所有している交点を割り当てることができないため、2台のAGV間でデッドロックが発生します。
前述のように、この状況は、コントロールエリアの割り当てと累積パスの交点の割り当てという2つの異なる割り当て方式が共存するために発生します。AGVは、コントロールエリアの割り当てを、前のコントロールポイントに到着した時点で行います。割り当てはオールオアナッシング方式です。つまり、AGVは、最も近いコントロールポイントまで進んだ後、パス上の次のコントロールポイントだけでなく、そこに至るまでのコントロールエリアもすべて割り当てます。そのため、AGVがコントロールエリアを割り当てるタイミングは、そこに至るまでに存在するコントロールポイントの位置に基づきます。
一方、累積パスの交点の割り当ては、交点の位置と、[AGVネットワークプロパティ]の[累積タイプ]の設定に基づいて決まります。[オンパスロング]設定にデフォルトを使用する場合、上記の状況のAGV_7は、交点を割り当てることができなければ、交点から少なくとも1メートル手前で前縁部を停止できなければなりません。これにより、AGVが交点の割り当てを試みる地点が決まります。
この状況例でAGV_7が先に交点を割り当てるのは、コントロールポイントがコントロールエリアの極めて近くにあることが原因です。AGV_7が交点を割り当てなければならない地点は、コントロールエリアを割り当てなければならない地点より手前に存在します。一方、AGV_9のコントロールポイントは、コントロールエリアから少し離れた位置にあるため、交点の割り当てより前にコントロールエリアを割り当てます。そのため、デッドロックが発生します。
このような問題に遭遇した場合、主に2つの解決策を試すことができます。第1の解決策は、交点が接近したエリアに特化した累積タイプを作成することです。この累積タイプでは、コントロールエリアを常に交点より手前に割り当てます。まず、[AGVネットワークプロパティ]で新しい累積タイプを作成します。次に、[交差点の停止地点]の基準をAGVの中央に置き、[距離]を0に設定します。これは、交点を割り当てることができないAGVが、交点の手前0メートルの地点で中心部を停止しなければならないことを意味します。この設定を行えば、この狭いエリアでは、すべてのパスがこの累積タイプを使用します。
第2の解決策は、こうした接近したエリアで累積を使用しないことです。交点を通る各パスに対して、累積設定を[累積なし]にするだけです。これにより、コントロールエリアが、エリア内で相互排除を行う唯一の要素となります。正しい割り当て順序を気にする必要はありません。ここで、コントロールエリアの割り当て解除が早すぎないようにしたいと仮定します。コントロールエリアの割り当て解除を行う前に、前方にある累積パスの少なくとも最初の交点は割り当てておきたいものです。これは、それほど難しくありません。まだ実行していなければ、コントロールエリアの割り当て解除タイプの割り当て解除距離を長くします。あるいは、コントロールポイントを次の累積パスの開始地点に配置し、コントロールエリアの割り当て解除タイプを[次のコントロールポイントで割り当て解除]に設定します。
一般的な経験則では、累積は、比較的交点が少なく、セクションの長いパスを持つモデルエリアで正しく機能します。一方、多くの交点が接近しているエリアでは、累積をオフにし、コントロールポイントでエリアを取り囲み、コントロールエリアで内部のトラフィックを制限する方が、簡単で、問題も少なくなります。
[割り当て解除タイプ]タブには、次のプロパティがあります。
パスまたはコントロールポイントを右クリックし、[AGVネットワークプロパティ]を選択すると、[割り当て解除タイプ]ページが表示されます。
ここでは、各割り当て解除タイプを追加、削除、並べ替え、名前変更できます。
これは、AGVのどの「端」で割り当て解除時間を決定するかを定義します。オプションは次のとおりです。
割り当て解除時間を決定するパス上の関連ポイントを定義します。オプションは次のとおりです。
オブジェクトの割り当てを解除する前に移動に追加される距離です。
定義された端が「移動ポイント+距離」に到達した後、割り当て解除を遅らせるために追加される時間です。
[ビジュアル]タブには、次のプロパティがあります。
パスまたはコントロールポイントを右クリックし、[AGVネットワークプロパティ]を選択すると、[ビジュアル]ページが表示されます。
3Dビューでパスを描画するときの色を定義します。これは特に、CAD描画でモデルをオーバーレイしているとき、モデルとCAD線で構築されたAGVネットワークパス間を線で描くときに便利です。
3Dビューでコントロールポイントを描画するときの色を定義します。
基準となる幅をピクセルで定義します。モデル内のパスとコントロールポイントがこの幅で描画されます。
基準となするサイズを定義します。コントロールポイントとパスの方向矢印の描画をこのサイズで縮小拡大します。
モデル内で個々のオブジェクトをどのように操作できるかを定義します。モデルの特定の部分を完了したとき、その中のオブジェクトに関して変更できるところを制限することがあります。オプションは次のとおりです。
[一般]タブには、次のプロパティがあります。
パスまたはコントロールポイントを右クリックし、[AGVネットワークプロパティ]を選択すると、[一般]ページが表示されます。
モデルの開始時に各AGVに対して起動するトリガー。通常、これを使用してAGVのOnResourceAvailableを起動し、AGVポーリングを開始します。
チェックボックスをオンにすると、コントロールポイント/コントロールエリアの割り当てロジックはデッドロックサイクルがないか継続的に確認します。見つかった場合は、モデルを停止し、問題を通知します。デッドロック検出には追加の計算が必要であり、シミュレーションが遅くなる可能性があることに注意してください。そのため、デバッグ中にオンにして、デッドロック問題がすべて解決したら、オフに戻してください。
チェックボックスをオンにすると、AGVでは、終了速度0の移動タスクが「AGVの最高速度で終了」と解釈されます。この動作は、ネットワークノードを使用する標準的なトラベルネットワークなど、他のFlexSim移動メカニズムではデフォルトです。しかしながら、AGVの場合、これはいつも望ましい動作であるとは限らないため、ここでこの設定を明示的に定義します。
次のセクションでは、さまざまなウェイポイントのトリガーアクションについて説明します。
「検索経由でリダイレクト」では、AGVが到着するコントロールポイントのコントロールポイント接続を検索することでAGVがリダイレクトされます。
このアクションは作業を探し、見つかったらそれに取りかかります。
このアクションでは、直接参照により、AGVが別のコントロールポイントにリダイレクトされます。
このアクションは、一連のコントロールポイントの1つが使用可能になるまで待機します。利用可能になると、ウェイポイントトリガーのすべてのアクションが再起動します。通常、このアクションは[検索経由でリダイレクト]アクションの後に置きます。リダイレクト先が見つからない、すなわち、コントロールポイントはすべて利用できない場合、コントロールポイントが利用可能になるまで待機できます。
このアクションは、定義されている一連のコントロールポイントに作業が到着するのを待ちます。これは[輸送を使用]の[アイテムをAGV経由で移動]アクションとの連動で使用してください。そのアクションが使用されるとき、フローアイテムは回収のためにコントロールポイントに置かれます。この「作業を待つ」アクションは、アイテムがこれらのコントロールポイントに入ってくるのをリッスンし、ウェイポイントのすべてのアクションを再び起動します。通常、作業が見つからないとき、作業が到着するのを待つように、[作業を検索]アクションの後に[作業を待つ]を追加します。
このアクションは定義されている遅延時間だけ待機し、それからウェイポイントトリガーのアクションを再び起動します。通常、ウェイポイントトリガーの開始位置にこれを配置します。これには、現実世界の意思決定プロセスに関連付けられている遅延を実装できます。すなわち、現実世界のシステムで送付決定の処理に5秒かかるとすれば、最初に5秒待機し、それから決定ロジックを起動します。