Overview
Siemens SIMATIC Comfort Panels (TP1200, KTP1200, TP1500, TP1900, TP2200 and the Mobile Panel 277F IWLAN) running WinCC Comfort or WinCC Advanced in TIA Portal do not expose a native timer object inside the HMI runtime. When a screen must advance automatically after a fixed dwell time—typically 10 s on a start screen, splash, or rotating banner—engineers usually reach for a PLC-side timer, but the screen can run the entire sequence locally using the SimulateTag system function and the value-change event of an internal tag. The technique eliminates PLC round-trips, requires no PLC code, and keeps working when the PLC is stopped, disconnected, or being commissioned.
The pattern was first documented for TIA Portal V13 SP1 on a TP1200 Comfort and remains valid in every subsequent release through V19 because the screen-event API and the SimulateTag runtime function have not changed since the Comfort Panel line was introduced.
Prerequisites
-
Hardware: any SIMATIC Comfort Panel (typical catalog number family
6AV2 124-for the 12-inch TP/KTP family). The same recipe applies to TP1500, TP1900, and TP2200 Comfort variants. - Engineering software: TIA Portal V13 SP1, V14, V14 SP1, V15, V15.1, V16, V17, V18, or V19 with WinCC Comfort or WinCC Advanced installed.
-
Panel image: Comfort Panel image matched to the TIA Portal major version (e.g., V16 image for V16 projects). Mismatched images refuse to download and report error
1902. - Project state: at least two screens already configured in the HMI screen tree—the start screen and the destination screen.
- Project access: read/write permission on the engineering station and, where the panel enforces secure projects, the corresponding HMI device certificate.
- Runtime state: the panel should be in Transfer or in normal Online mode with the project running; no special add-ons are required because SimulateTag is a core system function.
Why the HMI Runtime Has No Native Timer
The WinCC Comfort/Advanced runtime is intentionally event-driven. Every visual reaction is bound to an event source:
- Screen events:
Loaded,Cleared,Focus,Leave. - Tag events:
Value change,Upper limit violated,Lower limit violated. - User events:
Press,Release,Click. - System events: connection loss, recipe events, alarm events, scheduled tasks (only on PC Runtime).
There is no Tick or Timer event in the panel firmware. The scheduler in WinCC Runtime PC can run jobs by time-of-day, but the embedded Comfort Panel firmware does not, so the only practical way to drive a cyclic trigger from inside the HMI is to use SimulateTag, which writes a value into an HMI tag every N × 200 ms. The tag's own value-change event then becomes a periodic event source that the screen-change logic can react to.
Architecture: SimulateTag as a Soft Clock
The flow on the start screen looks like this:
- The runtime fires the
Loadedevent of the start screen. - The screen event invokes the SimulateTag system function, passing the HMI tag, a cycle count, and the value to write.
- Every
cycle × 200 ms, the runtime overwrites the tag with the configured value. - The tag's
Value changeevent fires each time the value toggles. - The
Value changeevent is bound to the ActivateScreen system function with the destination screen number.
Inline styled SVG of the runtime flow:
Step-by-Step Configuration
Step 1 – Declare the Cyclic Tag
Open the HMI tag table (HMI tags → Default tag table or a user-defined table) and create a new tag with the following properties. The tag must live in the HMI memory (not the PLC), because SimulateTag writes only to local HMI tags.
| Property | Value |
|---|---|
| Name | HMI_ScreenTimer |
| Data type |
Bool (any 1-bit type works) |
| Connection | Internal tag — no PLC link |
| Acquisition cycle |
200 ms (must be ≤ the SimulateTag cycle) |
| Initial value | 0 |
| Length / address | n/a (internal) |
The acquisition cycle of the tag determines how often the runtime polls for changes. If it is coarser than the SimulateTag cycle, value-change events will be missed. The default 200 ms value is the safe choice for any cycle setting up to 50.
Step 2 – Bind SimulateTag to the Loaded Event of the Start Screen
- In the project tree, open the start screen (for example Screen_1).
- In the properties pane select Events.
- Expand the
Loadedevent group. - Click the plus icon and add a new function call.
- From the system function list select SimulateTag.
- Wire the parameters as follows:
Parameter Value Tag HMI_ScreenTimerCycle 50(50 × 200 ms = 10 000 ms)Value / bit pattern TRUEtoggling, or an alternating0/1pattern, depending on firmware dialog
The Loaded event fires once every time the runtime opens the screen, so the timer automatically restarts whenever the user returns to Screen_1.
Step 3 – Trigger the Screen Change on Value Change
- Stay on the same screen properties and switch to the Events view of the tag, not the screen.
- In the HMI tag table, select
HMI_ScreenTimerand open the Events tab. - Add a function on
Value change. - Select the ActivateScreen system function.
- Set the target screen number (e.g.,
2for Screen_2) or browse to it by name.
On the very first toggle written by SimulateTag, the runtime loads the destination screen. Because SimulateTag keeps writing, you typically want the destination screen to call StopTagSimulation on its own Loaded event so that the source tag stops oscillating in the background.
Cleared event or the start screen's next Loaded event restarts the simulation. Add SimulateTag to the start screen's Loaded event—do not rely on a one-shot, because the runtime starts a fresh screen instance every navigation.Cycle Parameter Reference
The cycle argument is expressed in units of 200 ms. The Comfort Panel firmware accepts a range of 1 to 255; values above 100 are uncommon but valid for minute-scale dwell times.
| Cycle value | Period | Typical use |
|---|---|---|
| 1 | 200 ms | debounced animation |
| 2 | 400 ms | blinking indicator |
| 5 | 1.0 s | flashing alarm beacon |
| 10 | 2.0 s | short demo loop |
| 25 | 5.0 s | pre-heat countdown |
| 50 | 10.0 s | default start-screen dwell |
| 100 | 20.0 s | screensaver timeout |
| 150 | 30.0 s | idle logout prompt |
| 255 | 51.0 s | maximum firmware-supported |
Verification Procedure
After compiling and downloading the project, perform these checks before declaring the screen change complete.
- Start the runtime and confirm Screen_1 is the initial screen. Use Project → Properties → Runtime → Start screen to verify.
- Open the HMI tag online monitor (Online → Tag simulation / Monitor) and watch
HMI_ScreenTimertoggle at the expected interval. - Time the interval with a stopwatch from the moment the screen opens. The value-change event should fire near the requested dwell time; ±200 ms is acceptable due to acquisition jitter.
- Confirm Screen_2 loads automatically.
- From Screen_2, return to Screen_1 (e.g., via a button calling
ActivateScreen "Screen_1") and confirm the timer restarts. - Cycle power on the panel and verify the timer runs without a PLC being online.
Alternative Implementations
When the SimulateTag technique is not appropriate (for example because the project is later migrated to WinCC Runtime Professional on a PC, where different system functions apply), use one of the alternatives below.
| Method | Where it runs | Pros | Cons |
|---|---|---|---|
| SimulateTag (this article) | Comfort Panel firmware only | No PLC tag, survives PLC stop, zero network load | Local to the HMI, not shared with PLC logic |
| PLC timer → HMI tag → Value change | PLC + HMI | Visible to PLC logic, easy to reset, reusable | Requires ladder/FB code, fails when PLC is stopped |
| WinCC PC Runtime scheduler task | PC Runtime only | True time-of-day scheduling | Not available on Comfort Panels |
| VBScript on panel | Comfort Panel firmware | Flexible logic | Performance overhead, deprecated for new projects |
| Global script on PC Runtime | PC Runtime only | Full programming model | Not available on Comfort Panels |
Troubleshooting Matrix
| Symptom | Likely cause | Fix |
|---|---|---|
| Screen never changes | SimulateTag not wired to Loaded
|
Re-open screen properties → Events → Loaded → add SimulateTag |
| Screen changes immediately | Cycle value too low (default 1 = 200 ms) | Set cycle to 50 for 10 s |
| Screen changes after 2 s instead of 10 s | Tag acquisition cycle is 1 s, SimulateTag fires 5 times before next poll | Lower tag acquisition cycle to 200 ms |
| Compile error: Invalid tag for SimulateTag | Tag is a PLC tag, not an internal tag | Re-declare the tag as Internal connection |
| Compile error: Unknown system function | Project is for Basic Panel, not Comfort | Confirm HMI device is a Comfort or Mobile Panel 277; Basic Panels do not support SimulateTag |
| Screen flashes, jumps, and returns | Both start and destination screens trigger ActivateScreen | Only bind ActivateScreen on the start screen's tag value change |
| Timer stops working after PLC stop | Implementation used a PLC tag instead of internal tag | Switch to SimulateTag + internal tag |
| Timer works in PLCSim but not on real panel | Panel image version mismatch | Re-download with matching image (TIA Portal version = panel image version) |
Edge Cases and Field Notes
Multiple timer screens. If more than one screen uses a timed jump, give each its own internal tag (for example HMI_SplashTimer, HMI_DemoTimer) so the cycles do not interfere. Sharing one tag across multiple Loaded events causes only the most recently loaded screen's cycle to be honored, because SimulateTag is a singleton-style operation per tag.
Stopping the simulation. Call StopTagSimulation on the destination screen's Loaded event to free the simulated tag. This avoids drift in tag acquisition and prevents the tag from oscillating forever in the background, which can affect polling performance on large projects.
Performance impact. Comfort Panels update tag values in the cyclic OB1 of the runtime. One SimulateTag-driven tag adds negligible load (well under 0.1 % CPU on a TP1200). Avoid driving more than ~20 simultaneous simulated tags on the same panel; beyond that, screen refresh latency can become visible at 100 ms and above.
Migrating to WinCC Unified. Comfort Panels do not migrate directly to WinCC Unified; Unified Panels (MTP/MTP Pro series) use a different system function set. SimulateTag is replaced in Unified by JavaScript-based timers in the screen controller. Treat this article as valid only for Comfort Panels (WinCC Comfort/Advanced).
Security. If the project enforces user administration, the auto-screen-change will still run when the user logs out—screen events are not user-scoped. If that is undesirable, bind ActivateScreen on the value-change event to a screen guarded by a permissions check, or wrap the logic in a custom function that evaluates the current user role before jumping.
Tag types. Bool, Int, and Word tags all work with SimulateTag. Use Bool for the smallest overhead. Real tags are supported but the value pattern (alternating between two reals) is harder to interpret when monitoring.
Firmware and Software Compatibility
- Tested on TP1200 Comfort running image V13 SP1, V14, V15.1, V16, V17, V18.
- SimulateTag behavior is unchanged from firmware V13 SP1 onward.
- Engineering side: any TIA Portal ≥ V13 SP1 with WinCC Comfort or WinCC Advanced.
- WinCC Basic (used for KTP400 Basic and other Basic Panels) does not include SimulateTag. Migrate to Comfort hardware or use a PLC-side timer.
FAQ
Does the Comfort Panel have a built-in timer I can drop on a screen?
No. Comfort Panels run an event-driven runtime in WinCC Comfort/Advanced and do not expose a native timer object. The standard workaround is to use the SimulateTag system function with the value-change event of an internal HMI tag, as described above.
How do I get a 10-second dwell on the start screen without a PLC tag?
Create an internal Bool HMI tag, call SimulateTag on the start screen's Loaded event with a cycle of 50 (50 × 200 ms = 10 s), and bind the ActivateScreen system function to the tag's Value change event with the destination screen as the target.
Why does the screen jump after 2 seconds instead of 10?
The tag's acquisition cycle is too coarse (default 1 s) for the 10 s SimulateTag period. Lower the tag acquisition cycle to 200 ms in the HMI tag table so the value-change event is captured on every SimulateTag write.
Can I reuse the same internal tag for multiple timed screens?
Not reliably. SimulateTag is a singleton per tag, so the most recently loaded screen's cycle wins. Declare a dedicated internal tag per timed screen (for example HMI_SplashTimer, HMI_DemoTimer) to keep cycles independent.
Does this work when the PLC is stopped or disconnected?
Yes. SimulateTag writes only to internal HMI tags, so the timer keeps running during PLC stop, network loss, or PLC commissioning. This is one of the main advantages of the technique over a PLC-timer-based implementation.