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.

  1. Table("tablename")[row][column]
  2. // 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.