Modelling a multi variant pull system?

All topics specific to modeling questions in Enterprise Dynamics
Dominik1982
Posts: 13
Joined: Wednesday 13 May, 2015 - 13:04

Modelling a multi variant pull system?

Post by Dominik1982 »

Hallo to everyone!

I am new to this community and experimenting with ED9 for 2 months now. The basics of handling ED9, I was able to understand and currently I have no problems to model and simulate simple processes. Nevertheless I want to model something more komplex where I really could need some help and advise.

My objective is to model a multi variant and flexible production process, based on a pull-system to simulate and hence to investigate the potential behavior of decentral steered production processes.

Please take a look at the .ppt enclosed and tell me if my enterprise can be implemented. I hope my model and thoughts are replicable. If not please let me know and I will try to clean up any misconceptions.

Pre-information:
First I want to design the single bricks/modules of the model.
Second, by putting the modules together, I want to create the model in 3 steps, starting from a simple version
and ending up in full complexity of the model I want.


I´m grateful for any help you give.

Yours Dominik
Attachments
Process.pptx
(147.24 KiB) Downloaded 299 times
SimonvdW
Posts: 47
Joined: Thursday 06 January, 2011 - 09:52

Re: Modelling a multi variant pull system?

Post by SimonvdW »

Hi Dominik,
As you correctly state simulation is usually push oriented. But of course it is possible to turn it into a pull system.

By default (=push mode) atoms try to move as fast as possible to the succeeding object. This is possible as soon as an output channel is opened (for example end of process time) and/or the succeeding object opens its input channel (for example when capacity becomes available).

In a pull model the control over opening & closing input and output should be more controlled. One can use 4D script commands for it (typically CloseInput, OpenInput, CloseOutput, OpenOutput), to completely close or open inputs and outputs and hence control the flows. These commands are typicaly used in the onentry and onexit triggers. With references to other atoms (through commands like IN, OUT or global referencng) they can control each other.

Another option is using building blocks. The KanBan Bin atom is especially designed for Pull systems. See attachment.
It is also possible to use a method with separate modules for information flow and for physical flow. An example: an order is created in a source and waits in a queue for a specific start time. Now it initiates the generation of a new object that works as a trigger for production, for example by splitting it. The original order now waits in the assembler until the associating production atom has finished its steps. On completion they can be joined (based on a comparable characteristic, eg. the order number stored on a label) and the order continues its way.

Organisation of the order of processing based on due date is something you can do for example in the queue discipline of a queue: rank orders based on minimal remaining time: Time - Due date, where Due date is in a label.

Regards, Simon
Attachments
PullModel.mod
Typical pull model
(20.47 KiB) Downloaded 292 times
Dominik1982
Posts: 13
Joined: Wednesday 13 May, 2015 - 13:04

Re: Modelling a multi variant pull system?

Post by Dominik1982 »

Hi Simon and thank you very much for your reply.

Meanwhile I have already been experimenting with the information and physical flow concept you mentioned, to realize the pull principle. Currently I am not sure if I understood it totally but your explanations draw a shaprer picture and I´m confidently looking forward to implement it in my latest model soon. Yet I am fighting with some other issues in terms of assemblies.

Regarding to the order processing you mentioned, Mr. Breitmann from Incontrolsim recommended to use a table for the order organisation. What do you think about that? Any idea how this could be done?

Thanks again for you reply and your pullmodel.

Sincerely, Dominik
SimonvdW
Posts: 47
Joined: Thursday 06 January, 2011 - 09:52

Re: Modelling a multi variant pull system?

Post by SimonvdW »

Hi Dominik,

My remark about ranking the orders was related to your question how to reorganize the process in order to meet the required delivery dates. There are several options for ordering and priorities.
In some cases simple methods are sufficient. For example when you want to arrange products in a queue based on its characteristics. The edit field Queue Discipline (by default FIFO) can be used to set the rank of a product the moment it enters the queue. This might be based on a value stored in a label. But it is also possible to define your own rule.

In general: Tables are flexible methods to store (large amounts of) data and/or to read from.
You can sort tables (command SortTable) on a column, or loop through cells to find the lowest/highest value. See the examples/help documentation about Tables and index commands (IndexMatch, IndexMin, etc).

Regards, Simon
Dominik1982
Posts: 13
Joined: Wednesday 13 May, 2015 - 13:04

Re: Modelling a multi variant pull system?

Post by Dominik1982 »

Hi!

So I went on with my "studies".

In step1 I just wanted to show that products can be smart by transporting (via labels) INformations regarding to setuptime and cycletime and that machines (servers-PC1, PC2) are smart enough to choose the right times written on the products. Further more I was able to model a make to stock process with a view different product variants, regarding to a deterministic production plan (eg. arrival list).

