AGVとトランスポーター–マテリアルハンドリングライブラリの学習(パート2)

AGVとトランスポーター–マテリアルハンドリングライブラリの学習

AnyLogic 8.3にはマテリアルハンドリングライブラリが付属しており、その操作方法をブログで説明する一連の特集記事を公開しました。それらは、実際の環境でサンプルを使用して、ライブラリとそのコンポーネントの主な機能であるブロックとスペースマークアップエレメントについて説明しています。

コンベアに焦点を当てたパート1に続いて、このブログは商品を移動する他の方法、つまりトランスポーターについて説明しています。これらには、フォークリフトのほか、ロボットおよび機械式カート–無人搬送車(AGV)が含まれます。

AnyLogicでは、マテリアルハンドリングライブラリは、施設での輸送業務のモデル化に役立ちます。これは、TransporterFleetMoveByTransporterSeizeTransporterReleaseTransporterブロック、およびスペースマークアップエレメントを使用して実行されます。 AnyLogicのサンプルモデルは、これらのブロックとエレメントがどのように機能するかを示しています。これらは、「ハウツーモデル」セクションのAnyLogicの「ウェルカムページ」にあります。

モデルの最新バージョンについては、AnyLogicの最新バージョン8.3.3以上を使用していることを確認してください。それでは、始めましょう。

MoveByTransporter

MoveByTransporterモデルでは、AGVは3つのコンベアに到着したボックスを取得し、色分けされたコンベアに転送します。この場合、ボックスの色は宛先コンベアの色に対応します。

トランスポーターは、特殊な磁気テープのネットワークなどのトラック(軌道)によってガイドできます。これらのトラックとネットワークは、スペースマークアップエレメントを使用してAnyLogicでモデル化されています。これを行うには、Material Handling Libraryパレットの Space Markupセクションからパスエレメントを選択し、Mainキャンバスにネットワークを描画します。注:あるトラックを最後以外のポイントで接続すると、Point Nodeエレメントが作成されます。AnyLogic 8.3では、これらは交差点に進化しました。これで、AnyLogicは、すべてのパスをリンクするために必要なすべてのターンパスを自動的に描画します。エレメントの半径を大きくすると、それに応じて交差内のパスが変更されます。交点が占めるエリアのサイズは、エレメントの半径にも依存します。

交差点は、軌道を視覚化するだけでなく、別の重要なタスクを実行します-交差点は、トランスポーターの分離を調整し、トランスポーターが互いに重なり合うのを防ぎます。この機能を使用したくない場合は、交差点を通常のポイントノードに含むことができます。

 Point Nodeの半径を変更するための Point Nodeの長方形ハンドル
Point Nodeの半径を変更するための Point Nodeの長方形ハンドル

Point Node エレメントを使用して形成された交差点のサンプル

Point Node エレメントを使用して形成された交差点のサンプル

トランスポーターが使用するすべてのパスは、Point NodeRectangular Node、またはPolygonal nodeのいずれかのエレメントで終了する必要があることに注意してください。これらにより、トランスポーターは向きを変えて反対方向に進むことができます。この場合、2つの長方形ノードがAGVのベースロケーションとして機能します。 Attractor エレメントは、各トランスポーターの位置と方向を示し、トランスポーターが配置されているすべてのエリアで、トランスポーターの総数と同等か、それ以上の数が必要です。

MoveByTransporterモデルのMainの全体図

MoveByTransporterモデルのMainの全体図

すべてのパスが構築できたら、AGVの動作をモデル化する新しいタイプのエージェントを作成する必要があります。Transporter Typeエレメントを使用してエージェントを作成し、ビルトインアシスタントを使用して構成します。この場合、AGVアニメーションのみが構成されます(WarehousesおよびContainer TerminalsセクションのAutomated Guided Vehicle)。

単一のトランスポーターまたは同一のトランスポーターのグループ(寸法と速度が同じ)を作成するには、TransporterFleetブロックを使用します。 Transporterエージェントは、トランスポーターの役割を実行するエージェントのタイプとして選択されます(ブロックのプロパティのNew Transporterリストで Transporterを選択します)。このグループでは、12台のトランスポーターが使用されます:対応する値をプロパティCapacityに入力します。それらの基本位置は、スペースマークアップに示されている2つのRectangularNodeエレメントになります。通常のPoint Nodeエレメントをトランスポーターのベースロケーションとして使用することもできます。

