Overview: IO Status Monitoring in WinCC Runtime Advanced
Engineers migrating from Citect SCADA to SIMATIC WinCC Runtime Advanced (WinCC RT Advanced) frequently ask whether an equivalent of the Citect tag monitoring table is available. Citect exposes a development-time "tag status" window that lists every I/O address, its current quality, and its live value, including forcing and override columns. WinCC RT Advanced, which runs on the SIMATIC Comfort Panels, Unified Comfort Panels, and WinCC RT Advanced PC runtime, has no native runtime tag table object with that layout. The closest developer aids are the TIA Portal project tree (engineering-only, not visible in runtime) and the HMI device toolbox, neither of which is reachable from an operator screen.
This reference documents the three practical workarounds that survive a TIA Portal compile and a panel restart:
- Distributed I/O fields bound directly to PLC tags.
- Archive tags with a logging cycle of 500 ms or 1 s and a runtime trend view.
- A VB-script-driven status screen that polls an arbitrary tag list and writes results into a tabular I/O field array or a CSV text file.
The third method is the closest functional equivalent to the Citect tag table, and it is the recommended pattern when more than ten tags must be inspected in parallel. All three patterns are compatible with TIA Portal V17, V18, and V19 WinCC RT Advanced, with minor script-API differences called out below.
Architecture Constraints: Why a Native Tag Table Does Not Exist
WinCC RT Advanced is a panel-class runtime that targets resource-constrained ARM-based panels (TP700–TP2200 Comfort, MTP700–MTP2200 Unified). Unlike the server-class WinCC Runtime Professional, it does not expose a generic tag browser in runtime. The following architectural facts drive this:
- Tag database compiled into the runtime image. Only tags declared in the TIA Portal HMI tag table exist in the loaded runtime project. There is no runtime discovery of additional OPC or S7 addresses.
- No reflection API. The VB and C scripting engines in WinCC RT Advanced cannot enumerate tags by name pattern. Script code must reference each tag explicitly, or read from a configuration array declared in the script.
- No live forcing UI. Unlike Citect or WinCC Professional, RT Advanced has no Force/Modify dialog in runtime. Tag values can be written only through the configured authorization level (operator password or higher).
-
Quality code is not displayed in the standard I/O field. The "Quality" property is exposed on the tag object in script but not as a configurable field on the standard I/O field. Script must read
HmiRuntime.Tags(tagname).Qualitymanually.
These constraints are documented in the WinCC RT Advanced System Manual, section 5.3 "Tag management", and in the TIA Portal help topic "Differences between WinCC Runtime Advanced and WinCC Runtime Professional".
Method 1 — I/O Field Quick Reference (No Scripting)
The lowest-effort path is to drop one I/O field per tag onto a dedicated screen. This is suitable for screens of 1–20 tags; beyond that, layout and update load become cumbersome.
Step-by-step procedure
- In the TIA Portal project tree, open the HMI device and create a new screen Screen_999_TagMonitor.
- From the toolbox, drag an I/O field onto the screen.
- In the properties pane, set Process value → Tag → the target PLC tag (e.g.
"DB1.DBX0.0"or a configured HMI tag"Motor1_Run"). - Configure the Display format (binary, decimal, hex) and Output mode (output only, input/output, input only).
- Duplicate the I/O field for each tag and rename the label text beside it.
- On the screen's Events tab, set Loaded → ActivateScreen to ensure refresh on entry.
Update rate: I/O fields update on tag change events with a minimum of 100 ms acquisition cycle configured on the connection. This is fast enough for status display but wasteful for 50+ tags.
Method 2 — Archive Tags and Trend View
When the requirement includes historical traceback (last 10 min, last 24 h), use archive tags with a 500 ms logging cycle and a runtime trend view. The trend view shows live data plus history, which is often what an engineer debugging a fault actually wants.
Configuration matrix
| Parameter | Recommended value | Notes |
|---|---|---|
| Archive name | TagMonitor_Log |
One archive per monitor screen; do not exceed 1,000 tags per archive. |
| Logging cycle | 500 ms (process), 1 s (slow I/O) | Shorter cycles increase storage and CPU load on TP panels. |
| Acquisition cycle | 100 ms minimum | Match the connection acquisition cycle; mismatches cause missing samples. |
| Storage location | SD card / USB / internal flash | Internal flash on Comfort Panels is limited to ~50 MB; use SDXC for archives > 50 MB. |
| Display in runtime | f(t) trend view, 1–4 pens | More than 4 pens becomes unreadable on TP700. |
Method 3 — VB Script Tag Status Table (Recommended)
A scripted status table is the closest Citect-equivalent. The approach is to maintain a comma- or tab-separated list of tag names in a single HMI text tag, then have a periodic script iterate the list, read the value and quality, and push the formatted result into a multi-line I/O field. The pattern below works on TIA Portal V17+ with WinCC RT Advanced.
3.1 Declare the tag list
Create an HMI text tag TagList_1 (String, length 1024) holding one tag per line. Example content:
Motor1_Run
Motor1_Fault
Conveyor_Speed
Tank_Level
Valve_Open
3.2 Create the output text tag
Create TagStatus_Output (WString, length 4096) on the HMI. Bind it to a text view or a single multi-line I/O field configured as output-only.
3.3 Schedule a cyclic script
Create a function BuildTagStatusTable and call it on a 1 s scheduler:
- Project tree → HMI device → "Schedules".
- Add a schedule with trigger 1 second.
- Event: When triggered → call BuildTagStatusTable.
3.4 Script source (VB)
' BuildTagStatusTable
' TIA Portal V17/V18/V19 - WinCC RT Advanced
' Polls each tag in TagList_1 and appends a formatted row to TagStatus_Output.
Dim sList, arrLines, sLine, sResult
Dim i, idx, tagName, tagValue, tagQuality, sRow
On Error Resume Next
sList = SmartTags("TagList_1")
If Len(sList) = 0 Then
SmartTags("TagStatus_Output") = "TagList_1 is empty."
Exit Sub
End If
arrLines = Split(sList, vbLf)
sResult = "Tag" & vbTab & "Value" & vbTab & "Quality" & vbCrLf
For i = 0 To UBound(arrLines)
tagName = Trim(arrLines(i))
If Len(tagName) = 0 Then GoTo NextTag
' Read value
tagValue = SmartTags(tagName)
' Read quality code (0=Good, 1=Bad, 2=Uncertain)
tagQuality = SmartTags(tagName & ".Quality")
Select Case tagQuality
Case 0 sRow = "OK "
Case 1 sRow = "BAD "
Case 2 sRow = "UNC "
Case Else sRow = "? "
End Select
sResult = sResult & tagName & vbTab & CStr(tagValue) & vbTab & sRow & vbCrLf
NextTag:
Next
SmartTags("TagStatus_Output") = sResult
If Err.Number <> 0 Then
SmartTags("TagStatus_Output") = "Script error: " & Err.Description
Err.Clear
End If
3.5 Performance and limits
| Item | Limit (TP700) | Limit (TP2200 / PC runtime) |
|---|---|---|
| Tags per list | 40 recommended, 80 max | 200 recommended, 500 max |
| String output size | 2 KB WString | 8 KB WString |
| Script cycle | ≥ 1000 ms | ≥ 500 ms |
| Concurrent script count | ≤ 10 | ≤ 30 |
SmartTags(name) for a non-existent tag raises a runtime error 0x8004xxxx and may stall the scheduler. Always validate the tag name in the list or use HmiRuntime.SafeRead if available on your firmware. On TIA Portal V18.0 Update 2 and later, the function HmiRuntime.Tags(name).Read returns a result object that exposes .QualityCode directly without triggering the error event.Toolbox for HMI Projects — Reference Implementation
Siemens publishes a free "Toolbox for HMI Projects" (entry ID 106226404) on the Siemens Industry Online Support portal. The toolbox is a TIA Portal library containing ready-made HMI screens, faceplates, and VB scripts for common operations such as user administration, alarm filtering, and multi-tag status display. The status display faceplate in the toolbox implements essentially the pattern documented above (tag list → script → multi-line text field) and can be dropped into any project with a few mouse clicks.
What the toolbox provides
- Pre-built faceplate TagMonitor_FP with a configurable tag list property.
- VB script library TagMonitor_Scripts with safe wrappers for tag reads.
- Styles and color schemes consistent with the Comfort Panel WinCC Modern style.
- Compatible with TIA Portal V16, V17, V18, V19 (per the toolbox release notes).
To install: download the .zip from the Siemens Support entry, extract, and in TIA Portal choose Options → Global libraries → Open library and point to the extracted folder. Drag the faceplate from the library master copies onto your screen.
Building a Multi-Tag Status Screen (Worked Example)
The following example shows a complete screen setup that combines I/O fields (for the most-watched tags) with a script-driven text view (for the long tail of secondary tags).
Screen layout
| Region | Object | Bound to | Purpose |
|---|---|---|---|
| Top half | 4 I/O fields | Critical tags (e.g. E-Stop, Run, Fault, Mode) | Large display, operator-facing |
| Bottom half | Multi-line text view (output only) | TagStatus_Output |
Engineer-facing, lists remaining tags |
| Right edge | Button "Refresh" | Event Click → BuildTagStatusTable
|
Force immediate update |
| Top bar | Text field "Last update:" | Bound to a String tag updated inside the script | Shows last refresh timestamp |
Tag list maintenance
Keep TagList_1 in a separate recipe or a text file imported at startup. The recommended pattern is to bind a recipe with a single String element of length 1024 to TagList_1, allowing operators to switch between saved lists (e.g. Line1_Default, Line1_Debug, Line1_Commissioning) without re-engineering the script.
Configuration and Properties Reference
Tag properties used in the script
| Property | Type | Description | Access |
|---|---|---|---|
SmartTags(name) |
Variant | Read/write the current value of an HMI tag by name | Get/Set |
SmartTags(name + ".Quality") |
Int32 | Returns OPC quality: 0=Good, 1=Bad, 2=Uncertain | Get only |
SmartTags(name + ".LastError") |
Int32 | Last communication error code (0 = none) | Get only |
SmartTags(name + ".Timestamp") |
Date | Last successful update timestamp | Get only |
Scheduler limits by panel
| Panel | Min cycle | Concurrent scripts | Notes |
|---|---|---|---|
| TP700 Comfort | 1 s | 10 | Limit script length to ~200 lines |
| TP900/TP1200 Comfort | 500 ms | 15 | SD card strongly recommended |
| TP1500/TP1900/TP2200 | 500 ms | 20 | Equivalent to mid-range PC performance |
| PC Runtime Advanced | 100 ms | 30 | Use multiprocessor affinity for large projects |
Verification and Commissioning Checklist
- Compile the project in TIA Portal. The output window must show zero errors and zero warnings related to the monitor screen.
- Start the RT Advanced simulator from Online → Start runtime. Confirm the monitor screen loads without an error overlay.
- Force a tag in the PLC simulator (PLCSIM) to a known value, then verify the same value appears in the I/O field and in the script text view.
- Disconnect the S7 connection in PLCSIM. Confirm the Quality column shows "BAD" within two acquisition cycles (typically ≤ 2 s).
- Reconnect and confirm "OK" is restored.
- Watch the scheduler load in System information → Performance on the panel. CPU should remain below 60 %; higher values indicate the cycle is too short or the list too long.
- Power-cycle the panel and confirm the tag list recipe and the monitor screen reload automatically.
Troubleshooting Matrix
| Symptom | Likely cause | Fix |
|---|---|---|
| Text view always shows "TagList_1 is empty" | Recipe not loaded at startup | Bind the recipe element to the tag on screen Loaded event, or set Synchronize recipe with PLC in the recipe properties. |
| Quality column shows "BAD" for all tags | S7 connection down or wrong CPU IP | Open Connections in the project tree and verify the IP/rack/slot match the target PLC. |
| Script error "Object variable not set" | One tag in the list is misspelled or has been deleted | Enable the System diagnostics event log; the bad tag name will appear in tagName on the failing iteration. |
| Stale values, refresh not happening | Scheduler not running or cycle too long | Verify the schedule in Schedules is active; check the trigger attribute (must be 1 s, not 1 min). |
| Panel hangs for 3–5 s every minute | Single mega-script polling 100+ tags | Split the list into two scripts on two 2 s schedulers; keep each list under 50 tags. |
| Truncated output at row 30 | WString length too short | Increase TagStatus_Output length to 4096 (panels) or 16384 (PC runtime). |
Notes on Platform Differences
The patterns above are WinCC RT Advanced specific. The following platform-specific notes apply if the same monitor must be ported:
-
WinCC Runtime Professional exposes a C# scripting API and a native tag table object (
HMITagSet). The script approach is unnecessary there; use the Tag Table faceplate or the TAGSTATUS system function. -
WinCC Unified (V17+) uses JavaScript inside the runtime, not VB. The script above must be ported to
HMIRuntime.TagsandTags(tagname).QualityState. The conceptual pattern (tag list → loop → formatted output) is identical. -
WinCC flexible (legacy) on older panels (MP277, TP177B) uses VBScript with the same
SmartTagsobject; the script above works unchanged.
For projects that must be supported on all three platforms, encapsulate the tag-reading function in a global module and use the platform's native binding. Avoid cross-platform code that mixes VB and C#.
FAQ
Does WinCC Runtime Advanced have a built-in tag table like Citect?
No. WinCC RT Advanced has no native runtime tag table object; the HMI tag table is an engineering-time tool only. The three documented workarounds are distributed I/O fields, archive tags with a trend view, or a VB script that reads a tag list and writes a formatted text view.
Where can I find a ready-made tag monitor screen for TIA Portal?
Install the Siemens "Toolbox for HMI Projects" (entry ID 106226404) on the Industry Online Support portal. It contains a pre-built TagMonitor_FP faceplate and supporting scripts compatible with TIA Portal V16 through V19.
How do I read the OPC quality code of an HMI tag in a script?
Append .Quality to the tag name: SmartTags("MyTag.Quality") returns 0 for Good, 1 for Bad, 2 for Uncertain. The full property list including .LastError and .Timestamp is documented in the TIA Portal help topic "HMI tags - properties".
What is the fastest polling cycle I can set on a TP700 Comfort panel?
The minimum practical scheduler cycle is 1 s on a TP700, with no more than 10 concurrent scripts and lists of 40 tags or fewer. Going below 1 s risks scheduler overruns and the panel logging a "System: Script timeout" alarm.
Can I use the same script in WinCC Unified Comfort Panels?
No. WinCC Unified uses JavaScript with the HMIRuntime.Tags API, not the VB SmartTags object. The conceptual pattern (tag list → loop → formatted output) ports directly, but the syntax for QualityState and Read is different. Refer to the TIA Portal help "WinCC Unified - JavaScript API" for the equivalent calls.