RobotStudio event

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!


Answers

  • soup
    soup ✭✭✭
    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;

  • DenisFR
    DenisFR ✭✭✭
    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 Group

  • lemster68
    lemster68 ✭✭✭
    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.
    @DenisFR , then you are stuck forever, right?
    Lee Justice
  • lemster68
    lemster68 ✭✭✭
    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 Justice
  • DenisFR
    DenisFR ✭✭✭
    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 Group

  • lemster68
    lemster68 ✭✭✭
    Sorry, part of my reply was cut off.  Yes, if both are on, then stuck waiting forever.
    Lee Justice
  • DenisFR
    DenisFR ✭✭✭
    DenisFR said:
    And if you want to check that only one is high you can do like this:
    ... ;)

    ☑️2024 - RobotStudio® User Group

  • soup
    soup ✭✭✭
    @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...)
  • 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)





    If both zones are in high status, you must be able to decide for one, and then continue with the next ... :)
  • 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.
    No friend of mine, it's not multitasking ...
  • lemster68
    lemster68 ✭✭✭
    Too bad, maybe then you could set up some traps to handle the FIFO you asked about initially.
    Lee Justice
  • soup
    soup ✭✭✭
    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?
  • lemster68
    lemster68 ✭✭✭
    Write some Trap routines for the signals to set a Bool or other variable to queue up your next pick.
    Lee Justice