In step2 (assembly_v11.mod) it is getting a little bit more tricky. I want to transform the push into a pull process regarding to a deterministic production plan. I increased the number of components and added all the possible product variants (81 different variants!) into the assembler table.
My current problems are:
I want that only the channels in the ingoing warehouse (IW) are opened to set free only the blanks I need for the current product.

I know the following code is not correct anyway but I hope it visualizes what I want to do.
*****************************************
if(label[Pvariant],model)=1,
and(
openchanel(1),
openchanel(2),
openchanel(3)
openchanel(4))
*****************************************
However, if I would start coding this way it´s going to get me old to punch in this code scheme for every of the 81 variants.

The next thing is, that very product of an order should have the current order number in its atomname for identification.
And as I recognized, currently some of the containers are even pushed further though not all parts are assembled. This should not be possible. Any idea what is wrong here?

I hope someone of you, Simon or anyone else can give an advice how to go on.

Thank you very much.

Yours Dominik
Attachments
assembly_v11.mod
(90.32 KiB) Downloaded 249 times
step1.mod
(62.73 KiB) Downloaded 245 times
Dominik1982
Posts: 13
Joined: Wednesday 13 May, 2015 - 13:04

Re: Modelling a multi variant pull system?

Post by Dominik1982 »

Hello to all!

If my explenations are not totally clear please let me know and I will try to remove any ambiguity.

May someone pleas take a look at my modell(s).

Thank you.

Yours, Dominik
SimonvdW
Posts: 47
Joined: Thursday 06 January, 2011 - 09:52

Re: Modelling a multi variant pull system?

Post by SimonvdW »

Hi Dominik,

About modeling with larger numbers of data: instead of using lots of ‘lf – then – else‘ commands it is often easier to use the CASE statement. Even better is using tables. It is very flexible and reduces the amount of coding.
I attached a model 1B to demonstrate this. In the table I used several columns that are used for assigning a name or used in determining the correct output channel (SendTo).

Your second topic is about creating a pull mechanism by controlling output channels. This is a very dangerous method. And will not work the way you proposed. The (individual) channels are internally opened and closed (for example when the output conveyor is free). Controlling an output should be done with commands OpenOutput and CloseOutput. These overrule the status of the output channels.
The easiest way to perform this is in my way to create queues of the blank parts 11 to 34 (in total 12 pieces). Or are the blank parts initially all the same?
On default all outputs of the queues should be closed. As soon as an order is released by the Arrival List you open the outputs of the blank types you need. The table in the Assembler declares which parts are needed. A table can be used to define the references to all the queue atoms that must be controlled.
On exit of the queues the output must be closed again.
Furthermore, if more than one order can be processed you might need some administration on how much blanks should be released from each of the blank queues.
Hope this inspires you again.

Simon
Attachments
Table_pict.zip
(54.03 KiB) Downloaded 252 times
step1B.mod
(132.77 KiB) Downloaded 252 times
Dominik1982
Posts: 13
Joined: Wednesday 13 May, 2015 - 13:04

Re: Modelling a multi variant pull system?

Post by Dominik1982 »

Hi Simon!

First of all thank you very much for spending time on helping me.

I am going to replace one and the other "if" statement by a "case" statement. Working with tables is something I don´t fully understand by now but I will work on it and hope your "step1" modification will help.

I feared that I could be not the best way to controll the single channels and I wanted to prevent to use extra queues for each product. But regarding your advice I have no other choice as the blankparts are not all the same.
Referring to the administration you mentioned, in the case that there should be more than one order (for sure ther should be more than one) I want to combine the arrival server with a stochastic order behavior, random variants per order and random amount of ordered products. Therefore I think of a posting you did in the past where you explain how to realize stochastic order. My hopes are to mimic a volatile market. Random product numbers and variants I want to create with standardized distribution possibilities.

Step 2 is done when I was able to mimic a stochastic order behavior, the particular needed parts are released by a pull, unlimited amount of products are released, the finished products are steered through the quality check an if all that is possible without any bigger problems.

In the third and last step of my model development I want to add something like an overruling code or overruling behavior or just something what intervenes. For example, if the utilization of a Production cell server undercuts 70%, blankparts are pulled out of the warehouse to the underloaded server to produce parts out of the blanks, until the following queues reach their max. capacity. And I hope to connect the orders with delivery dates and that the overruling "code" decides which order should be done first. (The last point maybe isa little bit to unrealistic.....). I wouldnt really call this an agent, but I hope to create something similar that acts a little bit like that.

So thanks again Simon. You inspired me and I hope you can offer a bit of your time and knowledge again.

