HDS#14 Transferの流れ⑤:業務処理

 こんにちは、開発Gの杉原です。

  

近頃はほとんど社内に引きこもって開発業務をやっていたのですが、久しぶりにお客様のところへ出向くことになりました。

世間一般の引きこもりのイメージと同様、普段あまり社外の人とは会わないので、なんだか少し緊張しますね。

と、いうこともあって、今回は更新日時の表示こそ予告通り5/24ですが、1日早い23日のうちの更新となります。

 

さて、今回はTransferの「業務処理」について説明させていただきます。

今回の範囲は下図の赤枠内になります。

 

はてさて、業務処理とは一体何か。

まずはそこからご説明いたします。

 

前回の後処理をもって搬送(Transfer)はすでに完了しています。

この業務処理はさらにそのあと、Rx(搬送先)にだけ発生することが、先ほどの図からもわかるかと思います。

搬送が完了した後、搬送先にだけ行うこととは何かというと、搬送されたワークに対する何らかの処理が考えられます。

 

例えば製造ラインをDemo3Dで再現するとします。

製品はコンベアからなるラインを流れていきますが、ラインを流れる製品はただ流れているだけでしょうか?

そんなことはないはずです。「製造」のラインなんですから、ラインを流れる製品はある位置に到着したときに、何らかの加工作業を受けることになります。

この加工作業の間、製品、すなわちワークはいずれかのコンベアにたいしてTransferで搬送され、そのコンベアに所有権がある状態で加工処理を受けることになります。

この加工処理こそが、業務処理というわけです。

 

実際に簡単なモデルを作って確認してみましょう。

下図のような5つのシングルゾーンコンベアからなるラインがあったとします。

始端のLoadCreatorからは青色の箱が流れてきます。

この中の真ん中、つまり3つ目のコンベアで、青色の箱を緑色に加工したいと思います。

処理を追加する前に、5つのコンベアはどれも同じスクリプトを参照しているので、真ん中のコンベアだけ別のスクリプトを参照するように切り分けたいと思います。

 

そのために、3つ目のコンベアを選択してプロパティScriptからNew Versionを選択してください。

(日本語化されている場合新しいバージョンに相当します)

 

これで、もともと参照していたスクリプトと、別物だけど内容は全く同じというスクリプトが生成され、3つ目のコンベアだけがこれを参照するようになります。

そして作成されたスクリプトに対し、以下のようなメソッドを追加します。

追加したスクリプトがOnProcessイベントで呼び出されるように設定することも忘れないでください。

///[Optimize(false)]
function SR3_OnProcess( sender : Demo3D.Visuals.StraightRollerConveyor, transfer : Demo3D.Visuals.Transfer )
{
    var load : Visual = transfer.Load;
    wait(3);
    load.Material.Color = Color.Green;
    wait(3);
}
// 元がJScriptのため今回は省略

内容としては、3秒待ってからワークの色を変え、また3秒待つというものになっています。

前後で3秒待っているのは、単に加工に6秒ほど要するという表現のためで、それ以外の意味はありません。

 

これを実行してみます。

3つ目のコンベアでワークが停止し、停止から3秒ほどしてワークの色が変わり、さらそこから3秒後にワークが動き出すことが確認できます。

ここでのポイントは、OnProcessイベントによる業務処理の間、コンベア上のワークは移動しないということです。

基本的にはOnProcessイベントを終えたワークだけが、次のTransferの生成時に搬送対象となります。

 

以上がOnProcessイベントです。

そしてこのあとは、OnProcessCompleteイベントが発生します。

 

OnProcessCompleteイベントは名前の通りOnProcessイベントの処理が終わった後に発生します。

主には業務処理に対する事後処理を行います。

といっても、事前処理のためのイベントがあるわけでもなく、いったい何を処理しようかという感じではあります。

 

試しに、先ほど作成したモデルに対して以下のようなメソッドを追加し、OnProcessCompleteイベントに対応付けたとします。

 

///[Optimize(false)]
function SR3_OnProcessComplete( visual : Demo3D.Visuals.Visual )
{
        wait(10);
}
// 元がJScriptのため今回は省略

モデルを動かしてみると、もともとのOnProcessイベントで色変更した後の3秒待機が行われた後、さらにこのOnProcessCompleteイベントの10秒待機が行われ、その後ようやくワークが搬送されることが確認できました。

 

つまり、別にあとあとの搬送と並列に処理されるわけでもない感じです。

 

しかもこのメソッド、よく見るとTransfer型の引数が存在しません。

つまり、搬送・業務処理を行ったワークをそのままでは参照できないということになります。

なかなか使いどころの難しそうなイベントではあるのですが、全く使われていないわけではありません。

標準のカタログであれば、VehicleManagerやSRMといった、コントローラー系の処理の中ではこのOnProcessCompleteイベントが使われています。

実際の機器に対する搬送処理とはちょっと違うので、ここでは紹介しませんが、気になる人は処理を確認してみてください。

 

 

ちなみに今回、製造ラインを想定してサンプルを作成しましたが、物流分野においてもこの業務処理は利用されます。

例えば、トラックには段ボールがパレットに積まれた状態で格納されていたとします。

最初はパレットごとトラックから搬送するので、Demo3D上で搬送されるワークはパレットになります。

しかし、その後搬送を続けていく中で、パレット積みされたものをばらし、個々の段ボール単位で搬送するように搬送単位が変わることなんかもよくあるかと思います。

このパレット積みから個々の段ボールへのばらし作業も、Demo3DのTransferにおける業務処理に相当します。

実装の仕方は少し違うのですが、標準カタログにもあるDepalletizerでは、コンベアのOnProcessイベントを監視して、コンベアの業務処理としてデパレ作業を定義しています。

こちらも気になる方は処理を確認してみてください。

 

 

これにてTransferに関する一連の流れは一通り説明できたかと思います。

ここまでご紹介した各イベントに対して処理を定義してやることで、Demo3D上のオブジェクトがワークを搬送できるようになるというわけです。

ただ1つ、一連の流れには含まれていないのですが、Transfer関連のイベントが存在します。

そこで次週はそこを説明したいと思います。


 

ということで次回の【How to Demo3D Scripting】は「Transferのキャンセル」をお送りします。

更新は5/31(木)です。お楽しみに。