寸法と速度パラメータは、ブロック設定で設定されます:

  • トランスポーターの長さは、障害物またはその経路内の別のトランスポーターまでの距離を計算するときにAnyLogicによって考慮されます。
  • 高さによって、輸送される荷物の位置が決まります:デフォルトでは、3Dでは、荷物はコンベアエージェントの座標の中心に配置され、トランスポーターの高さまで持ち上げられます。荷物を中心からずらす必要がある場合は、カスタム関数setCargoPositionを使用できます。これにより、トランスポーターに対する相対的な位置を正確に指定できます。ちなみに、トランスポーターの寸法はトランスポータータイプでも設定できます。Transporter エージェントのDimensions and movement プロパティに移動します。

TransporterFleetブロックのプロパティ

TransporterFleetブロックのプロパティ

次に、AGVとコンベアを使用してモデル内を移動できるボックスのエージェントタイプItemを作成します-これは、フローチャートで説明されているプロセスです(以下を参照)。ボックスの色はAPI関数を使用してランダムに設定され、寸法は数字で指定されます。

Item - Agent Type

開始コンベアと終了コンベアを決定するために、2つの変数(sourceConveyorとtargetConveyor)がItemエージェントに作成されます。Sourceブロックを終了すると、カスタム関数getSourceConveyorおよびgetTargetConveyorを使用して、開始コンベアと終了コンベアの値が与えられます:これは、あたかも開始コンベアと終了(行先)コンベアを示すバーコードが各ボックスに貼り付けられているかのようです。

source - Source

最後に、フローチャートの残りの部分が作成され、コンベアシステムとAGVルートに沿ってエージェントを移動します。

MoveByTransporterモデルのフローチャート

MoveByTransporterモデルのフローチャート

Sourceブロック(Newエージェントとして選択されたItem Agentタイプ)はボックスを生成します。conveyブロックとconvey1ブロックは、コンベアに沿ってボックスを移動する役割を果たします。この場合、ボックスエージェントは、変数(sourceConveyor)で指定されたコンベアに沿って移動します。コンベアのモデリングに関する投稿で、 Convey ブロックの設定の詳細をご覧ください。

convey - Convey

次に、新しいブロック、moveByTransporterについて説明します。AGVからの貨物の積み下ろし時間を単純な遅延でシミュレートできる場合、すべてのトランスポータータスクをこのユニットで実行できます。Seize transporterのSeizeセクションでは、Fleet propertytransporterFleetTransporterFleet)トランスポーターグループが含まれています。これらのトランスポーターエージェント(ボックス)は、moveByTransporterブロックを通過します。Loading time を5秒に設定します。トランスポーターのエージェントピックアップ場所、Pickup location isは、次のように設定できます。

  • トランスポーターを呼び出したagent;
  • node-スペースマーキングポイント;
  • attractor;
  • 開始または終了からのオフセットが指定されているpath;
  • 開始または終了から指定されたオフセットを持つconveyor;
  • position on conveyor;
  • conveyor station;
  • グラフィカルエディタでのポイントのcoordinates

ロードポイントがトランスポーターのパス上にない場合、AnyLogicはそれに最も近いパス上のポイントを自動的に判別し、そこにトランスポーターを送ります。このモデルでは、Pickup location isプロパティでAgentオプションが選択されています。

MoveByTransporterブロックのプロパティ

MoveByTransporterブロックのプロパティ

AGVがそれを呼び出すエージェントをどこでピックアップする必要があるかを決定したら、宛先ポイントを設定する必要があります。このプロセスは、荷積み場所の選択方法と似ています。このタイプの商品を受け取るコンベアの先頭を宛先として選択します。これを行うには、Destination isプロパティでConveyorを選択し、Conveyorフィールドにコードagent.targetConveyorを入力します-これにより、各荷物を同じ色のコンベアに送ることができます。デフォルトでは、トランスポーターはネットワーク上の最短ルートを自分で決定し、他のトランスポーターとの衝突を防止しようとします。

パスの横断を回避できない場合、トランスポーターは10秒後にすれ違います。この遅延は、複雑なAGVジャンクションをシミュレートするために使用されます。これは通常、オペレーターまたは自動システムによってリモート制御されます。より詳細なAGVルーティングは、プログラムの将来のアップデートバージョンで可能になる予定です。

