Any suggestions to program two palletizing zones?

What about you guys? How are you?

I am looking for suggestions on how to program in RAPID two areas of palletizing (as the image shows). Any way to alternate between both infeeders so that the robot works simultaneously in both zones? I need the product that arrives first, regardless of which side (right or left), leave the second as in queue, then be taken and palletized. (With the powerpac of palletizing it is easy to develop it, but point by point I can not deduce it yet)

I hope I have expressed myself correctly and can understand me.

Best regards, I hope your help … Thank you very much!

No problem.

Some simple conditional logic can decide which infeed to pick from:

WaitUntil diInfeeder1_PickRequest = 1 OR diInfeeder2_PickRequest = 1;
IF diInfeeder1_PickRequest = 1 THEN
…call pick routines
ELSEIF diInfeeder2_PickRequest = 1 THEN
…call pick routines
ENDIF

And if the robot must pass over a half full outfeed to get to the calling infeed use the item count to calculate the offset height of intermid positions:

MoveL Offs(intermid1, 0, 0, (Outfeeder1_LayerCount * Outfeeder1_ProductHeight)+Clearance), vIntermid, zIntermid, Gripper1;

Hello,
And if you want to check that only one is high you can do like this:


WaitUntil diInfeeder1_PickRequest <> diInfeeder2_PickRequest;

And, for testing DI/DO prefer to use high and low constant than 1 or 0. It’s more readable.

But if both are on @@DenisFR , then you are stuck forever, right?

Do you have multitasking? As I read your question I understand that you want FIFO, none of the proposed solutions are going to work for that.

Only waiting for diInfeeder1_PickRequest = high XOR diInfeeder2_PickRequest = high.

diInfeeder1_PickRequest= low and diInfeeder2_PickRequest = low => Still waiting (0=0)

diInfeeder1_PickRequest= high and diInfeeder2_PickRequest = high => Still waiting (1=1)

diInfeeder1_PickRequest= high and diInfeeder2_PickRequest = low=> Continue (1<>0)

diInfeeder1_PickRequest= low and diInfeeder2_PickRequest = high => Continue (0<>1)

Sorry, part of my reply was cut off. Yes, if both are on, then stuck waiting forever.

:wink:

@DenisFR Wow! That is a way. :bawling: Similarly, you could probably only allow one trigger signal high at a time with some cross connect logic. (other ways too: conveyor logic could hold up the product, the speed of the line might not make it an issue anyways, use a trap or multitasking to create a queue, etc., etc…)

If both zones are in high status, you must be able to decide for one, and then continue with the next … :slight_smile:

No friend of mine, it’s not multitasking …

Too bad, maybe then you could set up some traps to handle the FIFO you asked about initially.

Or maybe just alternate if both are high – not true first-in-first-out but maybe good enough without messing with traps?

Example:

MODULE examplePal

CONST num Mock_diInfeeder1_PickRequest:=1;
CONST num Mock_diInfeeder2_PickRequest:=1;

PERS num PickingFromInfeeder:=1;

PROC exampleBothHigh()
TPErase;
WHILE TRUE DO
WaitUntil Mock_diInfeeder1_PickRequest=1 OR Mock_diInfeeder2_PickRequest=1;
IF Mock_diInfeeder1_PickRequest=1 AND Mock_diInfeeder2_PickRequest=1 THEN
IF PickingFromInfeeder=1 THEN
Infeeder2_Pick;
ELSEIF PickingFromInfeeder=2 THEN
Infeeder1_Pick;
ENDIF
ELSEIF Mock_diInfeeder1_PickRequest=1 THEN
Infeeder1_Pick;
ELSEIF Mock_diInfeeder2_PickRequest=1 THEN
Infeeder2_Pick;
ENDIF
ENDWHILE
ENDPROC

PROC Infeeder1_Pick()
PickingFromInfeeder:=1;
TPWrite “Picking from Infeeder1”;
WaitTime 3;
ENDPROC

PROC Infeeder2_Pick()
PickingFromInfeeder:=2;
TPWrite “Picking from Infeeder2”;
WaitTime 3;
ENDPROC

ENDMODULE

Is there a way to save the high state of a signal in a buffer or to set a type of queue?

Write some Trap routines for the signals to set a Bool or other variable to queue up your next pick.