Resolving TIA Portal V19 WinCC Unified Linear Scaling HMI Bug

David Krause14 min read
HMI / SCADASiemensTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Resolving TIA Portal V19 WinCC Unified Linear Scaling HMI Bug

Engineers commissioning WinCC Unified PC Runtime on TIA Portal V19 are reporting that linear scaling configured directly on HMI tags returns zero with a yellow attention triangle (the standard "no connection to PLC" indicator) on every scaled tag. The fault is independent of the underlying PLC connection: the raw, unscaled tag value is read correctly, and standard (unscaled) tags display normally on the same panel. The bug is reproducible on Unified PC RT and on Unified Comfort Panels (MTP) but not in the RT simulation, which masks the issue until commissioning on real hardware.

This reference covers the affected versions, the data types involved, the confirmed root cause, two field-proven workarounds, and a step-by-step procedure for implementing script-based scaling when the standard linear scaling property cannot be relied upon.

1. Problem Overview

Linear scaling on a WinCC Unified HMI tag is a tag property that converts a raw PLC value into a scaled engineering value using the formula:

Scaled_Value = (Raw_Value - Offset_Input) * Gain + Offset_Output

In TIA Portal V19, with WinCC Unified PC Runtime (V19, V19 Update 1, V19 Update 2, and V19 Update 3), the scaled value is not written to the tag buffer. The HMI instead reports the tag as quality code "Bad - No Communication" and displays the value zero with the yellow attention triangle. Engineering values such as tank levels in liters, pressures in bar, or flow rates in m³/h are therefore not visible to the operator, which is a critical functional failure on production systems.

Functional impact: Every scaled HMI tag is affected, including the standard mix of Int, Real, and Time (LTime / Time / 5STime) data types. Scaled faceplate tags, trend archives, and alarm limits that read from scaled tags also show zero or "bad quality" values.

2. Affected Versions and Products

The following combinations have been reported as affected in field deployments:

Component Confirmed Affected Status
TIA Portal V19 (base) Yes (sparse reports) Not officially confirmed
TIA Portal V19 Update 1 Yes Bug confirmed by Siemens support
TIA Portal V19 Update 2 Yes Bug confirmed by Siemens support
TIA Portal V19 Update 3 Yes Reproduced in the field, no published fix at time of writing
WinCC Unified PC RT V19 Yes Primary failure surface
WinCC Unified Comfort Panel (MTP1500 / MTP1900 / MTP2200) V19 Yes (Time data type only confirmed in simulation vs MTP comparison) Likely same code path
WinCC Unified RT Simulation (V19) No Issue does not reproduce in simulation
WinCC Professional / Comfort Panels (legacy) No Linear scaling works as documented

Refer to the official Siemens Industry Online Support portal for the latest updates and any TIA V19 hotfix releases:

3. Symptoms and Error Indicators

Symptoms observed on the HMI faceplate or screen:

  1. Scaled IO field shows the value 0 with a yellow attention triangle (warning indicator).
  2. Tooltip on the field shows: "Connection to PLC disrupted" or equivalent diagnostic text, even though the underlying connection is established and unscaled tags update normally.
  3. Tracing the tag with a Unified trace shows the raw PLC value updating, but the scaled projected value never changes from 0.
  4. Trend views that consume scaled tags show a flat line at zero with "bad quality" markers.
  5. The same scaling configuration, when applied in WinCC Advanced or WinCC Comfort, works correctly. The issue is specific to the Unified Runtime code path.

4. Root Cause Analysis

The bug originates in the WinCC Unified Runtime tag projection layer. The tag property page accepts and stores linear scaling parameters (OffsetInput, Gain, OffsetOutput, scaling limits) and binds them to the HMI tag at compile time. At runtime, the scaling transformation is performed by the RT projection service that subscribes to the raw PLC value and emits the scaled value to the internal tag database.

On V19 builds, the projection service is registering scaled tags with an incorrect IO domain mask when the tag data type is:

  • Int (16-bit signed)
  • Real (32-bit IEEE-754 float)
  • DInt (32-bit signed) in some V19 Update 2 builds
  • Time, LTime, S5Time (5STime in legacy notation), and derived IEC_TIMER / IEC_LTIMER types

