We have a line of 3 pickers, each robot place a different product in the same blister (picking and placing is working with conveyor tracking).
The trigger signal is the same for the 3 robots this will mean that if we get a trigger the blister position is know for the 3 robots.
The blister machine can not stop, this will mean that each robot must have enough products to feed but it could happened sometimes that products are not available. In this case we will have not completely filled blisters.
Is there any possibility, in the case that the first robot has not feed one blister, to tell the second robot to not feed this position?
Define a layer of 3 positions in a container, all at the same coordinate to get a syncronized enter and exit of all positions. Assign one item to each position. all items must have different type values (Accept & Reject value in the item dialog).
In the distribution section of the position source, use only ATC, so all positions get distributed to all robots.
In the RAPID code you have to check the item type at every fetch and wait until you get a right one, like:
PROC Place(num Index)
VAR bool Loop:=TRUE;
Coordinated;
WObjPlace:=ItmSrcData{Index}.Wobj;
WHILE Loop=TRUE DO
GetItmTgt ItmSrcData{Index}.ItemSource,PlaceTarget;
IF PlaceTarget.Type=3 THEN
MoveLConc,RelTool(PlaceTarget.RobTgt,0,0,-ItmSrcData{Index} .OffsZ),MaxSpeed,z20,GripperWObj:=WObjPlace;
TriggLConc,PlaceTarget.RobTgt,LowSpeed,ItmSrcData{Index}.Va cuumRev1T2:=ItmSrcData{Index}.VacuumOff1,z5Inpos:=ItmSrcDa ta{Index}.TrackPoint,GripperWObj:=WObjPlace;
GripLoad load0;
TriggL RelTool(PlaceTarget.RobTgt,0,0,-ItmSrcData{Index}.OffsZ),Low Speed,ItmSrcData{Index}.Ack,z20,GripperWObj:=WObjPlace;
Loop:=FALSE;
ELSE
! Put the wrong one back
AckItmTgt ItmSrcData{Index}.ItemSource,PlaceTarget,FALSE;
WaitTime:=0.05;
Loop:=TRUE;
ENDIF
ENDWHILE
Just a brief idea (also untested…), I would go for Mats suggestion, a container with three different types of items and using ATC to distribute them to all robots. Let the first robot place the first item (the one having the highest x position), let the second robot place the next item (second highest x position) etc. Apply sorting in x.
RAPID: Get new item targets (of all types) and nack them until an item is received having correct type and a new scene number compared to the latest received target (nacked or placed). Then place the target and go for a new pick.
I think I will keep it like this now because x sorting is not really possible for me because robot 1 has the lowest X, robot 2 the biggest X and robot 3 is in the middle.
I could perhaps use the first idea of Mats by using the 3 items on the same positions and doing some work around with offset in the rapid code.
I want to try this again on an other installation but I think it will never work because I think when you nack an item (FALSE) you put it back in the queue and as long that the item does not pass the exit limit the robot will never get a new item.
You are right.
But by using the argument Limit the next time you call GetItmTgt, with the calculated position of the last target (see the utility module posted on the forum, routine GetRealPos), you can force the instruction to retrive another target.