Resolving PCS7 V8.1 SP1 Faceplate 'Error' Text Under Command

David Krause15 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

Problem Summary

After migrating a Siemens PCS 7 project from V8.0 SP1 to V8.1 SP1 (or running an original V8.0 SP1 project against a V8.1 SP1 engineering station), the WinCC Runtime faceplates for APL motor and APL valve blocks display the literal string Error in the Command field instead of the expected operator verbs Start, Stop, Open, or Close. The block still executes its command when the faceplate button is pressed, but the human-readable command label is wrong, which is a safety and operability concern in a live plant.

The issue is rooted in the way PCS 7 stores text references for the StartMan, StopMan, OpenMan, CloseMan, and analogous command fields of the standard APL block types. Each command text is held as a text reference—a 16-bit numeric identifier (Text ID) that points into the project's WinCC Text Library. The faceplate reads the ID and substitutes the configured language text at runtime. When the ID points to a Text Library entry that contains the string Error, the operator sees Error.

Affected Software Versions

Engineering Tool Version Status
SIMATIC PCS 7 V8.0 / V8.0 SP1 / V8.0 SP2 Source project that exhibits the symptom after migration
SIMATIC PCS 7 V8.1 / V8.1 SP1 Engineering/runtime environment where the faceplate displays the wrong text
APL Block Library APLIB V8.1 / V8.1 SP1 Contains Motor/Valve faceplate with text-reference command labels
WinCC Text Library Project-scoped Holds language-specific command strings keyed by Text ID

Observed Symptoms in Runtime

  • Motor block faceplate (e.g. MOT_SPED, MOT_REV, MOT_SLOW) shows Error in place of the Command label, while the Mode field correctly shows Automatic or Manual.
  • Valve block faceplate (e.g. VLV_ANA, VLV_SO, VLV_MOT) shows Error instead of Open / Close.
  • Pressing the button on the faceplate still drives the actuator. The block logic is unaffected; only the label is wrong.
  • The CFC instance of the block, opened on the engineering station, shows the StartMan#string1 (or equivalent) input as empty on the operator faceplate, even though the field appears blank in the CFC editor.
  • A newly created PCS 7 V8.1 SP1 project (no migration) does not show the symptom—only migrated or converted projects do.
Safety implication: An operator who sees Error in the Command field may hesitate to issue a Start/Stop or Open/Close, even though the button is functional. In an emergency this delay is unacceptable. Treat the symptom as a P1 operator-display bug and resolve it before returning the affected station to service.

Root Cause Analysis

PCS 7 APL faceplates use text reference I/O fields, not hard-coded strings, so that the operator-visible text can be translated for multi-language installations. The text reference is a numeric index into the WinCC Text Library. Internally the value of StartMan#string1 is stored as an INT (16-bit signed) that equals the Text Library index of the desired command word.

Three distinct values are observed across versions:

Project origin StartMan#string1 value Resolved text in V8.1 SP1 Text Library Visible result
V8.0 SP1 project (original) 1 Error Error shown
V8.0 SP2 project (original) 0 (unmapped index) Empty/Error
V8.1 SP1 new project (no migration) 81 empty string (reserved default) Default block text shown (Start/Stop/Open/Close)
V8.0 SP1 migrated to V8.1 SP1, full compile 1 (retained) Error Error shown

The mechanism is as follows:

  1. The APL block type MOT_SPED (and family) declares a STRING input StartMan with a sub-element string1 that is a text reference.
  2. At OS compile time, WinCC scans every text reference on every block instance and ensures a Text Library entry exists for the resolved ID.
  3. If the field is left blank in the CFC editor, the compiler should assign the default text reference ID that the block type defines for the language of the OS. In V8.1 SP1 that default is 81, which is the first ID reserved for the default command word and is mapped to an empty string in the standard Text Library template.
  4. When a V8.0 project is opened in V8.1 SP1, the existing instance DB retains the old start value from the V8.0 compile. For the APL motor/valve block types that value was 1 in V8.0. After migration the instance keeps ID 1; V8.1 SP1's Text Library has Error mapped at ID 1, so the faceplate shows Error.
  5. The CFC editor masks the value as blank in the property view because the start value differs from the block-type default. The operator therefore has no visible hint that a non-default ID is in the DB.