次に、トランスポーターから荷下ろしするプロセスです。これは、Release transporterのセクションで設定されます。Unloading timeプロパティで、アンロード(荷下ろし)時間を15秒として指定します。荷下ろししたトランスポーターは次のことができます:

  • 毎回ホームロケーションに戻ります;
  • 他のタスクがない場合は、ホームロケーションに戻ります;
  • 現在の場所にとどまります。

この場合、AGVは、ピックアップポイントに到達するとすぐに、エージェントのロードと移動を開始します。同様に、AGVのリリースは、エージェントが宛先に到達してアンロード(荷下ろし)された直後に発生します。

MoveByTransporterブロックのプロパティ

MoveByTransporterブロックのプロパティ

AGVがコンベアから荷物を受け取るとき、利用可能なパスを使用して可能な限り接近します。トランスポーターは、コンベアに最も近いパス上に指定されたポイントがない場合でも、目的のコンベアに最も近いポイントを決定します。

SeizeTransporterとReleaseTransporter

ロードとアンロードのタスクが可能な限り単純で、トランスポーターが中間停止を行わずにエンドポイントにのみ荷物を配送するモデル(ステーションなど)では、すべてのロジックをMoveByTransporterブロックで描画できます。ロードおよびアンロードプロセスも重要な役割を果たす場合は、SeizeTransporterブロックとReleaseTransporterブロックを使用するとさらに便利です。

モデルSeizeTransporterReleaseTransporterについて考えてみます。このモデルでは、特殊なAGVを使用して、重い荷物(コートペーパーロール)を輸送します。これらのロールのロードとアンロードはクレーンによって実行されます(それらのロジックはプロセスモデリングライブラリを使用して記述されています)。

SeizeTransporterとReleaseTransporterモデルのフローチャート

SeizeTransporterとReleaseTransporterモデルのフローチャート

モデルでは、PathPoint Node 、および Rectangular Node は、トランスポーターネットワークとベースステーションによって表されます。Transporter Type エージェントタイプは、新しいエージェントAGVを作成します。agvFleetブロック(タイプTransporterFleet)も追加され、ロール運搬トランスポーターグループのプロパティが設定されます。このグループには、3つのAGV(Capacity — 3、プロパティNew Transporter — AGV)が含まれます。AGVの寸法は、 Set dimensions propertyを確認し、 Length フィールド(2.5メートル)に入力することで構成されます。

SeizeTransporterとReleaseTransporterのメインモデルの概観

SeizeTransporterとReleaseTransporterのメインモデルの概観

Sourceブロックは、オブジェクト(この場合はロール)を生成し、それらをクレーンの下の領域(node1)に配置します。AGVがロードポイントに到着すると、クレーンはロールを収集します。クレーンがロールを収集している間、トランスポーターはその場で待機する必要があります。この動作をモデルでモデル化するには、seizeAGVSeizeTransporter)ブロックを次のように使用します。

Fleet プロパティでは、AGVグループが指定されています—agvFleet。ロールに近づくAGVの宛先はAgentに設定されます。これにより、AGVは、それらをキャプチャしたエージェントに最も近いAGVパス上のポイントに移動します。

Priorityセクションは、AGVグループのタスクの順序を設定するために使用されます。

  • Task Priorityパラメータは、リクエストの重要性を反映する数値です。
  • Task may preempt は、AGVが優先度の高いエージェントによって阻止される可能性を反映しています。
  • Task preemption policyは、置き換えられたタスクをどう処理するかを決定します—最初にキャプチャされたリソースを待つか、空いているトランスポーターを使用します。

次のセクションAdvancedでは、エージェントを移動するキャリアを選択できます。パラメータCustomize transport choiceを使用すると、ダイナミックフィールドのTransporter choice conditionで独自のAGV選択ポリシーを設定できます。したがって、トランスポーター選択プロパティのDispatching policyを使用すると、グループから選択するトランスポーターを指定できます:

  • 最も近い一致条件
  • ダイナミックフィールドの関数によって与えられるペアワイズ比較(pair-wise comparison)に基づく
  • ダイナミックフィールドの関数で指定されたプロパティの最大値
  •  ランダム、最初の一致条件(オプションOff (chooses some matching transporter)))

このモデルでは、これらすべてのプロパティがデフォルトで設定されています。

seizeAGVブロックのプロパティ

seizeAGVブロックのプロパティ

