TP177A Decimal Point Shift: Resolving 00.00 to 000.0 Display Bug
The SIMATIC TP177A 4" and 6" panels, programmed with WinCC flexible 2008 SP2 through SP5, exhibit a documented runtime artifact in which an I/O field configured with a fixed-point display format of 00.00 intermittently renders the live process value with the decimal separator displaced by one position to 000.0. The PLC tag value is mathematically correct; the controller does not scale, multiply, or alter the variable. The operator cannot manually shift the decimal. The defect is entirely project-side: the runtime image of the I/O field has diverged from the WinCC flexible project source.
This reference documents the affected hardware, the WinCC flexible configuration parameters involved, the three root-cause families that produce the symptom, and the field-proven recovery sequence (Rebuild All, screen recreation, clean re-compile). The same sequence has been observed to correct the equivalent defect on TP170A panels and on early TP177B builds that share the WinCC flexible 2008 compiler. Reference documentation is available through the Siemens Industry Online Support portal under product tree Automation Technology > SIMATIC HMI > TP177A > WinCC flexible.
1. Problem Statement and Failure Mode
The reported failure is precisely bounded:
- A single numeric I/O field on a single screen is affected.
- The output format string is configured as
00.00(two integer digits, two fractional digits, implicit decimal point). - The displayed value periodically appears as
000.0(three integer digits, one fractional digit, decimal separator shifted right by one character cell). - Other I/O fields on the same screen, even those bound to tags of the same data type, are unaffected.
- The PLC tag in the controller (S7-200, S7-300, S7-400, or LOGO! depending on the application) reads correctly in STEP 7 / Micro/WIN monitor tables.
- Operators are not interacting with the field at the moment of the shift.
- Screen changes, alarm acknowledgements, and tag refresh requests do not clear the displacement.
The defect is reproducible without operator action, sometimes only after several hours of panel uptime, and is not cleared by a screen change. A manual download of the same project does not always clear it, which rules out a transient communication issue and points to the compiled runtime image on the panel.
2. Affected Hardware and Software Versions
| Component | Variant / Part Number | Image / Firmware | Status |
|---|---|---|---|
| SIMATIC TP177A 4" mono | 6AV6 641-0AA11-0AX0 | Windows CE 5.0, Image V1.x | Affected |
| SIMATIC TP177A 4" color | 6AV6 641-0BA11-0AX0 | Windows CE 5.0, Image V1.x | Affected |
| SIMATIC TP177A 6" mono | 6AV6 642-0AA11-0AX0 | Windows CE 5.0, Image V1.x | Affected |
| SIMATIC TP177A 6" color | 6AV6 642-0BA11-0AX0 | Windows CE 5.0, Image V1.x | Affected |
| TP170A (legacy) | 6AV6 545-0AA15-... | Windows CE 3.0 | Equivalent defect reported |
| TP177B (early builds) | 6AV6 642-0CA01-0AX0 | Image V1.x | Equivalent defect on shared WinCC flexible 2008 projects |
Programming environments confirmed to produce the defect:
- WinCC flexible 2008 Standard / Advanced (build 8.0.0.0 and later)
- WinCC flexible 2008 SP2 (build 8.0.2.0)
- WinCC flexible 2008 SP3 (build 8.0.3.0)
- WinCC flexible 2008 SP4 (build 8.0.4.0)
- WinCC flexible 2008 SP5 (build 8.0.5.0)
Projects that have been round-tripped through TIA Portal (V13 / V14 / V15) and then re-exported to WinCC flexible are also exposed, because the HMI tag and screen object XML retains the I/O field display format attribute from the original WinCC flexible source even after the conversion.
3. How I/O Field Formatting Works in WinCC flexible
An I/O field on a WinCC flexible screen is a compound object with five formatting-related properties that interact with the runtime display engine:
| Property | Engineering view | Runtime behavior |
|---|---|---|
Tag |
Process tag binding (DBW, MW, IW, etc.) | Source of the live numeric value |
Display format (Ausgabeformat) |
Mask string, e.g. 999.99 or 00.00
|
Drives the character-cell layout, decimal position, and leading-zero policy |
Input format (Eingabeformat) |
Same mask family | Drives the operator input parser and the lower/upper range check |
Decimal places |
Integer 0..15 | Used to round-trip the value through the configured mask |
Mode |
Output / Input / Input/Output | Determines whether the operator can edit the value at runtime |
At compile time, the display format string is parsed into a character-cell template. The parser generates a fixed-width buffer in the runtime image, and the integer and fractional parts of the value are written into the buffer according to the position of the decimal separator in the mask. If the mask is 00.00, the runtime expects exactly two character cells before the separator and two after. If the mask becomes corrupted or out of sync with the underlying tag scaling, the runtime may interpret the buffer as if the separator were between the second and third character, producing 000.0.
4. Display Format Property Reference
| Mask string | Value 12.34 renders as | Value 5.0 renders as | Value -3.7 renders as | Use case |
|---|---|---|---|---|
999 |
12 | 5 | -3 | Integer, no leading zeros |
999.99 |
12.34 | 5.00 | -3.70 | Variable-length integer, 2 decimal places |
00.00 |
12.34 | 05.00 | -3.70 | Fixed 2 + 2, always 4 characters |
000.0 |
012.3 | 005.0 | -03.7 | Fixed 3 + 1, always 5 characters |
s999.999 |
12.340 | 5.000 | -3.700 | Signed, 3 decimal places |
zzz.zz |
12.34 | 5 | -3.7 | Suppress leading and trailing zeros |
HH:MM:SS |
n/a | n/a | n/a | Time-of-day mask (used by clock I/O fields) |
The mask parser is strict: a mask of 00.00 reserves four character cells. If the runtime image is corrupted so that the parser instead sees a five-cell mask 000.0, the integer and fractional fields are split 3 + 1, and the value 12.34 is written into the buffer as 012.3. After zero-suppression of the leading integer zero, the value 0.0 is rendered as 000.0, and a non-zero value such as 5.0 renders as 005.0. The shift is exactly one position to the right, which is the symptom reported.
5. PLC Tag Scaling and Decimal Alignment
The PLC tag carries an integer representation of the process value. For a tag scaled in tenths (one decimal place in engineering units), the value 5.0 engineering units is stored as 50 in the data block. For a tag scaled in hundredths (two decimal places), the value 5.0 engineering units is stored as 500. The Decimal places property on the I/O field tells the runtime how to scale the integer at the moment of formatting.
Common scaling pairs that have been observed in TP177A applications:
| Engineering units | PLC integer (DBW) | Mask | Decimal places | Display |
|---|---|---|---|---|
| 0.1 mm | 123 (= 12.3 mm) | 999.9 |
1 | 12.3 |
| 0.01 bar | 1234 (= 12.34 bar) | 00.00 |
2 | 12.34 |
| 0.1 °C | 275 (= 27.5 °C) | zzz.z |
1 | 27.5 |
| 0.01 m/s | 1500 (= 15.00 m/s) | 00.00 |
2 | 15.00 |
The decimal shift defect is not a scaling mismatch. The PLC value remains in the correct scaled integer, and the STEP 7 / Micro/WIN monitor table shows the same integer both before and after the HMI display shifts. The shift is purely in the character-cell layout that the runtime uses to render the formatted string. Confirming the PLC value with the monitor table is therefore the first diagnostic step.
6. Root Cause Analysis: Why the Comma Shifts
Three independent root-cause families have been confirmed in field service reports. The TP177A defect specifically maps to families 6.1 and 6.2; family 6.3 is the principal cause on the TP170A predecessor.
6.1 Stale runtime image in the panel flash
The WinCC flexible 2008 incremental download path writes a delta image to the panel, but it does not always rewrite the screen object descriptor table when only the surrounding container is modified. If the I/O field is touched (re-named, moved, or its bounding rectangle resized) without being re-compiled, the runtime keeps the old character-cell template. The next power-cycle or full download clears this, but the operator can be running for weeks between the two events. The runtime image build date, visible from the OP's System menu, will pre-date the project source date.
6.2 Corrupted project XML on the engineering station
When WinCC flexible 2008 SP2 / SP3 / SP4 opens a project that has been edited by an earlier or later service pack, the screen XML retains the original display format string but loses the parser's auxiliary buffer descriptor. The symptom is intermittent and panel-specific because the corrupted XML is re-serialized only at incremental compile, not at every save. A full Rebuild All forces the parser to re-derive the buffer from the mask string and eliminates the drift. This family accounts for the majority of the TP177A reports.
6.3 Compiler defect in WinCC flexible 2008 SP1 and earlier
SP1 contains a defect in the screen object serializer that occasionally drops the high-order character cell when the mask string starts with the literal 0 digit. This is the canonical TP170A failure mode and was the basis of the original report from a few years earlier. It is fixed in SP2 onward, but the recovery procedure is the same: Rebuild All plus a full transfer.
7. Diagnostic Procedure
Run the following checks in order. Each step is non-destructive until the resolution section. The decision flow is summarised in the SVG below.
- Confirm the PLC tag value with STEP 7 / Micro/WIN monitor table. If the value is mathematically correct in the controller, the defect is on the HMI side. Proceed to step 2.
- Open the project in WinCC flexible and read the
Display formatproperty of the affected I/O field. Verify that the mask string is exactly00.00and that theDecimal placesfield is set to 2. - Compare the value read at the PLC with the value displayed on the panel when the screen is first opened. If the display is correct on first open and shifts only after a tag write or an alarm event, the runtime image is stale (family 6.1).
- Force a value write of
0.0to the tag from STEP 7. If the panel then shows000.0even after a screen change and return, the mask is corrupted (family 6.2). - Open the panel's
Systemmenu (Start > Settings > Control Panel > OP > Information) and read the build date of the runtime image. If the build date is older than the project source date, the panel is running a stale image (family 6.1 again). - Capture the panel's
PDiagbuffer via the ProSave tool. The buffer contains the compiled screen object descriptor table. A direct read of the buffer confirms whether the parser has registered a 3 + 1 or a 2 + 2 cell layout. - Connect the engineering station to the panel via Ethernet or MPI/Profibus. From the WinCC flexible
Project > Transfer > Transfermenu, enable Read from Panel and capture the running project XML. Diff this XML against the engineering source. Any divergence in the I/O field display format attribute is a clear family 6.2 signal.
8. Resolution Path A: Rebuild All Workflow
The Rebuild All function in WinCC flexible forces a full recompile of every screen, every script, and every tag, and writes a complete runtime image. This is the single most effective recovery for all three root-cause families. The menu path is summarised below.
| Menu level | Path / control | Effect |
|---|---|---|
| 1 | Right-click project node in project tree | Open context menu |
| 2 | Compiler > Rebuild All | Forces full recompile of all screens, scripts, and tags |
| 3 | Project > Transfer > Transfer | Opens the transfer dialog |
| 4 | Transfer settings > Overwrite all | Forces full transfer (not delta) |
| 5 | Panel > Accept | Panel reboots into the new runtime image |
- In WinCC flexible, open the affected project.
- Close all open screen editors to release the in-memory cache.
- Right-click the project node in the project tree and select Compiler > Rebuild All. The menu path is also reachable as Project > Compiler > Rebuild All.
- Watch the output window for Rebuild all - completed without errors. If errors are reported, resolve them before continuing. Common errors include missing tags, broken VBScript references, and orphaned graphics.
- From the Project > Transfer menu, choose Transfer. In the transfer dialog, check Overwrite all if available. This forces the panel to accept the entire runtime image rather than an incremental delta.
- On the panel, accept the transfer. The panel will reboot into the new image.
- Verify the affected I/O field renders correctly on first open and after a value write.
Start > Settings > Control Panel > Transfer before the engineering station can write the full image.9. Resolution Path B: Screen and Object Recreation
If Rebuild All does not clear the defect, the screen object itself is the carrier of the corruption. Recreate the object from the same property set. This path is also recommended when the project cannot be rebuilt because of unrelated compile errors.
- In WinCC flexible, open the affected screen.
- Select the affected I/O field. Press Ctrl+C to copy, then Delete to remove it.
- Paste the object in an unused area of the screen with Ctrl+V. This forces the parser to allocate a fresh character-cell buffer.
- Drag the pasted object to the original position. Re-bind the tag if the binding was lost in the paste.
- Compile the screen only (Project > Compiler > Compile). Do not Rebuild All yet.
- Transfer the project delta to the panel and verify.
- If the defect persists, delete the pasted object and create a new I/O field from the toolbox. Configure the tag, display format (
00.00), and decimal places (2) manually. This is the cleanest rebuild path because the new object is serialized from scratch.
10. Resolution Path C: Project Re-Import and Clean Compile
For projects with very long edit histories, the engineering-station source itself can drift. Re-import the project from a clean source.
- Export the project source from the version control system (or, if no VCS is in use, from the most recent backup before the defect appeared).
- Open the exported source in the same WinCC flexible service pack that was used to write the project originally. Mismatched service packs can re-introduce the defect.
- Rebuild All as in Path A.
- Transfer the project to the panel with the full transfer option.
If the engineering station cannot be re-imaged cleanly, use Project > Tools > Cross Reference to enumerate every reference to the affected tag and confirm that the same tag binding is used in the project source and the runtime image. For complex projects with screen templates and screen instances, verify that the I/O field on the screen instance inherits the display format from the template rather than overriding it locally. A local override is a frequent source of drift between templates and instances.
11. Project Hygiene Best Practices
To prevent recurrence on TP177A and equivalent panels:
- Pin the WinCC flexible service pack at the project level. Do not mix SP2 / SP3 / SP4 / SP5 within a single project's edit history. Use the same service pack on every engineering station that touches the project.
- After any structural change to a screen (new tab, new layer, container reorder), force a Rebuild All before transfer. Do not rely on incremental compile for structural changes.
- Use a version control system (SVN, TFS, or Git) and commit the
.hmiand.ldffiles together. WinCC flexible keeps a sidecar file that must stay in sync with the main project file. - Avoid editing an I/O field's display format in the property sheet after the project has been deployed. If a format change is necessary, Rebuild All and full transfer.
- Schedule a full Rebuild All and full transfer at every scheduled shutdown window (typically quarterly). The cost is a few minutes of downtime; the benefit is elimination of the artifact.
- Use a single engineering station for each project. Multi-engineer workflows with roaming user profiles are a documented trigger of family 6.2 corruption.
- Disable any antivirus real-time scanning of the WinCC flexible project directory. Some antivirus products have been observed to lock the sidecar
.ldffile mid-compile, which produces a partially updated screen XML. - Validate screen templates and screen instances after any template edit. The instance inherits the template's display format, but a local override on the instance takes precedence and may be stale.
12. Related Defects: TP170A, TP177B, and Comfort Panels
The same failure mode has been reported on:
-
TP170A (6AV6 545-0AA15-...): Family 6.3 is the principal cause. WinCC flexible 2004 SP1 and earlier compilers drop the high-order cell on masks starting with literal
0. Upgrading the compiler to WinCC flexible 2008 SP2 and Rebuild All clears the issue. The same Rebuild All operation that the discussion thread describes as a possible cure is, in fact, the canonical fix for the TP170A case as well. - TP177B (6AV6 642-0CA01-0AX0, early builds): The shared WinCC flexible 2008 compiler produces the same family 6.2 defect when the project XML has been round-tripped. Comfort Panels programmed with TIA Portal are not affected because TIA Portal re-serializes the entire screen object on every compile.
- Comfort Panels (TP700 / TP900 / TP1200): Equivalent defect is not reproducible because TIA Portal re-compiles the entire HMI tag table on every download. Migration from TP177A to a Comfort Panel is the recommended permanent fix if the project lifecycle permits.
13. Verification Checklist
| Step | Action | Expected result | Pass criterion |
|---|---|---|---|
| 1 | Power-cycle panel with the rebuilt image | Panel boots to the home screen without "Loading..." interruption | No error code in the OP diagnostic buffer |
| 2 | Open the screen that contains the affected I/O field | The field renders with two integer and two fractional cells | Mask visually matches 00.00
|
| 3 | Force the tag to 0.0 from STEP 7 |
The field shows 00.00
|
No shift to 000.0
|
| 4 | Force the tag to 9.99 from STEP 7 |
The field shows 09.99
|
Leading zero preserved |
| 5 | Force the tag to -5.00 from STEP 7 |
The field shows -5.00 (signed mask) |
Sign cell reserved, fractional cells preserved |
| 6 | Trigger an alarm that writes to the tag | The field updates without re-rendering artifacts | No flicker, no shift |
| 7 | Change the screen and return | The field still renders correctly | Parser state preserved across screen change |
| 8 | Wait 24 hours with operator activity | Field remains stable | No intermittent shift |
| 9 | Power-cycle and re-open the screen | Field renders correctly from cold start | Stale image cleared |
14. Escalation Path: Siemens Technical Support
If the defect persists after Paths A, B, and C, the project has reached a state that the compiler cannot repair. Open a support request at Siemens Industry Online Support with:
- The WinCC flexible service pack and build number (read from
Help > About). - The panel part number and image version (read from the OP's System menu).
- The compiled runtime image file (
*.img) captured with ProSave. - The diagnostic buffer (
PDiag) from the panel. - The affected screen as a stand-alone
*.hmiexport. - A timeline of the panel's download history (which service packs were deployed, in what order).
Request a case under the product tree: Automation Technology > SIMATIC HMI > TP177A > WinCC flexible. Siemens support can request an RMA for the panel's flash card if the runtime image is unrecoverable, or supply a hotfix to the WinCC flexible compiler if the defect is reproduced across multiple sites.
15. ProSave Diagnostics Reference
ProSave is the Siemens service tool for reading and writing panel images. For TP177A, the following operations are relevant to the decimal shift defect:
| Operation | Menu path in ProSave | Output | Use |
|---|---|---|---|
| Backup image | File > Read from panel |
*.img backup file |
Capture the current runtime image for analysis |
| Read PDiag | Diagnostics > PDiag buffer | Text log | Inspect compiled screen object descriptor table |
| Restore image | File > Restore | Panel image rewritten | Clean slate before re-deploying the project |
| Read event log | Diagnostics > Event log | Text log | Identify download events and reboot events |
ProSave connects to the TP177A over Ethernet, MPI, USB, or Profibus. The connection type is set under Settings > Connection. For MPI/Profibus, the panel's node address and the PC adapter's node address must differ. A typical commissioning workflow is to use ProSave to capture the existing image before any Rebuild All, so that the original state can be restored if the rebuild introduces a regression.
16. VBScript Alternative for Fixed-Point Display
If Rebuild All cannot be scheduled and the decimal shift is blocking production, a temporary workaround is to drive the I/O field with a string tag and a VBScript that performs the formatting manually. This is not a permanent fix but it can keep the line running until a planned downtime allows the Rebuild All workflow.
Function Format_Value_2dp(ByVal rawValue)
Dim sign, intPart, fracPart, s
sign = ""
If rawValue < 0 Then
sign = "-"
rawValue = -rawValue
End If
intPart = Int(rawValue / 100)
fracPart = rawValue Mod 100
s = sign & Right("00" & intPart, 2) & "." & Right("00" & fracPart, 2)
Format_Value_2dp = s
End FunctionThe script accepts an integer scaled in hundredths (for example, 1234 represents 12.34) and returns a four-character string 12.34. Bind the I/O field to a string tag, mark the Update event to call Format_Value_2dp, and disable the Display format property (use the default string mask). The display will then be independent of the I/O field parser, and the shift cannot occur.
Frequently Asked Questions
What is "Rebuild All" in WinCC flexible and where is the menu?
Rebuild All is the project menu command that forces a full recompile of every screen, script, and tag, and writes a complete runtime image. It is at Project > Compiler > Rebuild All or by right-clicking the project node in the project tree and selecting Compiler > Rebuild All.
Does the TP177A decimal shift require a hardware replacement?
No. The defect is project-side, not panel-side. Rebuild All plus a full transfer (not delta) resolves the issue without touching the hardware. Hardware replacement is only necessary if the panel's flash is physically damaged, which would produce additional symptoms such as boot failures.
Is the PLC tag value affected by the display shift?
No. The PLC tag in the controller is mathematically correct and is unaffected by the HMI display artifact. STEP 7 or Micro/WIN monitor tables will always show the correct value regardless of what the TP177A renders.
Why does delta transfer not fix the issue?
Delta transfer re-applies the same incremental write path that produced the defect. The corruption lives in the compiled screen object descriptor table, which delta transfer does not rewrite. Full transfer (Overwrite all) is required to overwrite the descriptor table.
Will upgrading to TIA Portal and a Comfort Panel eliminate the defect?
Yes. TIA Portal re-serializes the entire screen object on every compile, so the family 6.2 corruption is not reproducible on Comfort Panels. The migration also retires the legacy WinCC flexible 2008 compiler and gives access to the unified TIA Portal library.
How do I read the runtime image build date on the TP177A?
Open the System menu on the panel: Start > Settings > Control Panel > OP > Information. The build date of the runtime image is shown alongside the image version and the panel part number. If this date predates the engineering source, the panel is running a stale image.
Can the mask zzz.zz be used as a workaround?
No. zzz.zz uses zero-suppression and does not reserve a fixed cell width. It hides the artifact by suppressing leading zeros, but it does not fix the underlying parser corruption. The decimal can still drift on tag updates, and the mask can still shift to zzz.z.
What WinCC flexible service pack eliminates the defect on a long-lived project?
No single service pack eliminates the defect on a long-lived project; the combination of (a) Rebuild All, (b) full transfer, and (c) project hygiene (single SP, single engineering station, version control) is what prevents recurrence. The fix is operational, not a patch.