PLC Dialects Compared: IEC 61131-3 vs Allen-Bradley vs Siemens
PLC Dialects Compared: IEC 61131-3 vs Allen-Bradley vs Siemens
One of the most confusing aspects of entering the PLC world is discovering that the same concept — a timer, a contact, an output coil — is named, addressed, and structured differently depending on which vendor's platform you are using.
IEC 61131-3 is the international standard, but Allen-Bradley (Rockwell Automation) and Siemens have their own syntactic dialects that extend or diverge from it. Understanding the mapping between them lets you transfer knowledge across platforms and read job postings that ask for "RSLogix" or "TIA Portal" experience without starting from zero.

Here is how the three dialects line up across the things you actually touch every day — instructions, addressing, software and the tag model.
The Standard: IEC 61131-3
Published by the International Electrotechnical Commission, IEC 61131-3 defines:
- Five programming languages: Ladder Diagram (LD), Structured Text (ST), Function Block Diagram (FBD), Instruction List (IL, deprecated), Sequential Function Chart (SFC).
- Standard data types:
BOOL,INT,UINT,DINT,REAL,LREAL,TIME,STRING,ARRAY,STRUCT,ENUM. - Standard function blocks:
TON,TOF,TP(timers),CTU,CTD,CTUD(counters),SR,RS(flip-flops),R_TRIG,F_TRIG(edge detectors). - Program Organisation Units (POUs):
PROGRAM,FUNCTION_BLOCK,FUNCTION.
Platforms that closely follow IEC 61131-3 include: Codesys (used by hundreds of vendors), OpenPLC, Beckhoff TwinCAT, Wago, ABB Automation Builder, and the simulator you are reading this on.
Allen-Bradley / Rockwell Automation
Rockwell's RSLogix 5000 and its successor Studio 5000 Logix Designer target the ControlLogix, CompactLogix, and Micro800 families.
Tag-Based Addressing
AB uses tag-based addressing. You create named tags (MotorRun, Conveyor1Speed, Timer1) rather than absolute memory addresses. Tags have types and can be organised into User-Defined Types (UDTs) — similar to structs.
Timer Syntax (AB)
TON
Timer: Motor_Timer
Preset: 5000 ; 5 seconds in ms
Accum: <live>
- The timer is a tag of type
TIMERwith fields.PRE,.ACC,.DN,.EN,.TT. Motor_Timer.DNis the done bit (equivalent to IECTON.Q).Motor_Timer.ENis the enable bit.
IEC equivalent:
Motor_Timer(IN := Enable, PT := T#5s);
IF Motor_Timer.Q THEN ... END_IF;
Coil Naming (AB)
| AB Instruction | IEC Equivalent | Description |
|---|---|---|
| XIC | NO Contact [ ] | Examine If Closed |
| XIO | NC Contact [/] | Examine If Open |
| OTE | Output Coil ( ) | Output Energise |
| OTL | Set Coil (S) | Output Latch |
| OTU | Reset Coil (R) | Output Unlatch |
| ONS | One-Shot (OSR) | One-shot on rising edge |
Counter Syntax (AB)
AB counters use .PRE, .ACC, .DN, .OV, .UN fields on a COUNTER typed tag. The CTU instruction examines the count input and increments .ACC.
Key Differences from IEC
- Proprietary timer/counter types instead of IEC standard function blocks.
- Array indexing uses
[n]notation (same as IEC). - AOI (Add-On Instructions) are AB's equivalent of IEC Function Blocks — reusable encapsulated logic.
- Motion and axis objects are proprietary; no direct IEC equivalent.
Siemens TIA Portal (S7-1200 / S7-1500)
Siemens' TIA Portal supports all IEC 61131-3 languages with Siemens-specific extensions and naming conventions.
Data Blocks and Variable Types
Siemens organises data into:
- %I (Input) — physical inputs:
%I0.0,%I0.1… - %Q (Output) — physical outputs:
%Q0.0… - %M (Merker/Flag) — internal memory bits:
%M10.0… - %DB (Data Block) — structured data storage:
"DB1".MotorRun - PLC tags — symbolic names mapped to absolute addresses.
IEC 61131-3 uses symbolic variables directly; Siemens adds the absolute address layer.
The same physical input or output therefore looks different in each dialect — IEC keeps it symbolic, Allen-Bradley wraps it in a named tag, and Siemens exposes the absolute address alongside the tag.
Timer Syntax (Siemens)
In TIA Portal for S7-1200/S7-1500, the IEC timer function blocks are used:
#Motor_Timer(IN := #Enable,
PT := T#5s);
IF #Motor_Timer.Q THEN
#Output := TRUE;
END_IF;
Older S7-300/S7-400 code used proprietary S_ODT (on-delay timer), S_OFFDT (off-delay timer), which have a different calling convention. Modern S7-1200/S7-1500 code can use IEC-standard timers.
Coil Naming (Siemens)
Siemens ladder uses the same contact/coil graphical symbols as IEC LD, but with Siemens-specific function block names for older platforms. TIA Portal's S7-1200/S7-1500 ladder is close to IEC standard.
| IEC | Siemens (TIA S7-1200+) | Siemens (Classic S7-300) | |---|---|---| | NO Contact | Standard | Standard | | NC Contact | Standard | Standard | | TON | IEC TON | S_ODT | | TOF | IEC TOF | S_OFFDT | | CTU | IEC CTU | S_CU (count up) | | SET coil | S coil | S coil | | RESET coil | R coil | R coil |
Organised Block Types
Siemens organises code into:
- OB (Organisation Block) — called by the operating system (OB1 = main cyclic, OB30 = time-based interrupt).
- FC (Function) — stateless subroutine (IEC:
FUNCTION). - FB (Function Block) — stateful block with instance data block (IEC:
FUNCTION_BLOCK). - DB (Data Block) — data-only (global or instance).
IEC 61131-3 uses PROGRAM, FUNCTION_BLOCK, and FUNCTION without the OB/FC/FB naming.
Side-by-Side: Motor Start/Stop Rung
IEC 61131-3 Structured Text
IF (StartPB OR MotorRun) AND NOT StopPB AND NOT Overload THEN
MotorRun := TRUE;
ELSE
MotorRun := FALSE;
END_IF;
Allen-Bradley (RSLogix/Studio 5000 Ladder)
|--[StartPB]--+--[/StopPB]--[/Overload]--( MotorRun )--|
|
+--[MotorRun]--+
(Tags: StartPB: BOOL, StopPB: BOOL, Overload: BOOL, MotorRun: BOOL)
In Allen-Bradley the contacts and coil carry named tags and XIC/XIO/OTE instruction labels rather than addresses.
Siemens TIA Portal Structured Text
IF (#StartPB OR #MotorRun) AND NOT #StopPB AND NOT #Overload THEN
#MotorRun := TRUE;
ELSE
#MotorRun := FALSE;
END_IF;
Siemens uses # prefix for local variables inside a block (FC/FB). Global tags use the tag name directly or "tagname" notation in some contexts.
The exact same logic in Siemens ladder uses absolute %I and %Q addresses on the contacts and coil — the rung structure is identical, only the labels change.
It is worth pausing on what those two rungs share: the structure — a start contact, normally-closed stop and overload contacts, and the output coil — is byte-for-byte the same logic. Only the addressing and instruction labels differ.
Which Dialect to Learn for Work
| Region / Industry | Most Common Dialect | |---|---| | North America, automotive, food & bev | Allen-Bradley | | Europe, machine building | Siemens | | Australia, industrial OEM | Mix of AB and Siemens | | Academic / open-source | IEC 61131-3 (Codesys, OpenPLC) | | Process industries globally | Mix; Siemens strong in petrochemical |
The most transferable investment is IEC 61131-3 fundamentals. Once you understand TON, CTU, ladder contacts and coils in the IEC context, translating to AB or Siemens is a naming exercise, not a conceptual one.
These are the concepts that survive the move from one vendor to another unchanged.
If you are deciding where to start, let your target region or employer drive the choice — and default to IEC fundamentals when you have no target yet.
See How to Become a PLC Programmer: A Self-Teaching Roadmap for a structured learning path, and try the Allen-Bradley simulator dialect or the Siemens simulator dialect to practice vendor-specific syntax.
Practice this yourself in the simulator — 3 scenarios free. No install. No credit card. Switch between IEC, Allen-Bradley, and Siemens dialects on any scenario.