Copying the V8.1 AP library into the migrated project (so the block types are upgraded) does not force the existing instance DBs to rewrite their start values. The Windows Convert project data tool likewise leaves instance-level start values untouched. A full download to PLCSIM with Reset clears the PLC runtime DBs but does not change the offline CFC source.

How PCS 7 Text References Work

Each APL faceplate command field is a text reference structured as a UDT (User-Defined Type) with a state (0 = invalid, 1 = valid), a string1 (the text reference ID for the active language), and a fallback string2 (optional second-language ID). The block type defines an initial value of string1 = 81, which is a sentinel meaning use the block-type default command text (e.g. Start in English, Ein in German, etc.).

The WinCC Text Library is bilingual by default; the German entry occupies even IDs (0, 2, 4, ...) and the English entry occupies odd IDs (1, 3, 5, ...). Reserved ranges:

Text ID range Typical owner Notes
0 Reserved / invalid Used historically as default; in V8.1 SP1 not used by APL
1 Custom Often the first user-added string; in V8.1 SP1 maps to Error in migrated libraries
2 - 79 System / APL base Mode labels, status texts, alarm classes
80 Reserved Empty sentinel (older convention)
81 APL default Empty sentinel - use block default text
82 - end User-defined Added when operators type new command words in CFC

The rule implemented by the OS compiler is therefore:

  1. Read instance.StartMan.string1.
  2. Look up the text ID in the active language column of the project Text Library.
  3. If the entry is empty, fall back to the block-type default command verb.
  4. If the entry contains a non-empty string, render that string in the faceplate.

In a freshly compiled V8.1 SP1 project the value is 81 (empty), so step 3 fires and the operator sees the correct verb. In a migrated project the value is 1, the V8.1 SP1 Text Library contains the string Error at ID 1, so step 4 fires and the operator sees Error.

Diagnostic Procedure

Run the following checks on the engineering station before attempting any change. Each step is non-destructive.

  1. Identify the OS project language. In WinCC Explorer open Computer → Properties → Graphic Runtime → Languages and note which language is active. The default English Text Library and the default German Text Library map the same IDs to different strings; a project compiled with a custom default language may have a different string at ID 1.
  2. Inspect the Text Library. In WinCC Explorer open Text Library from the project root. Filter by ID = 1 and confirm that the active-language column contains the literal string Error. Also check ID = 81 and confirm the entry is empty.
  3. Open the CFC instance. In the plant view, open the chart containing the affected motor or valve block. Select the block and switch to the Signals tab. Locate StartMan (motor) or OpenMan / CloseMan (valve). The String_1 column will appear blank—this is the cosmetic mask; the actual value is held in the instance DB.
  4. Read the instance DB value. Open the S7 Program, locate the instance DB (e.g. DB1200 for a motor instance) and view the value of StartMan.string1 (offset depends on the block type). For a standard MOT_SPED V8.1 the offset is around byte 200; use the block's Information → Compile tab or open the DB with Monitor/Modify in PLCSIM. The value should be 81 in a healthy project and 1 (or 0) in a migrated broken project.
  5. Confirm the runtime label. Activate the OS Runtime and open the affected faceplate. The Command field should show Error. Click the button and confirm the actuator responds—this proves the wiring is correct and the problem is purely cosmetic.

Step-by-Step Resolution

The clean fix is to make the OS compiler re-emit the instance with the V8.1 SP1 default value (81) for every command text reference. Use the delete-the-text-and-recompile procedure, which is the only way to reset the start value to the block-type default without manually editing every instance.

Method A - Recommended: Reset the text reference to the block-type default

  1. In the CFC, open each affected chart.
  2. For every APL motor block, click the block, switch to the Signals tab, scroll to StartMan, click the String_1 cell. The cell will appear blank; select it, press Del or right-click and choose Delete. Repeat for StopMan, OpenMan, CloseMan, and any other command field on the block.
  3. For every APL valve block, repeat the procedure for the appropriate command fields. For two-position valves (VLV_SO) the relevant inputs are OpenMan and CloseMan. For motorized valves (VLV_MOT) the relevant inputs are OpenMan, CloseMan, StopMan.
  4. Close all CFC editors. From the Plant View right-click the Charts folder and choose Charts → Compile → All Charts with Reset of Run Sequence (or Compile → All Charts if Run Sequence reset is not desired). This forces the SCL compiler to re-emit the instance DB sections that hold the text references.
  5. Perform an OS Compile: in WinCC Explorer right-click the OS and select Compile OS → Full Compile with Reset. The Full Compile with Reset option rebuilds the Text Library entries and the tag connections from the current S7 program.
  6. Download the S7 program to the AS (PLCSIM or real CPU) using Download → Full Download with the Reset option enabled.
  7. Activate WinCC Runtime and verify the faceplate now shows Start, Stop, Open, Close as expected.

