Open Modicon code and you'll see addresses like %I0.2.3 β and they're not random. A located variable is pinned to a physical channel by its topological address: which rack, which module, which channel. Unlocated variables live wherever the CPU puts them. And the %MW state RAM doubles as the Modbus map. Click the rack to decode it.
This is rack 0 of an M580 station. Click any input or output channel β the panel below decodes its topological address into rack Β· module Β· channel, and shows the symbol a located variable gives it. Notice you address the position, not a memory cell: move the module to another slot and the address changes with it.
The format: %I (input) / %Q (output), then rack.module.channel. So %I0.2.3 = rack 0, the module in slot 2, channel 3. Give it a symbol like StartPB in the data editor and your logic reads the name β but the name is located, bolted to that physical position.
Every variable is one or the other. Toggle it and watch what the address field does.
Rule of thumb: located for anything wired to the field (it must map to a real terminal) and for data you expose over Modbus. Unlocated for internal logic β let the CPU manage the memory and you'll never fight an address conflict.
Here's the Modicon trick a SCADA integrator must know: the %MW state-RAM words are directly the Modbus holding registers. %MW100 is register 400101. Locate a variable at a %MW and you've published it to any Modbus master β no extra config. Same memory, two names.
| Control Expert variable | State RAM | Modbus register | value |
|---|---|---|---|
| TankLevel : INT | %MW100 | 400101 | 742 |
| PumpSpeed : INT | %MW101 | 400102 | 1480 |
| Setpoint : INT | %MW102 | 400103 | 800 |
| RunCmd : EBOOL | %M20 | 000021 (coil) | 1 |
This is why Modicon is the SCADA workhorse: expose a value by parking it in %MW, and the whole Modbus world can read it. (More in Track 06 Β· Modbus.)
A drawing references %Q0.4.1. What does it point to?