The result is that the RT tag database never receives an initial value, and the consumer of the tag (the IO field, the trend, the alarm) interprets the absence of a value as a connection loss. The yellow attention triangle is therefore a false diagnostic - the PLC is connected, the raw value is arriving, but the scaled value is not being published.

Why the simulation does not fail: The simulation path uses a single-threaded in-process tag cache. The RT path uses the cross-process projection service. The bug is in the marshalling between the two processes, so the simulation does not exercise the failure path and the issue remains hidden until commissioning on real PC RT or MTP hardware.

5. Data Type-Specific Behavior

Data Type Scaling Configured On Observed Behavior on Unified PC RT V19 Workaround
Int (16-bit) HMI tag property Value 0, yellow triangle Switch PLC tag to DInt and rebind
Real (32-bit) HMI tag property Value 0, yellow triangle Use script-based scaling
DInt (32-bit) HMI tag property Intermittent - fails on V19 Update 2 Use script-based scaling
Time (32-bit, ms) HMI tag property Value 0, yellow triangle Substitute DInt counter in PLC
LTime (64-bit, ns) HMI tag property Value 0, yellow triangle Substitute DInt ms in PLC and convert in HMI script
S5Time / 5STime (16-bit BCD) HMI tag property Value 0, yellow triangle Convert in PLC to DInt ms, transfer, display
Bool HMI tag property Not affected No action
String / WString HMI tag property Not affected No action

The Time-family types deserve additional explanation. The Time type in S7-1500 is a 32-bit DInt with a base unit of milliseconds, and LTime is a 64-bit LInt with a base unit of nanoseconds. The 16-bit S5Time is a BCD-coded value that survives only on legacy S7-300/S7-400 sources. The conversion from any of these to a display value (seconds, minutes, hours) is therefore a unit change, not a numerical scaling, and can be done in the PLC or in an HMI script without loss of precision when a 32-bit or wider integer is used as the transfer type.

6. Workaround 1 - DINT Substitution

The fastest field-proven fix is to eliminate the scaled HMI tag entirely and substitute a DInt transfer tag with a label or unit that represents the engineering value. The conversion is performed in the PLC rather than at the HMI.

Example for a Time tag (in SCL, on the S7-1500):

// Original: "#tRunTime" is type LTime
// Goal: show runtime in seconds on the HMI
// Step 1: convert in the PLC
#tRunTime_s := DINT_TO_DINT(TIME_TO_DINT(#tRunTime) / 1000);
// Step 2: bind the HMI tag to "tRunTime_s" (DInt) with no scaling
// Step 3: format the IO field on the HMI with the "9999 s" pattern

Example for a Real (engineering unit) tag:

// Original: "#rPressure_Pa" is type Real, in Pa
// Goal: show pressure in bar on the HMI
#rPressure_bar := #rPressure_Pa / 100000.0;
// Bind the HMI tag to "rPressure_bar" (Real) with NO scaling property

This workaround is recommended for all new projects on TIA V19 until Siemens publishes a fix in a subsequent update. It avoids the broken projection path entirely and has no measurable performance cost.

7. Workaround 2 - LTime Script-Based Scaling

When the PLC cannot be modified - for example, on a running brownfield project with a frozen PLC program - the alternative is to keep the HMI tag as LTime (or any other failing type) and to perform the scaling in a Unified JavaScript attached to the IO field, triggered when the PLC value changes.

The procedure exploits the difference in bit width: 5STime is 16-bit, Time is 32-bit (DInt, milliseconds), and LTime is 64-bit (LInt, nanoseconds). The RT projection service fails when scaling is bound to the tag property, but it correctly publishes the raw value when scaling is left at default. A user-defined script can then perform the same linear conversion client-side.

8. Step-by-Step: Implementing the Script-Based Scaling Workaround

  1. Clear the HMI tag scaling property. In the Inspector under "Properties > Scaling", set all fields to default (no scaling). Compile and download to confirm the raw value displays without the yellow triangle.
  2. Create a user-defined tag of type DInt or Real in the HMI tag table. Name it, for example, scale_RawValue for the raw value and scale_EngValue for the scaled display value.
  3. Add a script trigger on the raw tag. In the Unified Engineering tree, open the HMI tag properties, navigate to "Events > Value change", and add a new JavaScript action:
// Triggered on value change of the raw LTime tag
// Source value: Tags("RawLTime")
// Engineering unit: seconds
let rawValue = Tags("RawLTime").Read();
// Convert nanoseconds to seconds: ns -> ms -> s
let seconds = rawValue / 1000000000;
// Apply the user-defined gain and offset
let scaled = (seconds - Tags("OffsetIn").Read()) * Tags("Gain").Read() + Tags("OffsetOut").Read();
Tags("scale_EngValue").Write(scaled);
  1. Bind the IO field to the engineering tag (scale_EngValue). Configure the IO field pattern as appropriate to the engineering unit (9999.9 s for runtime, 0.00 bar for pressure, etc.).
  2. Implement the inverse scaling on input. For an IO field that accepts operator entry, add a script to the "Input finished" event:
// Triggered on "Input finished" of the IO field
let entered = Tags("scale_EngValue").Read();
// Reverse the linear transform
let seconds = (entered - Tags("OffsetOut").Read()) / Tags("Gain").Read() + Tags("OffsetIn").Read();
let ns = seconds * 1000000000;
Tags("RawLTime").Write(ns);
  1. Compile and download the HMI project. Verify on the runtime that the scaled value updates within one PLC cycle of the raw value changing.
  2. Add cycle-time protection. The trigger is event-driven, so the script runs only when the tag value actually changes. For tags that toggle between identical values, you can add a debounce by writing the previous value to a shadow tag and comparing before performing the conversion.
Performance: A JavaScript trigger on a value-change event adds well under 1 ms to the tag update latency on a typical IPC. For panels with thousands of scaled tags, batch the conversion in a single scheduled script that runs every 100 ms and reads/writes all scaled values in one pass, rather than one trigger per tag.

9. MTP vs PC RT vs Simulation Behavior

The Unified Comfort Panels (MTP1500, MTP1900, MTP2200) run the same RT code as PC RT, with project images deployed to the panel. The simulation that runs in the TIA Portal on the engineering station is a different binary and does not exercise the projection service bug. The diagnostic pattern therefore is:

Environment Expected on V19 (with bug) Action
WinCC Unified RT Simulation (engineering station) Scaling works Do not rely on simulation to validate scaling
Unified PC RT on engineering IPC Scaling fails, yellow triangle Apply workaround 1 or 2
Unified Comfort Panel (MTP) Scaling fails for Time family; Int/Real also affected Apply workaround 1 or 2
Unified Comfort Panel with project from V18 Scaling works Confirm regression by upgrading a V18 project to V19

For the MTP case specifically, field reports indicate that the Time data type linear scaling fails on the panel but works in simulation, which is a textbook symptom of the projection service bug. Siemens support has acknowledged the regression in the V19 tag projection path.

10. Related Known Issues on WinCC Unified V19

The linear scaling bug is one of several V19 issues in the same release. Two related symptoms frequently appear in the same project:

  1. Real values in text-field parameter lists. A Real PLC tag passed as a parameter to a text list or symbolic IO field is not converted to a string correctly and the field shows an empty string or zero. The same tag bound to a numeric IO field works. Workaround: format the Real to a String in the PLC or in a script trigger, then bind the formatted string to the text field.
  2. Faceplate interface tags with scaling. Faceplates that use the same scaled HMI tag as their interface also show zero. The faceplate inherits the projection failure from the parent tag, so applying Workaround 1 at the source tag fixes the faceplate automatically.

Both issues are tracked in the Siemens support database under WinCC Unified V19 release notes. Refer to the Siemens Industry Online Support entry for the V19 release notes and any subsequent Update 4 / Update 5 announcements for the official fix timeline.

11. Diagnostic and Verification Procedure

