I would like to implement the following Kanban-System in my simulation.
I looked into the Kanban-Tools from Plant Simulation, but I'm not so sure about them as I can't see their codes.
The logic basically is that when ParallelProc 1 pulls MUs from the supermarket, kanbans cards tell the transporter 3 ( respectively a buffer to simplify it) to pull the same amount of MUs from the supermarket 2.
Does anyone have any ideas to help me to get started?
Thank you, I looked into it.
I think I partly got it and can make use of it in my case, namely using a similar code in the exit control of the supermarket/buffer to create kanban cards. It should have the same effect as if kanban cards get triggered by the pull control of SingleProc 1, shouldn't it?
However, I have a couple of questions to see if I understood your simulation correctly:
1.)How does the table cl look like? Do you get the information "partName" from there or where does it come from? (c.p. code of the "init" method)
2.)Source.OnExit (see annotations in the code)
is part:string; found:boolean; bin:object; cl:table; do cl.create; finalStorage.contentsList(cl);
1.) Do you create Kanban orders based on the table sequence?
--create KANBAN orders sequNumber:=sequNumber+1; part:=sequence[1,sequNumber];
2.) Once you created an order (source --> drain), do you want to check for the part in your storage first? Thus,
if you find it a Kanban card gets removed from the bin and moved to the kanbanBuffer?
What if I don't want to move the bin/part, but would like to let the next SingleProc pull that part instead?
--look for the part in the bins in the finalStorage cl.setCursor(1,1); found:=cl.findAttr("partName",part); if found then bin:=cl[cl.cursorX,1]; --remove the KANBAN bin.pe(1,1).cont.move(kanbanBuffer); --move the bin to the drain bin.move(PartDrain); --update the inventory inventory[1,part]:=inventory[1,part]-1; else debug; end; end;
My problem is that I don't want to move/push the bin, but let the next SingleProc in line pull the bin/MU.
Would you be son kind to help me with that?
the easiest way in this case would be to create one MU on the singleProc at the sart of the simulation (init-method); you should also create a certain fill-level in the buffers.
You can use the exitcontrol rear to pull the next part from the buffer. Here you can also separate the Kanban from the part.
Unfortunately, I get an error each time I try to implement your example of the Kanban system in my model.
The example works fine though.
I use Plant Simulation version 12 (research license).
Do you have any idea why it isn't working?
I could have thought of that. Thank you.
Nevertheless, I run into a new problem, because I also use a pull-control.
At first, everything works as it's supposed to be. But after the first parts were pulled and moved to the Kanban_Puffer, an error occurs due to the "Bearbeitung" pulling another MU.
The problem could also occur because when the Kanban is removed in the exit control, it tries to do it at the same bin every time (*.BEs.bin:2)
I hope it makes sense what I tried to explain. However, I also attached the model.
your init-method is wrong, the bins in the production-buffer are empty
try this as init-method
is i,k:integer; bin,part:object; kanban:object; do --create filled bins in the finalStorage --reserve the place 1,1 for the kanban card --> pe for i:=1 to initialInventory.yDim loop --create Bins for k:=1 to initialInventory[1,i] loop bin:=.Bes.bin.create(Supermarkt_Bearbeitung); bin.xDim:=data[4,initialInventory[0,i]]+1; bin.partName:=initialInventory[0,i]; --first create the kanbancard kanban:=.BEs.Kanban.create(bin); kanban.partName:=initialInventory[0,i]; kanban.quantity:=data[4,initialInventory[0,i]]; while bin.full=false loop .BEs.extendPath(initialInventory[0,i]).create(bin); end; bin:=.Bes.bin.create(Supermarkt_Montage); bin.xDim:=data[4,initialInventory[0,i]]+1; bin.partName:=initialInventory[0,i]; --first create the kanbancard kanban:=.BEs.Kanban.create(bin); kanban.partName:=initialInventory[0,i]; kanban.quantity:=data[4,initialInventory[0,i]]; while bin.full=false loop .BEs.extendPath(initialInventory[0,i]).create(bin); end; next; --actualize the inventory table of the warehouse Bestand[1,initialInventory[0,i]]:=initialInventory[1,i]; next; end;
in your exit-control (rear) Supermarkt-montage you need only to remove the kanban-cards from the bins:
to use a pull control in bearbeitung is absolutely wrong. The production should be triggered by the kanban cards in kanban-buffer2 (no cards, no production!!). If there is a kanban card, wait for free capacity, move one bin in direction bearbeitung; you need to change in this case the kanban cards: send the kanban card from the bin to Kanban_buffer1 and move the card from Kanban_puffer2 to the bin (you need it later again). All this you should do in the exit control of kanban_buffer2 (so you dont need an exit control in supermarkt bearbeitung).