How to define multiple destinations for AGV's?

How to define multiple destinations for AGV's?

Felix_Hagemeister
Contributor Contributor
264 Views
12 Replies
Message 1 of 13

How to define multiple destinations for AGV's?

Felix_Hagemeister
Contributor
Contributor

Hi everyone,

 

is there any possibility to implement multiple different destinations for AGV's? I have multiple sources and queues/sinks and the destination depends on the type of product. I've already implemented the Advanced AGV Process Flow, which kinda works (only problem is that the AGVs only drive to and pick up the item when I have a A connection).

I thought that I can use the "Travel to Pickup Location" to define the destination but that didn't work...

 

And an additional question: Can I somehow implement a tugger train? I know that I can tow the items that have been picked up but how can i attach e.g. a tote which then gets loaded (multiple items)?

 

Thanks in advance,

Felix šŸ™‚

 

0 Likes
Accepted solutions (1)
265 Views
12 Replies
Replies (12)
Message 2 of 13

Felix_Hagemeister
Contributor
Contributor

According to the tugger train, I already figured out how to attach a tote as seen in the attached picture:

Felix_Hagemeister_0-1747207412455.png

To create those totes, I used the following trigger:

Felix_Hagemeister_1-1747207479608.png

Both triggers have individual code:

Felix_Hagemeister_2-1747207526425.pngFelix_Hagemeister_3-1747207558214.png

 

But idk why it attaches the boxes at the end and not putting it in the tote:

Felix_Hagemeister_5-1747208273935.png

 

Additionally, I still use the advanced AGV Process Flow

0 Likes
Message 3 of 13

moehlmann_fe
Participant
Participant

Depending on how detailed you describe them, there are a huge number of ways of how transports can be implemented in FlexSim. On a broad level there are two options:

- Utilize port-connections and the "Use Transport" option to dispatch transport task sequences to Task Executers. This is mostly useful when the transport is a simple A to B and all transported items have the same origin and destination. Getting this to work well when different priorities, mixed destinations or other more complex logic comes into play is often not worth the effort. The second option is better suited for those cases.

- Implement custom task sequences. The AGV Process Flow template is essentially just one specific implementation of doing this. If the general behaviour (patrolling along a fixed route, picking up and dropping of items opportunistically) is what you want then it's a good option to use. If the goal is different (for example waiting at a park point until a given number of items is ready for transport or doing one run per hour), then a custom build Process Flow might at first seem daunting, but will ultimately be much easier to build than chaning the AGV template to fit your needs.

 

