こんにちは、開発Gの杉原です。
ゴールデンウィーク、皆さまいかがお過ごしでしょうか。
私は前半の三連休で実家へ帰省したのですが、何か(猫?)のアレルギー症状を引き起こし、往復ともに渋滞に巻き込まれ、結果体力を消耗して連休明けに体調を崩し、四連休となる体たらくでした。
今日一日だけ出勤するくらいなら、病み上がりだし今日も休めばよかったとも思うのですが、ブログのために出勤しました、というと大げさですね。
さて、今回はTransferの「前処理」についてお話します。
今回の範囲は下図の赤枠内になります。
前回の復習にもなりますが、搬送元のOnDispatchOutイベントで生成されたTransferは、搬送先のOnDispatchInイベントの中で開始されます。
今回はそのあと、Transferが開始されると搬送元ではOnTxTransferStarted、搬送先ではOnRxTransferStartedイベントが発生します。
そしてその後、搬送元ではOnTxBeforeTransfer、搬送先ではOnRxBeforeTransferイベントが発生します。
この2つ(4つ?)が搬送の前処理になります。
ここで「なぜ前処理が2つ存在するのか?」と疑問に思う方もいるかもしれません。
その疑問に答えるためにも、順序は逆になってしまいますがまずはTxBeforeTransfer/RxBeforeTransferについて説明します。
TxBeforeTransfer/RxBeforeTransferでは、ワークを受け渡す/受け取るために必要な前動作を行います。
ここではフォークリフトを例に説明します。
図の右側にあるコンベアからパレットを受け取るとします。
コンベアからTransferが生成され、フォークリフトがそれを開始し、TxTransferStarted/RxTransferStartedイベントの処理を終えると、フォークリフトではRxBeforeTransferイベントが発生します。
このイベントでフォークリフトは何をするかというと、コンベアの前まで移動し、フォークをパレットの高さまで上げて、パレットに差し込みます。
このあとフォークリフトがパレットを受け取ります。
パレットを受け取ったフォークリフトは新たにTransferを生成し、搬送先がそれを開始します。
その後フォークリフトではTxBeforeTransferイベントが発生し、そこで搬送先まで移動し、パレットを置こうとします。
以上のことからわかるように、TxBeforeTransfer/RxBeforeTransferでは、ワークを受け渡しするために搬送元・搬送先が近づくための処理を行います。
例外はあるかもしれませんが、通常は一方が人や車両などの動くオブジェクトで、もう一方がラックなどの動かないオブジェクトになるので、動くオブジェクト側がもう一方へ向けて移動する処理を行うのがほとんどかと思います。
では、その前に発生するTxTransferStarted/RxTransferStartedでは何をするのか。
それは前処理の前処理です。
どういうことか、これはラックを例に説明します。
上図のようなラックがあったとします。
今はどこも空っぽなので1~9のどこかにワークを格納することになります。
例えば1番の位置にワークを格納したいとします。しかし、Transferはラック(※)の位置情報しか持っていません。
(※正確にはラックを参照するSRMのRetrieveコネクタ)
そのため、例えばフォークリフトでこのラックにパレットを搬送しようとしても、パレットを格納すべき場所とは別のところへフォークリフトが移動してしまいます。
そこで、フォークリフトがTxBeforeTransferで移動するより前、すなわちラック側のRxTransferStartedのタイミングで、Transferに含まれる位置情報を、1番の間口の位置へ書き換えてしまうのです。
これが前処理の前処理です。
以上2つのイベントによって搬送元から搬送先へとワークを受け渡すための準備が行われます。
そして2つがワークの受け渡しを行うための準備を終えると、いよいよワークが受け渡されます。
ということで次回の【How to Demo3D Scripting】は「Transferの流れ③:受け渡し」をお送りします。
更新は5/10(木)です。お楽しみに。
コメントをお書きください