ATTENTIONThis FlexSim Community Forum is read-only. Please post any new questions, ideas, or discussions to our new community (we call it Answers) at https://answers.flexsim.com/. Our new Question & Answer site brings a modern, mobile-friendly interface and more focus on getting answers quickly. There are a few differences between how our new Q&A community works vs. a classic, threaded-conversation-style forum like the one below, so be sure to read our Answers Best Practices. |
flexsim.com |
|
Downloads |
Q&A Using Flexsim and building models |
#1
|
||||
|
||||
How to change the maxspeed of the TaskExecuter mid-task?
Ladies and Gentlemen,
what is the correct way of changing the TaskExecuter's maxspeed in the middle of the TASKTYPE_TRAVEL/TASKTYPE_TRAVELTOLOC? Thank you! Vadim |
#2
|
|||
|
|||
Vadim,
After a TASKTYPE_TRAVEL/TASKTYPE_TRAVELTOLOC has been initiated the Task Executer's kinematics have already been set (so it would take some intricate code to set the new kinematics on the new Task Executer). A simpler way to do this would be to use network nodes and the speed limit properties they already implement. Then wherever you need to change the speed of the operator you can add another network node and change the speed limit accordingly. |
#3
|
||||
|
||||
Alas, that approach will require way too many network nodes. I am creating a congestion model of a large warehouse and placing a network node at every place where the actor may stop will require 20000-50000 network nodes. I have already tried generating a map with this many network nodes and it froze the flexsim IDE after I saved and tried to reopen the resulting model.
|
#4
|
|||
|
|||
Vadim,
Could you give us a little more insight into what you are trying to accomplish? The community may be able to help with another way to model your situation that would be more feasible than the route you are suggesting. |
#5
|
||||
|
||||
Cameron,
I am trying to build a model of picking and replenishment processes in a warehouse consisting of 250 aisles of Dexion interlock (i.e. single-depth) racking with 90 bays per rack. The model should accurately reflect interference from multiple pickers driving pallet trucks (when a picker stops to perform a pick, the vehicles behind him should stop). The purpose of the model is determining the minimal number of pickers capable of handling the orders during the off-peak season and for a peak season finding a point where introducing extra vehicles starts causing the slowdown rather than improvement. If I were to disregard the interactions between the vehicles, the model would have been quite simple - the vehicle drives to the aisle network node, gets off the network, stops at pre-calculated coordinates in the aisle, gets back on the network and carries on, but that appears not to be an option. Placing a network node in front of each bay proved nonviable - the model ran out of memory. Using a single collision sphere per vehicle to detect vehicles getting too close to each other has caused an intolerable slowdown of the simulation. The present approach that I am evaluating is slowing down each vehicle in the aisle to model the loss of performance due to congestion in the specific area, but I cannot get sufficient granularity for vehicles that only do a small number of picks and spend most of the time driving and I do not think that making the vehicles go short distance from bay to bay just to decrease the granularity of TASKTYPE_TRAVELTOLOCs is the right way to go. Hence my interest in ability to change vehicle kinematics when the travel task is already in progress. Regards, Vadim |
#6
|
|||
|
|||
If you're just looking to interrupt the aisle operations you could consider stopping the object - it's already off the network so it wouldn't hurt network travel like a normal preemptive stop. You could schedule the stop from the aisle network node when the traveler enters the aisle, maybe use a random time and test a flag you set and clear on entry and exit, to see if it's still in the aisle. There would be work to figure out the likelihood of a stop and really the model should be giving that out as a result - so I'm not a fan of this approach.
The full solution would probably be to implement coordinated offset travel for the aisle. Edit: By the way 20000 network nodes gives a model of about 1.5GB which is well within Flexsim's capacity - and if you x-click the network to show only the paths or only the nodes, it's still responsive enough to work with. At 50000 however, the memory is 3.6GB and even with the showmode cycled to show only a single node, the drawing of the remaining node is sluggish. Last edited by Jason Lightfoot; 02-07-2013 at 05:51 PM. |
The Following 5 Users Say Thank You to Jason Lightfoot For This Useful Post: | ||
Vadim Fooks (02-20-2013) |
#7
|
||||
|
||||
Hello Vadim,
you can change the Endspeed in a Traveltask with the command changetask, but you know, that this has no effect on the current speed of the taskexecuter. Therefore you can create a new preempting tasksequence which breaks to the changed and still active tasksequence back. Dispatch the new Tasksequence. The Taskexecuter evaluates the changed Endspeed now. But the animations looks strange. The Taskexecuter stops its motion. |
The Following User Says Thank You to Jörg Vogel For This Useful Post: | ||
Vadim Fooks (02-20-2013) |
#8
|
||||
|
||||
For those of you who want to try the code:
Code:
// Update active fourth task of the standard Tasksequence (TS) treenode curts = gettasksequence(current,0); // active Tasksequence treenode involved1 = gettaskinvolved(curts,4,1);// unchanged node treenode involved2 = gettaskinvolved(curts,4,2);// unchanged node double newspeed = 20; // change values of the active task changetask(curts,4,TASKTYPE_TRAVEL,involved1,involved2,newspeed,0,0,0); // preempt the active TS and start it again with the changed values treenode breaktask = createemptytasksequence(current,1,PREEMPT_ONLY); inserttask(breaktask,TASKTYPE_BREAK,NULL,curts,0,0,0,0); dispatchtasksequence(breaktask); |
The Following 4 Users Say Thank You to Jörg Vogel For This Useful Post: | ||
Vadim Fooks (02-22-2013) |
Thread | Thread Starter | Forum | Replies | Last Post |
Stop a TE and change his task sequence | vasiliki grigorakaki | Q&A | 36 | 03-04-2012 06:00 AM |
Dispatcher: Which TaskExecuter did the task? | Stefan Trabut | Q&A | 3 | 04-05-2011 05:49 AM |
How to interrupt active task and implement another task? | Ilivid zheng | Q&A | 2 | 01-15-2011 02:30 AM |
Change the active Task | alanturing | Q&A | 2 | 07-29-2010 02:46 AM |
How to transfer a flowitem from a taskexecuter-team to another taskexecuter-team? | Frans Zeng | Q&A | 12 | 05-20-2010 11:23 PM |