We are using one infeed conveyor and placing on a indexed work area. It seems to us that the queue idle signal used (doManSync4) for the indexed work area is set to high (indicating an idle situation) before the last item is actually placed?
There is certain feature of the queue idle signal (for indexing work areas) that should be pointed out. The queue idle signal is set to high when the last item in the work area queue is retrieved by the RAPID instruction GetItmTgt and not when the last item is acknowledged.
The last item in the place work area queue is retrieved when the robot is picking the last item (due to planning in advance). Thus, the queue idle signal will be set to high before the last item is actually placed. This is the way PickMaster is designed to work.
This can be performed in several different ways, the one below minimizes the time lags.
-
Create two simulated I/O signals, i.e. doSimPulseQueueIdle and doSimQueueIdle
-
Perform a cross connection:
doSimPulseQueueIdle & doSimQueueIdle → doReady (doReady is the physical output to a PLC or other external device indicating that all item targets on the work area are executed)
(To perform cross connections with logical operations in the S4C+, please refer to chapter 6.8, Baseware User_Ls Guide 4.0.80).
- Perform the following modifications (in blue) to the RAPID program.
Add the following variables, in blue, to the PPAEXECUTING module:
! Set the TCP location and the tool load for current tool.
PERS tooldata Gripper:=[TRUE,[[0,0,0],[1,0,0,0]],[0.1,[0,0,0.001],[1,0,0,0],0,0,0]];
! Set the payload for the items which is picked.
PERS loaddata ItemLoad:=[0.001,[0,0,0.001],[1,0,0,0],0,0,0];
VAR triggdata PulseSignal_High;
VAR triggdata PulseSignal_Low;
Also, in the SetTriggs procedure:
TriggEquip PulseSignal_High 0, 0.2 DOp:=doSimPulseQueueIdle, 1;
TriggEquip PulseSignal_Low 0, 0 DOp:=doSimPulseQueueIdle, 0;
Activate the trigg data defined above.
PROC Place(num Index)
InCoordRout:=TRUE;
WObjPlace:=ItmSrcData{Index}.Wobj;
GetItmTgt ItmSrcData{Index}.ItemSource,PlaceTarget;
MoveLConc,RelTool(PlaceTarget.RobTgt,0,0,-ItmSrcData{Index}.OffsZ),MaxSpeed,z20,GripperWObj:=WObjPlace;
TriggLConc,PlaceTarget.RobTgt,LowSpeed,ItmSrcData{Index}.VacuumRev1T2:=ItmSrcData{Index}.VacuumOff1,z5Inpos:=ItmSrcData{Index}.TrackPoint,GripperWObj:=WObjPlace;
GripLoad load0;
TriggL RelTool(PlaceTarget.RobTgt,0,0,-ItmSrcData{Index}.OffsZ),LowSpeed,ItmSrcData{Index}.Ack T2:=PulseSignal_High T3:=PulseSignal_Low ,z20,GripperWObj:=WObjPlace;
InCoordRout:=FALSE;
ENDPROC
This will create a 0.2 pulse (on doReady) when the last item in the work area is placed.
In addition to this, a simple PulseDO (on doReady) must be performed at project start so that the first box (a set of positions) is created.