Please refer attached model. There are 2 stages. Stage 1 consists Singleproc and Singleproc1 whicle second stage consist singleproc named "MC"
I am modelling a mix product scenario in which I have 5 products (A, B, C, D & F). The sequencing of first stage i.e. for singleproc and singleproc1 works fine. I have second stage in which I have a singleproc named "MC" inorder to process products in batches I am using a pullctrl. The sequence for MC is (100 A parts followed by 100 D parts followed by 50 B parts followed by 50 F parts followed by 200 C parts again followed by A and so on)
You can check the logic I have used in the attached model. The problem which I am facing is my part A takes more processing time on singleproc (Stage 1) then time required to get processed on singleproc named "MC" (stage 2). So there is a situation as shown in attached image that my buffer A_2 gets empty. So I introducted waituntil to confirm that there is part in buffer A_2. But the problem is whenever the method pullctrl gets executed the the fwBlockList of single proc named "MC" is already created before the execution of method. So evenif my method waits until A_2 buffer gets a part but the fwBlockLIst doesn't get updated.
Therefore I want to update my fwBlockList after waituntil is executed. How do I do it?
PS.: Please attach 10.1 ver model as I dont have ver 11
Solved! Go to Solution.
you check in your Method the first 5 rows of the blocking-list, if you are waiting until the buffer is not empty, then the buffer contains only one part; so you get the failure in the second row.
You could change your waituntil to the condition buffer.numMu > 4 to avoid this failure.
freelance simulation specialist
Thanks for the reply.
The error is not coz of buffer going below 4 level.
The 5 rows are probably the the 5 places or 5 rows of fwBlockList of singleproc named"MC" where my desired desired part (for 1 instance part A) can be stored. So my algo goes to first row then it checks whether the name matches with the desired part name. if yes then it will unblock it else it will look at the name of part in second row of fwBlockList and so on. fwBlockList is created by number of possible input it can take and here it can take 5 input from 5 respective buffers hence 5 rows in blocking-list. So my fwBlockList only contains part that are available to the singleproc or part which it can take. in this case (Part A & D) as u can see in image
The error that I faced arised due to this:
1. the singleproc named "MC" created it's fwBlockList before executing/trigerring pull ctrl. At this instance only part D is avalaible so my fwBlocklist contains only 1 row
2. After that my debugger enters to pullctrl.
3. Now if the buffer A_2 is empty the fwBlockList will only contain part named "D" which we are checking. But our desired part is part "A".
4. Now since the buffer A_2 is empty my method goes into wait mode till a part arrives in A_2.
5. once the part arrives the wait method gets over and method gets further executed.
6. At this point it creates blocktable from fwBlockList which was created before execution of method pullctrl.
7. Since part A was not available at that time. Its name was missing from fwBlockList at that instance.
8. Now Part A has arrived but still the fwBlockList isn't updated.
9. So my method checks for part A in 1st row of table. But in 1st row part D is presaent so it goes to next line.
10. Here since fwBlockList didn't get updated no new row was created in table. hence it throws and error
The solution of this error is to update fwBlockList after part A has arrived in buffer A_2. SO the new fwBlockList will contain 2 entries 1 of part D and other of part A. And since it will then find part A in blocktable there won't be any error.
Hence I need to find out how to update any singleproc's fwBlockList once the event debugger has entered into execution of method.
the pull control is called whenever a part tries to move to the station.
Because of your waituntil in the pull control you might have several instances running in parallel.
This is most certainly not what you want to have.
If you just want to have a specific sequence, you can set the attribute 'ExitLocked' to true for each buffer from which you don't want to accept parts.
So I tried keeping exitlocked for the parts which I don't want to move. So for intance as in above example I have 5 parts (A, B, C, D & F). and sequence of processing is (A = 100 > D= 100 > B = 50 > F = 50 > C = 200 > A....) so what I did was first locked the exit of D,B, C and E repectively and added a counter to count number of parts of A. when desired counter of A was achieved I executed a method which would lock exit of A and unlock exit of D and also clear counter of D. So this should go on till D reaches 100 and so on. But when I lock exit of A_2 and unlock exit of D_2 my parts don't move from thereon.
I once again tried with exitlocked but this time I succeeded.
I have attched below the model of sequencing using exitlocked and works as per my need,
Earlier I was missing to enter @.move there by getting the error as mentioned above. and I was creating different methods for different buffers thereby triggering 1 method from the other which ended in complicated loop. This time tried to experiment with a single method for all the 5 buffer and succeeded...