question

Kevin-Hsiang avatar image
0 Likes"
Kevin-Hsiang asked Kevin-Hsiang commented

How to use processflow to read global table then assign the task to the pickers?

Hello, In this model, I want to make picker to pick the specific item by global table after I generate the items to fill up all racks.

picktoparts-0412.fsm

About my operation:

According to the above, first I create a global table(named: AggregatedOrders) to get picking task sequence. The global table is shown below:

1649776333809.png

For this example, the table contains 5 tasks, and each task have the items(the number is label value of item) that need to be picked.

My goal:

Like as: In task1, it need to assign picker1 to go item10->item100->item150->item80 location to pick item(when item value is 0, Indicates that no item need to be picked, only pick to itemD and task ends), then go back the queue to drop off picked items, and waiting for the next task.

--To clearly describe my goal, my problem as shown below:

I want to use processflow to read global table then assign the tasks to the pickers, but I'm not sure whether such a global table set above can be read and how to assign tasks to idle pickers.

At this stage, I draw the expected processflow, and hope that the experts will provide guidance.

how-to-assign-task-to-pickers.png


Regards,

Kevin

FlexSim 22.0.1
processflowglobal tabletasksequence
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
0 Likes"
Felix Möhlmann answered Kevin-Hsiang commented

To read global table values in a process flow, you can either use the pick option "By Global Table Lookup" in the "Assign Label" activity or use the command that gets implemented by this option directly.

Table("tablename")[row][column]  
// Returns the value in cell (row, column) of table "tablename"

1649846755543.png

To distribute the tasks there are two main approaches:

1) You create the entire task sequence beforehand and then disptach it to an operator (possibly through the dispatcher)

2) You first determine which operator will do the task and then run the process flow "live", in sync with the 3D model.

Personally I prefer the second approach, as it allows to react to changes in the model inbetween each individual task.

To create orders from the table, I'd create one token per row of the table. The row is stored as a label on the token. A second label value that denotes the current column starts at 1.

1649848342292.png

Each token has to acquire an operator, which are added to the process flow as a resource, before it can continue.

It then checks if the current column exists and the value in the cell is not 0. If both of these are true, then the type value from the table is written to a label on the token and used to find an item in the "Find item" activity. The acquired operator is then told to travel to the corresponding rack ("item.up"; the object the item is currently in) and loads the item. Then the column number is incremented and the token loops back to the check at the beginning.

Once no more columns/values are found, the token instead is send to the second part, where the items are unloaded to the queue.

1649848575527.png

As a tip: You might want to add the "Type" label to the storage system as an indexed item label to speed up the query in "Find Slot".

1649848644523.png

picktoparts-0412-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.

Felix Möhlmann avatar image Felix Möhlmann commented ·

The "Acquire" activity allows you to specify which of the available resources should be pulled. You can either use a query (SQL) or pass in a specific object or array of objects that should be acquired.

For example, if you were to add a column to your table that denotes the operator that should do the task, you could then get a reference to the operator based on the number in the table and use that reference to acquire that specific operator.

1649865002216.png

1649864985257.png

1649865052870.png

picktoparts-0412-fm_1.fsm

If you want to learn more about how queries can be used to pull the right resource/list entry, I'd suggest you have a look at the corresponding tutorial and/or page on the Acquire activity and SQL in FlexSim.

https://docs.flexsim.com/en/22.1/Tutorials/ProcessFlow/Tutorial1UsingSharedAssets/1-1UseListResource/1-1UseListResource.html

https://docs.flexsim.com/en/22.1/Reference/ProcessFlowObjects/SharedAssets/AcquireResource/AcquireResource.html#properties

1 Like 1 ·
Kevin-Hsiang avatar image Kevin-Hsiang Felix Möhlmann commented ·

I got it. The tutorial you provided is worked for me.

Thank you for support!

0 Likes 0 ·
Kevin-Hsiang avatar image Kevin-Hsiang commented ·

hello, @Felix Möhlmann:

I appreciate your detailed explanation! To use pf more skillfully, I repeat your operation again. It's help me a lot. Now I can understand more clearly that "acquired resource" and "assign label" how to work.

About distributing the tasks, as you said, the second approach works better In practice. Since about the model above is just for experimentation, so it assume that the new task have to assign to idle operator immediately.

Actually, I'm also interested in how to distribute the tasks to the specific operator.

like as: operator1 is assigned to do task1 and task2 ; operator2 ->task3 & 4 I afraid that my question will take so much of your time, If it's available for you, please guide me.

Thanks for your help again!

0 Likes 0 ·

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

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