Symptom Overview
After opening or compiling a project in TIA Portal V14 SP1 (and confirmed on V15 and V15.1), the editor flags nearly every used input (%I), output (%Q and memory bit / Memento (%M) reference with the compiler message:
BOOL, BYTE, WORD and DWORD across the entire program. The project deliberately uses absolute addressing only, and a cross-reference scan of the code returns no other consumers for the same address (for example %E0.0 is referenced exactly once, but the warning still appears).Typical real-world observations reported by users:
- The project was created in TIA V14 SP1 and contains a single PLC tag table.
- The Cross Reference tool shows a single use of every address.
- Re-typing all four size variants of an address (
%EB0,%EW0,%ED0and%E0.0) does not clear the warning. - The warning survives deleting the call site, the data block, and even the entire user program. The complaint is raised against the tag definition itself, not against the code.
- On V15.1, the problem surfaces immediately after adding Technology Objects (TO) for motion control, which auto-generates a wave of default tags into the project.
Because the compiler is looking at the symbolic / tag layer and not at the network, the standard "check the wiring and the FC/FB calls" workflow fails. The actual fault lives in the tag database.
How Siemens S7-1200/1500 Address Resolution Works
To understand the warning, you have to separate the two address spaces that TIA Portal maintains in parallel.
| Layer | Identifier syntax | Stored in | Resolution rule |
|---|---|---|---|
| Absolute (process image) |
%I0.0, %IB0, %IW0, %ID0, %Q0.0, %M0.0, %MB0… |
Compiled code – hard wired by the editor at the call site. | Resolved directly by the S7-1200/1500 CPU at runtime. |
| Symbolic (PLC tag table) |
"MyInput" or HMI name |
PLC tag tables inside the project tree. | Each symbol must map to exactly one absolute address. Two symbols pointing at the same byte, word or bit produce an "ambiguous" tag. |
The ambiguous data access warning is emitted by the tag database consistency checker, not by the code generator. It fires whenever a single absolute address has more than one symbolic alias, or whenever a single address lives in more than one PLC tag table. The check is byte-granular: a duplicate at %MB2 also makes %M2.0 through %M2.7, %MW2, and %MD2 ambiguous for that one memory byte.
%MB2 will mark every narrower access (%M2.0, %MW2, %MD2) as ambiguous if a second alias is defined for the same byte. Always deduplicate at the byte address level first.Root Causes of Ambiguous Access Warnings
Across the field reports, the warning can be traced to one of four mechanisms. Treat them as a decision tree – the first fix that succeeds is the right one.
| ID | Root cause | Diagnostic signal | Typical trigger |
|---|---|---|---|
| A | Duplicate symbol in one tag table | Sort tag table by "Address" column – two rows share the same %IX / %IB / %IW / %ID value. |
Copy/paste of tag rows, importing an old .xlsx over an existing table. |
| B | Same symbol in multiple tag tables | "Show all tags" lists the address twice under different table names. | Default tag tables Default tag table, IO tags, motion-control TO tables. |
| C | Hidden duplicate in the XML store | Tag table looks clean, Show all tags looks clean, but warning persists. | Interrupted save, simultaneous multi-user edit, TIA crash mid-compile, V14 → V15 upgrade. |
| D | Read/write overlap between user DB and I/O | A user-defined DB has a tag whose address overlaps an I/O or memory alias. | Manually entered AT overlays, hand-edited DBs. |
Cause C – the hidden duplicate – is the variant that frustrates most engineers, because every visual inspector returns "looks fine". The fix is to force TIA Portal to rebuild its tag store from scratch.
Diagnostic Procedure: Identifying the True Cause
Run the steps below in order. Stop at the first one that produces a concrete match.
- Switch the tag view to "Show all tags". In the project tree, expand PLC_x > PLC tags and click the Show all tags button in the toolbar. This flattens every tag table into one list.
- Sort by the Address column. Click the Address header twice to group identical addresses together. Any row that is immediately followed by another row with the same value is a duplicate (Cause A). Tag the row with its source tag-table name; you will need it in step 5.
-
Filter on duplicate addresses. Right-click the Address header and choose Filter > Custom filter:
Address contains "%"– then visually scan for repeats. For a more rigorous check, export the table. - Export the full tag set to CSV / XLSX. Right-click inside the tag list and choose Export > CSV (or XLSX). Open the file in Excel, sort the Address column, and apply Conditional Formatting > Highlight Cell Rules > Duplicate Values. Excel will paint every duplicate address bright red. This catches duplicates that hide across rows in TIA's compact view.
- Check whether the duplicate lives in a different tag table. In the exported file, the Tag table column will reveal Cause B. The default Default tag table, an IO table, and the auto-generated <TO>_tags tables for motion objects are the three usual suspects.
- Confirm the address is not also overlaid by a user DB. Open any user DBs in your project, select the AT view, and search for the offending address. If an AT overlay matches the same byte/word/dword, you have Cause D – rename the DB tag or change the overlay.
- If every check above returns clean, the cause is hidden corruption in the project file (Cause C). Move directly to the Rebuild the Tag Database procedure.
Fix Path A – Removing Duplicate Tag Definitions
When the diagnostic step surfaces a true duplicate, the fix is mechanical.
- In the tag table, select the duplicate row(s). Use the Source column to identify which table owns the row that should stay. In practice, keep the row that is referenced by the program; the other row is a leftover from a previous import.
- Press Delete. The row is removed from the live table only; the symbol remains referenced in the program unless you recompile.
- Save the project (Ctrl + S) and run Compile > Software (rebuild all). The "ambiguous data access" warning should disappear for the affected addresses.
- Repeat the cross-reference check on the now-clean address to make sure no code is referring to the dropped symbol. TIA Portal will report Symbol not found if you missed a call site.
"Conveyor_Start_PB") and delete the auto-generated short name ("I0_0") – or vice versa, but never both.Fix Path B – Resolving Multiple Tag Tables
Siemens' TIA Portal allows an unlimited number of PLC tag tables per S7-1200/1500 station, but a single address may legitimately live in exactly one of them. When a project has been edited, upgraded or merged, the same byte can be claimed by two tables.
- Open the duplicate tag in the Show all tags view. The Tag table column will show the conflict.
- Right-click the offending row and choose Go to tag table. The editor jumps to the source table.
- Cut the row (Ctrl + X) and paste it into the table you want to keep. Re-save.
- If neither table is referenced by program code, simply delete one of the tables entirely. In the project tree: PLC tags > right-click > Delete. TIA will refuse to delete a non-empty table that is still referenced – you can then empty it first.
- Compile the project. The warnings should vanish in proportion to the number of removed duplicates.
Fix Path C – Rebuilding the Tag Database (Full Export/Import)
When the tag table is clean in every visible view but the warning persists, the project XML is inconsistent. The reliable cure – widely confirmed on TIA V14 SP1 and V15.1 – is to flush and re-import the tag set.
- Full export. In the project tree, right-click PLC_x > PLC tags > Show all tags and choose Export > XLSX. Tick the option Export all tag tables. Save the file as a backup – do not overwrite the original after step 3.
- Open the file in Excel and verify there are no duplicate addresses (Cause A) and that no address is shared between tables (Cause B). If Excel shows duplicates, fix them in the spreadsheet first; this is the moment to clean house.
- Delete all tag rows in TIA Portal. Select every row in the Show all tags view, press Delete, and confirm. Repeat for every individual tag table. The tables themselves can stay – the goal is to empty them.
- Re-import the cleaned XLSX. Right-click PLC tags > Import > XLSX, point at the file from step 1, and confirm. TIA will recreate the rows under their original table names.
- Save and recompile (Compile > Software (rebuild all)). The warning list is now generated against a freshly written XML store; the inconsistency is gone.
When the Warning Persists: Hidden Corruption
If the export/import cycle does not eliminate the warning, the corruption is deeper than the tag store. The next escalation steps are:
- Project-wide "Save as" with compression. File > Save as and choose Project file with compression (*.zap14 / .zap15). The compression pass silently re-validates the XML.
- TIA Portal version upgrade. Open the project in the latest service pack you have licensed, run a Save as over the project, and reopen. The upgrade routine is more thorough than the build-in-place validator.
- Clean up the station. PLC_x > right-click > Compile and check block consistency. The dialog will report residual corruption at the block level, which is independent of tag corruption but produces the same symptom.
- Re-attach the PLC station. Right-click Devices & networks, Add new device > S7-1500 CPU, migrate the program with drag-and-drop, then re-import the cleaned tag table. This is a last resort – it is the only path that rewrites the cross-reference cache.
-
Workaround when only a few addresses are flagged. Re-enter the absolute address with a deliberate whitespace trick: type
%I0.0(trailing space) – no, the editor strips it. The proper workaround is to convert the operand to symbolic access through a local tag, then back to absolute. This forces the tag database to drop the corrupted entry and rebuild it from the new access path.
Verification Procedure
After any fix, run the four checks below before declaring the project healthy.
- Compile > Software (rebuild all). The Info window's Warnings tab should show zero "ambiguous data access" messages. Zero errors is also required.
-
Cross-reference > Display cross-references. Pick one of the previously flagged addresses, for example
%M2.0. The list should show exactly one writer and one (or more) readers, and no duplicate aliases. - PLC > Online > Compare offline/online on the cleaned CPU. The tag table should match the offline view byte for byte.
- Go online and force a stop / run cycle on the CPU. If the S7-1200/1500 refuses to go to RUN, re-check the cross-reference for an address that has been orphaned.
Prevention and Engineering Best Practices
Ambiguous address warnings are almost always the symptom of an editorial accident, not a logic error. The practices below keep the project clean from day one.
- One tag table per functional group. Group tags by I/O card or by machine subsystem. A duplicate is impossible if each address is owned by exactly one table.
- Disable the auto-generation of short aliases. Options > Settings > PLC programming > General > Automatically create tags for I/O addresses – uncheck it. Manually created tags force you to be intentional about names.
- Use source-controlled XLSX exports as the canonical source. Store the exported tag spreadsheet in Git/SVN. Any merge conflict in the XLSX is a real conflict in the project.
- Never copy a tag row across projects. Use the Master copy library instead. The copy/paste path is the #1 cause of hidden duplicates.
- Run a periodic "address sort" audit. Once per project milestone, sort the tag table by address and look for repeats. A five-minute check beats a four-hour debug session.
- Avoid Technology Objects wizard during heavy edit sessions. Adding motion TOs in the middle of a long refactor increases the chance of a stale XML being committed. Add TOs in a dedicated branch, then merge.
FAQ
What does "ambiguous data access" mean in TIA Portal?
It is a compiler warning that the absolute address of an operand has more than one symbolic alias in the PLC tag tables of the S7-1200/1500 station. The code itself is legal – the CPU will run – but the warning indicates a tag-database inconsistency that should be cleaned up.
Why do I get ambiguous warnings even though cross-reference shows only one use of the address?
Because the warning is raised against the tag definition, not the call site. Even if your program reads %I0.0 exactly once, two different tag rows pointing at %IB0 make every access to that byte ambiguous, including the bit-level access %I0.0.
Does the warning appear in TIA Portal V14 SP1, V15 and V15.1 alike?
Yes. The byte-level ambiguity check has been present since V13 SP1 and is unchanged in V14 SP1, V15 and V15.1. V15.1 reports it more aggressively after Technology Objects for motion control are added, because the TO wizard injects a burst of default tags.
Is there a quick way to clean up the tag table without touching every row by hand?
Yes – the "export, delete-all, import" cycle described in Fix Path C. Export the entire tag set to XLSX, fix any duplicates in Excel, delete every row inside TIA Portal, and re-import the cleaned file. The procedure typically takes under five minutes for a project with several hundred tags.
Will the S7-1200/1500 CPU refuse to start if ambiguous tags remain in the project?
No. The CPU does not check the offline tag table at runtime; it simply resolves the duplicate to whichever alias it encounters first. The risk is functional, not safety: a tag that silently points at the wrong bit will produce a logic error that the compiler will not catch. Always run an online watch-table verification after clearing the warning.