question

Thao B avatar image
0 Likes"
Thao B asked Thao B commented

Shuffling of steel plates in steel stockyard

Hi,

I have modeled a steel stockyard for horizontal storage (stacking) of steel plates. The steel plates will be transported with a gantry crane to the required queue and I have created a global table to command the crane to pick up the required plates.

In actual practice, the crane will have to pick up the plates from above to get to the plates below. However, the simulation only shows the plate being taken straight from the queue. Is there a way to simulate the shuffling of the steel plates to get to the steel plate required? The time required to shuffle each plate is 3 minutes and the plates can be lifted to other storage queues during shuffling.plate-shuffling.fsm

I have attached the model above. Thanks.

FlexSim 18.1.2
material flow
plate-shuffling.fsm (22.9 KiB)
· 2
5 |100000

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

Regan Blackett avatar image Regan Blackett ♦ commented ·

Unless there is something about the way the way shuffling is done that directly impacts the outputs of your model I would not model the shuffling process. Instead I would add a distribution to the load/unload time of the crane object so that the time spent doing the shuffling is reasonably represented but without having to take a deep dive on the rules that govern the shuffling.

You can absolutely model the shuffling mechanism if you want using customized task sequences, but if the reason you are doing it is to just to get the animation "right" it may not be worth the time to do it.

1 Like 1 ·
Thao B avatar image Thao B Regan Blackett ♦ commented ·

Hi @Regan Blackett

Thanks for the reply. I am actually doing a project to compare how the stacking and shuffling of steel plates affect the material flow and fabrication process downstream of the model. I am not concern about the animation part of the model but rather the time needed to shuffle the steel plates in order to extract the required steel plate.

0 Likes 0 ·

1 Answer

Regan Blackett avatar image
2 Likes"
Regan Blackett answered Thao B commented

plate-shuffling-2.fsm

@Thao B

I took your model and modified it a little to get the behavior I think that you want. Before I get into what I did, I want to point out that I made a simplifying assumption that you don't really want the Crane to start picking up plates until all the materials have arrived. I decided to do this because since the arrival schedule had the different Types arriving so close to each other, if I start looking for the right plate as soon as the model starts things have changed enough in terms of the queue's contents that the "wrong" plate is grabbed first.

The approach I took relies on two Lists and a short set of process flow activities. I have a List for the plates that helps me find which plate should be picked up by the Crane, and a List that helps me find a Queue location where the shuffled plates can be stored while the crane works its way down to the right plate. To make this work, you'll notice that I removed the connections from the upstream queues to the downstream queue, because I want to define my own logic in process flow rather than try to make the standard object logic do what I want.

If you look under Toolbox>Global Lists>PlateList you'll see that there are 3 field definitions at the top that are the basis for the search criteria I use for the Crane to find a plate. Type and Grade, are just labels like how you were using them on Queue5. NumberOfMoves is a simple expression to find how close a plate is to the top of the stack, because I'm assuming that what you want is that the Crane move the least number of plates from any given queue to get to the plate that you really want. In the QueuesList the only thing that isn't a default option is under the General tab I add the 4 storage Queues to list as initial content.

In the Process Flow the basic idea is to create a single token that represents the Crane, which reads the materials table and then searches the PlateList for a matching plate. It uses a query that says we want a plate that is the same Type and Grade as what the current table row says, and sorts the plates that match by the number of moves it would take to get to the plate.

If the Matching Plate isn't already on top of the stack, then the Crane moves 1 plate at a time evaluating if the plate we want is on top yet after each move. The token pulls from the QueueList in order to find the Queue with the least number of plates in it so we can store the shuffled plates there. The query for this Pull also includes a filtering clause that excludes the Queue were the plate is currently located.

Once the plate we want is on top of it's stack it is take to Queue5, and this process loops until we've moved every plate from the table.


pfoverview.png (92.3 KiB)
· 5
5 |100000

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

Thao B avatar image Thao B commented ·

@Regan Blackett

Thank you for the detailed explanation. The assumptions were made correctly for the model I intended.

1 Like 1 ·
Thao B avatar image Thao B commented ·

Hi @Regan Blackett

I took your model and tried to modify the Process Flow a little to control the the maximum content of Queue5 to be "1", but am having trouble getting it to work. Apparently using Process Flow to drive Load/Unload action no longer considers the “maximum capacity” of the 3D object.plate-shuffling-for-horiontal-storage.fsm

I have also added a conveyor to deliver the plates to the processor. The maximum content on the conveyor is set to be "4". However, more than 4 plates are still getting loaded onto the conveyor.process-flow.png

0 Likes 0 ·
Regan Blackett avatar image Regan Blackett ♦ commented ·

Thao,

You are correct; anytime an unload task or a move object command is used the object’s capacity variable is ignored. Object capacity is only evaluated when sending/receiving through port connections. You would need to monitor the capacity of the some other way.

I’m literally on my way to the airport as I write this so I can’t build you an example model right now, but the way I would approach it is to use either a Shared Asset such as the Resource or Zone and let that handle restricting the queue. I’m going to mark this answer unaccepted so someone else can show you what I mean.

0 Likes 0 ·
Benjamin W2 avatar image Benjamin W2 Regan Blackett ♦ commented ·

Hey @Thao B,

It looks like you were on the right track. I only made a couple of adjustments in your model.

  1. In your Decide: Blasting Queue is Empty?, I changed your conditional decide to, "model().find("Queue5").subnodes.length == 0". This will directly check to see if Queue5 is empty.
  2. I moved the Load: Pulled Plate so the crane wouldn't load a plate from Queue 1-4, then have to go transport a plate from Queue5.

Let us know if this helps!

plate-shuffling-for-horizontal-storage2.fsm

1 Like 1 ·
Thao B avatar image Thao B Benjamin W2 commented ·

Hi @Benjamin W2 @Regan Blackett

Thank you, the model works as I intended now.

0 Likes 0 ·