Task sequence/ process flow for transporter in 3D model

Task sequence/ process flow for transporter in 3D model

mitesh_d2
Not applicable
685 Views
13 Replies
Message 1 of 14

Task sequence/ process flow for transporter in 3D model

mitesh_d2
Not applicable

[ FlexSim 22.0.5 ]

I want to create a custom task sequence in 3D model for transporters(dispatcher) with process flow.

What is the process/ goal - To run experimenter/ optimization model to calculate number of forklifts needed.

What is the process -

1. Transporter pick 2 pallets from Que.

2. Drop to buffer - 2 pallets at at a time

3. From same place, pick two empties if available

4. Drop back to Que - 2 empty pallet at a time

Is there a way where I can create a process flow just for this operation of transporters? Any model depicting this process will be really helpful (using FlexSim 22.0.5)


0 Likes
Accepted solutions (1)
686 Views
13 Replies
Replies (13)
Message 2 of 14

moehlmann_fe
Advocate
Advocate
Accepted solution

Here you go.

PalletTransport_fm.fsm

The queues push the items on a global list (one for each queue), partitioned by the pallet status (Full/purple or Empty/orange).

The tokens in the process flow represent the transporters. First they drive to Queue1, pull to full pallets and bring them to Queue2. Then they try to pull two empty pallets. If successful, they load those and bring them to Queue1. Otherwise they return to Queue1 empty.

The loading and unloading is handled in subflows, so the number items transported at once can easily be changed by adjusting the required number of pulls in the "Pull from List" activities.

The Process Flow Source is set up to create one token for each object in the "Transporters" group and assign the respective object to the label "Transport".

1665499900290.png

The second part of the process flow cycles the status of the pallets to keep the model running indefinitely.

0 Likes
Message 3 of 14

mitesh_d2
Not applicable

Really liked the solution. Can you explain a bit more about Process flow source?

1. How did you set up the quantity in table?

2. What is meaning of - Group("Transporters").length?

3. What does token index do here? - Group("Transporters")[tokenIndex]

0 Likes
Message 4 of 14

moehlmann_fe
Advocate
Advocate

1./2. Instead of writing a fixed number as the token quantity I used the expression you mention. Group("Transporters") gives a reference to the group to which I added the Transporter (see Toolbox). "length" then returns the number of objects within that group. So if you were to add more transporters to the group, the source would automatically scale up the quantity and create one token per object in the group.

3. To have each token represent a different member of the group, each one is assigned a member by its rank in the group. Group("Transporters")[2] would for example return a reference to the second object in the group, that is then assigned to the label. If more than one token is created by a single row in the Schedule Source, the parameter tokenIndex can be used to determine the position of a token within that quantity. The first created token would have an index of 1, the second of 2 and so on. So by combining the expressions together each token is assigned the corresponding member of the "Transporters" group as a label.

creationRank in the Run Sub Flow activities functions similarly to tokenIndex. Because the token pulls more than one item, the label they are assigned to will be an array of values. By using creationRank, each Sub Flow Token is assigned one of the values (items) from the array. These single values are then used in the Load and Unload activities.

0 Likes
Message 5 of 14

mitesh_d2
Not applicable

Thanks for the clarification. Here is my model that I want to simulate -

Fleet 1 -

1. load 2 full box from Queue14

2. unload in 6 conveyors according to the type (Group - Flowrack in)

3. if empty pallet available at Queue E1, E2, E3, E4 (Group - E Flowrack out)- load 2 empty

4. unload two empties in Queue 15

5. Repeat this cycle from Step-1


Fleet 2 is similar to Fleet 1 -

1. Load 1 full from Group Flowrack out

2. Unload at Straight conv 1

3. If empty available at Queue3, load empty

4. Travel back and drop empty at straight conv 25, 26, 27 ,28


I am getting few errors right now - Can you help here?

Manual Process_Forklifts_10.fsm

0 Likes
Message 6 of 14

moehlmann_fe
Advocate
Advocate

- Check you label references: You are assigning pulled items to "token.Pulled" in one Pull from List activity instead of "token.box". And you are using "token.box" in the Load and Unload activties when the reference to the individual items is given as "token.item" (see labels created in the sub flows) at that point.

- You can't refer to a whole group of objects as a destination. It has to be a single object. To choose a random member of the group, youi can use the following, for example.
("Group(...)" accesses the n-th member of the group, instead of a fixed number, the expression uses a distribution to return a number between 1 and the number of objects in the group)

Group("Flowrack in")[duniform(1, Group("Flowrack in").length, getstream(activity))]

- You also can't use conveyors as unload destination directly. Use the Entry Transfers instead.

