Multiple Conveyors

Epson RC+ supports multiple logical conveyors and robots. You can use multiple robots with one conveyor.

This section describes a conveyor system that uses one robot with two or more conveyors.

Conveyor tracking for several conveyors

This section describes a conveyor system where one robot picks up "Part 1" from Conveyor 1 and puts the picked parts above "Parts 2" on Conveyor 2 as shown in the figure below. In this conveyor system, each conveyor needs one encoder and camera (sensor).

How to use several conveyors

Usage is described below.

  1. See and create conveyors 1 and 2. (Set the robot in the upstream side to the Conveyor 1.)

    Creating Conveyors in a Project

  2. For the [Encoder] and [Vision Sequence], set the different number and sequence for each conveyor 1 and 2.

  3. Calibrate Conveyor 1.

  4. Check the operation while referring to either of the following:

  5. Calibrate Conveyor 2.

  6. Check the operation of Conveyor 2.

A sample program is shown below.

This sample program automatically recovers when the robot tracks the workpiece that is out of the Pickup Area.

Function main
  Motor On
  Power High

  Speed 30
  Accel 30, 30

  Xqt ScanConveyorStrobed  'Task that registers queues
  Xqt PickParts            'Task that tracks parts (queue)
Fend
Function ScanConveyorStrobed
  Integer i, j, numFound, state, trigger1, trigger2
  Real x, y, u
  Boolean found

  trigger1 = 10 'Allocates pin10 of controller I/O to conveyor 1
  trigger2 = 11 'Allocates pin11 of controller I/O to conveyor 2
  Off trigger1; Off trigger2
  'Turns OFF the camera trigger and encoder latch
  Do
    VRun FindParts1	'Searches for parts on the conveyor
    On trigger1            'Turns ON the camera trigger and encoder latch I/O
    Do
      VGet FindParts1.AcquireState, state
    Loop Until state = 3
    VGet FindParts1.Parts.NumberFound, numFound
    'Registers the part that has been shot as a queue
    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           'Turns OFF the camera trigger and encoder latch I/O
    Wait 0.1

    'Registers the parts (queue) of the Conveyor 2
    'Searches for parts on the conveyor
    VRun FindParts2
    On trigger2            'Turns ON the camera trigger and encoder latch I/O
    Do
      VGet FindParts2.AcquireState, state
    Loop Until state = 3
    VGet FindParts2.Parts.NumberFound, numFound
    'Registers the part that has been shot as a queue
    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           'Turns OFF the camera trigger and encoder latch I/O
    Wait 0.1
  Loop
Fend
Function PickParts
  OnErr GoTo ErrHandler
  Integer ErrNum

  MemOff 1;  MemOff 2      'Turns OFF the memory I/O

  Jump P1

  Do
    'Tracking of the Conveyor 1
    WaitPickup1:
    'Turns ON the memory I/O when the Conveyor 1 tracking phase starts
    MemOn 1                'Turns ON the memory I/O 1
    'Clears the parts (queue) in the downstream side from the downstream limit
    Do While Cnv_QueLen(1, CNV_QUELEN_DOWNSTREAM) > 0
      Cnv_QueRemove 1, 0
    Loop
    'Waits until a part (queue) enters the Pickup Area
    Wait Cnv_QueLen(1, CNV_QUELEN_PICKUPAREA) > 0

    'Starts tracking the part
    'When using the 6-axis robot
    Jump3 Cnv_QueGet(1):Z(0):U(90):V(0):W(180)
    'When using the SCARA robot
    Jump Cnv_QueGet(1)
    Wait 0.1 'The robot moves at the same speed as the conveyor for the Wait time specified to this part
    'Clears the picked part (queue)
    Cnv_QueRemove 1, All
    MemOff 1               'Turns OFF the memory I/O 1

    'Tracking of the Conveyor 2
    WaitPickup2:
    MemOn 2                'Turns ON the memory I/O 2
    'Waits until a part (queue) enters the Pickup Area
    Wait Cnv_QueLen(2, CNV_QUELEN_PICKUPAREA) > 0

    'Starts tracking the part
    'When using the 6-axis robot
    Jump3 Cnv_QueGet(2):Z(0):U(90):V(0):W(180)
    'When using the SCARA robot
    Jump Cnv_QueGet(2)		Wait 0.1 'The robot moves at the same speed as the conveyor for the Wait time specified to this part
    Wait 0.1 'The robot moves at the same speed as the conveyor for the Wait time specified to this part
    'Clears the picked part (queue)
    Cnv_QueRemove 2, All
    MemOff 2               'Turns OFF the memory I/O 2

    Jump P1
  Loop
  'Clears the parts (queue) in the downstream side from the Pickup Area
  'Automatically recovers from the error '"The specified queue data is outside the set area"
  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
    'Error other than "The specified queue data is outside the set area"
    'Is displayed
  Else
    Print "Error!"
    Print "No.", Err, ":", ErrMsg$(Err, 1)
    Print "Line :", Erl(0)
    'User error occurred
    Error 8000
  EndIf
Fend