question

Shaun G avatar image
0 Likes"
Shaun G asked Benjamin W2 commented

Operator Picking While AGV Moving

About the question Picking while moving, Thanks for Benjamin W2's answer and tanner.p's reminding.

I still have some problems.

1. Adding operators, e.g.:3 operators pick bins to the racks behind AGV

2. Adding boxes, Now only 1 box is picked to the racks, I'd like to increase to 10 boxed in each racks behind AGV

3. Logic optimization, If the boxes is less than 10 in the rakcs, AGV should stop and waiting for the operators bring boxes. When the box number is 10, AGV runs again

For Adding operators, I try to creat a group which include 2 operators, it running failed.. and then I add additional acquire resource and rescouece for one more operarot, but it still failed...

For picking more boxs, I try to add a batch, but it doesn't work... so I add more load travel and unload ...

26910-load-while-moving_V2.fsm

FlexSim 19.0.0
flexsim 19.0.0
· 1
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Benjamin W2 avatar image Benjamin W2 commented ·

Hi @Shaun G, was my answer helpful? If so, please click the red "Accept" button on their answer!

0 Likes 0 ·

1 Answer

Benjamin W2 avatar image
0 Likes"
Benjamin W2 answered

Hi @Shaun G,

Some of this logic is going to be very complicated, so I will provide a high level overview and attach a sample model.

1) Since this logic is more complicated, we are going to push all three operators onto a list to be pulled. You can read more about lists here:

  1. https://docs.flexsim.com/en/20.1/Reference/ProcessFlowObjects/SharedAssets/List/

2) Since the number of racks being carried by the AGV varies, we will need custom code to control this logic. In the process flow box called "Load Items on AGV Racks", a token is created as the AGV arrives at CP4. The token then requests 3 operators. A subflow is then run creating 1 token for each operator. The custom code is as follows:

for (int i = 1; i <= token.AGV.subnodes.length; i++)
{
    if (token.AGV.subnodes[i].subnodes.length <= 10)
    {
        return token.AGV.subnodes[i];
    }
}

return 0;

This will return 0 if all racks are full, and return the rack if it is not. The tokens will then pull from the RackItem list, travel to the Item, pick it up and place it in the AGV rack. Here are links to the documentation:

  1. https://docs.flexsim.com/en/20.1/Tutorials/ProcessFlow/Tutorial1UsingSharedAssets/1-1UseListResource/
  2. https://docs.flexsim.com/en/20.1/Reference/ProcessFlowObjects/SubFlow/RunSubFlow/

3) Note that the AGV module was not really designed for the behavior you are looking for. It is very difficult, if not impossible to get the AGV to stop, wait for an event, then start up again. This is because of the task sequence principle of FlexSim (see link below).

However, I managed to create a small work around in the Process Flow box "Stop AGV if not Full". This creates a token at CP6, then computes if there is any space left for items on the racks. If there is, then it will preempt a task sequence on the AGV to have it delay a time of 20 seconds * number of racks.

  1. https://docs.flexsim.com/en/20.1/ModelLogic/AdditionalConcepts/Preemption/
  2. https://docs.flexsim.com/en/20.1/Reference/TaskSequences/TaskSequenceConcepts/

I hope this helps!

26910-load-while-moving-v2 (2).fsm



5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.