To confirm the bug and validate a workaround on a live system, use the following sequence:

  1. Open the HMI tag that is showing the yellow triangle in the engineering view. Confirm that the "Properties > Value" field shows a valid raw value updating in real time on the right-hand pane.
  2. In the "Properties > Scaling" section, take a screenshot of the configured OffsetIn, Gain, OffsetOut, and scaling limits. These are needed if you intend to migrate to script-based scaling.
  3. Reset the scaling property to default (no scaling) and re-download the HMI project. The yellow triangle should disappear and the raw value should display.
  4. Apply Workaround 1 (DInt substitution) or Workaround 2 (script-based scaling) and re-download.
  5. Force the PLC value to a known state (e.g., 0, 50%, 100%) and verify the HMI shows the correct engineering value, including negative values and the configured scaling limits.
  6. Test operator input (IO field) and confirm the inverse scaling writes the correct raw value back to the PLC.
  7. Trigger an alarm limit on the scaled value and confirm the alarm activates at the correct engineering threshold, not at the raw value.
  8. Open a WinCC Unified trace session and confirm the scaled tag now reports "Good" quality throughout the test.
Service request: If the workaround does not resolve the issue, raise a service request with Siemens and quote the TIA Portal version (full string, e.g., V19.0.0.3), the HMI runtime version, the PLC firmware version, and the failing data types. Attach the project archive with the scaling property reset to default and the workaround active so that Siemens can reproduce the issue locally.

12. Long-Term Recommendation

For projects in design phase on TIA V19, the recommended path is to perform all unit conversions in the PLC and to use the HMI tag scaling property only as a backup or for display formatting, not as the primary engineering conversion. This pattern is robust against the V19 bug and is also good practice for maintenance: the engineering value of a tag is then unambiguous from the PLC symbol table, and the HMI has no hidden transformation that depends on a property dialog that is easy to overlook in a code review.

For brownfield projects, the script-based workaround in Section 7 and Section 8 is the lowest-risk path because it does not require recompiling the PLC program and can be deployed in an HMI-only maintenance release. Track the Siemens V19 Update 4 / Update 5 release notes to plan the migration back to the native tag scaling property once Siemens publishes a fix.

FAQ

Which TIA Portal V19 versions are affected by the linear scaling bug?

The bug has been reproduced on TIA Portal V19 base, V19 Update 1, V19 Update 2, and V19 Update 3 with WinCC Unified PC RT and on Unified Comfort Panels. The simulation does not reproduce the bug, so test on real hardware before accepting the result.

Which data types fail with linear scaling on WinCC Unified V19?

Int (16-bit), DInt (32-bit, intermittent), Real (32-bit), Time, LTime, S5Time (5STime), and IEC_TIMER / IEC_LTIMER blocks all show the yellow attention triangle with a zero value when scaling is enabled on the HMI tag. Bool and String are not affected.

What is the fastest workaround for a Time or LTime tag?

Convert the value to a DInt in the PLC (for example, divide nanoseconds by 1,000,000 to get milliseconds, or by 1,000,000,000 to get seconds), transfer the DInt to the HMI, and disable scaling on the HMI tag. Format the IO field with the appropriate unit pattern such as 9999.9 s.

Can I keep the LTime tag and fix it on the HMI side only?

Yes. Clear the scaling property on the HMI tag, add a script trigger on the value-change event that performs the unit conversion, write the result to a separate engineering tag, and bind the IO field to that engineering tag. Use a second script on the "Input finished" event to convert operator entries back to nanoseconds before writing to the PLC.

Why does the simulation show the correct value while the real runtime shows zero?

The simulation runs the tag cache in-process and does not exercise the cross-process projection service that performs the linear scaling on PC RT and MTP. The bug is in the marshalling between the raw PLC value and the projected scaled value across the projection service, so the simulation passes validation but the real runtime fails.

Is this bug fixed in a V19 hotfix or Update 4?

At the time of writing, no published fix is available in a V19 hotfix. Monitor the Siemens Industry Online Support V19 release notes for an official fix in Update 4 or a later hotfix. Until then, use the DInt substitution or script-based workaround described above.

Does the same bug affect faceplates that use scaled tags?

Yes. Faceplate interface tags inherit the projection failure from the source HMI tag. Fixing the source tag with the DInt substitution or the script-based workaround also fixes any faceplate that consumes that tag.

Back to blog