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!
Tagged:
0
Answers
-
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;
0 -
Hello,And if you want to check that only one is high you can do like this:
<div>WaitUntil diInfeeder1_PickRequest <> diInfeeder2_PickRequest;</div>
And, for testing DI/DO prefer to use high and low constant than 1 or 0. It's more readable.
☑️2024 - RobotStudio® User Group0 -
DenisFR said:Hello,And if you want to check that only one is high you can do like this:
<div>WaitUntil diInfeeder1_PickRequest <> diInfeeder2_PickRequest;</div>
And, for testing DI/DO prefer to use high and low constant than 1 or 0. It's more readable.
Lee Justice1 -
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.Lee Justice0
-
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)
☑️2024 - RobotStudio® User Group1 -
Sorry, part of my reply was cut off. Yes, if both are on, then stuck waiting forever.Lee Justice0
-
@DenisFR Wow! That is a way. 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...)
0 -
DenisFR said: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)
0 -
lemster68 said: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.
0 -
Too bad, maybe then you could set up some traps to handle the FIFO you asked about initially.Lee Justice0
-
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
1 -
Is there a way to save the high state of a signal in a buffer or to set a type of queue?0
-
Write some Trap routines for the signals to set a Bool or other variable to queue up your next pick.Lee Justice1
Categories
- All Categories
- 5.5K RobotStudio
- 396 UpFeed
- 18 Tutorials
- 13 RobotApps
- 297 PowerPacs
- 405 RobotStudio S4
- 1.8K Developer Tools
- 250 ScreenMaker
- 2.8K Robot Controller
- 316 IRC5
- 61 OmniCore
- 7 RCS (Realistic Controller Simulation)
- 798 RAPID Programming
- AppStudio
- 3 RobotStudio AR Viewer
- 18 Wizard Easy Programming
- 105 Collaborative Robots
- 5 Job listings