マルチコンベヤー
Epson RC+は、複数の論理上のコンベヤーとロボットをサポートしています。複数のコンベヤーに1台のロボットを使用できます。
この項では、2台以上のコンベヤーに対してロボットを1台使用するシステムの使用方法について説明します。
複数台のコンベヤーに対してのコンベヤートラッキング
下図のように2台以上のコンベヤーに1台のロボットを使用し、コンベヤー1でピッキングしたワーク1をコンベヤー2のワーク2の上に置くシステムの使用方法について説明します。このシステムは、コンベヤーと同数のエンコーダーとカメラ (センサー)が必要となります。
使用方法
使用方法は、以下の通りです。
以下を参考にし、コンベヤー1, コンベヤー2を作成します。 (コンベヤー1に、上流側のロボットを設定します。)
[エンコーダー], [ビジョンシーケンス]には、コンベヤー1, コンベヤー2に別々のエンコーダー番号とシーケンスを設定します。
コンベヤー1のキャリブレーションを行います。
以下のいずれかを参考にし、動作確認を行います。
コンベヤー2のキャリブレーションを行います。
コンベヤー2の動作確認を行います。
以下にサンプルプログラムを示します。
サンプルプログラムはロボットが追従開始領域外のワークをトラッキングした場合も、自動で復帰する仕様となっています。
Function main
Motor On
Power High
Speed 30
Accel 30, 30
Xqt ScanConveyorStrobed 'キューを登録するタスク
Xqt PickParts 'トラッキングするタスク
Fend
Function ScanConveyorStrobed
Integer i, j, numFound, state, trigger1, trigger2
Real x, y, u
Boolean found
trigger1 = 10 'コンベヤー1にコントローラーI/Oのpin10を割りあてる
trigger2 = 11 'コンベヤー2にコントローラーI/Oのpin11を割りあてる
Off trigger1; Off trigger2
'カメラのトリガーとエンコーダーラッチのI/Oをオフ
Do
VRun FindParts1 'コンベヤー上のワークを撮像
On trigger1 'カメラのトリガーとエンコーダーラッチのI/Oをオン
Do
VGet FindParts1.AcquireState, state
Loop Until state = 3
VGet FindParts1.Parts.NumberFound, numFound
'撮像したワークをキューに登録
For i = 1 To numFound
VGet FindParts1.Parts.CameraXYU(i), found, x, y, u
Cnv_QueAdd 1, Cnv_Point(1, x, y)
Next i
Off trigger1 'カメラのトリガーとエンコーダーラッチのI/Oをオフ
Wait 0.1
'コンベヤー2のワーク (キュー)を登録
'コンベヤー上のワークを撮像
VRun FindParts2
On trigger2 'カメラのトリガーとエンコーダーラッチのI/Oをオン
Do
VGet FindParts2.AcquireState, state
Loop Until state = 3
VGet FindParts2.Parts.NumberFound, numFound
'撮像したワークをキューに登録
For j = 1 To numFound
VGet FindParts2.Parts.CameraXYU(j), found, x, y, u
Cnv_QueAdd 2, Cnv_Point(2, x, y)
Next j
Off trigger2 'カメラのトリガーとエンコーダーラッチのI/Oをオフ
Wait 0.1
Loop
Fend
Function PickParts
OnErr GoTo ErrHandler
Integer ErrNum
MemOff 1; MemOff 2 'メモリーI/O をオフ
Jump P1
Do
'コンベヤー1のトラッキング
WaitPickup1:
'コンベヤー1トラッキングフェイズ開始はメモリーI/Oをオン
MemOn 1 'メモリーI/O 1をオン
'下流限より下流にあるワーク (キュー)を消去
Do While Cnv_QueLen(1, CNV_QUELEN_DOWNSTREAM) > 0
Cnv_QueRemove 1, 0
Loop
'ワーク (キュー)が追従開始領域内に入るまで待機
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 0.1 'Wait時間だけ、ロボットはコンベヤーと等速度で移動します。
'ピッキングしたワーク (キュー)の消去
Cnv_QueRemove 1, All
MemOff 1 'メモリーI/O 1をオフ
'コンベヤー2のトラッキング
WaitPickup2:
MemOn 2 'メモリーI/O 2をオン
'ワーク (キュー)が追従開始領域内に入るまで待機
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 0.1 'Wait時間だけ、ロボットはコンベヤーと等速度で移動します。
Wait 0.1 'Wait時間だけ、ロボットはコンベヤーと等速度で移動します
'ピッキングしたワーク (キュー)の消去
Cnv_QueRemove 2, All
MemOff 2 'メモリーI/O 2をオフ
Jump P1
Loop
'追従開始領域より下流のワーク (キュー)の消去
'エラー「追従開始領域外のワークにトラッキング動作を行った」から自動復帰
ErrHandler:
ErrNum = Err
If ErrNum = 4406 Then
If MemSw(1) = On Then
Cnv_QueRemove 1
EResume WaitPickup1
EndIf
If MemSw(2) = On Then
Cnv_QueRemove 2
EResume WaitPickup2
EndIf
'エラー「追従開始領域外のワークにトラッキング動作を行った」以外のエラー
'を表示
Else
Print "エラー発生!"
Print "No.", Err, ":", ErrMsg$(Err, 1)
Print "Line :", Erl(0)
'ユーザーエラー発生
Error 8000
EndIf
Fend