Overview
When an offline TIA Portal project arrives with I/Q addresses already assigned to local and remote IO, you often need to renumber modules to match your naming convention, hardware layout, plant zone grouping, or commissioning order. TIA Portal's built-in duplicate-address safety prompt is designed to prevent runtime IO conflicts, but it becomes a productivity barrier during bulk renumbering of mature projects. This reference describes field-proven strategies for managing I/Q addresses efficiently, including the "hole method," tag-table renumbering, the high-anchor technique, and bulk export/import workflows. Examples target TIA Portal V16 through V20 on S7-1200 and S7-1500 CPUs with both PROFINET and PROFIBUS remote IO.
For background on how the device overview displays addresses, see the official Siemens documentation for Addressing modules (S7-1200) and Addressing modules (S7-1500). The S7-1500 documentation also describes the hardware identifier (HW ID) concept, which is assigned automatically and is used by the program to address and identify the module.
Prerequisites
- TIA Portal V16, V17, V18, V19, or V20 installed and licensed
- Project containing at least one S7-1200 or S7-1500 CPU
- Local IO modules (SM, SB, BB) and/or remote IO (ET200SP, ET200MP, ET200S, etc.) configured
- Project file (.ap16 / .ap17 / .ap18 / .ap19 / .ap20) with full read/write access
- Microsoft Excel (recommended) for bulk address list manipulation
- Working offline; the duplicate-address workflow is most reliable in offline mode
- Optional: SIMATIC Automation Tool or TIA Portal Openness API for scripted renumbering
Understanding I/Q Address Assignment in TIA Portal
In the device view, the device overview table shows the I address and Q address columns for every module in the local rack and every remote IO station. Per Siemens' S7-1200 addressing documentation, the input and output addresses are assigned automatically by default and can be manually overridden. Each module occupies a contiguous address range whose width is determined by its channel count and channel type (digital 1 bit, analog 2 bytes, etc.).
Default Address Ranges by CPU Family
| CPU Family | Default Input Range | Default Output Range | Process Image |
|---|---|---|---|
| S7-1200 | IB 0 - IB 1023 (typical) | QB 0 - QB 1023 (typical) | Automatic, full process image up to 1024 bytes |
| S7-1500 | IB 0 - IB 65535 | QB 0 - QB 65535 | Configurable, up to 32 partitions |
| ET200SP remote IO | Inherits slot-based range from PROFINET device slot | Inherits slot-based range from PROFINET device slot | Depends on CPU configuration |
| ET200MP remote IO | Inherits slot-based range from PROFINET device slot | Inherits slot-based range from PROFINET device slot | Depends on CPU configuration |
When you add a module, TIA Portal proposes the next free address range based on the highest currently assigned address plus the module's width. This auto-numbering is what produces the "gaps" or "holes" you can exploit when reworking a project.
Hardware Identifier (HW ID)
Per the official S7-1500 addressing modules reference, in addition to the I and Q addresses, a hardware identifier (HW ID) is assigned automatically and is used to address and identify the module. The HW ID is a fixed numeric constant that does not change when you renumber IO; the I/Q address is the runtime byte/bit offset that the program reads. Renumbering IO addresses therefore requires updating every instruction, tag, and DB reference that uses the old address, but does not affect HW-ID-based instructions (e.g., RDREC, WRREC with HW ID, or the I/O access syntax used in motion control).
Why the Duplicate Address Prompt Appears
TIA Portal performs a real-time consistency check between three data sources whenever you edit a module's I or Q address:
- The hardware configuration (device view address columns)
- The PLC tag table (default tag table and any user-defined tag tables)
- The program blocks (ladder, FBD, STL, SCL) that reference the absolute address
When the proposed new address overlaps an existing module's range, or when it would break a tag reference, the compiler/dispatcher displays the warning dialog asking whether to renumber dependent tags automatically. The prompt is non-suppressible by design; it cannot be disabled through a TIA Portal option or registry setting. The official workaround is to sequence your renumbering work to avoid creating overlaps, or to plan address ranges in advance so that you never need to renumber tags.
Strategy 1: Build from Scratch Using the Hole Method
This is the most reliable technique for large projects and is the recommended first approach when the existing address layout is unusable. The method is destructive to address assignments but preserves device configuration, network topology, and program logic.
Step 1: Disconnect Remote IO
- Open the project in TIA Portal
- In the Devices & Networks editor, click the PROFINET/PROFIBUS subnet containing the CPU
- Select each remote IO station and press Delete on the keyboard, or right-click the station and select "Disconnect from IO controller"
- Confirm any prompts; the station remains in the project as an orphan device
Step 2: Assign Local IO First
- Open the CPU in device view
- In the device overview, click into the I address and Q address cells for each local SM/SB/BB module
- Set your desired local IO addresses (e.g., IB 0 - IB 7 for an 8-di, QB 0 - QB 7 for an 8-do)
- Compile the hardware configuration to confirm no overlaps
Step 3: Re-Add Remote IO One Rack at a Time
- Drag the orphan ET200SP/MP station from the project tree back onto the PROFINET subnet
- Open the station in device view and set I addresses, then Q addresses, module by module
- Compile after each station to detect overlaps early
- Repeat for each remote IO station
Step 4: Add Drives and Non-Standard Devices Last
- Add SINAMICS drives, third-party PROFINET devices, and IO-Link masters
- Assign their I/Q address ranges last because they often consume larger address spaces (drives typically 16-32 bytes per direction for cyclic data)
- Confirm by compiling the project
Step 5: Renumber Tags to Match
- Open the PLC tag table
- Select the rows whose addresses changed
- Manually edit the Address column to reflect the new IO addresses
- Use the Cross-reference tool (Ctrl+Shift+F) to verify no stale references remain
Strategy 2: Renumbering Devices In Place
When the project is largely correct and only a subset of addresses needs adjustment, an in-place renumbering preserves the rest of the layout. This is the technique that uses the duplicate-address prompt as a feature rather than fighting it.
The Hole Method (In Place)
- Open Devices & Networks
- Sort or identify the device with the highest currently assigned address
- Open that device in device view and bump its I/Q address to a new range far above all existing modules (e.g., add 1000 to the current byte address)
- When the prompt appears asking to renumber dependent tags, click "Yes"
- Repeat for the next highest device, creating progressively larger "holes" in the address space
- Once you have sufficient holes, go back to the lower-numbered devices and renumber them into the holes you created
This works because the prompt only fires when an overlap is detected. By moving high-numbered devices first, you vacate the low addresses and create free space for the modules you actually want to renumber. The key insight: create holes large enough to accommodate future insertions and remaps.
Example Walkthrough
Suppose you have modules at the following addresses and want to insert a new module at IB 10-IB 11:
| Module | Current IB | Current QB |
|---|---|---|
| SM1 (8 DI) | 0 | 0 |
| SM2 (16 DI) | 1 | 1 |
| SM3 (8 DI) | 3 | 3 |
| SM4 (8 DO) | 4 | 4 |
To free up IB 10-IB 11, you would:
- Move SM4 first: bump QB 4 to QB 1000, accept tag renumber
- Move SM3: bump IB 3 to IB 200, accept tag renumber
- Move SM2: bump IB 1 to IB 100, accept tag renumber
- Now the range IB 0-IB 99 is empty; insert the new module at IB 10-IB 11
- Move SM3 back to IB 3 and SM2 back to IB 1
Strategy 3: High-Anchor Renumbering
A simpler variant that suppresses the prompt entirely is the high-anchor method. The idea: set a device's new address to a value that is guaranteed to be free (e.g., IB 10000) and then incrementally step it down one module at a time. Because no overlap is ever created, the prompt does not fire.
- Identify the device you want to renumber
- Set its I address to IB 10000 and Q address to QB 10000
- Accept any single tag renumber prompt for this device
- Move the next device to IB 10001, accept prompt
- Continue moving devices in single-byte steps until all renumbering is complete
- Once everything is at 10000+ with no overlaps, move devices back into the desired range in descending order
Strategy 4: Bulk Address Import/Export
TIA Portal exposes address data through several export/import paths. The most useful for bulk IO address renumbering is the CAx data export.
Export CAx Data
- In TIA Portal, select the CPU in the project tree
- Go to Tools → Export → Export CAx data
- Choose a destination folder and file format (XML is the most useful for scripting)
- Confirm; TIA Portal writes an XML file containing IO addresses, tag definitions, and module parameters
Edit in Excel
- Open the exported XML in Excel (or convert to CSV first using a text editor)
- Use Find/Replace to bulk-rename addresses (e.g., replace "IB 1" with "IB 100")
- Save the modified file
Import Back
Strategy 5: TIA Portal Openness API for Scripted Renumbering
For projects with hundreds of IO modules, scripting the renumber is the only realistic approach. The TIA Portal Openness API exposes DeviceItem and AddressArea objects that allow reading and writing IO addresses programmatically.
Sample C# Snippet (Conceptual)
// Open project
Project project = tiaPortal.Projects.Open("C:\\Projects\\MyPlant.ap18");
// Locate the CPU
Device cpu = project.Devices.Find("S7-1500/ET200MP-Station_1");
// Iterate device items and renumber
foreach (DeviceItem item in cpu.DeviceItems)
{
if (item.Classification == DeviceItemClassifications.SignalModule)
{
// Get current address
AddressArea inputs = item.Addresses.FirstOrDefault(a => a.Direction == AddressDirection.Input);
if (inputs != null)
{
int oldStart = inputs.StartByteAddress;
int newStart = oldStart + 1000; // Shift by 1000 bytes
inputs.StartByteAddress = newStart;
}
}
}
project.Save();
project.Close();
The Openness API performs the same internal consistency checks as the manual workflow, so it will also trigger tag renumbering automatically. The advantage is that you can process thousands of modules in seconds without prompt interruptions.
Working with PROFINET Remote IO
PROFINET devices have two distinct address concepts that are often confused:
| Address Type | Where Configured | Purpose |
|---|---|---|
| PROFINET device name/IP | Device properties → Ethernet addresses | Network identification (commissioning, replacement) |
| IO address (I/Q) | Device view → Device overview → I address / Q address columns | CPU-side process data offset |
| Hardware Identifier (HW ID) | Auto-assigned, visible in PLC tags → System constants | Programmatic module identification for acyclic services |
When you renumber a PROFINET remote IO module's I/Q address, the PROFINET device name and IP address are unaffected. The GSD file slot mapping determines the order of modules within the station; renumbering does not re-order slots. If you reorder slots (drag modules to different positions in the device overview), TIA Portal will reassign addresses based on the new order and trigger the renumber prompt.
Working with PROFIBUS Remote IO
PROFIBUS DP slaves follow the same principle, with addresses assigned per slot within the slave's modular structure. The PROFIBUS node address (1-126) is set in the device properties and is independent of the IO address range. Renumbering IO addresses on PROFIBUS slaves does not affect the PROFIBUS address.
Address Range Planning Best Practices
The fastest way to avoid duplicate-address prompts is to plan address ranges before commissioning. The following conventions are used in plants with thousands of IO points:
Address Block Allocation
| Block | Range | Purpose |
|---|---|---|
| IB 0 - IB 127 | Local IO on CPU rack | Always-on signals (safety, status, emergency stop) |
| IB 128 - IB 255 | Local digital expansion | Local SMs added during commissioning |
| IB 256 - IB 511 | Field area 1 (e.g., MCC room) | ET200 station 1 |
| IB 512 - IB 767 | Field area 2 (e.g., process skids) | ET200 station 2 |
| IB 768 - IB 1023 | Field area 3 | ET200 station 3 |
| IB 1024 - IB 2047 | Spare / future | Reserved for plant expansion |
| IB 2048+ | Drives and special devices | SINAMICS, IO-Link, third-party PROFINET |
Additional Rules of Thumb
- Reserve 64 bytes per station even if you currently use less, to leave room for later IO additions
- Group by process cell, not by device order; this survives hardware reconfiguration
- Use multiples of 16 (IB 0, IB 16, IB 32) as station start addresses; this aids readability
- Document the layout in a separate Excel sheet and link it to the project via the project comments
Verification Steps
After any IO renumbering operation, perform the following checks in order:
- Compile the hardware configuration: Right-click the CPU → Compile → Hardware and software (rebuild). Any remaining overlap errors will surface here.
- Cross-reference tags: Select the PLC tag table, press Ctrl+Shift+F (Cross-references). Filter for "Address." Confirm no tags reference deleted or moved addresses.
-
Search program blocks for absolute addresses: In the project tree, right-click Program blocks → Cross-reference. Look for any
%Ior%Qreferences that did not get updated by the tag renumber. - Download to a simulated PLC: Use PLCSIM or PLCSIM Advanced to verify that no system fault (SF) is reported on power-up. A duplicate IO address typically manifests as an IO configuration error (diagnostic buffer entry with channel-level error code 0x0010 / "IO configuration error").
- Watch table test: Create a watch table with the new addresses and force inputs to confirm physical-to-logical mapping is correct.
Troubleshooting Matrix
| Symptom | Root Cause | Resolution |
|---|---|---|
| Duplicate address prompt appears immediately when changing a single address | Address overlap with another module | Use the hole method to create free range first |
| Tag table does not update after accepting prompt | Tag is in a user-defined tag table, not the default table | Manually edit addresses in the user-defined table |
| SF (System Fault) on CPU after download | Renumber created IO range conflict that compiler missed | Go online → Diagnostics → Compare offline/online addresses |
| PROFINET station not coming up | PROFINET device name or IP changed unintentionally | Verify in Devices & Networks → PROFINET device properties |
| HW ID references broke | User expected HW ID to change with IO address | HW IDs are independent of IO addresses; verify in System constants |
| Process image is incomplete | Module assigned to a process image partition that is not refreshed | Check the module's "Process image" column in the device overview |
| CAx export does not import back | CAx export is one-way only | Use TIA Portal Openness API for scripted modification |
| Tag prompt never appears but addresses are wrong | Tags were already in user-defined table; renumber did not propagate | Use Find & Replace in the user tag table |
Safety and Commissioning Considerations
For F-CPU projects, the fail-safe IO address ranges are managed separately and may not be renumbered through the standard duplicate-address workflow. Refer to the S7-1500F/1200F documentation when working with safety IO.
FAQ
Can I disable the TIA Portal duplicate-address prompt?
No. The prompt is a built-in consistency check with no registry flag or option to suppress it. The supported workaround is to plan address ranges so overlaps never occur, or to use the hole method to vacate address space before renumbering.
Does renumbering IO addresses change the HW ID of a module?
No. The hardware identifier (HW ID) is a fixed numeric constant assigned at module insertion time and is independent of the I/Q address range. Per Siemens' official S7-1500 documentation, the HW ID is used to address and identify the module and is unaffected by IO renumbering.
How do I bulk edit IO addresses across hundreds of modules?
For projects of this scale, use the TIA Portal Openness API (C# or VB.NET) to script the renumbering. The Export CAx data function is one-way only and cannot be imported back into the hardware configuration.
Why does my renumber work in offline but the CPU reports an IO configuration error online?
The offline renumber may have left a partial conflict that the compiler permitted but the online CPU rejects. Go online, open Diagnostics → Compare offline/online, and check the IO address columns. Look for diagnostic buffer entries with channel error code 0x0010 (configuration error).
Do I need to renumber PROFINET device names when I renumber IO addresses?
No. PROFINET device names and IP addresses are network-layer identifiers and are configured separately from the IO address range. Renumbering IO addresses in the device overview does not affect the PROFINET device name or IP. Per the Siemens S7-1500 addressing documentation, the PROFINET name/IP and the IO address are independent.