Configuring Dynamic Text Lists in WinCC TIA Portal V14
Dynamic text lists in WinCC (TIA Portal) provide a string-multiplexing mechanism: a single HMI text field displays one of several predefined strings based on the runtime value of a connected PLC tag. This mechanism is essential for state indication, error code translation, mode displays, and multilingual operator feedback without rebuilding screens. The technique has existed since WinCC flexible 2008 and is fully supported in TIA Portal V14 through V20 with the WinCC RT Unified and WinCC Comfort/Advanced engineering paths.
This article consolidates the field-proven configuration procedure, the precise field-reference syntax, the three reference types available inside a text list entry, the platform-compatibility matrix (Basic Panel vs. Comfort Panel vs. Advanced RT vs. RT Unified), the migration steps for the V13 sample project published under Siemens application note 57025748, and the parallel implementations in Beckhoff TwinCAT and Schneider EcoStruxure Machine Expert for cross-platform reference. Every URL links only to vendor documentation portals.
1. Overview: What a Dynamic Text List Does
A text list (German: Textliste) is an HMI object that maps an integer index to a list of strings. The index is read from a tag at runtime; the string at that index position is then displayed wherever the text list is referenced. The mapping can be parameterized in three ways:
- Bit (0/1) — index range 0..1, used for boolean status (e.g. OFF/ON).
- Bit (0..31) — index range 0..31, used for 32-valued bit fields.
- Decimal — integer index in the configured range, default 0..9, freely resizable.
A dynamic text list goes further: inside the displayed string you can embed a second-level field that is itself substituted at runtime. This produces formatted output such as Piece_Code: 20 or Status: 0x0A (Running). The dynamic part is created with the field-reference syntax <FieldType:Tag:Width,ListName> or, in older V14 dialogs, the simplified form Text<Tag : 20, Piece_Code>.
The result is functionally equivalent to a CASE statement executed inside the HMI runtime: the HMI parses the tag value, looks up the matching entry, formats the optional embedded field, and renders the resulting string to the screen.
2. Prerequisites
| Item | Requirement | Notes |
|---|---|---|
| TIA Portal | V14 SP1 or later (V14, V15, V15.1, V16, V17, V18, V19, V20) | The field-reference syntax is identical from V14 onward; the dialog was reorganized in V17 and again in V20 RT Unified. |
| HMI software | WinCC Comfort, WinCC Advanced, or WinCC Professional | WinCC Basic is not sufficient — Basic Panel projects cannot author dynamic text lists. |
| Panel type | Comfort Panel, Advanced RT (WinCC RT Advanced), or PC RT (WinCC RT Professional) | Basic Panels (KTP400 Basic, KTP700 Basic, etc.) execute text lists but ignore the embedded field references except in alarm texts. |
| PLC tag | INT or WORD connected via HMI tag | Tag must exist in the HMI tag table; S7-1200/S7-1500 symbolic addresses are supported. |
| License | WinCC Comfort/Advanced license or trial | Comfort Panels ship with a runtime license; PC RT requires a valid license key. |
3. The Field-Reference Syntax in Detail
The full syntax for an embedded field inside a text list entry is:
<[Format]:[Tag]:[Width].[Decimals]:[TextList]>
Each positional segment is optional. The minimum useful form is <Tag:TextList>, which means: take the value of Tag, look it up in TextList, and substitute the resulting string. The complete grammar and segment semantics are listed in the table below.
| Segment | Syntax | Meaning | Default |
|---|---|---|---|
| Format | decimal, hex, binary, floating-point, date, time, string | How the tag value is converted to a string before substitution | Decimal (signed) |
| Tag | HMI tag name (string) | Source tag whose value drives the format or lookup | None — must be supplied |
| Width | Integer 1..32 | Number of characters in the formatted output, left-padded with spaces | Default width of the data type |
| Decimals | Integer 0..15 | Number of decimal places for floating-point formats | 0 |
| TextList | Name of an existing text list | Second-level lookup: the formatted tag value is used as an index into this list | None — required for the textlist-reference form |
The example discussed in the source thread — Text<Tag : 20, Piece_Code> — uses the V14 dialog's compact notation: Tag is the source PLC tag, the literal "20" is a width specifier, and Piece_Code is the second text list whose string is substituted in place. Modern TIA Portal (V17+) renders the same intent as <decimal:"Piece_Tag":20:"Piece_Code"> in the configuration grid.
4. The Three Reference Types Inside a Text List Entry
When you right-click inside a text list entry string and choose Insert > Field, TIA Portal offers three reference kinds. They are not mutually exclusive — you can stack them within the same entry to produce compound output.
4.1 Tag Value Reference (with Formatting)
Inserts the runtime value of a tag, formatted as a numeric or string type. The format dropdown supports signed decimal, unsigned decimal, hexadecimal (with 0x prefix on V16+), binary, floating-point, date, and time. The width and decimals parameters control padding and precision. Example output on a value of 26: 26, 0x1A, 00011010.
4.2 Text List Reference
Inserts a string retrieved from a different text list, selected by the current tag value. This is the "string multiplexing" mode. The referenced text list must already exist in the project with a matching index type. Example: index value 7 in the main list points to entry 7 of the Mode_Names list, which contains the string "Heating".
4.3 Control Tag Value Reference
Inserts the value of the control tag — that is, the tag that selected the current entry. This is useful for echoing the index back to the operator next to the descriptive string. Example: State [3] = Pressure_low where the 3 is the control tag value formatted as a decimal.
4.4 Compound Example
Consider the text list Alarm_Text with three entries for control-tag values 0, 1, 2. Entry 1 might read:
Motor {Tag:motor_speed:5} rpm — state: {TextList:State_Names}
At runtime, with motor_speed = 1450 and State_Names[1] = "Running", the panel renders Motor 1450 rpm — state: Running. The two spaces before 1450 are the result of the width specifier 5 applied to a 4-digit number.
5. Step-by-Step Configuration in TIA Portal V14
- Open the HMI device configuration for the Comfort Panel or PC RT. In the project tree, expand the HMI device and double-click Text and Graphic Lists.
- Add a new text list. Click Add new in the toolbar. Name it, e.g. Mode_Text. Choose Decimal as the list type and set the range to 0..15.
- Populate the entries. Fill columns Value (0, 1, 2, …) and Text ("Off", "Manual", "Automatic", …). You can also enter alternative text rows for additional languages under the <Add new language> column.
- Create a second text list named Code_Text with entries 0..9 mapping to "OK", "E-Stop", "Low pressure", etc. This is the second-level list used in compound references.
- Insert a dynamic field into an entry. Select the row whose text should include the dynamic value, click into the Text cell, and place the cursor where the field should appear. Right-click and choose Insert > Field > Tag value. In the dialog, pick the HMI tag (e.g. PLC.MotorSpeed), set format to Decimal, width 5, and click OK.
-
Add a text list reference. Move the cursor to the end of the same entry. Right-click and choose Insert > Field > Text list reference. Pick Code_Text from the dropdown. TIA Portal will write
{TextList:Code_Text}into the entry. - Wire the list to a screen object. Drag Mode_Text from the project tree onto a text field, symbolic I/O field, or button label. The Properties pane shows the Text list selection; leave it as Mode_Text.
- Assign the control tag. In the Properties pane of the screen object, expand General and set Process value to the HMI tag that drives the index, e.g. PLC.Mode (INT).
- Compile and download the HMI project to the panel or PC RT. Use Compile > Software (rebuild all) to force regeneration of the text list database.
- Verify in RT by forcing PLC.Mode to 3 in the PLCSIM or real PLC and confirming the panel displays entry 3 with the embedded field correctly formatted.
6. Migrating the V13 Sample Project to V14
Siemens application note How do you create dynamic text lists in WinCC (TIA Portal)? ships a sample project built in V13 SP1. The file format is forward-compatible with V14 SP1, but two manual changes are required.
- Open the .ap13 file in TIA Portal V14 SP1. The migration wizard detects the older version and offers Migrate to current version. Click OK; this rewrites the project to .ap14. Compilation may surface warnings about deprecated function-block versions — accept the proposed update for each FB.
- Update the HMI image version. If the target Comfort Panel firmware (HMI image) is older than V14, open Devices & Networks > HMI device > Device Properties > General and select a matching image. Mismatched image versions are a common source of the "the field reference is shown as literal text" fault.
- Re-import the text list. The V13 sample stores the text list under Texts and Graphics. In V14 this node is renamed to Text and Graphic Lists (singular). Drag the list from the migrated project tree into the new location if it did not migrate automatically.
- Re-bind the screen object. Screen objects pointing to the migrated text list lose the binding during migration. Re-select the list name in the Properties pane under Miscellaneous > Text list.
- Re-compile and simulate with the V14 PLCSIM and the V14 RT simulator. The behavior should match the V13 sample identically.
7. Panel-Compatibility Matrix
| Platform | Plain text list (index lookup) | Embedded tag field | Embedded textlist reference | Notes |
|---|---|---|---|---|
| KTP400 Basic / KTP700 Basic / KTP900 Basic / KTP1200 Basic | Yes | No (alarm texts only) | No | Tag/textlist embedded values are possible for alarms but not for screen text fields or button labels. |
| Comfort Panels (TP700..TP2200, KP700..KP1500) | Yes | Yes (image V14.0.0+) | Yes | Firmware update via SIOS if an older image is installed. |
| WinCC RT Advanced (PC-based) | Yes | Yes | Yes | Full support, including long text lists (≥ 32 000 entries). |
| WinCC RT Professional | Yes | Yes | Yes | Same syntax; supports C-script extension for text list updates. |
| WinCC Unified (RT Unified, TIA V16+) | Yes | Yes (different dialog) | Yes | See Dynamizing texts in a text list (RT Unified). |
8. Cross-Platform Reference: Beckhoff and Schneider
The same conceptual pattern exists on other controllers but with vendor-specific terminology. The mapping is useful when porting screens between platforms.
8.1 Beckhoff TwinCAT 3
Beckhoff's Managing Dynamic Text in a Text List describes a TwinCAT visualization text list created under Visualization > Text list. The list has a Variable property (the index source) and per-value Text properties. Multilingual support is provided by the Text-id field. TwinCAT supports nested text lists by binding the index variable of one list to the current entry index of another, but it does not use the Siemens <…> placeholder syntax — the nesting is configured via the property grid rather than in-line.
8.2 Schneider EcoStruxure Machine Expert
Schneider's Text List help topic documents the Magelis/HMI configuration object. The text index (ID) is a string of characters and must be unique within the list; in contrast to Siemens, Schneider lets the index be a string rather than an integer, which simplifies keyed lookup. Online modification of dynamic texts is supported without recompile, which is the main practical advantage over the Siemens model.
8.3 Conceptual Comparison
| Feature | Siemens TIA Portal V14+ | Beckhoff TwinCAT 3 | Schneider Machine Expert |
|---|---|---|---|
| Index type | Integer (0..n) | Integer or string (configurable) | String ID (mandatory) |
| Embedded field | Inline <…> placeholder | Property-grid binding | Expression field in entry |
| Online edit | Not during runtime; recompile required | Yes (per Beckhoff docs) | Yes (per Schneider docs) |
| Multilingual | Per-language columns in text list editor | Text-id with translation table | Per-language resource files |
9. Troubleshooting Matrix
| Symptom | Likely root cause | Remedy |
|---|---|---|
Panel shows literal <…> text |
Basic Panel used, or HMI image older than V14.0.0 | Switch to a Comfort Panel or update firmware via SIOS. |
| Field shows raw index, not the formatted value | Tag is not connected, or wrong data type (e.g. BOOL fed to an INT list) | Check HMI tag connection in Connections; ensure data type matches the list type. |
| Embedded second-level list is empty | Referenced text list does not exist or has no entry at the current index | Open the referenced list and confirm coverage of the full index range; reduce the main list range to match. |
| Width specifier ignored | Format was set to String (width not applied to strings) | Switch format to Decimal or Hex; width applies to numeric output only. |
| Migration from V13 sample fails | Project was saved as a V13 archive, not a V13 project | Unzip the .ap13 file in V13 SP1, re-open and re-save as a project, then migrate. |
| Field renders correctly in simulation but not on the panel | HMI image version on the panel is older than the project expects | Update the panel image (ProSave > Update OS) and re-transfer the project. |
| List does not update when tag changes | Acquisition cycle is too long or tag is set to Continuous while in a slow area pointer | Set the tag's acquisition mode to Cyclic in operation with a 100 ms cycle. |
10. Best Practices
- Centralize text lists in a single library master. Reuse the same list (e.g. State_Global) on every screen instead of duplicating per screen. This guarantees consistent terminology and reduces translation effort.
- Reserve a sentinel value (e.g. 255) for "Unknown" or "Out of range" so that an unexpected PLC value does not leave the operator looking at a blank field.
- Avoid embedding fields wider than 8 characters on Comfort Panels with 4" or 7" displays; long output clips or wraps.
-
Document the index mapping in the PLC code with named constants (e.g.
STATE_OFF = 0; STATE_MANUAL = 1; ...) and import them as a data block to the HMI. - Test with the exact target firmware. A text list that compiles and runs in V18 may still behave differently on a TP700 with a V14.0.0.5 image due to a known limit on the maximum number of entries (320 on early V14 images, 32 000 from V14.0.1 onward).
- Use WinCC RT Unified for new projects if the deployment target is a Unified Comfort Panel (MTP700..MTP2200). The configuration dialog is reorganized but the semantics are identical; the Unified dynamization reference documents the differences.
- Validate language fall-through. For every entry, fill the Text[default] column first, then the language columns. If a translation is missing the runtime falls back to the default column; if the default is also empty the panel shows the raw index value.
11. Verification Procedure
- Static compile: Right-click the HMI device, choose Compile > Software (rebuild all). No errors or warnings should remain in the Info pane under the Text and Graphic Lists category.
- PLCSIM loop: Start S7-PLCSIM (or PLCSIM Advanced) with the PLC, start the WinCC RT, and force the control tag through the entire valid range (0..n). Confirm every entry displays with the correct embedded field.
- Out-of-range test: Force the control tag to a value above the configured range (e.g. n+1). Confirm the panel shows the configured fallback (sentinel or default text).
- Language switch: In the RT, change the project language from English to German. Confirm every entry resolves to the German string and that the embedded fields remain formatted identically (numeric value, not translated).
- Round-trip to panel: Transfer the compiled RT to the physical Comfort Panel, repeat the PLCSIM-equivalent forcing via the panel's Tag simulator, and confirm parity with the RT test.
12. Frequently Asked Questions
Why does my text list field appear as literal text <Tag : 20, Piece_Code> on the panel?
The panel is either a Basic Panel (KTP series) or the HMI image is older than V14.0.0. Comfort Panels, Advanced RT, and PC RT support the field syntax; Basic Panels do not, except inside alarm texts. Update the panel image via SIOS or migrate to a Comfort Panel.
What is the difference between a tag value reference and a text list reference inside a text list entry?
A tag value reference substitutes the formatted numeric or string value of a single tag (e.g. 1450). A text list reference substitutes a string retrieved from a second text list whose index is the formatted tag value (e.g. Running). The two can be combined in the same entry to produce compound output.
How do I migrate the V13 sample project (Siemens note 57025748) to TIA V14?
Open the .ap13 archive in TIA V14 SP1, accept the migration prompt, recompile, and re-bind any screen object whose text list selection was reset. If migration fails, unzip the archive in V13 SP1 first, re-save as a project (not archive), then migrate.
How many entries can a text list contain on a Comfort Panel?
From HMI image V14.0.1 onward, a single text list can contain up to 32 000 entries. Older V14.0.0 images cap at 320 entries. The limit is documented in the panel's SIOS manual entry for the specific article number.
Can a text list be edited online (during runtime) on a Comfort Panel?
No. The text list is compiled into the HMI image and cannot be modified at runtime. To change a string, edit the engineering project and re-transfer. PC RT (WinCC RT Advanced and Professional) supports online edit of the list when the project is open in the engineering station, but not from the runtime HMI itself.
Does WinCC RT Unified use the same field syntax as V14?
Yes, the underlying grammar is preserved, but the configuration dialog is reorganized. Placeholders are now edited in a dedicated Text column with separate Format, Tag, and Text list properties; the inline <…> editor still accepts the same syntax for backward compatibility. Refer to the TIA Portal V20 Unified dynamization documentation for the new workflow.