question

Jingyong P avatar image
0 Likes"
Jingyong P asked tannerp commented

Dedicated Operators to Processors

I have 4 operators and 4 different processors. Each operator has dedicated skill set. For example, Operator 1 allow to operate Processor 1 and 3. Each operator may have different work hour.


Work hour Processor 1 Processor 2 Processor 3 Processor 4
Operator 1 12am-12pm X
X
Operator 2 12am-12pm

X
X
Operator 3 12pm-12am

X X
Operator 4 12pm-12am
X X

For process dedication, I think I can group operators by there Skill set. For example, Processor1_Group has Op1 and Op4. Processor3_Group has Op1 and Op3. Then use multiple dispatchers. If I need to add more operators in the future, I can just modify the group members. Does this method make sense to you?

FlexSim 20.1.2
flexsim 20.1.2operators assignment
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

Matt Long avatar image
2 Likes"
Matt Long answered tannerp commented

Here's an example model that uses a List to determine which operators are on shift and which machines they can work on. This example is not the only solution, but hopefully will give you insights into how to make this work for your purposes.

In the model, a Task Executer List has an Expression Field called onShift. This compares the model's current hour with labels on the value. The values are the operators, which push themselves to this list at the beginning of the model (see the operator's trigger page). This expression field is marked as dynamic so it will be calculated each time a processor pulls from the list.

The processors each use a Pull from List option in the Pick Operator field. The query is:

WHERE onShift AND value.ProcessorName

Each operator has associated labels for which processors they can work on. Again, this could be handled differently if you had another way to group operators or specify which skill sets they have. ie the query could be something like

WHERE onShift AND (value.IsMechanic OR value.IsTechnician)

Each machine acquires the operator when an item is processed, and then the operator pushes themselves back onto the list once the processing is finished. Alternatively you could choose to release them at the end of a shift or after processing a certain amount of items etc.

PullOperators.fsm


1592712984784.png (8.4 KiB)
pulloperators.fsm (47.6 KiB)
· 8
5 |100000

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

Jingyong P avatar image Jingyong P commented ·

Hello @Matt Long,

Thank you.

I modified your model to simplify the issue.

Assume both operators can operate Process 1~4.

Operator 1 works from 6am - 6pm and Operator 2 works from 6pm - 6am.

Somehow, model stops at 18:00 and operator 2 doesn't take over the job and continue running.

Test.fsm

0 Likes 0 ·
Matt Long avatar image Matt Long Jingyong P commented ·

With them working from one day to the next, the if statement is never true for the second shift:

Model.dateTime.hour >= value.ShiftStart && Model.dateTime.hour < value.ShiftEnd

since ShiftEnd is < ShiftStart. We just need to make a quick modification.

(Model.dateTime.hour >= value.ShiftStart && Model.dateTime.hour < value.ShiftEnd) || (value.ShiftEnd < value.ShiftStart && (Model.dateTime.hour >= value.ShiftStart || Model.dateTime.hour < value.ShiftEnd))

The second set of statements covers times when the shift end time is less than the start time. Additionally it occurred to me that you'll need to check the Reevaluate All Values On Push check box from the Back Orders tab of the list. This is because we have this dynamic onShift field that during a shift change, is 0 for the operators already on the list (while a processor has a back order waiting for an operator) and it only reevaluates the back order with the operators going off shift when they're pushed to the list.

Alternatively to this if statement, you can always use a TimeTable to specify shifts and then instead of setting the state of the object to stopped, you can set an OnShift label on the operator.

0 Likes 0 ·
Jingyong P avatar image Jingyong P Matt Long commented ·

Hi Matt,

@Matt Long

Thanks for your reply. Instead of using your method, I used 4 different Time Tables to manage their working schedule.

Regarding how to manage each operator's skill to operate a processor, I took your suggestion and assigned labels in each operator. It works well. For future management, How can I use a GlobalTable to update each operator's skills, instead of editing each individual?

On Dashboard, when I use "state" to review operator's utilization. I did not see "Working" as part of the states? For example, while a processor is processing an item, the operator's status should be "working". How can I do it?


Thank you

Operator Assignment.fsm

0 Likes 0 ·
Show more comments