The scenario happens when I have multiple AGVs, my AGV has a capacity of 4, my input comes every 4 item with 69.82s, thus it assign 4 AGV to load each item, but what I want is one AGV to load 4 items.
The scenario happens when I have multiple AGVs, my AGV has a capacity of 4, my input comes every 4 item with 69.82s, thus it assign 4 AGV to load each item, but what I want is one AGV to load 4 items.
Hi @YANG W2, was jason.lightfoot's or jason.lightfoot's answer helpful? If so, please click the red "Accept" button on one of their answers. Or if you still have questions, add a comment and we'll continue the conversation.
If we haven't heard back from you within 3 business days we'll auto-accept an answer, but you can always unaccept and comment back to reopen your question.
The better option is to correctly employ the AGV Process Flow - which is done by not using the dispatcher for transport but instead using the option Push Item to List (no task sequence) which will put it on a list called AGVWork.
This is as per the Description in the AGV Process flow template which you should read in full.
Your model attached is updated to use the process flow template.
That's because the PassTo of the dispatcher is not looking for already allocated work.
Use this code for the PassTo which has a section to look for a matching destination of any AGV:
treenode tasksequence = param(1); Object current = ownerobject(c); /**Pass to the object closest to the destination if available*/ /**If the object is on a network, then network travel is calculated; otherwise centroid-to-centroid distance is used. /**Consider available objects only if none are found, then the tasksequence will be queued up using the Queue Strategy, and will be sent to the first available.*/ double curmin = GLOBAL_UNREACHABLE; int minindex = 0; treenode destination = NULL; for (int taskrank = 1; taskrank <= gettotalnroftasks(tasksequence) && destination == NULL; taskrank++) { // this finds the first task in the tasksequence that is a travel task. if (gettasktype(tasksequence,taskrank) == TASKTYPE_TRAVEL) destination = gettaskinvolved(tasksequence,taskrank,1); } if (destination==NULL) // first available if there is no travel task return 0; //Check if there's a matching destination. for (int index = 1; index <= current.outObjects.length; index++) { treenode curobj = current.outObjects[index]; if (curobj && isclasstype(curobj, CLASSTYPE_TASKEXECUTER)) { if (inputopen(curobj)){ treenode ts=gettasksequence(curobj,0); //TaskSequence ts=gettasksequence(curobj,0); if (objectexists(ts)) { int curtask=getcurtask(ts); for (int taskrank = curtask; taskrank <= gettotalnroftasks(tasksequence) ; taskrank++) { // this finds the first task in the tasksequence that is a travel task. if (gettasktype(tasksequence,taskrank) == TASKTYPE_TRAVEL) { Object taskdest = gettaskinvolved(tasksequence,taskrank,1); if (taskdest==destination) return index; } } } } } } for (int index = 1; index <= current.outObjects.length; index++) { treenode curobj = current.outObjects[index]; if (curobj && isclasstype(curobj, CLASSTYPE_TASKEXECUTER)) { if (ipopen(curobj, opipno(current, index)) && inputopen(curobj)){ double curdist = distancetotravel(curobj, destination); if (curdist != GLOBAL_UNREACHABLE && (curmin == GLOBAL_UNREACHABLE || curmin > curdist)) { curmin = curdist; minindex = index; } } } } return minindex;
I should have added the test so that the agv isn’t allocated more jobs than its capacity... may find time for that tomorrow.
Seems like another problem appear as the AGV wont go back to the Parking Spot even they had nothing to do
You're blocking the route by having TaskExecuter57 (and others) sat on the network doing nothing. This would be better implemented using the AGV Process flow - I'll post an updated model.
13 People are following this question.
FlexSim can help you understand and improve any system or process. Transform your existing data into accurate predictions.
FlexSim is a fully 3D simulation software environment. FlexSim can be used to simulate any process in any industry.
FlexSim®, FlexSim Healthcare™, Problem Solved.®, the FlexSim logo, the FlexSim X-mark, and the FlexSim Healthcare logo with stylized Caduceus mark are trademarks of FlexSim Software Products, Inc. All rights reserved.
Privacy | Do not sell or share my personal information | Cookie preferences | Report noncompliance | Terms of use | Legal | © Autodesk Inc. All rights reserved