After the full compile the instance DB should report StartMan.string1 = 81, which is the V8.1 SP1 block-type default. The OS compiler sees ID 81 as the empty sentinel and renders the block-type default command verb.

Method B - Targeted: edit a single instance manually

If only one or two faceplates are wrong and the rest of the project is healthy, fix the affected instances by typing the command word directly into the CFC cell.

  1. Open the CFC chart containing the affected block.
  2. Click the StartMan input. The input field opens.
  3. Type the desired verb (e.g. Start in English, Ein in German). Press Enter. The OS compiler allocates a new Text Library entry with a fresh ID (typically > 81) and writes that ID into the instance DB.
  4. Compile the chart, then perform a full OS compile, then full download.

This is acceptable but it changes the operator label from the block-type default to the user-typed string. If the active OS language is later switched, the user-typed string remains in the original language. Use Method A when the plant's standard labels must be preserved across language changes.

Method C - Last resort: clear the offending Text Library entry

If the project must be left untouched except for the Text Library, edit Text Library → ID 1 and replace the string Error with the correct command verb (e.g. Start). Save the project, perform a full OS compile, and download.

Caution: Editing ID 1 affects every text reference that resolves to 1, not just the motor/valve blocks. Other faceplate fields, alarm classes, and status displays may share that ID. Audit the project with the WinCC cross-reference tool (Tools → Cross Reference) before using this method. Method A is almost always safer.

Verification

  1. Static check: Re-open the instance DB and confirm StartMan.string1 = 81 (or the new ID assigned by Method B).
  2. Cross-reference check: In WinCC Explorer, open Tools → Cross Reference, set the filter to Text Library ID = 1, and confirm no motor/valve command fields are listed. The result should be empty (or contain only intentional references such as alarm classes).
  3. Runtime check: Activate WinCC Runtime. Open one motor faceplate, one valve faceplate, and one additional faceplate of a different type for control. Confirm the Command field shows the expected operator verb on each.
  4. Multi-language check: Switch the active runtime language (WinCC Explorer → Computer → Properties → Languages → Active). Reload the faceplate. The Command field should update to the localized verb, proving the text reference is healthy.
  5. Functional check: Click the Command button, confirm the actuator responds, and confirm the feedback text (Running, Stopped, Opened, Closed) updates in the same faceplate.

Prevention and Best Practices

  • Establish a project baseline in the active version. After every PCS 7 major upgrade, create a small reference project (one motor, one valve, one PID) and compile it. Compare the resulting Text Library to the production project's library. Differences in reserved IDs (0, 1, 81) are the leading indicator of a migration mismatch.
  • Avoid hand-typing the command verb in CFC. Leave StartMan, OpenMan, etc. blank in the CFC. The block-type default and the V8.1 SP1 Text Library are designed to work together. Custom strings should be entered only when the operator must see wording that differs from the standard library (e.g. a plant-specific synonym).
  • Document the default-language change. If a project is converted to a non-English default language, re-run the reference-project test to confirm the Text Library entries at IDs 0, 1, 81 still hold the expected strings. Adjust the master text library with the Siemens Text Library Master before the first OS compile.
  • Lock the Text Library after commissioning. Use the WinCC project option Disable Text Library editing at Runtime (or a project-wide change-management procedure) to prevent operators from inadvertently adding new entries that consume IDs in the reserved range.
  • Validate migrated projects on a test station before plant rollout. Always do a dry run of the migration in a sandbox, activate WinCC Runtime, and open at least three motor faceplates, three valve faceplates, and three PID controller faceplates. The visual check catches the present bug in under five minutes.

Field Notes on Faceplate Command Labels in Other Systems

