question

Peter W8 avatar image
0 Likes"
Peter W8 asked Peter W8 commented

How to make AGVs accumulate?

How do I control the accumulation of AGVs? I've tried using Accumulation Types for different paths but nothing seems to work. What I'm trying to achieve is that if the recieving station is occupied the AGV should leave the current station and travel to the occupied station. Since the recieving station is occupied the AGV should now wait until the occupied station is ready to recieve. I've attached to images were the accumulation should occur. I've also uploaded the model "Accumulation of AGVs" to flexsims file share site.accumulation1.jpgaccumulation2.jpg

FlexSim 22.1.1
accumulationagv accumulation
accumulation1.jpg (154.0 KiB)
accumulation2.jpg (142.0 KiB)
5 |100000

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

1 Answer

Ralf Gruber avatar image
0 Likes"
Ralf Gruber answered Peter W8 commented

Peter,

since I do not have access to your model, I can only guess:

Did you change the Number of Max Allocations and/or the Deallocation Types of the Control Points to fit your needs? You need to do that to initiate travel of either multiple AGVs to the same CP and accumulate in front of it on the path, or to release a CP when an AGV is leaving. The default settings are very restrictive.

Check on that, please.

· 12
5 |100000

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

Peter W8 avatar image Peter W8 commented ·

Hi Ralf,

thank you for your suggestion. Yes, I've tried to change the number of max allocations at the controlpoints of the receiving stations. I've also tried to change the deallocation types. For some reason this doesn't work. As is wright now, the AGV waits at the current station until the next one becomes available. This causes unnecessary blockage.

0 Likes 0 ·
Ralf Gruber avatar image Ralf Gruber ♦ Peter W8 commented ·
In both pictures in your original question it seems, that the AGVs you want to queue up are not loaded yet. Is there a chance that transports are not initiated, yet, because the sending processor does not have a destination to send to due to all receiving processors being occupied? In that case, no transport will be initiated. Sorry for the guessing work, but without the model in hand that is all I can do.


0 Likes 0 ·
Jason Lightfoot avatar image Jason Lightfoot ♦♦ Ralf Gruber ♦ commented ·
This is correct - so far the model is using FlexSim's standard logic for item handshaking and transport - the only difference is that it uses a label on the item to fix the transporter. You can remove the default behaviour and have a process flow create all the transport jobs to achieve what you're describing.
0 Likes 0 ·
Peter W8 avatar image Peter W8 Ralf Gruber ♦ commented ·

Ralf: Yes, that seems to be the case. I've uploaded the model to the file sharing site. Its named "Accumulation of AGVs".

Ralf & Jason: Ok, any suggestions how to start such a process flow and which elements it should contain? I'm new to flexsim and having a hard time getting a grasp of process flow and how it connects to the 3D model. I've watched a couple of videos on the matter but it's not easy when your used to something different.

0 Likes 0 ·
Jason Lightfoot avatar image Jason Lightfoot ♦♦ Peter W8 commented ·

I would try to make the process flow generic for all stations (you could use an instanced/object process flow with the stations each being an instance/member or have one process flow with a token that is generated by the first station but then loops through the same activities until it reaches the last station and is then destroyed)

It should do two small things:

  1. Detect when an item is ready/finished at a station
  2. Determine where the item needs to go next (if anywhere)

Based on that it should create the job to load, travel and unload for the assigned AGV - this is also pretty basic stuff.

The other thing you need to do is turn off the default travel task and send to port of the station. Return -1 in the send to port or select 'do not release'.

You don't need to worry about checking capacities of the processors/stations since if the AGV can't get to each stations control point - that station must still be busy.

0 Likes 0 ·
Peter W8 avatar image Peter W8 Jason Lightfoot ♦♦ commented ·

1. OK

2. This is where it gets tricky, at least for me. If I have (I do) multiple possible receiving stations to select from how do I make process flow do that selection? Preferably so it selects the station with lowest processing time left.


I tried creating a simple process flow as you desrcribed. I started with just one station to see if I could get it to work

processflow-loading-travel-unload.png



It gets stuck when it comes to the "Load" task. Also, after Load it should travel to a destination. This is where the selection of possible receiving stations should happen. I've upploaded the model (Accumulation of AGVs 2) to the file sharing site.

0 Likes 0 ·
Jason Lightfoot avatar image Jason Lightfoot ♦♦ Peter W8 commented ·

The travel and unload tasks should refer to a label on the token - 'destination' for example - and prior to those you should add the logic to decide how to assign the label. That could be as simple as looking through the outObjects to see which is busy, or as complex as choosing the earliest expected start time based on what is processing now and what other items have already been sent to each station (the best approach in my opinion).

In the case where there's only one outObject of course you can just send it there.

0 Likes 0 ·
Jason Lightfoot avatar image Jason Lightfoot ♦♦ Peter W8 commented ·
Peter do you have the process for each part in a table somewhere with OP numbers for each type and which stations can perform the operation? I know you have the table of times but that doesn't tell us the process - which operations steps have to happen and in what sequence.
0 Likes 0 ·
Peter W8 avatar image Peter W8 Jason Lightfoot ♦♦ commented ·

Hi Jason,

I do but I have to clean it up as it contains sensitive information. I'm back at the office this afternoon and will send it over to you.


1 Like 1 ·
Peter W8 avatar image Peter W8 Jason Lightfoot ♦♦ commented ·

Hi Jason,

I've uploaded an excel spread sheet (Process_steps_and_description) and the most recent model (AccumulationOfAGVNotWorking) to the flexsim file sharing cloud. The spreadsheet should contain the information you requested as well as some of my notes which should help you to understand how the model should operate.

Best Regards

/Peter

0 Likes 0 ·
Jason Lightfoot avatar image Jason Lightfoot ♦♦ Peter W8 commented ·

Hi I've added the OP number, replacing the YES/NO in your list and then created the data structures to use that for routing. This replaces the port connections and pull requirements etc.. it's all done via the data.

Each item gets a list of remainingOPs (array label), then each time a new destination is needed, the first OP number in that list is compared to a an array on each station of the OPs that station/machine can do for that variant. This is done in the pull activity with this sql clause:

WHERE puller.remainingOPs[1] IN getMapValue(value.varOPmap,puller.Type) ORDER BY earliestStart ASC

A user command is used to get the array of ops by variant since referring to the map label directly still doesn't work. Note that this is referenced on the machine directly - it's not referring back to a global table. That means you can simply copy a station and it will have the exact capability as the original and be considered for routing in the same - if it was referring back to some global table all the time you would need make revisions to it to handle more stations.

I have a partitioned list of all the stations by variant with an expression for the earliest start so that we can choose the free or earliest completing station. That value is return by the station label, that in turn calls a user command. This way you can customize the value per mahcine if needed or alter the user command to change all the functions. It read the list of allocated item's expected process times and adds that the the expected completion time of currently processing item, or the current time of the model if none is being processed.

This structure is completely flexible, in that a variant with two different operations at the same station would still be handled by having two different op numbers. What isn't handled at the moment is two different process times for two OP numbers for the same variant since you only have a single grid lookup for the process times. Different times for multiple visits would be a simple addition, but not needed for the process you defined - I just added the structure for multiple OPs/visits to keep it generic in case you want to add rework or add a variant in the future which loops around for a second pass.

Emailing the model to you. It needs PIGG_Final1 connecting somewhere.



0 Likes 0 ·
Peter W8 avatar image Peter W8 Jason Lightfoot ♦♦ commented ·
Hi Jason,

Thank you for the help, it worked like a charm!

0 Likes 0 ·