8 PLC Dialects Compared: IEC, AB, Siemens, Mitsubishi, Omron, Delta, Keyence, Panasonic
8 PLC Dialects Compared: IEC, AB, Siemens, Mitsubishi, Omron, Delta, Keyence, Panasonic
Every PLC vendor writes their programming language specification slightly differently. The underlying logic is identical — a normally-open contact is a normally-open contact — but the syntax, addressing conventions, and toolchain vary by vendor. Understanding the key differences means you can move between platforms without rebuilding your mental model from scratch.
This guide compares the 8 dialects supported in the simulator with the same motor start/stop program in each.

Before we drill into each dialect, here is the high-level map: which vendor uses which programming software, and which dialect family that software belongs to.
The instructions themselves also rename the same handful of operations. This table lines up the normally-open contact, normally-closed contact, output coil, timers and edge detection across the major dialects.
Finally, the part that trips up everyone switching platforms — addressing. The same physical input is %I0.0 in IEC, I:0/0 on an Allen-Bradley SLC 500, and X0 on a Mitsubishi.
The Example Program
Motor start/stop with seal-in. Conditions: Start_PB (normally-open), Stop_PB (normally-closed), OL_Contact (normally-closed). Output: Motor_Run. Seal-in: Motor_Run latches via parallel contact.
1. IEC 61131-3
Environments: CODESYS, Beckhoff TwinCAT, Schneider Unity, many OEMs
Addressing: Tag-based (named variables)
Market: European machinery, OEM platforms, anything CODESYS-based
(* Ladder Diagram — IEC 61131-3 *)
(* Rung 1: Start/Stop with seal-in *)
IF (Start_PB OR Motor_Run) AND Stop_PB AND OL_Contact THEN
Motor_Run := TRUE;
ELSE
Motor_Run := FALSE;
END_IF;
In Structured Text (the IEC text alternative to ladder), the logic is explicit and readable. The same logic as ladder but textual. Note: Stop_PB here is TRUE when the NC button is not pressed — the wiring determines the logic level, not the variable name.
2. Allen-Bradley (Rockwell)
Environments: Studio 5000 Logix Designer, RSLogix 500
Addressing: Tag-based (Logix); register-based on legacy SLC/PLC-5
Market: North America (dominant in automotive, food & beverage, discrete manufacturing)
;Allen-Bradley Logix — Ladder mnemonics
;Rung 1
XIC Start_PB
XIC OL_Contact ;Normally-closed in field → XIC passes when NC not pressed
XIO Stop_PB ;XIO — examine if open — used for NC stop button logic
OTE Motor_Run
;Rung 2 — seal-in
XIC Motor_Run
OTE Motor_Run ;Parallel path merged in Logix into rung 1 via branching
Drawn as a rung, the same logic uses Allen-Bradley's named tags — no register map required in Logix.
3. Siemens
Environments: TIA Portal (S7-1200/1500), STEP 7 Classic (S7-300/400)
Addressing: Symbolic tags in TIA Portal; register-based in STEP 7 Classic
Market: Europe (dominant in Germany and broader EU manufacturing), Southeast Asia
//Siemens STL — Motor Start/Stop
NETWORK 1
A "Start_PB" //AND — Start button
O "Motor_Run" //OR — seal-in
AN "Stop_PB" //AND NOT — Stop button (NC wired)
AN "OL_Contact" //AND NOT — Overload (NC wired in field)
= "Motor_Run" //Assignment
The identical rung in Siemens TIA Portal uses symbolic tags backed by %I / %Q addresses — note how only the addressing notation changes, not the logic.
4. Mitsubishi
Environments: GX Works 2, GX Works 3
Addressing: Device-based (X = inputs, Y = outputs, M = internal relays, D = data registers)
Market: Japan, South-East Asia (dominant in electronics, automotive supply chain)
(*Mitsubishi GX Works — Ladder mnemonics*)
LD X0 ;Start_PB (normally-open)
OR Y0 ;Motor_Run seal-in
ANI X1 ;Stop_PB (ANI = AND Inverse, for NC logic)
ANI X2 ;OL_Contact (normally-closed in field)
OUT Y0 ;Motor_Run output
Device addresses (X0, X1, X2, Y0) map directly to physical I/O terminals. You must maintain a separate comment or I/O table to track what each address means.
5. Omron
Environments: CX-Programmer (legacy), Sysmac Studio (NX/NJ series)
Addressing: CIO (Core I/O) and Work bit areas; CX-Programmer uses bit notation
Market: Packaging, pharmaceutical, electronics assembly globally
(*Omron CX-Programmer — Ladder mnemonics*)
LD 0.00 ;Start_PB (CIO channel 0, bit 0)
OR 100.00 ;Motor_Run seal-in (Work bit W100.00)
ANDNOT 0.01 ;Stop_PB (NC wired)
ANDNOT 0.02 ;OL_Contact (NC wired)
OUT 100.00 ;Motor_Run
Sysmac Studio (NX/NJ) uses IEC-compatible tag-based addressing, making it closer to CODESYS. CX-Programmer uses the older register-based notation shown above.
6. Delta
Environments: ISPSoft, DIADesigner
Addressing: Device-based (X, Y, M, D — similar to Mitsubishi convention)
Market: HVAC, solar, water treatment, small-machine automation in Asia and developing markets
(*Delta ISPSoft — Ladder mnemonics*)
LD X0.0 ;Start_PB
OR Y0.0 ;Motor_Run seal-in
ANI X0.1 ;Stop_PB (normally-closed)
ANI X0.2 ;OL_Contact
OUT Y0.0 ;Motor_Run
Delta's syntax closely resembles Mitsubishi GX Works. The dotted notation (X0.0 = channel 0, bit 0) is a minor but important syntactic difference.
7. Keyence
Environments: KV Studio
Addressing: Relay notation (R for internal relays, CR for control relays)
Market: Semiconductor manufacturing, precision assembly, electronics
(*Keyence KV Studio — Ladder mnemonics*)
LD R0 ;Start_PB
OR R100 ;Motor_Run seal-in (internal relay R100)
ANDB R1 ;Stop_PB (ANDB = AND inverted bit)
ANDB R2 ;OL_Contact
OUT R100 ;Motor_Run
Keyence uses its own relay register notation (R) rather than the X/Y system. ANDB is Keyence's normally-closed contact instruction (read: "AND bit inverted").
8. Panasonic
Environments: FPWIN Pro7, FPWIN GR
Addressing: Device-based (X for inputs, Y for outputs, R for internal relays)
Market: Japanese manufacturing, automotive supply chain, general machinery in Asia
(*Panasonic FPWIN Pro7 — Ladder mnemonics*)
LD X0 ;Start_PB
OR Y0 ;Motor_Run seal-in
AN X1 ;Stop_PB (AN = AND NOT for NC logic)
AN X2 ;OL_Contact
OT Y0 ;Motor_Run (OT = Output)
Panasonic uses OT (output) rather than OUT, and AN rather than ANI for AND NOT. The underlying logic is identical to Mitsubishi and Delta.
Summary Table
| Dialect | Normally-open contact | Normally-closed contact | Standard output | Seal-in technique |
|---|---|---|---|---|
| IEC 61131-3 | [[ ]] / IF | [[/]] / NOT | OT / := | Parallel branch |
| Allen-Bradley | XIC | XIO | OTE | Parallel branch |
| Siemens STL | A | AN | = | O (OR) |
| Mitsubishi | LD | LDI/ANI | OUT | OR |
| Omron CX-P | LD | ANDNOT | OUT | OR |
| Delta | LD | ANI | OUT | OR |
| Keyence | LD | ANDB | OUT | OR |
| Panasonic | LD | AN | OT | OR |
The similarities between Mitsubishi, Delta, and Panasonic are not a coincidence — they all descend from the same design lineage of device-based addressing systems. Omron and Keyence use their own register notations but follow similar instruction-list structures.
That lineage splits the dialects into two camps: tag-based addressing (portable, named variables) versus device-based addressing (fixed X/Y/M registers). Some platforms support both.
The trade-off matters when you choose what to learn. Programming to the IEC 61131-3 standard buys you portability across CODESYS-based OEMs; a vendor-specific dialect ties you to one toolchain but matches the plant you actually work in.
Which Dialect Should You Learn First?
- North American manufacturing target → Allen-Bradley (Rockwell)
- European manufacturing target → Siemens (TIA Portal) or IEC 61131-3
- Japanese / Asia-Pacific target → Mitsubishi or Omron
- Flexible / unknown → IEC 61131-3 (the international standard; concepts transfer to all others)
Whichever you pick first, most of what you learn carries over. The instruction names and addresses change, but the underlying ladder logic concepts are the same on every platform.
For the fastest cross-dialect learning, try the dialect comparison tool — it renders the same program in all 8 dialects side by side. The features/dialects page has more detail on each platform's market position and addressing scheme.
See all 8 dialects in the simulator — switch with one click. Write a program in IEC and instantly see how it looks in Allen-Bradley, Siemens, Mitsubishi, and 4 more.