How do I code into the flow output port such that it filters by processor empty time?

How do I code into the flow output port such that it filters by processor empty time?

tony_nikolov
Not applicable
105 Views
8 Replies
Message 1 of 9

How do I code into the flow output port such that it filters by processor empty time?

tony_nikolov
Not applicable

[ FlexSim 16.0.1 ]

So I am making a simulation where items are being filtered from a queue into several different processors, but before they can be processed, they must be split up into smaller subcomponents of the original item with a separator that happens instantaneously (no separator process time). The "pieces" of each item then get individually processed through their respective processor, with each piece waiting in a queue to get processed. For the sake of my project, I must not allow any new items to enter a pre-process queue until all of the pieces of the previous item have been processed. I started coding this into the filtering queue's flow port but came across a roadblock when I was trying to reference the state of the processor. The way my logic works is: If the processor is busy, then you must not send a new item to that processor's separator. I created a for loop to cycle through all of the output ports of the filter queue but I don't know what variable is used to determine whether the processor is busy or not. Can someone help me out?

Accepted solutions (1)
106 Views
8 Replies
Replies (8)
Message 2 of 9

jeff_nordgren
Not applicable

Tony,

Can you send your model or a sample so that we can look at it and give you a better answer?

0 Likes
Message 3 of 9

jeff_nordgren
Not applicable
Accepted solution

If the flowitems are waiting in a queue before the processor, here is what I would do.

I close the input port of the pre-processing queue when the last flowitem in that "batch" has entered. Then in the OnExit trigger of the queue, if it is the last flowitem left in the queue, then reopen that queue for more flowitems.

If you could send your model or a sample, I could show you how to put that into practice.

0 Likes
Message 4 of 9

regan_blackett
Autodesk
Autodesk

I'm not sure if I am fully understanding the problem, but I'll try to answer this using a simple example that uses some process flow elements to manage the processing of the sub-components.

So what I did was to create a Token that will represent my primary part. That Token tries to acquire a Queue, if successful I can go ahead and place the primary part in the Queue via a Create Object activity. Then I have that token start a Subflow which will create Child tokens that belong to the primary part.

The Child tokens are going to Acquire one of the processors I have in a Group, wait (using a Wait for Event activity) for the processors to release the sub-components. Once released, that allows the primary piece be moved to the Finish Queue.

That will make sure the all the sub-components for a given Primary part are done before mvoing on and allowing the next primary to begin.

processing-subcomponents.fsm.

Message 5 of 9

Matthew_Gillespie
Autodesk
Autodesk

Here's another example of how to do this in Process Flow. The logic here is from the Queue's point of view rather than the individual items like Regan's model. The queue waits until all the items have been processed before grabbing a new item to separate.

processflowseparator.fsm



Matthew Gillespie
FlexSim Software Developer

0 Likes
Message 6 of 9

tony_nikolov
Not applicable

I attached the file. The issue I am having is when the operators are taking items from the HSTW Queue and sending it to a Circle Breakup Separator before the previous set of items has completely (all pieces of the item) passed through the HSTW Processor.

pgore-projectsacs-tapewrap-simulation-projectacs-t.fsm

0 Likes
Message 7 of 9

tony_nikolov
Not applicable

That sounds very logical to me. I would want to reopen the input port as the last flowitem has left the processor in this case. However, I don't know how to distinguish what the last flowitem is in the batch and also don't know how to close the input port. I'd appreciate some help with that syntax.

0 Likes
Message 8 of 9

jeff_nordgren
Not applicable

@Tony Nikolov

Tony,

Dang! I thought that I sent you your model with an explanation of what I did to it. But when I looked back here, it wasn't there. So here is another try.

Below is a summary of what I changed in your model. Take a look at it and see if it is now doing what you want it to do.

I added a second centerport connection from each HSTW back to its Circle Breakup separator. Then I rearranged the input ports on each HSTW so that the Multiple Passes Q would be the first input port to the processor instead of the second. That way, if the Placeholder Q is empty, all the "batch" has been processed.

In the OnExit trigger of the separator, I call a User Command called "LockBreakup". What this does is close the input port of the separator is all flowitems have left the separator.

In the OnExit trigger of the processor, I call a User Command called "ReleaseBreakup". What this does is check to see if the Placeholder Q is empty (all flowitem have been processed). If it is empty, it opens the input port of the second centerport connection of the processor (separator).

That's pretty much it in a nutshell. Take a look at the model and see if this is the way that you intend for it to function. If you have any questions or problems, please let us know.

pgore-projectsacs-tapewrap-fs1.fsm

Not sure why it won't delete the first two models. Use the named one above.

0 Likes
Message 9 of 9

tony_nikolov
Not applicable

Jeff,

Yes, this does exactly what I'm looking for! Thanks for the help, I will try and make good use of User Commands from here on out.

0 Likes