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.
See and create conveyors 1 and 2. (Set the robot in the upstream side to the Conveyor 1.)
For the [Encoder] and [Vision Sequence], set the different number and sequence for each conveyor 1 and 2.
Calibrate Conveyor 1.
Check the operation while referring to either of the following:
- Vision Conveyors
- Sensor Conveyors - "Check the motion"
Calibrate Conveyor 2.
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