question

Dwight avatar image
0 Likes"
Dwight asked Felix Möhlmann commented

AGV Parking Queue

AGV_FullModel_6_27_24_withAstarNav.fsm


I am trying to implement an AGV "parking queue" with variable parking spots. My goal is to have AGVs stage to the furthest spot in the queue of parking spots, and then a full tote condition will select the adjacent or closest upstream staged AGV.


What is being asked is that for the number of parking spots, the AGVs will pick up an empty tote and then proceed down to the furthest parking spot. When a tote becomes full the AGV in the closest adjacent or upstream parking spot will move to the spot directly in front of it, push (move) the full tote onto the adjacent conveyor, place the empty tote it is carrying onto the vacated station, and then turn and proceed back to be reassigned (currently pick up an empty tote and rejoin the staging queue again). Additionally, they are wanting vacated parking spots to be filled by all AGVs in the “parking queue” to move downstream until all spots are filled. I can get pretty much all the parking behavior individually but having trouble combining all those requirements. In hind sight it probably would have been better to use network navigation, but the customer changed requirements mid-model and I'm not sure how I would redesign it with the current process flows.


The model I’ve included does all the required behavior except for grabbing the correct parked AGV. You’ll see I hard coded a partition ‘3’ just to grab the furthest down stream for the moment.


1719861801677.png


I tried the following code in the ‘Pull From Occupied Parking’ partition of the Divert process flow to select the correct parking spot based on what chute it is at, but it breaks something.

int modValue = 0;

if (current.Chute_Number%Model.parameters.ParkingSpots == 0)

{

modValue = current.Chute_Number/Model.parameters.ParkingSpots;

}

else

{

modValue = Math.trunc(current.Chute_Number/Model.parameters.ParkingSpots)+1;

}


I am sure there is an easier way to do what I am trying to do (likely using subflows or something). I would love help fixing the current process I have or help doing it a better way. Thank you in advance

processs flowusing listsamrparking
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

Felix Möhlmann avatar image
0 Likes"
Felix Möhlmann answered Felix Möhlmann commented

I simplified the parking the logic a bit by pushing the AGVs themselves to the "Occupied_Parking_Spots" list. I also don't use partitions anymore. Instead the AGVs now have a label "Spot" that denotes which spot they are currently assigned. This still allows the downstream spots to pull AGVs assigned to the previous one but also enables using the difference between the chute number and this label to determine which AGV to pull to replace a full tote.

Furthermore I edited the On Set code of the parameter that creates the parking spots to assign numbers 2-N to the copied spots. In the uploaded model all spots at the number 1.

And I use "Travel to Loc" tasks, because they allow to finely tune to which exact A* cell the AGVs will travel.

agv-fullmodel-6-27-24-withastarnav-fm.fsm


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

Dwight avatar image Dwight commented ·

Thanks @Felix Möhlmann! Your solutions were very helpful and exactly what I was trying to accomplish. One thing I am thinking about is that my customer might want to only allow upstream AGVs to be assigned to a chute. Currently some AGVs are getting pulled from spots further "downstream" if the adjacent spot is currently vacant and causes a bit of a traffic jam. This might be what they are looking for but I've seen a couple times where a downstream AGV will get assigned as an AGV is pulling into an upstream spot. How would you recommend implementing this restriction if that is what they are looking for? I assume I would need to update the query to reference the exact spot number somehow. I was also wondering if it might ne possible to put the chute full condition into the parking_Spot process to check for a chute not being full before moving to the next parking spot?

0 Likes 0 ·
Jeanette F avatar image Jeanette F ♦♦ Dwight commented ·
Hello @Dwight,

I noticed you have a new post about this model and this post has an accepted answer. Do you still need help with this follow up question?

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

Sorry, I didn't notice your follow up question until now. As it's currently implemented, the chutes will only ever pull an AGV that is located on a parking spot to the left of the them (AGVs only travel in the direction shown to reach their chute after being pulled).

1720504633892.png

Of course the timing can sometimes be awkward, when a 'better' AGV would have become available shortly after another one was pulled. I think a decent solution to preventing most traffic problems might be to place a barrier (or even multiple) that limits travel in certain lanes to only go in one direction.

agv-fullmodel-6-27-24-withastarnav-fm-1.fsm

0 Likes 0 ·