こんにちは、開発Gの杉原です。
ここのところTransferについての記事を書いていますが、実は最近着手している案件ではTransferを使っていません。
ということもあって、実はそんなにTransferって重要でもないのではないかと錯覚してしまいます。
ですが、そんなことはないはず、ないはずですので、もうしばらくこの話題にお付き合いください。
さて、今回はTransferの「後処理」について説明させていただきます。
今回の範囲は下図の赤枠内になります。
前々回の前処理のように、後処理でも2種類のイベントが発生します。
まず受け渡しが終わった直後に発生するのがOnTxAfterTransfer/OnRxAfterTransferです。
ここでは受け渡し・受け取り後の簡単な動作を行います。
この「簡単な」というのがポイントで、時間がかかるような処理は次のOnTxTransferComplete/OnRxTransferCompleteで行うのが通例です。
例えば「AGVが受け渡ししたあとはホームポジションへ戻りたい」といったときに、これをOnTxAfterTransferイベント処理で行ってしまうと、AGVがホームポジションへ戻るまで搬送先もTransferが終わらないままとなってしまい、次の処理を行うことができなくなってしまいます。
じゃあOnTxAfterTransfer/OnRxAfterTransferは不要なのではないか、そう思われるかもしれませんが、そんなことはありません。
OnTxAfterTransfer/OnRxAfterTransferについて、今回もフォークリフトを例にとって説明いたします。
まず受け取った後(OnRxAfterTransfer)、上図のような状態になります。
フォークリフトはこの後、後退する必要があります。
仮にこの後退をOnRxTransferCompleteで実装してしまうと、フォークリフトとコンベアの速度関係によっては下図のようになってしまいます。
これはなぜかというと、「TransferComplete」というだけあって、この時点ではすでにTransferは完了しているので、コンベアは次のTransferについて処理をはじめます。
そしてフォークリフトの後退速度よりもコンベアの速度のほうが早い場合、こうしてぶつかってしまうというわけです。
以上よりまとめると、
OnTxAfterTransfer/OnRxAfterTransferでは、「ワークを受け渡し・受け取りした後、次のTransferが処理されるまでに最低限終わっているべき動作」を実装
OnTxTransferComplete/OnRxTransferCompleteでは、「相手方の存在を意識せずに完結できる処理」を実装
という切り分けになります。
また重要なポイントとして、先ほども太字で書きましたが、TransferCompleteのタイミングではすでにTransferは終わっているということを覚えておいていただきたいです。
さて、これにてTransferの処理は完了です。
……って、ちょっと待ってください。冒頭の図にまだ何かありますね。
搬送が完了したのに、いったいこれ以上何をやるというんでしょうか。
ということで次回の【How to Demo3D Scripting】は「Transferの流れ⑤:業務処理」をお送りします。
更新は5/17(木)です。お楽しみに。
コメントをお書きください