Using Process flow to load different item types on pallets

Using Process flow to load different item types on pallets

kashif_k1
Not applicable
250 Views
6 Replies
Message 1 of 7

Using Process flow to load different item types on pallets

kashif_k1
Not applicable

[ FlexSim 19.1.1 ]

sample-model-palletizing.fsmHi,
I have 9 different destinations (called Sort rank) for incoming items and based on their destination, they get diverted to the lane conveyor assigned for that destination. Both sort rank and lane for each item are assigned at the source trigger on creation using the global table "Sort_distribution"
I have 3 lanes and each of these lanes have 6 operators to load the items on pallets. Following is the logic that I am trying to implement using process flow:


Each pallet has a maximum capacity of 16 items. For each sort rank, certain number of pallet locations are available. As soon as the max capacity is reached, incoming items belonging to that sort rank will be loaded to next available pallet location and meanwhile, the full pallet will be changed over and replaced by an additional operator, called as "waterspider" (apart from those 6 operators, each lane has one waterspider operator to do pallet changeovers on FIFO basis). If all the pallet locations for a sort rank are full and waiting for pallet changeovers, the items coming in this duration will be down-stacked on the floor, known as "backlog" due to pallet unavailability. But as soon as a fresh pallet for that sort rank is available, both backlog items and arriving items of that sort rank will be loaded on the new pallet simultaneously (new arriving items will be loaded by one of those 6 operators while backlog items will be loaded by waterspider operator of that lane). The waterspider operator will not proceed to next pallet changeover until he is done with moving all the backlog items for that sort on the newly placed pallet.
(Note: I am putting remaining explanation in the comment as it makes the question too long to post)

0 Likes
Accepted solutions (1)
251 Views
6 Replies
Replies (6)
Message 2 of 7

kashif_k1
Not applicable

In my process flow, I restrict number of tokens that can enter Zone1 to 6 in order to represent that there are 6 operators per lane. In Zone2, I restrict maximum number of tokens to 1 in order to represent that there is only one waterspider operator available per lane who does pallet changeovers and backlog items loading. I record everything in the global table Lane_Qty. It has following columns:
Sort_rank: For the sort rank of items
Loc: Number of available pallet locations for the sort rank.
Capacity: Max capacity of pallet (16 for all pallets)
Current: Number of items currently on the pallet being utilized for loading.
Cont: The pallet on which the operator is currently loading items of that sort rank (i.e. Cont<=Loc)
Backlog: Items currently being down-stacked due to pallets unavailability for that sort rank.
Total: Number of times pallet changeovers happened for the sort rank.
Max: Maximum value of Cont at any time. This will tell me to what extent of available pallet locations for any sort rank did I use through out the simulation. (i.e. Cont<=Max<=Loc)
Max_Backlog: Maximum value of Backlog at any time. This will tell me how many maximum number of items were down-stacked at any time for any sort rank. It will be a key indicator to decide how many Loc I need for each sort rank.

The issue I am facing here is that it does not work the way I want to model it as stated above. My backlog column in Lane Qty table shows negative values sometimes as well.

0 Likes
Message 3 of 7

joseph_g3
Not applicable
Accepted solution

@Kashif K

The negative values you were getting were because of this section of your Process Flow:

21685-capture.png

After checking if there is a backlog for the sort rank, you checked if the pallet could take any more backlogs. If there is space, you have it move one item from the backlog to the pallet. This is where the problem is. Instead of checking again if there is a backlog, you only check if the pallet can take more backlogs, regardless of whether those backlogs exist or not. I would connect the custom code at the bottom of this section of your Process Flow back up with the first decide.

Another potential issue I found with your model is that you have it set to run this code every time an item arrives:

if(Lane[token.Sort_rank][token.Cont]>=Lane[token.Sort_rank][2])
{
	Lane[token.Sort_rank][token.Backlog]++;
}

If you follow your logic in the "Increase Lane Qty" custom code, you'll see that adding a 16th item to a pallet will cause the pallet to be filled and add an item to the backlog. I would recommend changing it to this:

if(Lane[token.Sort_rank][token.Cont]>=Lane[token.Sort_rank][2])
{
	Lane[token.Sort_rank][token.Backlog]++;
} else {
	Lane[token.Sort_rank][token.Current_Column]++;
}

That way items are either added to a pallet or the backlog, but not both.

0 Likes
Message 4 of 7

kashif_k1
Not applicable

sample-model-palletizing-1.fsm

