I took a PLC programming class in college. Complete with instructor, books and slc500's to practice on. To be honest, it didn't teach me a whole lot. Even though the instructor was very knowledgeable and we had lots of training tools, there just wasn't enough time to dig in and practice the way you need to, in order to get a good grasp of the subject.
What helped me more than anything, was getting a used plc off of ebay and building my own control panel with lights, switches, buttons, etc. and then getting the software for the plc and programming it myself. Practice really is the best teacher. I would write all sorts of nonsense programs, making this light blink "x" number of times, then turn off for so long, then back on, etc. etc.
The point was to make myself think about what I was trying to do and then using the software to make it happen. Lots of trial and error, lots of mistakes, but then it starts to get easier and easier. And, if you really get stuck, you can always come here and ask for help.
Now by plcs.net standards i'm a complete rookie when it comes to plc programming, but I do know enough to tackle most small projects without fear.
Just my 2 cents.
Tom