Ron-
Your description matches what the code will try and do. However, your issue highlights a basic physical design problem with the system. The item model (N14) is incremented based on time. This works fine if the machine speed can never change. However, if something causes the machine speed to change all the N14 references will be wrong.
We'll use a specific example, the second reject conveyor. In rung 59, N14:24 is compared to 2. The 2, I presume, means the item should be sent to the second reject conveyor. Because the values in N14 are bumped every 100 milliseconds, we assume that an item that was inserted on the conveyor 2.4 seconds ago with a value of 2 is now at the second reject conveyor. If the speed of the conveyor is still the original design speed this is all fine and good. If not, when the value of 2 DOES show up in N14:24 (it will show up there in 2.4 seconds no matter how fast the conveyor is going) it may not correcspond with the desired position of the item on the conveyor, causing a misfeed.
Additionally, it appears that the program detects if an item is in the area of the rejects and only evaluates the item model if an item is detected. It is possible that the item won't set the zone latch until after the item has passed the zone in the model. In this case nothing will happen at all.
Ideally the model would be incremented by something that it more closely tied to physical conveyor travel; something like a prox or encoder. However, this won't help if the item is slipping on the conveyor.
Keith