PLC addressing explained
Every input terminal, output terminal and internal bit in a PLC has an address. The idea is the same in every brand, but the format is not: Siemens counts in bytes and bits, Mitsubishi in octal, TOYOPUC in hexadecimal, and modern Allen-Bradley uses tag names.
What an address is
An address tells the program which signal a contact or coil refers to. A push button wired to the first input terminal might be I0.0 on Siemens, X0 on Mitsubishi or X000 on TOYOPUC. When you program a normally open contact with that address, the contact closes when the button is pressed.
Addresses fall into a few areas in every PLC:
- Inputs: field signals coming in (buttons, sensors).
- Outputs: signals going out (contactor coils, valves, lamps).
- Internal bits: memory relays used inside the program, with no terminal.
- Timers and counters.
- Data registers / words: numbers such as setpoints and counts.
- System (special) bits: always-ON, first-scan, clock pulses and error flags.
Comparison table
| Area | Siemens S7 | Mitsubishi FX | Allen-Bradley (SLC/MicroLogix) | TOYOPUC |
|---|---|---|---|---|
| Input | I0.0 | X0 | I:0/0 | X000 |
| Output | Q0.0 | Y0 | O:0/0 | Y000 |
| Internal bit | M0.0 | M0 | B3:0/0 | M000 |
| Timer | T0 / IEC timer | T0 | T4:0 | T000 |
| Counter | C0 / IEC counter | C0 | C5:0 | C000 |
| Numbering | byte.bit (bits 0–7) | octal (X0–X7, X10…) | word/bit (bits 0–15) | hexadecimal (X000–X00F…) |
Siemens: byte.bit
Siemens groups signals into bytes of 8 bits. I0.0 is byte 0, bit 0. After I0.7 comes I1.0, not I0.8. Outputs are Q (A in the German mnemonics, from Ausgang), memory bits are M, and a whole byte or word can be read as IB0, IW0 or MW10. In TIA Portal you usually give each address a tag name such as "Start_PB".
Mitsubishi: octal numbering
Mitsubishi FX and many MELSEC PLCs number inputs and outputs in octal: X0–X7, then X10–X17. There is no X8 or X9. Internal relays M, timers T, counters C and data registers D are decimal. Special relays start at M8000 on FX (M8000 = always ON while running, M8002 = first scan pulse). The iQ-R and Q series use hexadecimal X/Y numbers instead.
Allen-Bradley: file addresses and tags
Older SLC 500 and MicroLogix PLCs use file-based addresses: I:0/0 is input slot 0, bit 0; O:0/0 the first output; B3:0/0 a bit in binary file 3; T4:0 a timer in file 4 with .DN, .TT and .EN bits. ControlLogix and CompactLogix use tags: the hardware address looks like Local:1:I.Data.0 and you alias it to a readable tag name such as Start_PB.
TOYOPUC: hexadecimal
JTEKT TOYOPUC numbers bits in hexadecimal: X000–X00F, then X010. Besides X, Y, M, T and C it has K (keep relays), L (link relays), V (special relays such as the always-ON and clock bits) and P (edge relays used by rise/fall differential instructions).
Remote I/O addresses
When you add remote I/O stations over a network, their points get addresses that continue after the PLC's own I/O. On a TOYOPUC with X000–X007 on the CPU, the first 8-point station might be X008–X00F, the next X010–X017. On Siemens the station is assigned its own byte, for example I2.0–I2.7. Always check the I/O map in the configuration software.
Tips
- Write the address and a short comment on every wire label and in the program (device comments).
- Never use the same output address in two coils (a double coil); only the last one would win.
- Keep an I/O list: terminal, address, device tag and description.
In the PLC Sim Lab Playground you can switch the brand and watch every address in your program change format automatically.
Watch it in the video tutorial
Starts at 1:25: the PLC terminals: supply, inputs I0.0-I0.7 and outputs Q0.0-Q0.7. Open on YouTube →
Try it yourself. Wire sensors, contactors and a PLC, write ladder logic and press RUN in the free PLC Sim Lab Playground. Nothing to install.
Open the Playground →Guided lessons →