On paper it's a one-to-one conversion. It never is.

Moving a 1990s Mitsubishi FX ladder program into ABB 800xA sounds like a like-for-like swap. Here is where that breaks, and how to actually do the job.

Published 2026-06-05 5 min read

Migrations like this often get described as one-to-one. Take the old system, do the same thing in new hardware and software, hand it back behaving exactly the same. On paper it looks like a straight copy.

The example here: an old Mitsubishi FX PLC with a ladder program from the 1990s, moved into ABB 800xA and rebuilt as a control module in Function Block Diagram. Same behavior, new platform.

Two PLCs side by side on a panel backplate: on the left an aged, yellowed 1990s brick-style controller with screw terminals under hinged covers and a round programming port, on the right a clean modern modular controller with a processor module and a row of slim I/O modules on DIN rail

“One-to-one” depends on whose chair you’re in

I don’t think anyone is lying when they call it 1:1. From the customer’s chair it’s true: same buttons, same sequence, same outputs, the line runs like it always did. That’s what they pay for. From the engineer’s chair almost nothing carries over as-is. Here’s what I ran into.

The software is older than me

The original project wouldn’t open in GX Developer. It opened in GX IEC Developer, the European IEC 61131-3 branch of Mitsubishi’s tools, which grew out of the old MEDOC software from the 1990s. The project was probably written in that line from the start.

The first surprise was the hardware configuration. It’s not a separate screen. It’s written as code into blocks in the program itself, usually at the very end so you don’t have to dig through everything to change it. I found that harder to read than anything I’ve worked with. The graphical hardware editors in newer ABB and Siemens tools are just better.

Ladder and FBD don’t think the same way

Ladder is contacts and coils, current flowing left to right, a picture of a relay panel. FBD is signals flowing through blocks. One obvious rung in ladder can turn into an awkward cluster of blocks, and something clean in FBD would be a mess of rungs going back. You get the outputs to match while the structure underneath ends up nothing like the original. To prove it behaves the same you have to understand the old program much deeper than reading it top to bottom.

The parts with no equivalent

Some of what these programs lean on has no twin in 800xA. You find each piece by reading carefully and rebuild it by hand.

The DECO block. Ladder decodes a number into one of many outputs in a single instruction. 800xA has nothing like it. I ended up with MOD and DIV to split ones and tens, and ten EQ blocks against the outputs.

Jump instructions. Conditional jumps, CJ, skip whole sections of logic.

Physical adjustments in the logic. Some timer presets were tuned on the machine through potentiometers. On the FX they land in special data registers, D8030 and D8031, and the program scales them into a preset. In the new module they become parameters.

Special auxiliary relays. M8000-series system relays shape parts of the logic. M8028 switches the timebase on a block of timers.

Octal addressing. Inputs and outputs on the FX are numbered in base 8, not base 10. In this program a group of inputs, X000 to X007, was read as a number that decided how many valves should open, and the count was zero-indexed, so the value read was always one less than the number of valves. Getting that right took a full day of reading up on BCD, on how bits and bytes are stored in these older controllers, and on signed versus unsigned values. Before that the rungs didn’t make sense.

What doesn’t work: asking AI to do the whole thing

The tempting shortcut is to hand the whole ladder program to an AI and ask for a finished 800xA control module, FBD blocks drawn out and all. Don’t expect a miracle. The result looks convincing and isn’t correct, and checking it takes longer than doing the work. And before anything goes into an AI tool: a customer’s program belongs to the customer. Only use a platform your company has approved, and only after it’s cleared with the customer.

What does work

As of writing this I’m about two years into this trade, and a 1990s ladder program was completely foreign to me. So the first job was understanding it, not converting it.

AI can help with that, used the right way: as an explainer rather than a translator. On an approved platform, once the customer has cleared it, it can turn the program into a document that explains it part by part, step by step. That’s the kind of explanation that gets you through BCD, octal addressing and how memory is laid out on these controllers, and it turns something nobody has touched in decades into something you can reason about. The AI is wrong sometimes, and guesses with confidence, sometimes a lot of confidence, so always double check anything that doesn’t quite make sense.

Then paper. I printed the whole ladder program on A3 and went through it line by line with a pencil, notes and lines connecting the dots, until I understood what happened where. That’s when it actually clicked.

Then I started writing the FBD. This part is not linear. You don’t start top left and write to the end. I’d get to a point where I didn’t know how to connect something, leave it, move on, and further down find the logic that let me go back and finish it.

When the FBD was done I printed it on A3 too, put it next to the ladder, and went through both with a green marker, highlighting every section that did the same thing logically. A simulation in my head, on paper. When everything was green I moved on.

Then a real simulation. I built a simulation control module in Control Builder M with a window where I could set every input and watch every output, and ran it on the soft controller. I couldn’t simulate the old program. I didn’t know if GX Developer even could, and the original PLC was running a live process that couldn’t be stopped for testing. So the comparison stayed on paper.

Last, hardware. Getting new cabinets running always takes longer than you plan for: bus termination, firmware updates, station names, all the setup that just takes time. Once it ran I downloaded the program and could watch cycle times and memory load for real. AC 800M is a DCS controller, not a fast PLC, and this program needed to be fast, so keep an eye on task time and load from the start. Built carefully, it ran fast enough, with processor power and memory to spare.

The takeaway

One-to-one is true from the customer’s chair and fiction from the engineer’s. When a job is described that way, go hunting early for the three places it can’t be: where the two systems think differently, the functions and blocks with no equivalent, and the hardware and signals around it.


Newsletter

New articles, courses, and news — straight to your inbox

No spam, unsubscribe in one click.

We send the newsletter with Buttondown. Read our Privacy Policy.