question

Carson M avatar image
0 Likes"
Carson M asked Carson M commented

Best way to pick items by priority and route them accordingly?

I have a pretty simple model but I feel that I am not doing this in the most effective way and I am looking for tips to simplify it (or point out where I am doing this wrong).

I am trying to have items of various types arrive in a queue, have the operator pick them by a sequence, and have him transport the items to processors depending on the type. In this model, I have simplified it so that the item type is also the priority, and also the destination processor number. In my real life model I will be transporting about 10 product types each with a different routing.

Particular things that I feel I have not done the best way are the "Travel to Processor" and "Unload at Processor" activities since I am using "Object by Case" for both the destination and Station respectively. I assume there is a way to make the unload station the location where the operator is traveling to? Also, I assume there is a better way to use a Global table to check product type and then route based on that? When I tried using the global table method I was not successful.

Thank you,

Carson

testing-lists-5-16.fsm

FlexSim 18.1.1
loadpriorityunloadsequencepick
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

Joshua S avatar image
0 Likes"
Joshua S answered Carson M commented

When you assigned the label "destination" in the Assign Labels activity you assign integers rather than an object, so once you changed those "Value by Case" values to processors, then change the Station value of the Unload activity to token.destination. Then to clean up your process a little you can completely remove both the travel activities because the load and unload activities include a travel motion in them already. Hope this helps.

Can you explain what you mean by not being able to use a global list? because it looks like what you are pushing and pulling your items onto is a global list named "ItemList1".

· 5
5 |100000

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

Joshua S avatar image Joshua S commented ·

You can Reference Global Table data by using:

Table("GlobalTable1")[Row][Column]

this allows you to assign all labels to the created objects depending on table values.

To tell the item which processor to go to, assign the label destination this value:

model().find("Processor"+string.fromNum(Table("GlobalTable1").executeCell(4,token.pulled.Type+1)))

then in each of the fields in your table, use duniform(?,?) and replace "?" with the processor range you want to route to. If you only want processor 1, the it will be duniform(1,1), but if you want processor 2 or 3, then use duniform(2,3). the code given above will then execute that code in the table to assign the processor. You will also need to make sure you labeled your processors with the correct number at the end of their name.

Hope this helps with assigning values from a table. Not quite sure what your last question is referring to.11947-11937-testing-lists-5-16-changed-2.fsm

1 Like 1 ·
Carson M avatar image Carson M Joshua S commented ·

That is an interesting way to execute this. A couple questions for you.

1) How would you change this so that the process flow honors the maximum content of the processor? The maximum content is set to one on each processor, but if you slow down the process time, the operator will load as many as possible onto the processor (he doesn't wait for the machine to be finished processing the previous flowitem). Would that be done with a zone or a split and join and a resource for each processor that he must also "Acquire"?

2) If the first question was answered and he was only loading one at a time, how would you keep the sequence, but permit him to pull the next product if he was waiting to acquire a processor and another was idle. Example - All of Product 1 must go to processor 1, he loads one on, it takes 30 minutes, but product 2 can use processor 2 in parallel because it is allowed to use 1-3, so he should feed product 2 to processor 2, and then give precedence to product 1 once processor 1 comes available.

0 Likes 0 ·
Carson M avatar image Carson M commented ·

Thank you for your response. Clever to assign the processor right in the label rather than the integer, that works well. Is the suggested way to use the model().find("Processor1") syntax for that? Also, the simplification to remove the travel activities does work but are there implications to doing that that I am not aware of?

I did not mean to say global list, I meant to say Global Table, my fault. I am thinking there is a best practice to create an Excel file to keep track of product routings that can be referred to when an item gets picked so that you don't have to hard code in each route if there are many different item types. For instance using it in the token.destination label, instead of Values By Case using Table > Object By Global Table Lookup. The only problem is that I am not sure what syntax to use in the table.

0 Likes 0 ·
Joshua S avatar image Joshua S commented ·

model().find("Processor1") works great for that, don't know why it doesn't work after travel is removed, make sure the unloading destination is token.destination. Here's the model with the simple modifications made to it 11937-testing-lists-5-16-changed.fsm

Can you give an example of a table you would use with multiple items, and just the processes number you would assign it to? Just so I can explain better how to reference the table.

0 Likes 0 ·
Carson M avatar image Carson M Joshua S commented ·

It does work after the travel is removed, I am aligned with you on that model. I am trying to build this logic into a larger model where things come to a rack from a different facility multiple times per day. I want to have the parts picked out of the rack in a sequence that I define, and routed to one of three processors. Attached is an example of the table. One question with this - I assume if we applied the same logic above, it would stick to the picking order and wait for the processor to become in an idle state before unloading (assuming a capacity of 1 at the processor)? Again, thank you for your help.

0 Likes 0 ·