Part rejection down line

I looked at triggering a FFL with PE2 and triggering a FFU with PE3 but I thought you would need to specify an unload address and if that is true, how would it be able to handle any number of parts between the two PE? Under normal conditions this would work or it may work all the time and I am just the idiot behind the keyboard.
If you know the maximum number of parts possible between the two PE's, that is the length of the data file required for the FIFO (add a couple for safety). The FFL & FFU work as a pair - specify the same R6:x control address & length, and the same data file address (likely #Nx:y). The instructions keep track of where to load to and unload from. The only other addresses you need to provide are where to load from and unload to. There is no shifting required.
 
Hi Bob,
Get a look at this and see if it makes sense to you. The logic you posted earlier was full of bugs and problems. You would have written alot of wrong data at wrong times, and filled your holding registers with either all good or all bad data, depending on what happened. A little difficult to explain at the moment.
I can say 1 thing, indirect addressing I think is the key in your case, unless you want to type out a huge amount of rungs.
Also resetting counts based on cycle start might not be adviseable, if there were parts on the conveyor when stopped what would happen? To everyone else helping, been a while since I have done code like this, let me know of any bugs you see with it. I am always welcome to constructive criticism, makes me look harder the next time.
Best of luck Bob, feel free to PM me if you have any questions.
 
I do this all the time with bit shifts and it's very easy to do. Use bit shifts for your index and use PE1 to trigger the camera. When you get a reject signal from the camera and input from PE3 and a shifted bit, THEN reject the part. You only need to track the reject info not the "good" info.
 
Seems to me you should load the FIFO with good/bad status as the lid passes PE1 and unload as it passes PE3. PE2 & PE4 seem superfluous to the system as you've described it. Unless there is only ever
one lid between PE1 & PE2, then you should load with PE2.
 
Bench Tested

Thanks again to all have replied.

Terry was correct that indirect addressing isn't that difficult. I can't say I fully understand all that is going on but I think I am getting the general Idea. It is so much cleaner then what I was going to try.

Thanks,
Bob
 
Bob...

The easiest way to do this is with an "INDEX". The basic scheme is as follows:

1. Create a normal FIFO Register
You expect to have only 8-lids in the area so make your register 10-words long.
For example, Begin at V101, Size = 10-words
Register = V101 through V110

2. Dedicate one V-mem location for holding the Index Value.
V100, for example. Set the initial value in V100 to "10".
In some situations, you might want to clear the system and restart. In that case, you will need to reset V100 to "10".

3. The register is loaded by using the COPY, MOVE-WORD or whatever function you have that allows the use of an "INDEX". V100 is the base address (even though it is outside of the register). Loading is performed relative to the base address. After loading an evaluation, decrement the Index value (V100).

4. Unload the register by simply turning ON the shift-bit for one-scan. After shifting the register, increment the Index value (V100).


Let's say that your evaluation is GOOD = "0" and NO-GOOD = "1".

When an evaluation occurs, Do Load Routine...

Begin Load Routine:

If the evaluation = "0" then skip to Label-1,
Else,... evaluation = "1", so, do next line.

Write the evaluation to V100 with INDEX=V100. (Move on to DEC Instruction).

(Label-1)

DEC V100 or V100 = V100 - 1 (SUB)

End Load Routine:


.
If the evaluation is "0", then the routine skips to Label-1 and the Index value (V100) is decremented. End of routine.

If the evaluation is a "1", then the routine copies the evaluation to the current location, identified as V100 with the Index specified in V100 (If V100="10", then destination is V110). The routine then executes the DEC Instruction (or SUB Instruction).

Done with Load Routine.

When a lid arrives at the Ejection Station (PE just ON), Do Unload Routine...

Begin Unload Routine:

If V110 = "0", then skip to Label-2,
Else,... V110 = "1", so, do next line.

Initiate Eject Routine (Set or Latch a bit to exercise the Eject Routine).

(Label-2)

Shift the Register (turn ON "Shift-Reg" bit for one scan).
INC V100 or V100 = V100 + 1 (ADD)

End Unload Routine:


.
If V110 has a "0", then the lid is GOOD, do not eject! Skip to Label-2 and INC the Index value AND Shift the Register.

If V110 has a "1", then the lid is NO-GOOD, eject! Initiate the Eject Routine and then go to the next line. Shift the Register and INC the Index value.

Done with Unload Routine.

If at any time you find that the Index Value is "2", you probably have a jam of some kind. You can use that info to stop the line, set an alarm... whatever.

Happy Sailing!
 
Terry,

I failed to thank you for your efforts. I had steaks on the grill and the NASCAR #8 (Bud) was tasting good.
Again, thank you and I didn’t get to test as I had planned. I expect to be testing the system tomorrow.

Thanks,
Bob O.
 
Update

Well,

Does a faulted PLC for indexed addresses count as progress? If so, I have made some progress. I had other issues with my laptop and an Ethernet switch but that’s beside the point. I should be done on Friday since I scheduled the machine down on 1st shift. Once I am done whether good or bad I will let you know.

Thanks,
Bob O.

PS What the He*& are you doing up so early in the morning? I thought I got up early.
 
Terry,

How can something so freaking simple make me feel so flipping STUPID. I know I am not the sharpest tool in the shed but Dam I have to be causing my own problems on this. I haven't been back to ask because I should be able to get this. It has to be something simple and basic that I am missing.

Little Bobby bouncing around in the back of the sh*&t bus.
 
Ok..

I am really stuck.
In jog mode if I place parts in the machine in the following order:
Bad1 Good1 Bad2....I eject all.
Good1 Bad1 Good2...I eject Good1 Bad1 and keep Good2
Good1 Good2 Good3...I don't eject any

It appears if I have a good part being followed by a bad one I eject both and I don't understand. Any help is worth a lot of food and beverage.

Thanks,
Bob
 
I'm sorry that I haven't been closely following this thread. In rung 12 you may set 'Failed Lid Eject' as soon as the PE comes on but the previous rung (11) doesn't move the index into the Data Table until after a timed debounce. Therefore you are making the decision on 2 different items, the ones pointed to before and after the debounce time. add a 'DN' contact of T4:18 into rung 12 to delay the setting of 'Failed Lid Eject'
 

Similar Topics

Hello, I am still new to PLC programming and I just got this job two year out of school so I don’t remember much. I was given a task were I have...
Replies
1
Views
171
Good morning crew! Ok my logic works but I am missing something. When the start button is pushed it should like the red light for 4sec then shut...
Replies
13
Views
424
Hello: I need to buy one end-cap which was not provided by an ex-Rockwell distributor here. Since I do not know the part number I can't find it...
Replies
24
Views
6,493
For a thermoset molder I am looking for a vision system that can monitor part removal from a mold. The mold temps can range anywhere from 300 to...
Replies
4
Views
1,660
Long story short, I am creating a display to display an array of Strings from PLC [topic]VarStrA_RPHD.Desc[VarStrB] totally 100 strings...
Replies
1
Views
1,405
Back
Top Bottom