Problem Summary
A configured S7-1200 project in TIA Portal V12 with WinCC Advanced PC Runtime launches without errors, but fields and animations wired to PLC tags (e.g., %I0.0 and %Q0.5) never reflect the live state of the CPU. The HMI Runtime appears connected, the project compiles cleanly, and no diagnostic buffer entries are raised by either the PLC or the Runtime, yet every read cycle returns a stale value.
This symptom is typical of a tag-to-connection binding error introduced during the initial HMI tag table configuration. The tags exist, are typed correctly as Bool, and reference the correct absolute addresses, but they are bound to the wrong connection resource inside the HMI device.
Affected Environment
| Component | Version / Setting |
|---|---|
| Engineering framework | Siemens TIA Portal V12 (STEP 7 V12 + WinCC V12) |
| HMI software | WinCC Advanced V12 (PC Runtime) |
| PLC | SIMATIC S7-1200 (CPU 121xC / 1215C family) |
| PLC firmware | Confirm V2.x or V3.x is installed; update to current firmware before commissioning |
| Runtime host | Same PC as engineering station |
| Connection type | PROFINET / S7 Ethernet (default for S7-1200) |
Root Cause: Connection Binding Mismatch
TIA Portal V12 maintains two parallel connection objects for every HMI device in the project tree:
- Connection_1 — the direct, editor-managed S7 connection between the HMI tag table and the S7-1200 CPU. This is the resource that the Runtime polls at the configured acquisition cycle.
- HMI_connection_1 — the legacy/internal symbolic route the HMI editor auto-generates for cross-device references inside TIA Portal. Tags bound here do not always resolve to a live S7 channel when the project is loaded into WinCC Runtime; the Runtime receives an "address not subscribed" state and freezes the last cached value.
When the engineer configures the HMI tag's Connection dropdown to HMI_connection_1 instead of Connection_1, TIA Portal accepts the assignment silently during compile, but at Runtime the tag never receives update telegrams. This produces the exact symptom described in the source case: fields and animations stay frozen at their initial value regardless of the actual bit state in OB1.
Why the Compile Does Not Flag It
In V12, the compiler validates tag syntax (data type, length, address syntax) but does not perform a runtime reachability test against the target connection. A Bool tag with address %I0.0 bound to HMI_connection_1 passes compile because the address itself is valid; the binding error surfaces only when the Runtime attempts its first cyclic read.
TIA Portal V12 HMI Tag Architecture
Before repairing the project, verify the architecture concept so the fix is understood, not memorized:
| Object | Path in TIA Portal | Role |
|---|---|---|
| PLC tags (DB / process image) | PLC > PLC tags > Show all tags | Authoritative source for I/O and DB values inside STEP 7 |
| HMI tags | HMI device > HMI tags > Default tag table | Runtime-side mirror used by WinCC screens, scripts, and animations |
| HMI connections | HMI device > Connections | Defines the S7 route (IP, rack, slot, connection resource) used by the Runtime |
| Connection_1 | Auto-created by "HMI > Connection" wizard | Direct S7 connection to the CPU that Runtime polls |
| HMI_connection_1 | Auto-created for cross-device symbolic binding | Used internally by TIA for symbolic tag references between HMI and PLC projects; not a guaranteed Runtime poll channel |
Tag Acquisition Cycle
The WinCC Runtime scheduler reads each HMI tag at the cycle configured in HMI tags > Acquisition cycle (default 1 s). When the bound connection is invalid, the read returns the cached value with the quality code OPC_QUALITY_BAD internally, but V12 displays the cached value rather than a diagnostic overlay. Forcing a re-read requires restarting the Runtime or toggling the connection.
Diagnostic Procedure
Run the following checks in order to confirm the connection-binding fault before applying the fix:
-
Inspect the HMI tag table. Open HMI device > HMI tags > Default tag table (or your custom table). Select each Bool tag intended to mirror
I0.0orQ0.5. Note the value in the Connection column. -
Identify the binding. If Connection shows
HMI_connection_1, the tag will not update in Runtime. If it showsConnection_1with the correct PLC IP, the tag should poll correctly. -
Verify the HMI connection IP. Open HMI device > Connections. Confirm
Connection_1points to the S7-1200 IP address (e.g.,192.168.0.1) and uses S7ONLINE as the access point. - Check the PG/PC interface. In Windows, confirm Set PG/PC Interface is set to S7ONLINE (TCP/IP) -> <your NIC>. A mismatched access point prevents Runtime from reaching the PLC even when the binding is correct.
-
Cross-check with the PLC online view. In TIA Portal, go online to the CPU and toggle
I0.0in the tag table. If the PLC tag flips but the HMI tag does not, the binding is the issue, not the address.
Good are polling; tags with Bad are not. This single step confirms the fault without changing the project.Step-by-Step Resolution
The verified fix is to recreate the affected HMI tags bound explicitly to Connection_1:
- In the Project Tree, expand HMI_1 [RT] > HMI tags > Default tag table.
- Note the symbolic name, data type, and acquisition cycle of each affected tag (for example,
Tag_In_Start, Bool, 1 s). - Delete the mis-bound tags from the table.
- Click Add new. Enter the same symbolic name and select
Boolas the data type. - In the Connection dropdown, select
Connection_1(NOTHMI_connection_1). - In the Address field, enter the absolute PLC address:
%I0.0for the input bit,%Q0.5for the output bit. TIA Portal will resolve to the PLC's process image. - Set Acquisition cycle to
1 sfor status visualization, or100 msif faster updates are required. - Re-link any I/O fields, animations, or scripts that referenced the old tag name. If you kept the same symbolic name, no screen edits are needed.
- Compile the HMI project (Compile > Software (rebuild all)) to regenerate the Runtime DB.
- Download the project to the PC Runtime and start the Runtime.
Alternative: Edit the Connection Column Directly
Instead of deleting and recreating, you can edit the Connection cell of the existing row in the tag table:
- Click the Connection cell of the tag.
- Change the dropdown value from
HMI_connection_1toConnection_1. - Press Enter to commit.
- Recompile and restart the Runtime.
This method preserves tag history and minimizes the risk of breaking screen references.
Verification
After applying the fix, confirm correct Runtime behavior:
-
Visual check. Toggle
I0.0physically (pushbutton) or via the PLC's online tag table. The associated HMI rectangle, lamp, or text field should change state within the configured acquisition cycle. -
Diagnostics view. Open HMI tags > Diagnostics during Runtime. The affected tag should show quality code
Good. -
Cross-reference check. Right-click
Connection_1in HMI device > Connections and select Cross-references. The tag should appear in the referenced list, confirming the Runtime will poll it. -
Counter-check Q0.5. Force
Q0.5 = TRUEin the PLC's watch table. The HMI animation should immediately reflect the output, validating the bidirectional path.
Bool Tag Display in I/O Fields
When using an I/O field to display a Bool PLC tag, the default representation is the numeric value 0 or 1. To display readable text, configure the I/O field's Display format property:
- Select the I/O field on the screen.
- In Properties > General, set Mode to Output.
- Open Properties > Appearance > Display format.
- Replace the format string with a conditional text mapping using WinCC V12 syntax: enter
"OFF";"ON"for two states, or0in the data format box and bind the symbolic text list.
If a Bool tag is wired to an I/O field in Input/Output mode, TIA Portal will prompt for a connection type; leaving it blank produces a read-only display, which is another common point of confusion for first-time users.
Animation Configuration for Bool Tags
For a rectangle or lamp whose appearance toggles with a Bool bit:
- Select the graphic object on the screen.
- Open Properties > Animations.
- Add an Appearance animation.
- Bind the variable to the Bool tag (now correctly on
Connection_1). - Configure two appearance states: value
0and value1, each with a distinct fill color. - Compile and run the Runtime.
If the animation does not trigger after recompile, verify the Trigger tag field is empty or set to the same tag; an unrelated trigger tag prevents updates even when the bound variable is correct.
Firmware and Compatibility Notes
S7-1200 CPUs in the V12 era shipped with firmware V2.x; many were upgraded to V3.x before V12 SP1 supported the new CPU 1215C and 1217C variants. If the Runtime fails to establish Connection_1 entirely:
- Update the CPU firmware using the Siemens Support download portal (search "S7-1200 firmware").
- Ensure the TIA Portal version supports the firmware. TIA V12 SP1 or later is required for firmware V3.0 CPUs; V12 without SP cannot download to V3.0 hardware.
- Verify the PLC's protection setting allows PUT/GET access from the HMI. In V12, navigate to PLC > Properties > Protection > Connection mechanisms and enable Permit access with PUT/GET communication if the HMI uses symbolic-only access.
Connection Resource Limits on S7-1200
The S7-1200 supports up to 16 S7 communication connections simultaneously, with PG, HMI, and PUT/GET each consuming a resource. With a single PC Runtime, the default Connection_1 uses one resource. If multiple HMIs or PG clients are added, monitor the connection resource counter in the PLC's online diagnostics to avoid exhaustion, which can also manifest as "no update" symptoms.
Best Practices to Prevent Recurrence
-
Always bind HMI tags to Connection_1. Treat
HMI_connection_1as a read-only engineering convenience; never rely on it for Runtime polling. - Use PLC symbolic tags when possible. From V12 onward, dragging a PLC tag into the HMI tag table auto-creates the binding correctly and eliminates manual address entry errors.
-
Centralize connection definitions. Avoid creating duplicate HMI connections per screen; one
Connection_1per HMI device is the supported pattern. - Validate after every project change. Add a short checklist step: "Confirm tag Connection column = Connection_1" before each Runtime download.
- Leverage the HMI diagnostics view in WinCC Advanced V12 for first-run commissioning; it exposes quality codes that the visual screen does not show.
Troubleshooting Matrix
| Symptom | Likely Cause | Corrective Action |
|---|---|---|
| Tag value never updates; quality code Bad | Bound to HMI_connection_1 | Re-bind to Connection_1 |
| All tags fail to update; Runtime shows "No connection" | PG/PC interface misconfigured | Set PG/PC interface to S7ONLINE (TCP/IP) on correct NIC |
| Compile error "Address not valid" | Wrong address syntax for S7-1200 | Use %I0.0 / %Q0.5 format; avoid DB-style addresses for process image |
| Runtime connects, but tags show stale value | Acquisition cycle too long or tag disabled | Set acquisition cycle to 1 s or less; verify tag is enabled |
| Intermittent updates, no apparent pattern | CPU connection resource exhaustion | Reduce concurrent PG/HMI connections; check PLC diagnostics |
| Bool I/O field shows numeric 0/1 only | Default display format not overridden | Set Display format property to text mapping |
FAQ
Why does TIA Portal V12 accept a tag bound to HMI_connection_1 without a compile error?
The V12 compiler validates tag syntax (address, type, length) but does not perform a runtime reachability check against the connection resource. A Bool tag on HMI_connection_1 passes compile, but the Runtime cannot establish a polling session on that channel, so the value freezes at the cached initial state.
What is the difference between Connection_1 and HMI_connection_1 in TIA Portal V12?
Connection_1 is the editor-managed S7 connection used by WinCC Runtime to poll the CPU at the configured acquisition cycle. HMI_connection_1 is the internal symbolic route used for cross-device references inside the engineering environment; it is not a guaranteed runtime poll channel and should not be used for HMI tag polling.
How do I display a Bool PLC tag as text ("ON" / "OFF") instead of 0 / 1 in a WinCC Advanced V12 I/O field?
Set the I/O field to Output mode and override its Display format property to "OFF";"ON" (or your preferred strings). Bind the variable to the correctly configured Bool HMI tag on Connection_1.
Do I need to delete and recreate the tag, or can I edit the Connection column directly?
Both work. Editing the Connection dropdown in the existing tag row from HMI_connection_1 to Connection_1 and recompiling is the fastest fix. Deleting and recreating is preferable when the tag has complex properties or when you want a clean audit trail.
How can I confirm the HMI tag is actually being polled by WinCC Runtime?
Open HMI tags > Diagnostics in WinCC Advanced V12 during Runtime. Tags with quality code "Good" are actively polled by the Runtime. Tags showing "Bad" or no entry are not reaching the PLC and require a connection or binding check.