Ok, I admit, I've never worked with assembly language before. I saw some once or twice, but that's it. My other half came up with that name for it. :-)
It's like assembly because you deal with data registers and I/O addresses directly. Math can only be done one basic operation at a time, and you have to explicitly convert a number's data type (and store the result in a different data register) before you can, say, multiply a 16-bit integer with a floating-point value, because they're stored differently and the math function has to know whether to read one data register or two, and how to interpret what it reads.
It's "visual" because a program looks like an electrical drawing instead of lines of code. You build up rungs in the ladder (the left-hand rail is "hot", the right-hand rail is "neutral", and current flows toward a coil (output) through various devices that must all be closed to allow the circuit to be complete) and each rung is a command. They can branch and have conditionals and alternate routes and all kinds of things to make more complex commands, but when it comes down to it you have one rung == one command.
Paper Trail
I'm finding PLC programming takes more paper than I'm used to. And more planning. Specifically, having a printout of the program map and I/O assignments is very handy. I could probably get by with the spreadsheet versions of those, but it's easier for me to glance over & flip through paper than scroll up and down, searching for the device I'm after. So I have to both write and type in any changes I make - I still find my paper copy useful.
Having a program map before starting seems to be absolutely required. You can't just create variables as needed - there are no variables! There are only data registers and relays, and they're identified by number. So planning ahead and allocating and identifying blocks of data registers and relays is a must if you want to save yourself headaches later on. In my case, somebody else made the program map for me, since I'd never done this before, and I've been changing it to suit my program.
When the first task is a test
The first task I was given, once I got set up in the office with a computer and the programming environment, was actually a test. I'm not sure what they were testing for exactly, but apparently it happened to the guy I was sharing an office with too.
I was handed the manufacturer-provided wiring diagram for the clarifier rake's control panel and the wiring diagram for the PLC cabinet, and was told to make the control panel work. Talk about being thrown in the deep end! I didn't even know how to read electrical drawings when they handed all that to me, and spent about a full day just trying to make sense of the rake's diagram.
Before I continue, I should probably describe the piece of equipment I was told to program. A clarifier is basically a settling pond. You pump mixed liquids and solids into it in an area called the centre feedwell, which is (surprise!) right at the centre of the clarifier and is separated from the main volume by a cylindrical wall. This is so the stuff you're pumping in doesn't disturb the settling, which happens in the entire rest of the clarifier. The solids settle to the bottom where it's pumped out with a slurry pump, and the clear liquid spills over the top edge and flows out a pipe. If you're making clear water, it's a clarifier; if the solids are what you're after it's a thickener. It's the same thing either way. The rake pushes the solids to the centre of the clarifier so they can be pumped out. It's actually a pretty straightforward machine. Turn on, turn off, lift & lower. Lift automatically if the torque gets too high, so you don't burn out the main drive or break something. Don't let it be lifted or lowered past the high and low limits.
Anyway, the control panel had all the buttons wired up to do nothing but send signals to the PLC when pressed. I had to take those input signals and send the appropriate commands to the two motors that make the rake move.
Between learning to read electrical diagrams and learning to create a PLC program, it took me about three days to get the rake programmed to the point where it just needed to be tested. I continued to work on other parts of the program before actually going north for the first time.
Once there, to my complete lack of surprise, it didn't work. I had been hoping it would, but wasn't really expecting it to. So I spent another day on it, and finally got it working. Most of the problems were my own, but some were that the "as built" wiring diagrams for the PLC cabinet had errors, like reversing the positions of the start and stop buttons. Oops...
Then, my co-workers and I had far too much fun playing with the rake, while they told me how it (didn't) work last year, how raising and lowering the rake was a hair-raising adventure due to the high and low limit signals being ignored and the raise and lower buttons being down a ladder and on the other end of the plant. They had to be quick down the ladder to avoid slamming the rake into the bottom of the clarifier.
I just found it incredibly cool that a little program that I wrote made a 30-foot diameter hunk of metal move... like I said, a big change from slinging text around! :-)