question

Tomasz P avatar image
0 Likes"
Tomasz P asked Felix Möhlmann commented

AutoStore and Shuttle

Has anyone tried create simulation of system AutoStore or some shuttle in FlexSim?

Choose One
shuttleautostore
5 |100000

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

Sam Stubbs avatar image
0 Likes"
Sam Stubbs answered Amit Kulkarni commented

I'm not aware of one yet. Though I'm sure it could be done, either with a flat horizontal rack, or a matrix of queues, and then using some sort of AGV or Network Node logic to control how and where the machines could travel.

For clarification to the community. Here is a video of AutoStore:

https://www.youtube.com/watch?v=iyVDMp2bL9c

· 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.

Steven Hamoen avatar image Steven Hamoen commented ·

I know this is a very old post but if people look for Autostore, the German FlexSim distributor has made an Automated Storage model. It is not called Autostore but everybody can see that it acts as one.

2 Likes 2 ·
Amit Kulkarni avatar image Amit Kulkarni Steven Hamoen commented ·

@steven.hamoen do you by any chance know if there a description of operation available for this model?

0 Likes 0 ·
Sebastian Hemmann avatar image Sebastian Hemmann Amit Kulkarni commented ·

@Amit Kulkarni , what exactly do you want to know about it? We´ve created the model.

0 Likes 0 ·
Show more comments
Sebastian Hemmann avatar image
1 Like"
Sebastian Hemmann answered Jason Lightfoot edited

Hi @Amit Kulkarni, attached you find the model. AutomatedStorage_FlexSim20202_FM_0_2_0.fsm

The model is driven to a large extent by self-written code. If you are not familiar with Flexscript/Basic programming it will be hard to follow and replicate how the model functions. (The model was build as a concept; there are sadly no comments in the code)


The creation of the storage happens in the reset trigger on the "AutoStoreMainNode" object. It copies the base cell which is hidden in negative-z-space and populates the bundle labels on the object which serve as lookup/reference for storage cells, ports and stored boxes.


The rest of the logic happens in the "AutoStore" process flow. Custom code blocks will locate free cells to store a new box into or find in what spot a requested box is stored. The "robots" travel by using basic travel activities, the boxes are lowered and raised using kinematics.

An important thing to note is that the cell coordinates are saved as one number, the "RowColSum", where the row number is multiplied by 100 and the column added to that number. This identification method obviously only works up to a size of 99x99 cells.


A basic description of how to control the model can be found in the attached pdf-document.

AutomatedStorage concept model overview.pdf


It is a very early concept state, to bring you in the position to go on.

Since we do simulation projects, there is also a finished version, but I´m not allowed to share it.



· 10
5 |100000

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

Amit Kulkarni avatar image Amit Kulkarni commented ·

@sebastian.hemmann Thank you so much for this! Your model is a perfect start point for me. Is it okay if I send any questions your way during my model development?

Many thanks!

Amit

0 Likes 0 ·
Sebastian Hemmann avatar image Sebastian Hemmann Amit Kulkarni commented ·

@Amit Kulkarni don´t hesitate to ask. But I can´t promise how detailed/ fast me or our team can answer these days.

0 Likes 0 ·
Amit Kulkarni avatar image Amit Kulkarni Sebastian Hemmann commented ·

Thank you!

0 Likes 0 ·
Alhambra avatar image Alhambra commented ·

could you please tell me how to adjust the number of robots and bins in your model?

0 Likes 0 ·
Jacob W2 avatar image Jacob W2 ♦ Alhambra commented ·
It looks like you will need to physically add another robot, copy paste, and then make sure that the label nr is updated to the new value (if you add an 11th you need to set nr to 11.) You then make sure that this is added to the group "Robots". This will get more robots working.


To change the number of totes you need to change the process flow Label "BoxQuantity" in the FillStorage/ReequestExample process flow. The model uses that label to create the totes at the beginning of the model.

1 Like 1 ·
Felix Möhlmann avatar image Felix Möhlmann Jacob W2 ♦ commented ·

Thanks for helping out with your comment @Jacob W2!

To change the number of robots you can actually just change the respective label on the storage object (the grey box at one corner). Then also set the "FirstReset" label to 1. This causes the storage to generate again according to the current settings on the labels and in the layout table. The number of robots should also be adjusted by doing this.

Then hit reset again before runnning the model, so the new storage and robots are set up properly in the background.

2 Likes 2 ·
Show more comments
Show more comments
Alhambra avatar image
0 Likes"
Alhambra answered Felix Möhlmann commented

@Felix Möhlmann



If I want the bins to stay at the PO port for a period of time and not appear at the PI port, but be transported back to the original stack by the robot, how should I adjust it?

· 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.

