マルチコンベヤー

Epson RC+は、複数の論理上のコンベヤーとロボットをサポートしています。複数のコンベヤーに1台のロボットを使用できます。

この項では、2台以上のコンベヤーに対してロボットを1台使用するシステムの使用方法について説明します。

複数台のコンベヤーに対してのコンベヤートラッキング

下図のように2台以上のコンベヤーに1台のロボットを使用し、コンベヤー1でピッキングしたワーク1をコンベヤー2のワーク2の上に置くシステムの使用方法について説明します。このシステムは、コンベヤーと同数のエンコーダーとカメラ (センサー)が必要となります。

使用方法

使用方法は、以下の通りです。

  1. 以下を参考にし、コンベヤー1, コンベヤー2を作成します。 (コンベヤー1に、上流側のロボットを設定します。)

    プロジェクトのコンベヤー作成

  2. [エンコーダー], [ビジョンシーケンス]には、コンベヤー1, コンベヤー2に別々のエンコーダー番号とシーケンスを設定します。

  3. コンベヤー1のキャリブレーションを行います。

  4. 以下のいずれかを参考にし、動作確認を行います。

  5. コンベヤー2のキャリブレーションを行います。

  6. コンベヤー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