Sigmund avatar image
Sigmund asked Jeanette F commented

Order picking when items are put back into storage

Hi all,

I have made a model where I’m simulating order picking with an «Vertical Lift Model». It is a set of racks with an ASRS serving the racks. There are multiple trays in one rack, represented as levels in FlexSim storage module. When an item is due to be picked, the whole tray is moved to a staging area, represented by a queue. In FlexSim this is done by loading a single item onto the ASRS and when the item is unloaded at the queue, the rest of the items in that level is moved to the queue. An operator can then pick the correct item, or amount of the given SKU. When the picking is done, the tray is moved back to the same level by loading a single item onto the ASRS and then move the rest of the items to the level.

My model works fine when items in the same order are stored on different trays, but when two or more items are stored on the same tray, the model stops. When there are multiple items for one order stored on the same tray, the first item is picked successfully, but the reference to the rest of the items on the same tray is removed. When this happens, the elements in the order array goes from pointing to a flow item to <no path>. This problem also occurs if I have two orders being picked simultaneously, where items are stored on the same tray in both orders. The first order will successfully pick the item, but in the second order the array element will go to <no path>.

Attached is a model which recreates this problem.


Thanks in advance

FlexSim 22.1.4
storage systemflowitemsfinditemorderpickingqueryitems
· 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.

Jeanette F avatar image Jeanette F ♦♦ commented ·

Hi @Sigmund, was one of Sigmund's or Jason Lightfoot's answers helpful? If so, please click the "Accept" button at the bottom of the one that best answers your question. Or if you still have questions, add a comment and we'll continue the conversation.

If we haven't heard back from you within 3 business days we'll auto-accept an answer, but you can always unaccept and comment back to reopen your question.

0 Likes 0 ·
Jason Lightfoot avatar image
Jason Lightfoot answered Jason Lightfoot commented

In your second RunSubflow you should probably just be creating one token instead of the orderLength:


Another problem might be that you're not marking your items as outbound so each successive call to FindItem can find exactly the same item.

1681401583684.png (29.0 KiB)
· 4
5 |100000

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

Sigmund avatar image Sigmund commented ·

Thanks for the quick answer!

Both of your comments are chosen on purpose. In the second sub flow I want to create tokens corresponding to orderLength because my orders vary from 1 to 15 items, and for each item the whole sub flow should be executed. Also, a flowitem is supposed to be a distribution pack with multiple smaller items inside where the quantity should be reduced once N items are picked. In my big model the Qty lies between 1 and 2000 depending on the SKU.

I have added more functions to the model to better explain and show the problem. Once a flowitem's Qty reaches 0 it will be marked as outbound. For this example all items picked will be marked to outbound to ensure that the problem occurs.


0 Likes 0 ·
Jason Lightfoot avatar image Jason Lightfoot ♦ Sigmund commented ·

Are you trying to mimick digging logic by removing every item in a level? If so you should be using a push back rack and testing if the front item in the slot is the one you want and if not removing it.

If not, why are you moving all the objects from one level directly? What is this meant to represent from the real world?

Offset travel is part of the load/unload task - you don't need the travel to level activities.

Your findItem should be checking for quantity>0 too.

0 Likes 0 ·
Sigmund avatar image Sigmund Jason Lightfoot ♦ commented ·
I'm trying to mimic a "vertical lift module", that is a set of racks with a inserter/extractor (ASRS) between. Within a rack there are multiple trays (levels in flexsim) where items are stored. When an item is due to be picked from a tray (level), the tray (whole level) has to be moved to a staging area. Then the item can be picked. After picking the tray (whole level minus picked item qty) is put back into the rack on the same level.

Thanks! I did not know about offset travel included in load/unload.

0 Likes 0 ·
Show more comments
Sigmund avatar image
Sigmund answered

I managed to figure it out through some more testing. With these five steps I managed to make the example model and my bigger model to run as I want. When items are removed from the rack, the Order array will still keep track of the items and the elements will never be <no path>.

  1. Removed and turned off the "Set to Outbound" logic and set the "Find Item" to look for Qty > 0.
  2. Turned off virtualizing of items. Although it makes to model a bit slower, it is fine by me.
  3. Saved the items slot before it got removed from the rack and reassigned it to the item before the item is put into the rack.
  4. Remove the item from the array of items in the level and the corresponding slot, to ensure no errors in reassigning the slots.
  5. Restocking the slots for each item put back into to rack.

I think the key aspect was to keep the items, and not virtualize them, so when they are put back into the rack the flowItems are not deleted. Further the reassigning of their previous slot makes sure the Order array keeps track of the correct items.

Thanks for helping me out :)


5 |100000

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

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

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