Multi-robot Conveyor

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

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

For details on multi robots, refer to the following manual.

"Robot Controller Manual"

Multi-robot conveyor

The multi-robot system uses two or more robots with one conveyor as shown below. In this system, the second robot (downstream) picks up the parts that the first robot (upstream) failed to pick up.

Although the system uses several robots, it uses only one camera (sensor), encoder, and conveyor.

How to use multi-robot conveyor

To use the multi-robot conveyors, set the upstream and downstream conveyors. Instructions for using multi-robot conveyors are described below.

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

    Creating Conveyors in a Project

  2. For [Encoder] and [Vision Sequence], set the same number and sequence for both conveyors 1 and 2.

  3. Calibrate Conveyor 1.

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

  5. Set [Downstream Conveyor] to “2”.

  6. Calibrate Conveyor 2.

  7. Check the operation of Conveyor 2.

    1. Clear the all queue data registered to each conveyor.

      >Cnv_QueRemove 1,all
      >Cnv_QueRemove 2,all
      
    2. Place the part in the vision search area.

    3. Execute the program “ScanConveyorStrobed(ScanConveyor)” and register a queue.

    4. Halt the program “ScanConveyorStrobed” and move the conveyor until the part enters the Pickup Area.

    5. Stop the program “ScanConveyorStrobed” and move the conveyor until the part enters the Pickup Area of the conveyor 2.

    6. Execute the command below to move the queue from conveyor 1 to conveyor 2.

      >Cnv_QueMove 1,0
      
    7. Pick up the part.

      >Jump Cnv_Queget(2)
      
    8. Check if the robot end effector is above the center of a part. If the robot end effector is not above the center of the part, perform the calibration again.

    9. Move the conveyor and check if the robot follows the part. At this point, the end effector will be off the center of part but this is not a problem.

    10. Stop the tracking motion.

     ```
     >Cnv_AbortTrack
     ```
    
  8. A sample program is shown below.

Function main
  Xqt ScanConveyorStrobed  'Task that registers queues
  Xqt PickParts1 'Task for the upstream robot to track the parts (queue)
  Xqt PickParts2 'Task for the downstream robot to track the parts (queue)
Fend

Function ScanConveyorStrobed
  Integer i, numFound, state, trigger
  Real x, y, u
  Boolean found

  trigger = 10 'Allocates pin10 of controller I/O
  Off trigger 'Turns OFF the camera trigger and encoder latch I/O
  Do

    'Searches for parts on the conveyor
    VRun FindParts
    On trigger  'Turns ON the camera trigger and encoder latch I/O
    Do
      VGet FindParts.AcquireState, state
    Loop Until state = 3
    VGet FindParts.Parts.NumberFound, numFound
    'Registers the found part to the queue of conveyor 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 'Turns OFF the camera trigger and encoder latch 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
    '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 1 'The robot moves at the same speed as the conveyor for the Wait time specified to this part
    Jump P1 'Moves the picked part to a specified place
    'Clears the picked part (queue)
    Cnv_QueMove 1, 0
  Loop
  'Moves the parts (queue) in the downstream side than the Pickup Area of conveyor1 'to the conveyor 2
  ErrHandler:
    ErrNum = Err
    If ErrNum = 4406 Then
      Cnv_QueRemove 1, 0
      EResume WaitParts
      'When an error except the conveyor tracking motion range error occurs,
      'Error is displayed
    Else
      Print "Error!"
      Print "No.", Err, ":", ErrMsg$(Err, 1)
      Print "Line :", Erl(0)
      'User error occurred
      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
    '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 1 'The robot moves at the same speed as the conveyor for the Wait time specified to this part
    Jump P2 'Moves the picked part to a specified place
    'Clears the picked part (queue)
    Cnv_QueRemove 2, 0
  Loop

  'Clears the picked part (queue)

  'Clear the parts (queue) in the downstream side than the Pickup Area of conveyor 2
  'Automatically recovers from the error '"The specified queue data is outside the set area"
  ErrHandler:
  ErrNum = Err
  If ErrNum = 4406 Then
    Cnv_QueRemove 2, 0
    EResume WaitParts
    '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