question

Yunjukuo avatar image
0 Likes"
Yunjukuo asked Jeanette F commented

MTBF with preempt not working when using Network Nodes

Attached models’ setting are the same, the only difference is one named ”… NoNetwork” do not use Network Nodes.


I’m using FlexSim 2016.1.2. However, I also attached same question using FlexSim 2022 just in case only few people can solve problem using 2016.


[Question]

When Network Nodes are not used, "preempt only" task(when breakdown) of the MultiProcessor can run sucessfully, but when using Network Nodes , the "preempt only" task of MultiProcessor fails, and the dispatcher dispatches operator according to FIFO and Priority.

What is the reason? How to fix it?


[Model Setting]

▪ Breakdown may occur in two Multiprocessors in the model, and when the breakdown occurs, operator are required to repair the machine ( "preempt only" task).

▪ Breakdown logic of a machine named MultiProcessorMTBF follows the MTBF setting.

▪ Breakdown logic of machine named MultiProcessorBreakByCode is written in the “Process Time” setting of “Process2”. If breakdown occurs, machine will be stopped and call operator in its OnMessage trigger (the code is copied and modified from MTBF).

▪ Opretor2 have rest time according to TimeTable setting. (state: Shedule down)



Eventually I want to achieve the following setting, if all could be solved at once will be perfect.

(1) Preempt only can be successfully executed in the situation with Network Nodes and self-define breakdown logic (e.g. code in MultiProcessorBreakByCode).

(2) When multiple machines have “preempt only” tasksequence at the same time (e.g. 2 machines), dispatcher can simultaneously call the number of operator required that are doing “no preempt” tasksequence to do “preempt only” tasksequence (in this case will be call 2 different operators at same time).

Current model might call the same operator for two machine with “preempt only” tasksequences, which is not the case I want.

(3) Prevent operator from doing “preempt only” tasks during the rest time set by TimeTable. (I didn’t set “preempt only”in TimeTable due to operator can start to rest only after completing tasksequence on hand)

preempt_BreakdownCode_F2016_NoNetwork.fsm

preempt_BreakdownCode_F2016.fsm

preempt_BreakdownCode_F2022.fsm

preempt_BreakdownCode_F2022_NoNetwork.fsm

FlexSim 16.1.2
network nodesmtbf mttrpreemption
· 2
5 |100000

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

1 Answer

Felix Möhlmann avatar image
1 Like"
Felix Möhlmann answered Felix Möhlmann commented

This is from the 22.0 version of the model, so I can't guarantee that it works the same in the 2016 version.

When the dispatcher receives the coordinated task sequence it creates smaller sub sequences that then get dispatched to the operators.

1655359919653.png

So the 'Pass To' code is run for that sequence (ts5). That code checks if the taks sequence includes a travel task to determine the target object. Because ts5 doesn't, the 'travelDest' stays as the default value and points to the dispatcher itself.

1655360068919.png

The dispatcher is not connected to the travel network, so 'distancetotravel()', which is used to find the nearest object to the target, returns *a very large number*. This then causes 'findmin()' to 0, possibly because the minimum expression value is initialized as a smaller value then what is returned as the distance. So no operator is deemed to be valid and the code returns 0, meaning 'First Available'.

1655360442401.png

This also influences the model without network: The operator closest to the dispatcher is send to repair the processor, not the one closest to the target.

To circumvent this, you could first check if the dispatched task is of the 'TE_Allocate' type, belonging to a coordinated task sequence. In that case, the code to check for travel tasks is run for the coordinated task sequence, so it returns the correct target.

1655361262363.png


To ignore operators that are currently on break, I'd suggest to set a label on them in the time table down function (reset it when resuming). This can then be used in the 'Pass To' code to ignore such operators.

Similarly, you could also check if the operator is already doing a preempting task sequence at the time and ignore it in that case as well to distribute the repair tasks better.

1655362298895.png

preempt-breakdowncode-f2022-fm.fsm


· 3
5 |100000

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