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 |
#1
|
||||
|
||||
Queue (standard, LIFO, FIFO)
Guys,
As far as I know the Queue (standard) in Flexsim is a queue which gives flow items further if the receiving objects are ready to receive. So if I have a model where item type 1,2 and 3 arrive with one queue for all items and three following processors where the first processor only takes item type 1 the second one only item type 2 and the third one only item type 3 (Flow Tab: Input / Pull / Pull Requirement Specific Itemtype 1) the queue will release an item if the following processor can receive it does not matter on which position in the queue the flow item is. So if the first item is item type 1 and the second is item type 2 and the third is item type 2 and processor 2 can receive an item the second item will leave. This means that in Flexsim the queue is not a “real” FIFO queue. I assume that the tick LIFO means that in the above case the third item will leave. I know that if I want a “real” FIFO queue, I just can add an additional queue with Maximum Content 1 (I should take care that the first queue has as Maximum Content capacity minus 1). This will work and seems to be a way to solve it. I am not sure if every user is aware of this mechanism. In the Manual for the Queue it says: Overview The queue is used to store flowitems when a downstream object cannot accept them yet. By default, the queue works in a first-in-first-out manner, meaning that when the downstream object becomes available, the flowitem that has been waiting for that object the longest will leave the queue first. The queue has options for accumulating flowitems into a batch before releasing them. But maybe this is only an issue for not English native speaker. If I hear FIFO I would expect first-in and first-out means only the very first item can leave. Or is this case only a special issue, because of using Pull strategy? In general I like to ask if I am right with what I said? I just like to ask if this is the right way to do it or do I oversee anything? Is it in the manual clear enough or should we point this out stronger? Take care tom the (A)tom
__________________
tom the (A)tom: "We have solved our problems ... now we have to fight the solutions." |
#2
|
||||
|
||||
Tom,
Everything is working how it was intended to from what I understood. I just don't think that you should use pull if you want the queue to be FIFO. If you select a different option in the sendtoport field of the flow tab you select "cases by value" from the pick options and have it only evaluate the first object in the queue and send it to the port you want depending on itemtype. The pull method would be helpful if you didn't care which order they left the queue as long as you got the correct itemtype you wanted. Maybe I just didn't understand your question though. |
#3
|
||||
|
||||
Tom,
I agree that perhaps the manual should be more specific. It should explain what FIFO means for the queue, because it's not a complete first-in-first-out. It's more of a FIFO-by-availability. The queue will send the longest waiting part that matches whatever send-to and/or pull strategy you have specified. And you are correct that if you check LIFO, then the queue will send out the shortest waiting part that matches whatever send-to and/or pull strategy. Also, you can pretty easily modify the queue to be completely FIFO or LIFO. Here's a model that does that: queue_fifo_lifo.zip. I've customized the send-to to only release the first item in the queue for FIFO, and only the last item in the queue for LIFO. If it's not the right item, I return -1, meaning I don't want to release the item. Then in the exit trigger I send a delayed message in 0 time, which will the re-release the part behind (or before) the item that exited. For LIFO, I have to do an extra thing on the entry trigger to "un-release" the previous item, using the holditem() command. |
Thread | Thread Starter | Forum | Replies | Last Post |
a question on queue | KelvinHo | Q&A | 15 | 11-09-2011 07:16 AM |
Queue Sorting | Jeff Nordgren | Q&A | 12 | 05-22-2008 03:21 PM |
How to get interval average,max,etc of a queue content ? | qin tian | Q&A | 5 | 02-14-2008 10:11 PM |
Queue stacking | Paul Dowling | Q&A | 2 | 11-27-2007 11:57 PM |