question

G C avatar image
0 Likes"
G C asked Adrian Haws edited

Process Flow + using groups

I use process flow for all logic.

I have 3 groups and 4 operators:

GroupA= Operator1 & operator2

GroupB= Operator2 & Operator4

GroupC= Operator1-4 (all operators)

My problem is during a process that acquires an operator from GroupC. It will call an operator regardless of whether or not that operator is utilized in a GroupA or GroupB only process. This results in the operator stopping its current process to perform the most recent acquire operation BEFORE he has been released.

I'm wondering if I can use labels to simulate a utilization state and query the label number in the acquire activity...

I have tried a query in acquire activity:

WHERE isIdle == true

and adding the isIdle field in the resource activity. However this did not work; all the operators stopped being acquired at all.

Does anyone have an alternative solution for this?

FlexSim 16.0.1
listqueryacquire resourcegroupbackorder reevaluation
· 4
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

LeGrand Gold avatar image
3 Likes"
LeGrand Gold answered April Zwerneman commented

Try adding a Back Order Reevaluation Event that listens to the operators' OnStateChange event. Do this by opening the resource activity's Advanced property pages and click on the Back Orders tab. Click on the green arrow and select Value Event. Keep the Focus Type and Event Focus as value but change the Event to "OnStateChange"*.

*There is also an "OnStateValueChange" which is slightly different but for this solution they are exactly the same and it does not matter which one you select.

· 1
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Jordan Johnson avatar image
1 Like"
Jordan Johnson answered Matthew Gillespie commented

@G C One solution is to use three lists instead of three groups.

In the attached model, there are three lists. The list called GroupA contains Operators 1 and 2. The list called GroupB contains Operators 3 and 4. the list called GroupC contains all four operators. Note that each operator is on two lists.

To get an operator from GroupA, a token should pull from GroupA, and store the result; I used a label called "prePull". Then, the token should immediately try to pull that operator from GroupC using this query:

  1. WHERE value == puller.prePull

This ensures that the token will try to acquire the same operator from GroupC as from GroupA. When a token is done with that operator, it should push it back to GroupC, and then to GroupA. Be sure to push the label value, rather than the token. Also be sure to use a max wait timer of 0.0, allowing the token to move along, and to keep the value on the list on early release. Use the same double push/double pull mechanism to acquire operators out of GroupB.

Acquiring an operator from GroupC is simple; just push to and pull from the GroupC list.

In the end, every token must acquire an operator from GroupC, meaning that no two tokens will acquire the same operator.

acquireoperatormodel.fsm


· 1
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.