manual-process-forklifts-11.fsm

0 Likes
Message 7 of 14

mitesh_d2
Not applicable

After simulating fleet 2 AGVs, the simulation runs without error now. Few things that I am struggling to do -

1. Fleet 1 and Fleet 2-

According to the list and orders, the Forklifts picks the full and empty pallet in sequence generated in the list. I want to modify the process further. No matter what sequence is generated in list, the forklift should never return empty to home position if there are empty pallets - See pic attached,

1666818868216.jpeg

2. I want to run an experimenter and optimizer to check the number of forklifts needed in fleet 1 and fleet 2 separately to do 110 boxes supply and 110 empty boxes return.

Can you please help?

Manual Process_Forklifts_11.fsm

Thanks in advance!

0 Likes
Message 8 of 14

moehlmann_fe
Advocate
Advocate

The screenshot and model didn't upload correctly, could you try again?

2. When you put the forklifts into groups you can use the "Delete and Copy Group Members" option in the parameter table (use the sampling tool on the group to see the option)

1666869851743.png

0 Likes
Message 9 of 14

mitesh_d2
Not applicable

Resharing -

After simulating fleet 2 AGVs, the simulation runs without error now. Few things that I am struggling to do -

1. Fleet 1 and Fleet 2-

According to the list and orders, the Forklifts picks the full and empty pallet in sequence generated in the list. I want to modify the process further. No matter what sequence is generated in list, the forklift should never return empty to home position if there are empty pallets - See pic attached,

1666872566810.png

2. I want to run an experimenter and optimizer to check the number of forklifts needed in fleet 1 and fleet 2 separately to do 110 boxes supply and 110 empty boxes return.

Can you please help?

Manual Process_Forklifts_11.fsm

Thanks in advance!

0 Likes
Message 10 of 14

moehlmann_fe
Advocate
Advocate

1. E1 pushes the items onto the "Empty" partition on the list. The Pull from List activity is set up to pull from the list in general (no partition set). So the items in E1 are not "seen" when trying to pull something.

You can only ever pull from a single partition, where you can think of "No Partition Set" as being its own partition.

1666874117980.png

2. As I said above you can easily alter the quantity of forklifts through the mentioned parameter option.

You then just need a performance measure. This could be the input to Queue15, for example. Then you vary the number of forklifts until you find the threshold where the input reaches 110 in the allotted time.

manual-process-forklifts-12.fsm

0 Likes
Message 11 of 14

mitesh_d2
Not applicable

Point 1 -

I have different (~8) type of flow items. I want to generate these flow items from source and deliver it to flowrack in conveyors according to type

Conditions -

1. The source always generate two same type of flow item at a time.

2. The time between consecutive batch is 35secs (should be controlled by statistical distribution)

3. The source generates these type of flow items in batch of 26

4. The proportion of the type of flow item should be controllable (with percentage)

Point 2 -

1. How can i set the availability/ utilization for forklifts (as they are currently utilized ~100%)

2. Can I set MTTR and MTBF for these forklifts?

3. How can I simulate the forklifts as close as possible to reality?

Can you help?

Thanks in advance

Manual Process_Forklifts_15.fsm

0 Likes
Message 12 of 14

moehlmann_fe
Advocate
Advocate

1) It would probably be easiest to build this in process flow. An Inter-Arrival Source creates a token every 35s. This then runs a subflow 26 times, each run creating 2 items of the same type.

1667323237478.png

2) You can use the MTTR/MTBF for unplanned failures. To realize a regular schedule the Time Table is the better tool.

1667323308540.png

You are already pretty close to what FlexSim allows without building an in-depth custom process flow that controls each facet of the forklift movements.

As long as the load/unload times and average speed are based on real data, any further detail is likely to not improve the validity by much.

manual-process-forklifts-15_1.fsm

0 Likes
Message 13 of 14

ged0313
Not applicable

@Felix Möhlmann

Hello,

I’ve encounter some problem when building up process flow and setting up the destination. My layout is that I have several processors as destination of the destination. So I assign label to the group of processors as below:

Group("Processors")[duniform(1, Group("Processors").length, getstream(activity))]direct

But I found some problem that it will only get the processors randomly. So I am wondering if there’s a way to record or fetch the backorder of list that I can set the value of assign label to backorder?

0 Likes
Message 14 of 14

moehlmann_fe
Advocate
Advocate

The purpose of that expression is to acquire a random processor. If you want to acquire a specific processor, you can refer to it in the query field through a label on the token.

Apparently you and @kkkk are either the same person or at least work on the same assignment. I will provide some additional information on this post.

0 Likes