マルチロボットコンベヤー
Epson RC+は、複数の論理上のコンベヤーとロボットをサポートしています。1台のコンベヤーに複数のロボット、または複数のコンベヤーに複数のロボットを使用できます。
この章では、1台のコンベヤーに対してロボットを2台以上で使用するマルチロボットコンベヤーについて説明します。
マルチロボットの対応機種については、以下のマニュアルを参照してください。
"ロボットコントローラーマニュアル"
マルチロボットコンベヤーとは
下図のように1台のコンベヤーに2台以上のロボットを使用し、ロボット1 (上流側)が取りこぼしたワークをロボット2 (下流側)がピッキングするシステムです。
マルチロボットコンベヤーは、複数のロボットを使用しますが、カメラ (センサー), エンコーダー, コンベヤーの数は、1台です。
マルチロボットコンベヤーの使用方法
マルチロボットコンベヤーは、上流コンベヤー, 下流コンベヤーを設定します。マルチロボットコンベヤーの使用方法は、以下の通りです。
以下を参考にし、コンベヤー1とコンベヤー2を作成します。 (コンベヤー1に上流側のロボットを設定します。)
[エンコーダー], [ビジョンシーケンス]には、コンベヤー1, コンベヤー2とも同じ番号, シーケンスを設定します。
コンベヤー1のキャリブレーションを行います。
以下のいずれかを参考にし、動作確認を行います。
[下流コンベヤー]を"2"に設定します。
コンベヤー2のキャリブレーションを行います。
コンベヤー2の動作確認を行います。
コンベヤーに現在登録されているキューデータを全て消去します。
>Cnv_QueRemove 1,all >Cnv_QueRemove 2,allビジョンサーチ領域にワークを置きます。
プログラム"ScanConveyorStrobed"を実行し、キューを登録します。
プログラム"ScanConveyorStrobed"を一時停止(HALT)し、ワークがコンベヤー1の追従開始領域に移動するまでコンベヤーを動かします。
プログラム"ScanConveyorStrobed"を停止し、ワークがコンベヤー2の追従開始領域に移動するまでコンベヤーを動かします。
以下のコマンドを実行し、キューをコンベヤー1からコンベヤー2に移動します。
>Cnv_QueMove 1,0ワークをハンドリングします。
>Jump Cnv_Queget(2)ロボット2のハンドがワークの中心に移動していることを確認します。ロボット2のハンドがワークの中心に移動しない場合、キャリブレーションを再度行ってください。
コンベヤーを動かしてロボットがワークを追従することを確認します。この時、ハンドがワークの中心からずれることがあります。これは、急なコンベヤーの速度変化に対して精度良く追従しない場合があるためです。しかし、基本的には時間がたてば正しく追従するので問題はありません。
追従を停止します。
``` >Cnv_AbortTrack ```以下にサンプルプログラムを示します。
Function main
Xqt ScanConveyorStrobed 'キューを登録するタスク
Xqt PickParts1 '上流のロボットがワーク (キュー)をトラッキングするタスク
Xqt PickParts2 '下流のロボットがワーク (キュー)をトラッキングするタスク
Fend
Function ScanConveyorStrobed
Integer i, numFound, state, trigger
Real x, y, u
Boolean found
trigger = 10 'コントローラーI/Oのpin10を割りあてる
Off trigger 'カメラのトリガーとエンコーダーラッチのI/Oをオフ
Do
'コンベヤー上のワークを撮像
VRun FindParts
On trigger ' カメラのトリガーとエンコーダーラッチのI/Oをオン
Do
VGet FindParts.AcquireState, state
Loop Until state = 3
VGet FindParts.Parts.NumberFound, numFound
'撮像したワークをコンベヤー1のキューに登録
For i = 1 To numFound
VGet FindParts.Parts.CameraXYU(i), found, x, y, u
Cnv_QueAdd 1, Cnv_Point(1, x, y)
Next i
Off trigger 'カメラのトリガーとエンコーダーラッチのI/Oをオフ
Wait 0.1
Loop
Fend
Function PickParts1
OnErr GoTo ErrHandler
Integer ErrNum
Robot 1
Motor On
Power High
Speed 30
Accel 30, 30
Jump P1
WaitParts:
Do
'ワーク (キュー)が追従開始領域内に入るまで待機
Wait Cnv_QueLen(1, CNV_QUELEN_PICKUPAREA) > 0
'トラッキング開始
'6軸ロボットを使用する場合
Jump3 Cnv_QueGet(1):Z(0):U(90):V(0):W(180)
'スカラロボットを使用する場合
Jump Cnv_QueGet(1)
Wait .1 'Wait時間だけ、ロボットはコンベヤーと等速度で移動します
Jump P1 '指定した場所に移動
'ピッキングしたワーク (キュー)の消去
Cnv_QueMove 1, 0
Loop
' コンベヤー1の追従開始領域より下流のワーク (キュー)をコンベヤー2に移動
ErrHandler:
ErrNum = Err
If ErrNum = 4406 Then
Cnv_QueRemove 1, 0
EResume WaitParts
'コンベヤートラッキングの動作範囲以外のエラーが発生した場合
'そのエラーを表示
Else
Print "エラー発生!"
Print "No.", Err, ":", ErrMsg$(Err, 1)
Print "Line :", Erl(0)
'ユーザーエラー発生
Error 8000
EndIf
Fend
Function PickParts2
OnErr GoTo ErrHandler
Integer ErrNum
Robot 2
Motor On
Power High
LoadPoints "robot2.pts"
Speed 30
Accel 30, 30
Go P1
WaitParts:
Do
'ワーク (キュー)が追従開始領域内に入るまで待機
Wait Cnv_QueLen(2, CNV_QUELEN_PICKUPAREA) > 0
'トラッキング開始
'6軸ロボットを使用する場合
Jump3 Cnv_QueGet(2):Z(0):U(90):V(0):W(180)
'スカラロボットを使用する場合
Jump Cnv_QueGet(2)
Wait .1 'Wait時間だけ、ロボットはコンベヤーと等速度で移動します
Jump P2 '指定した場所に移動
'ピッキングしたワーク (キュー)の消去
Cnv_QueRemove 2, 0
Loop
'ピッキングしたワーク (キュー)の消去
'コンベヤー2の追従開始領域より下流のワーク (キュー)を消去
'エラー「追従開始領域外のワークにトラッキング動作を行った」から自動復帰
ErrHandler:
ErrNum = Err
If ErrNum = 4406 Then
Cnv_QueRemove 2, 0
EResume WaitParts
'エラー「追従開始領域外のワークにトラッキング動作を行った」以外のエラーを
'表示
Else
Print "エラー発生!"
Print "No.", Err, ":", ErrMsg$(Err, 1)
Print "Line :", Erl(0)
'ユーザーエラー発生
Error 8000
EndIf
Fend