question

JUanGarcia avatar image
0 Likes"
JUanGarcia asked Jeanette F commented

DDMRP Problem

We are trying to simulate a DDMRP case with FlexSim, we have some problems. First of all we want the sink to take the product types at the time and quantity that is stablish in the Global Table called "Demand". Then we want to make the queu to ask the procesor called "Solder Paste" to process a number of boxes when the queu arrives to a number of boxes establish. Then, each references in the queu will be different, but if you do an example of any quantity and time will be okay, we will change them.

We will be grateful if you can help us.

DDMRP Question.fsm

FlexSim 22.1.3
global tablepull strategyddmrp
ddmrp-question.fsm (71.4 KiB)
· 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.

Jeanette F avatar image Jeanette F ♦♦ commented ·

Hello @JUanGarcia, Could you elaborate what the column and row header and value in the cells mean? I am assuming the row header is the time that the sink is to accept items, the column header is the type of item to receive, and the cell is the quantity to receive. Will the queues have items pile up in them and then at the specified time a specified amount will be pulled from the queues and moved to the sink?


For your sentences "Then we want to make the queu to ask the procesor called "Solder Paste" to process a number of boxes when the queu arrives to a number of boxes establish. Then, each references in the queue will be different, but if you do an example of any quantity and time will be okay, we will change them. "

Could you elaborate what queues and such you are referencing? I do not understand what you are trying to accomplish and what you question is.


2 Likes 2 ·
JUanGarcia avatar image JUanGarcia Jeanette F ♦♦ commented ·

Referenig to your first question, that is exactly what the column and row header and value in the cells means and what we want to do, but it doesn´t work.

Refering to the second question, in the queus that are at the final of the model (qReference1, qReference2, qReference3...) they have a different number of boxes stored in each qReference, for example when in qReference1 the number of boxes is under 174, that queu has to "ask" the processor called "Solder Paste" to produce 68 boxes that will go to that qReference. The same with the other qReferences but with different numbers.

1 Like 1 ·
Jeanette F avatar image Jeanette F ♦♦ commented ·

Hi @JUanGarcia, was Kavika F's answer helpful? If so, please click the "Accept" button at the bottom of their answer. Or if you still have questions, add a comment and we'll continue the conversation.

If we haven't heard back from you within 3 business days we'll auto-accept an answer, but you can always unaccept and comment back to reopen your question.

0 Likes 0 ·

1 Answer

Kavika F avatar image
2 Likes"
Kavika F answered Joerg Vogel commented

Hey @JUanGarcia, I'll see if I can help here.

1) The Sink: For your sink to save it's values to a table, you need to provide the "Increment" section with a treenode. I just made a Global Table called "Sink Types" to store values for simplicity:

1674250916488.png

As for your Demand table, you can have a Process Flow that takes care of it.
1674252928316.png

Here's an example. You have two sources - one spawns a token when an Item enters a qReference queue and other that spawns tokens based on your Demand schedule. So you'll have nearly 14500 tokens come from the left Source but only about 3500 tokens come out of the right Source. They'll push those tokens to a list. On the sink, you can have a Pull Strategy to only pull items that are found on that list.

1674253244412.png

2) The Processor: For your second question, it sounds like you want to have an Event-Trigger that opens and closes the Solder Paste port based on a queue's quantity. Based on your OnEntry triggers in your Solder Paste Processor, it looks like you want to do this based on the quantities in the qReference Queues.

You can write a script that checks the queues to see if they're past a certain amount. For example:

/**Custom Code*/
string nameStart = "qReference";
int pastMax = 0;
Table maximums = Table("Maximums");
for (int i = 1; i <= 14; i++) {
  string queueName = nameStart + i;
  int currentAmount = Model.find(queueName).subnodes.length;
  if (currentAmount > maximums[i][1]) {
    pastMax = 1;
    break;
  }
}
return pastMax;

This will look at each of the queues and see if any of their current amounts is greater than a maximum set in a Global Table. You can use this as the condition in an OnEntry trigger for the Solder Paste processor:

1674255086461.png

Then you can have somewhere else a trigger that opens the input with the same condition but negative.


1674250916488.png (5.4 KiB)
1674252928316.png (19.2 KiB)
1674253244412.png (7.9 KiB)
1674255086461.png (7.9 KiB)
5 |100000

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