トランスポーターが積載地(ロードポイント)に到達するまで、エージェントはseizeAGVブロックにあることに注意してください。その後、エージェントはフローチャートに沿って移動を続け、その間、確保されたAGVは指定されたポイントで待機します。

その後、ペーパーロールエージェントは次のブロックに入ります;

  • seizeLoadCrane(タイプSeize)。エージェントがクレーンをキャプチャしてロードします;
  • craneLoading(タイプDelay);持ち上げ
  • toAGV(タイプMoveTo)、エージェントをAGVに移動します;
  • agvLoading(タイプDelay)、待機中のAGVへ荷物を積載します。

この後、CraneToHomeブロック(タイプresourceSendTo)で、クレーンはAGV経路を妨げないように元の位置に戻り、releaseLoadCraneブロック(Release)でそれをキャプチャしたエージェントによってリリースされます。

これで、AGVに積載されたロールを作業場の別の所に輸送ることができ、そこで別のクレーンで吊り下げコンベアに配置します。おなじみのブロックmoveByAGVMoveByTransporter)を使用して移動します。使用されているAGVがすでに積載場所に到着し、貨物を受け入れているため、プロパティSeize Transporterはブロックのプロパティで選択されていません。Destination isプロパティは、ペーパーロールの配送先—Conveyorに設定する必要があります。

Release transporterプロパティが選択されている場合、AGVはコンベアに最も近い位置に到達すると、少し遅れて荷物を降ろします。ただし、クレーンを使用して荷下ろしする場合、これは私たちが期待する動作ではありません。したがって、Release transporter プロパティはオフにする必要があります。AGVが宛先ポイントに到達すると、エージェント(ペーパーロール)に関連付けられたままになります。

次のブロックseizeUnloadCraneSeize)に移動すると、エージェントはコンベアへのロードを担当するクレーンをキャプチャし、agvUnloadingDelay)ブロックを使用してAGVから削除されます。その後、エージェントはreleaseAGVReleaseTransporter)ブロックを使用してAGVをリリースします。設定は、他のタスクなしでAGVをベースロケーションに戻すブロックで指定されます。これが起こらなかった場合、それは他のAGVをブロックします。

ReleaseAGVブロックのプロパティ

ReleaseAGVブロックのプロパティ

リリース後、ペーパーロールエージェントはtoConveyorMoveTo)ブロックに移動し、クレーンとともにコンベアラインの先頭に移動します。次に、ペーパーロールは、craneUnloadingDelay)ブロックを使用してコンベアに配置され、releaseUnloadCraneRelease)ブロックを使用してクレーンをリリースします。最後に、ロールは輸送システムを出て、 Conveyブロックを通過します。

これで、マテリアルハンドリングライブラリを使用して商品の動きをモデル化する方法を理解することができました。

覚えておくべき重要なポイントは次のとおりです:

  • Point Nodeエレメントを使用すると、交差点に含まれるすべての道路を視覚的に表すことができます。
  • ロード(荷積み)とアンロード(荷下ろし)を単純な遅延でモデル化でき、トランスポートがターゲットへの途中で中間停止を行わない場合は、MoveByTransporterブロックを選択します。ロードおよびアンロードプロセスが重要な役割を果たす場合は、SeizeTransporterブロックとReleaseTransporterブロックを追加で使用することをお勧めします。
  • AnyLogicのトランスポーターは、配送されるエージェント(荷物)によってのみ制御できます。つまり、配送を待っていて、荷物がない場合は、何も積載していないトランスポーターを特定の場所に送ることはできません。
  • 配信されるAgentの場所がTransporter ネットワークの外部にある場合、Transporter は、 Agent (荷物)に最も近いネットワークポイントで Agent をロードできます。この動作には、オプション Destination isSeizeTransporterブロック)またはPickup location isMoveByTransporterブロック)を使用する必要があります。
  • トランスポーターの作業をモデル化するときは注意してください。リリース時に何をすべきかを事前に決定する必要があります。トランスポーターのアクションは、MoveByTransporterブロックの設定を使用して制御できます。

シリーズの次のブログ、パート3はより複雑で、さまざまなタイプのブロックの使用方法に関するヒントが掲載されています。コンベアモデリングに関する投稿をご覧ください。これにより、他の投稿に簡単にアクセスできます。

⭐ 新しいコンベアエレメントを使用してモデルを既に作成している場合は、それを是非AnyLogic Cloudにアップロードして公開してください。

関連記事