The text-reference pattern used by PCS 7 APL blocks is conceptually similar to the command-field mechanism in other DCS/PLC faceplate libraries. In a Rockwell PlantPAx Process Controller faceplate the command label is a STRING input on the Add-On Instruction, and the faceplate displays whatever string the engineer types in the AOI; no external text library is involved, so the present bug does not have a direct equivalent. Reference: PlantPAx Faceplates for Process Controller Instructions.

In an Omron NS-Series Face Plate Auto-Builder project, the valve command button is bound to a STRING tag and the faceplate renders a literal label such as ON. If the bound tag is empty or invalid, the faceplate shows an error token in the status area rather than in the command area. Reference: WS02-NSFC1-EV3 Operation Manual.

In an ABB UMC22 actuator controller faceplate, the valve command is derived from the input parameter MCC and the faceplate exposes Main Contactor Error and Position Error as separate alarm tiles, never mixed into the command field. Reference: UMC22_Act02 Functional Description.

Across vendors the lesson is the same: when a faceplate substitutes the operator command label from a structured data source (text reference, AOI string, configuration parameter), a mismatch between the source value and the human-language rendering will surface as a wrong label. The fix is always to make the source point back to the design-time default and re-compile.

Quick Reference: Healthy vs Broken Text Reference

Property Healthy (V8.1 SP1 new) Broken (V8.0 migrated)
StartMan.string1 in instance DB 81 (decimal) 1 (decimal)
Text Library ID 81, active language (empty) (empty)
Text Library ID 1, active language (empty) or Start after fresh compile Error
Faceplate Command field Start Error
Block logic Functional Functional
Required action None Delete String_1 in CFC, full compile with reset, full download

Troubleshooting Matrix

Symptom Likely cause Fix
Faceplate shows Error on every motor/valve, Mode field correct Migrated instance DB keeps V8.0 start value of 1 Method A - delete command text, full compile with reset
Faceplate shows Error on a single block, others healthy Engineer typed a value in CFC and removed it without recompiling Method B - retype the command word and recompile, or delete and full compile
Faceplate shows the wrong custom verb (e.g. RUN instead of Start) Text Library ID 1 was hand-edited Revert ID 1, or rebuild the text reference with Method A
Faceplate shows the correct verb in German but Error in English Default language was changed and Text Library master not refreshed Re-import the master Text Library and recompile
Faceplate is empty in the Command field Block type version mismatch - instance uses a newer block type than the OS knows Copy the matching AP library, full compile, full download
Multiple operators see Error on different blocks across the plant Migration issue at the project level Method A on a representative sample, then roll out chart-by-chart with a controlled OS compile

Why does the CFC editor show the text field as blank if the actual value is 1?

The CFC property view displays the start value of the input only when it differs from the block-type default. In V8.1 SP1 the default for StartMan.string1 is 81; values such as 1 (inherited from a V8.0 instance DB) are non-default and therefore rendered as blank in the editor. Inspect the instance DB directly with PLCSIM or a STEP 7 monitor to see the real value.

Does a full download to PLCSIM with reset clear the bad start value?

No. The full download resets the PLC runtime DBs to their compiled initial values, but the offline CFC source still contains the non-default start value, so the next OS compile writes 1 back. You must also delete the command text in the CFC and re-compile the chart so the offline source matches the V8.1 SP1 default (81).

Is there a way to reset every text reference in the project with a single command?

Practical option: open every CFC chart, press Ctrl+A on the block, switch to the Signals tab, filter on the Man inputs (StartMan, StopMan, OpenMan, CloseMan, etc.), clear the String_1 column, then run Charts → Compile → All Charts. Use the WinCC Cross Reference tool against the Text Library to confirm that no instance DB still references the bad ID after the compile.

Will changing the default OS language at the project level fix the problem?

No. The bug is an ID value mismatch (1 vs 81), not a missing translation. Switching the active runtime language re-renders the existing IDs against the new language column, but ID 1 will still resolve to Error in any language where that string is mapped. Use Method A to reset the text reference value to the block-type default.

Are PID controller or dosing block faceplates affected by the same issue?

Potentially. The same text-reference pattern is used on the operator input fields of the PID, DOSE, COUNT, and analogous APL block types. Run the WinCC Cross Reference tool filtered to Text Library ID 1 across the entire OS scope; every match is a candidate for the same fix. Apply Method A chart-by-chart rather than project-wide to keep OS compile time under control.

Back to blog