Joerg Vogel avatar image Joerg Vogel commented ·
Hello @Alhambra, Felix will certainly answer this question. I would suggest to put such a request into a comment rather than in an answer, because it doesn’t answer anything. Personally i think, this discussion would be better begun in a new question about how to build an autostore nowadays. My ideas turn around an A*Star grid, customized transporters (Forklift) and a drive through rack to design an autostore. You get automatically a rudimentary collision avoidance system, place simple in and output stations, adjust dependently grid and size of autostore.
0 Likes 0 ·
Felix Möhlmann avatar image Felix Möhlmann commented ·
PO ports are only meant for output (hence the naming). To use the same port change them to PU (universal) in the layout table. Then just move the item back into the same port in the FillStorage/RequestExample flow (or your own implementation).

Moving the totes back into the same stack they were taken from is currently not supported (though it can of course happen by coincidence).

You could alter the way the logic in the Entry section of the AutoStore flow looks for a slot. The AutoStore_FindSlot user command lets you pass in a slot as the second parameter and will then return the nearest available slot (which will be the slot itself if it is available). So you could store the slot of the requested item in a label on said item (the slot would have to be read from the Boxes bundle label before it is removed from storage) and if that label is present on the item, adjust the logic so it passes this into the command to find a slot.

Essentially look at how the 'digging' logic to move totes out of the way and then move them back ('clean up') works and implement that or a similar system for requests/entries.

0 Likes 0 ·
Alhambra avatar image Alhambra Felix Möhlmann commented ·

sorry but I can't understand exactly about your words "move the item back into the same port in the FillStorage/RequestExample flow".Could you please be more specific?

0 Likes 0 ·
Felix Möhlmann avatar image Felix Möhlmann Alhambra commented ·

The activities marked in red determine which input/universal port is used to put the item back into storage (random at the moment) and then move the item into it which triggers the robots to put it into the storage.

If you use the same universal here that was used as the output (and mark the Preserve Global Position option in the activity marked in green it should look like as though the item never left the port.

capture.png

0 Likes 0 ·
capture.png (48.1 KiB)
Kashif A3 avatar image
0 Likes"
Kashif A3 answered Felix Möhlmann commented

@Felix Möhlmann @Sebastian Hemmann is it possible to start the model with a specific number of empty bins inside the autostore? My autostore is huge and has approximately 90,000 bins in it.
And secondly, how can I modify the movement of robot in travel activity in process flow so it doesn't travel on the gaps where the column doesn't exist?

· 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.

Felix Möhlmann avatar image Felix Möhlmann commented ·

You should be able to create a number of items per slot when the model starts by mimicking what the process flow does when it moves an item into the storage (create an item in code, position it accordingly and adjust the bundle labels).

It could look something like the code below. This assumes it is run from the autostore process flow, so that "current" points to the AutoStoreMainNode object. It uses the standard "Box" object. Having 90k objects in the model will make it run slow regardless, but using a simpler shape might still be better than using the "Tote".

treenode slotBundle = current.labels["Slots"];
treenode boxBundle = current.labels["Boxes"];
treenode boxItem = Model.find("/Tools/FlowItemBin/Box/Box");
int idCount = 1;
int numRows = getbundlenrentries(slotBundle);
for(int i = 0; i < numRows; i++)
{
    int row = getbundlevalue(slotBundle, i, 0);
    int col = getbundlevalue(slotBundle, i, 1);
    int rowcol = getbundlevalue(slotBundle, i, 2);
    for(int j = 1; j <= 5; j++)
    {
        // Create a new box
        Object box = createcopy(boxItem, model());
        box.ID = idCount;
        idCount++;
        // Adjust the position (would have to calculate from the row and column values)
        // ...
        // Adjust slot bundle and create entry in boxes bundle
        setbundlevalue(slotBundle, i, "FillLevel", j);
        addbundleentry(boxBundle, row, col, rowcol, j, box.ID, box, 0);
    }
}


Since the A* grid can have rectangular cells since *some versiona ago*, you could try upgrading the model to a current version of FlexSim (if you haven't already) and use the A* navigator with barriers set up in the gaps.

0 Likes 0 ·
Kashif A3 avatar image
0 Likes"
Kashif A3 answered Kashif A3 commented

@Sebastian Hemmann I went through your model and it's exactly what I was looking for to get started on a project. I have a question though. I am looking to go beyond 99x99 cells. Where all in the model should I make those changes for it to work, so it doesn't throw any errors. Thanks!

· 3
5 |100000

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

Felix Möhlmann avatar image Felix Möhlmann commented ·

In a lot of places unfortunately. Since the model was only a proff-of-concept we didn't build it to be very flexible. Whenever you see the number "100" in conjunction with "row" or "TargetSlot[1]" in the code of a process flow activity, the reset trigger of the MainNode object or the FindSlot usercommand, it has to be replaced/increased.

1666251455475.png

1666251476555.png

I think I got all occurences in the attached model, but no guarantees. (Increase 100 -> 1000, so up to 999x999 cells now)

automatedstorage-flexsim20202-fm-0-2-0_10x.fsm

1 Like 1 ·
Kashif A3 avatar image Kashif A3 Felix Möhlmann commented ·
@Felix Möhlmann thank you so much for the help!
0 Likes 0 ·
Sebastian Hemmann avatar image Sebastian Hemmann commented ·
0 Likes 0 ·