The information about the destination could be given in a variety of ways. It might be stored in a global table or as labels on the origin object or as fixed references in code fields. The AGV Process Flow template uses a label "destination" on the item, for example (which gets added as part of the "Push to List" option in the "Use Transport" field when you use port-connections for the routing. This means you could also add this label through other means and then push the item to the AGV work list, if you don't want to use port-connections.

 

In regards to using modelling a tugger train:

The code you put into the OnReceiveTaskSequence trigger only adds a move object task to task sequences containing five tasks (the default transport task sequence: travel - load - break - travel - unload). The AGV Process Flow template gives individual tasks to the vehicles, so this code doesn't do anything.

You could move the items to a 'trailer' in the OnLoad trigger or do so in a Custom Code activity in Process Flow after the load task. You should be aware though that the statistics of the AGV will be wrong when doing this. The items in the totes will not count as 'content' of the AGV. This also means that the AGV's travel state will always be "Travel Loaded" (when the totes were attached as trailers through the automatic option that does so for loaded items) or "Travel Empty" (when they are attached through a Custom Code activity). It's possible to work around this but that will add more complexity to the model. So if the statistics are important, think about whether the added visual fidelity of having trailers attached to the AGV is worth it.

 

I have attached an example model where I showcase some useful techniques. Mostly the usage of lists. If you haven't already, I would recommend you check out the Task Logic tutorial. It can help to understand the different options of how (transport) tasks can be implemented in FlexSim.

 

0 Likes
Message 4 of 13

Felix_Hagemeister
Contributor
Contributor

Hi Felix,

 

thanks for your response.

 

About the destinations: So the Advanced AGV Flow works well for the moment I guess. But is there a possibility to use two Advanced AGV Flows for different AGV's that operate on the same AGV network but take different routes? I have implemented these Next Work Points but this leads to the situation that all AGV's are following this order. I know that you sad that it could be helpful to just built my process flow from scretch but indeed, the advanced flow includes all the functions I need. 

 

Plus I've got an additional question. Isn't it somehow possible to link a global table (like a bill of material or list of parts) so I can set the destination based on a specific variable within the global table?

 

Thanks and best regards,

Felix

0 Likes
Message 5 of 13

moehlmann_fe
Participant
Participant

Yes, you can use two independent AGV Process Flows. You need to create copies of the CP-connection types and adjust the respective lists/activities in the Process Flow to refer to the copy. For example, you make a copy of the "NextWorkPoint" connection and call it "NextWorkPoint2". In the Process Flow you make the "NextWorkPoint" list refer to the list of that newly added connection.

"Location" connections can be shared between the Process Flows without problem. For the other four types it depends on whether they are actually used and if they can be shared (i.e. both flows use the same park points) or not.

If the routes have overlapping CPs where items might be loaded, a second AGVWork list would also be needed.

moehlmann_fe_0-1747733807815.png

 

You can of course read a destination from a global table. Check out the "getValueByKey()" method of the Table class.

FlexScript Class - Table

A good place for that (if you want to use this for every item on the AGV work list) might be the Work Generation section of the template.

moehlmann_fe_1-1747734135677.png

 

 

Message 6 of 13

Felix_Hagemeister
Contributor
Contributor

Thanks. That makes sense šŸ™‚

 

I did all the steps above. My simulation works with a second AGV WorkList but the processflow isn`t showing any tokens which, I guess, means that the second route is still controlled by the first Processflow. 

 

And thank you for your hint accordig to the global table, I'll try to implement it. Earlier, I've tried to set destinations by using the pull function of the queues that want to get a certain product. That means that I used the function to pull a specific label. Unfortunatly, this didn't work. Just to clarify: Is this because the ProcessFlow is more "powerful" and overwrites the pull function?

0 Likes
Message 7 of 13

moehlmann_fe
Participant
Participant

The second flow should show tokens. Did you link the AGVs to it as instance objects (and removed them from the first one)?

 

Using the Pull behaviour can work, but without seeing the model I can't tell where you might have made a mistake. Assuming you don't want to use Port Connections:

The origin object should push the item to a list (ItemList, not AGV Work list) in the Send to Port field. Other objects pull from this list in their Input settings. Filtering for a specific label needs to happen as part of the pull query ("WHERE labelName == labelValue"), not the Pull Requirement (that is only used when items are pulled through ports). In the Use Transport field of the origin object, the item should then be pushed to the AGVWork list. The destination label will be written to the item by default with this option.

0 Likes
Message 8 of 13

Felix_Hagemeister
Contributor
Contributor

It works now. I just forgot to use the right pull function of the specific queues.

About the query: I've tried to do it as you said as you can see in the screenshot.

Felix_Hagemeister_0-1747756371840.png

But I guess I did something wrong 'cause I just get an error code in the System Console:

Felix_Hagemeister_1-1747756429620.png

 

Sorry for bothering you with this topic and thanks for your help!!!

0 Likes
Message 9 of 13

gracepolee
Explorer
Explorer

Yes, you can route AGVs to different destinations by setting AGVTransportRequest.destination based on product type, using a Decide or Set Transport Request block.

The AGV handles "Travel to Pickup Location" automatically after a request is assigned.

 

For tugger trains, set the AGV’s tow capacity and group items (e.g., totes) using batching to load and tow multiple items.

0 Likes
Message 10 of 13

moehlmann_fe
Participant
Participant

"item" is not defined in the query (only in a FindItem query from the Storage System where it refers to the queried slot item). Either use "WHERE value.Type = ...." (value being the queried object) or just "WHERE Type = ..." (non-keyword strings are automatically interpreted as labels on the value).

0 Likes
Message 11 of 13

Felix_Hagemeister
Contributor
Contributor

I've already tried that cause I found something similar on the internet but when I do it, it still does not work. Could it be that, because I use the Advanced AGV Flow, I need to assign the destination via the "Assign Destination" basic event (in the unloading process)? The only thing is that I've already looked at the whole process flow and I don't understand where to set different destinations as a label.

 

Felix_Hagemeister_1-1747810148697.png

0 Likes
Message 12 of 13

moehlmann_fe
Participant
Participant
Accepted solution

The AGV PF template assumes that the destination is written to a label called "destination" on the item. If you push the item to the AGV work list in the "Use Transport" option, this happens automatically.

moehlmann_fe_0-1747811419826.png

If the items are pushed to the list by other means, you are responsible to create this label before pushing the item. Or, at the latest, assign the label after the Process Flow retrieves the item from the global partition of the list (as I show in my post about enabling independent work loops).

Message 13 of 13

Felix_Hagemeister
Contributor
Contributor

Thanks a lot!!! That works perfectly šŸ™‚

0 Likes