Global Table Order Picking Process Flow Multiple Floors How To?

Global Table Order Picking Process Flow Multiple Floors How To?

vasile_diaconu2XLWE
Enthusiast Enthusiast
171 Views
6 Replies
Message 1 of 7

Global Table Order Picking Process Flow Multiple Floors How To?

vasile_diaconu2XLWE
Enthusiast
Enthusiast

Hi,

 

FlexSim 25.0.1

I am trying for some days now to find a solution to the attached model, where i want to generate order picking based on the global table, to pick up certain types of items at certain times.

I keep missing the logic, since the storages are found on multiple floors. My many trials and errors and checking through the old posts came up short.

I've tried to push the items to a list called "Available Items" by using the onEntry Trigger in the FloorStorages and then pull these using individual Pull from List for each type of material, but failed each time.

Can someone take a look at the model and let me know what should i be doing to make it work?

Thank you.

0 Likes
Accepted solutions (3)
172 Views
6 Replies
Replies (6)
Message 2 of 7

moehlmann_fe
Enthusiast
Enthusiast
Accepted solution

You are pulling multiple items at once, meaning that the resulting "loading" label is an array of all pulled items. The second and third Pull from List activity should not overwrite the previous array, so they should be set to "Insert at Front of" instead of "Assign To". The transport process must then be executed for each entry in the array. The easiest way to do this is to use a Run Sub Flow activity. Importantly, because the child tokens will need to acquire a shuttle and the elevator, the "Label Access on Parent Only" option must be unchecked. Otherwise the "resource" and "elevator" labels would be created on the parent token and thus shared between all child tokens.

When filling in fields for the tasks, always be mindful of what your labels reference. The "loading" (and thus the individual "item") label holds pointers to items. To access the object they are in (like when travelling to the object or reading the floor number) use "token.item.up". The "Station" field in the Load activity can in most cases be left at the default "Item Container" setting.

One more thing you might want to do is order the items by the level of their slot, so that the items closest to the aisle are pulled first. To do this, add a field to the list that refers to the level of the item's slot. Then you can use that field in the pull query.

moehlmann_fe_0-1754559381705.png

 

0 Likes
Message 3 of 7

vasile_diaconu2XLWE
Enthusiast
Enthusiast

Thank you, Felix.

Is there any simple way to make it so that:

- Order1 gets pulled at 1500 count

- Order2 gets pulled at 3000 count

- Order3 gets pulled at 4500 count

- .... and so on?

I tried to reference each row for each time entry in the Schedule source, but it doesn't give the expected results.

If placing just a number in the Schedule Source Quantity field, i.e 1 it picks Order1 row, if placing 2 in the Quantity, it takes Order1 and Order2. 

Also, if i am trying to place 0 in one of the Type1 to Type3 columns in the Global table, it will give an error at one point:

vasile_diaconu2XLWE_0-1754573573236.png

vasile_diaconu2XLWE_1-1754573735710.png

 

0 Likes
Message 4 of 7

moehlmann_fe
Enthusiast
Enthusiast
Accepted solution

In the label assignment fields of a Schedule Source you also have access to the rowNumber variable. You can use that in a modulo operation (rest of whole number division) to loop through the rows of the order table. As a tip, you can check the code header of any field to know which variables you can use in them.

moehlmann_fe_0-1754590931640.png

moehlmann_fe_1-1754590949410.png

 

Using 0 as the requested number in a pull is used to get all available values that match the query from the list without actually removing them. Like using a very high request number and checking the "Leave Entries On List" option. This means the token is getting the references to the items and causes them to be moved out of the storage. The list entries become null pointers when the items enter the sink. Trying to access labels on the no longer exiting items in the list fields is what is causing the error messages.

To fix this, skip the Pull from List activity for types with 0 quantity. This can also be done in a sub flow.

0 Likes
Message 5 of 7

vasile_diaconu2XLWE
Enthusiast
Enthusiast

Thank you again for the detailed reply.

I was trying to use the Value you mentioned in the Quantity rows actually, but in a different format, hence the issues. 

I was looking at the "loading" label in the "Source" trying to make sense why it was placed there and how it relates to the pull from list. Can't really figure it out.

 

A little bit off the main topic:

Do you know of a way to bypass the logic in the "Rack Loading" process flow, where if one shuttle is doing the picking process and there's an item coming on the conveyor ready to be stored in the floor storages, the shuttles from level 1 and 2 are not picking it up, so the conveyor gets full until Shuttle1 becomes available.

In the model attached i updated the paint slots, and at time 1560 in the model, Shuttle1 is loading Type2 (green), then Type1(red) is ready to be loaded/unloaded into the FloorStorages but neither Shuttle2 or Shuttle3 are picking it up. 

0 Likes
Message 6 of 7

moehlmann_fe
Enthusiast
Enthusiast
Accepted solution

The label "loading" is added in the source as a precaution to make sure that the label exists even if all quantities are set to 0 and nothing gets pulled.

 

The slot is assigned first and then the respective shuttle must be acquired. While there might be slots for that type on other levels as well, the decision where to put it is made without taking shuttle status into account. To improve this, you could create a label on the shuttles that denotes their current status (acquired/available). Then create a user command that takes a storage slot as input parameter and returns the status of the shuttle on that level. You can then use this command in the Find Slot query to prefer slots whose shuttle is currently idle.

This is far from perfect, as the binary status doesn't confer any information about the overall pending workload for each shuttle or when they will be available again. So there is room for improvement. For example by splitting the status up further, where a lower number means closer to becoming available. And also adding up the pending output requests for each level to take them into account as well when choosing a slot.

Message 7 of 7

vasile_diaconu2XLWE
Enthusiast
Enthusiast

Thank you so much for the guidance and support, Felix.

Really appreciate it!