Hi Joseph,
Thank you for the reply. I made the changes as suggested in the code and process flow. I have attached the new model with these changes. Could you please check if that's the way it should be? I observed more than 1 token (2 tokens) entering Zone2 at some instance, which is not right (see attached picture). Does adding decision loops cause enter zone and exit zone to behave improperly? Also, I am still not sure if the process flow is letting the lane operators and waterspider operator to keep loading items on the new/available pallet location simultaneously. Could you confirm from the process flow?
Finally, the waterspider operator is changing over the pallet and loading backlog items for the sort rank based on FIFO (first in first out). What if I want to change this strategy and do the changeovers based different criteria such as sort rank priority/ sort rank with most backlogs etc.? I know that this can be done using List and query but I am new to using List in process flow. Can you please explain how to achieve this? (Let's say we want to do changeovers by prioritizing the sort rank having maximum backlogs)

0 Likes
Message 5 of 7

joseph_g3
Not applicable

@Kashif K

The model looks good and I don't think there are any problems with the operators working simultaneously. The reason why your zones aren't working is that you aren't using the "Use Max Content" feature of the Zones:

21751-capture.png

If you want zone 1 to be limited to 6 tokens for example, you will have to check "Use Max Content" and then set the value under it to 6. Same for zone 2 except that you will want to set that to 1.

As for clearing the pallets at the sort rank with the highest backlog, this can be done by pushing tokens to a list when a changeover is necessary and then pulling the token with the highest backlog. I did this by setting up the list with a "Backlog" expression:

21756-capture2.png

And then by pulling items from the list with the highest Backlog using this query:

21757-capture3.png

This query will order the list from highest Backlog to lowest.

Here's your model with some changes I made to add this functionality: palletizinganswer.fsm

Note in your model I removed the second zone and replaced it with a single token for the waterspider. I also changed some of your labels to macros. If you have any questions on macros, let me know.

0 Likes
Message 6 of 7

kashif_k1
Not applicable

Hi Joseph,

Thank you for the help. I have a few questions here:
1. I already set a limit on maximum number of tokens that can enter by setting it to 6 in the Partition Constraints option for the zones. I first partition by token.Lane_id and then in the Partition Constraints option, I set Number of tokens<=6. This means that for every lane, I have set a maximum limit of 6 in zone1 to enter, so not more than 6 items of same lane can enter the zone1 (however, more than 6 tokens can enter the zone1, it is just that tokens representing items of any given lane can't exceed 6 in zone1). This will help me create exceptions in the zone Partition if later on I decide to put more or less than 6 operators at some lanes. (see attached pictures)
If I check Use Max content option, it will allow only 6 tokens to enter for my entire system, which is not true (at max, 6*3= 18 tokens should enter because the process flow begins from onArrival trigger at group Lane_Q which captures my entire system of lanes). Just my thought, could be wrong.
2. Is there any difference between using Global variable and Macros? What additional feature does a macro offer?
3. I am not sure how the tokens in process flow would recognize Zone2 as it seems like zone2's Enter and Exit boxes are not 'positioned' in a way that would let tokens identify its starting and ending. How does thcapture.pngis work? How do we let tokens know that a zone is about to start or end if we dont position our zones entry and exit properly? (For example, Zone1 clearly starts after Custom code Close Queue and ends after Custom Code Increase Lane Qty)

0 Likes
Message 7 of 7

joseph_g3
Not applicable

@Kashif K

I apologize for the mistake, I forgot that you said that you want 6 operators per lane and 1 waterspider per lane. Both of your zones are fine as they were in the last model you sent. The reason why you are sometimes getting two tokens in Zone 2 in the picture you sent earlier is because those represent pallets from different lanes, so it is fine for both of them to be there. It just means that the waterspiders for two lanes are working at the same time.

As for your second question, macros are like Global variables except that they can't be changed while the model is running. I find them better than labels for referencing columns in a table since you don't have to add them to every token, you just have to define them in the list of global macros and then no matter where you use them they will work. For example, if I define CURRENT_COLUMN as the number 4, I can use that macro anywhere in the 3D model or Process Flow (regardless of the labels on tokens) to find the 4th column of my global table by typing CURRENT_COLUMN. You don't have to use them if you don't want to, I just find them easier.

This is your previous model (sample-model-palletizing-1) with just a few modifications: palletizinganswer2.fsm This model should do everything you were looking for.

All that is changed here is that when tokens are waiting to enter Zone 2 (because the waterspider is occupied, they move through a loop that continuously updates a label I added called "Current_Backlog". The zone then allows in the token from each lane partition with the highest Current_Backlog.

0 Likes