Yours Dominik
Dominik1982
Posts: 13
Joined: Wednesday 13 May, 2015 - 13:04

Re: Modelling a multi variant pull system?

Post by Dominik1982 »

Hallo again!

Step by step I am getting closer to to what I want to model.

But now I have a little problem with the following code:
The code wirtten in curved brackets works but as everyone can see it´s insufficient for my purposes. So I created a further tabel with a bill of material because I hat no idea how to reference to the BOM in the Assembler. I tried to write a code into the Arrival-List to open the output channels of the queues for each part needed, referred to the orderd product variant.
The simple one works but the other one doesn´t. Moreover,at latest when the amount of ordered products got produced, the channels need to be closed again. Ohterwise the system gets filled with blanks and parts that arenßt currently needed for the next order.


Code: Select all

{
if(Label([Pvariant], first(c)) =  1,

do(
           OpenOutput(AtomByName([ChOUT11], Model)),
           OpenOutput(AtomByName([ChOUT12], Model)),
           OpenOutput(AtomByName([ChOUT13], Model)),
           OpenOutput(AtomByName([ChOUT14], Model))
           )
           )

}


if(Label([Pvariant], first(c)) = cell(13,0,refTable_ChState,1),

case(
WhichIsTrue(
           cell(1,Label([Pvariant],Model),refTable_ChState,1)=1,
           cell(2,Label([Pvariant],Model),refTable_ChState,1)=1,
           cell(3,Label([Pvariant],Model),refTable_ChState,1)=1,
           cell(4,Label([Pvariant],Model),refTable_ChState,1)=1,
           cell(5,0,refTable_ChState,1)=1,
           cell(6,0,refTable_ChState,1)=1,
           cell(7,0,refTable_ChState,1)=1,
           cell(8,0,refTable_ChState,1)=1,
           cell(9,0,refTable_ChState,1)=1,
           cell(10,0,refTable_ChState,1)=1,
           cell(11,0,refTable_ChState,1)=1,
           cell(12,0,refTable_ChState,1)=1
 ),
           OpenOutput(AtomByName([ChOUT11], Model)),
           OpenOutput(AtomByName([ChOUT12], Model)),
           OpenOutput(AtomByName([ChOUT13], Model)),
           OpenOutput(AtomByName([ChOUT14], Model)),
           OpenOutput(AtomByName([ChOUT21], Model)),
           OpenOutput(AtomByName([ChOUT22], Model)),
           OpenOutput(AtomByName([ChOUT23], Model)),
           OpenOutput(AtomByName([ChOUT24], Model)),
           OpenOutput(AtomByName([ChOUT31], Model)),
           OpenOutput(AtomByName([ChOUT32], Model)),
           OpenOutput(AtomByName([ChOUT33], Model)),
           OpenOutput(AtomByName([ChOUT34], Model))
 )

)
Has someone an idea what to do?

Thank you very much.

Yours Dominik
Attachments
step2-4.mod
(129.76 KiB) Downloaded 235 times
Dominik1982
Posts: 13
Joined: Wednesday 13 May, 2015 - 13:04

Re: Modelling a multi variant pull system?

Post by Dominik1982 »

Hi to all!

In the last two weeks I tried and tried and tried but I didn´t get my model to do what I want.

I tried different loops, I tried tables, wrote many rows of codes but nothing seems to working.

Below you can find the last code I tried to just produce only one variant out of 81.
The code looks most promising to me but, yeah.....

Maybe someone has an advice because sooner or later I fear to get desperate or made.

What should the code do?

If an amount of a particular product variant (e.g. variant 1) is ordered, then the parts for this product variant have to be
released from the queue, in the order number. The minimum of products per variant that can be ordered ist 1, the maximum amount is 5 (by dUniform(1,5)....take a look at arrival list.

The code below "should" work for the first row in the arrival list, but it doesn´t. Can anyone help me please?


Code: Select all

if(
   and(
       Label([Pvariant], first(c)) = 1,
       content(in(2,c)) >= Label([t-curqty],Model) 
       ),

   repeat(
          Label([t-curqty],Model),
          and(
              MoveAtom(first(in(2,c)),Out(1,in(2,c))),
              MoveAtom(first(in(3,c)),Out(1,in(2,c))),
              MoveAtom(first(in(4,c)),Out(1,in(2,c))),
              MoveAtom(first(in(5,c)),Out(1,in(2,c)))
              
              ) 
          )
   )

Where I am wrong? Where I am not logic!

I am thankfull for any help.

Yours Dominik
Attachments
step2-4-test.mod
(119.47 KiB) Downloaded 254 times
Post Reply