question

Kashif K avatar image
0 Likes"
Kashif K asked Joseph Gillespie commented

Using Process flow to load different item types on pallets

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)

FlexSim 19.1.1
process flowconveyorpalletzone partition
· 1
5 |100000

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

Kashif K avatar image Kashif K commented ·

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 0 ·

1 Answer

Joseph Gillespie avatar image
0 Likes"
Joseph Gillespie answered Joseph Gillespie commented

@Kashif K

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

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.


capture.png (9.3 KiB)
· 4
5 |100000

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

Kashif K avatar image Kashif K commented ·

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 0 ·
Joseph Gillespie avatar image Joseph Gillespie Kashif K commented ·

@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:

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:

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

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 0 ·
capture2.png (5.0 KiB)
capture3.png (2.7 KiB)
capture.png (5.9 KiB)
Kashif K avatar image Kashif K Joseph Gillespie commented ·

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 0 ·
capture.png (14.1 KiB)
Show more comments