WinCC Tags Reference Comfort, Advanced, Professional, Unified

David Krause12 min read
HMI / SCADASiemensTechnical Reference
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

Overview

System tags are read-only or read/write variables automatically supplied by the WinCC runtime rather than by a PLC connection. In Siemens documentation they are typically named with the prefix @ (e.g. @CurrentUser, @LocalMachineName). The availability of these tags depends on the WinCC product line:

  • WinCC Comfort / WinCC Advanced (TIA Portal) – used for SIMATIC HMI panels (Comfort, Mobile, and Basic lines) and PC-based Advanced runtime. System tags are not exposed in the HMI tag editor.
  • WinCC Professional / WinCC V7.x (TIA Portal or legacy) – used for PC-based SCADA. A defined list of @-prefixed system tags is documented and selectable in the tag management.
  • WinCC Unified (TIA Portal V16+) – the current RT Unified platform. System tags are documented under Configuring tags > System tags.

This reference consolidates the official list per product line, the syntax restrictions, the @CURRENTUSER behavior in Comfort-panel VBScript, and the workarounds to obtain equivalent values in Comfort/Advanced projects.

Important: A tag starting with @ in a WinCC Comfort or Advanced project is not a system tag. It is either an internal HMI tag that you named with the @ prefix, a tag sourced from a PLC, or — in scripts — an internal runtime variable. The tag management in Comfort/Advanced will not display a "System tags" folder.

What a WinCC "System Tag" Actually Is

A system tag is an internal tag maintained by the WinCC runtime. Characteristics:

  • Name always starts with @.
  • Lifecycle is managed by the runtime (created at project start, deleted at runtime close).
  • Read access is implicit in the tag browser and in scripts.
  • Cannot be deleted by the user; cannot be renamed; cannot be re-declared.
  • No connection to a PLC; the runtime is the data source.

Per the official WinCC Unified documentation (System tags (RT Unified)), the prefix is reserved by the runtime, which is why the tag editor rejects user tags that begin with @ in Unified projects.

WinCC Comfort and WinCC Advanced (TIA Portal V13 SP1 – V20)

In WinCC Comfort and WinCC Advanced the tag editor does not expose a "System tags" node. User queries in TIA Portal V14 SP1 confirming this behavior were answered officially by Siemens Support participants stating:

"System tags are not available in WinCC Advanced. In the SCADA systems SIMATIC WinCC and SIMATIC WinCC Professional you can use some system tags."

What Comfort/Advanced provides instead is a set of system functions callable from VBScript, from the "System functions" task card, and from the property interface of screens/objects:

System function (Comfort/Advanced) Returns / sets Typical signature
GetUserName Logged-in user (string) strUser = HMIRuntime.Tags("@CurrentUser").Read (see workaround section)
GetPassword Password of current user (string) Use only with caution; password is hashed in Unified
GetGroupNumber Current user group (1–32) Returns Long
GetLanguage Currently active language index Returns Long (0–n)
SetLanguage Switches active language Integer parameter (index)
GetScreenName Active screen name Returns string
GetTagPrefix Configured tag prefix for the panel Returns string
GetParentScreen Parent screen of the current screen Returns string
GetDate / GetTime Local panel date/time Returns string in configured format
GetPLCMode Connection state of PLC (WinCC Advanced only) Returns Long

These functions are listed in the TIA Portal help under Visualization > System functions. They are part of the Comfort/Advanced API since V11 and remain available in V14 SP1, V15.1, V16, V17, V18, and V20.

WinCC Professional and WinCC V7.x (SCADA)

In WinCC Professional (TIA Portal) and WinCC V7.x the tag editor contains a dedicated System tags folder that lists the available tags. The full catalog is documented in the WinCC Professional / WinCC V7.x help under Tag management > System tags. The most commonly used entries:

Tag name Data type Access Meaning
@CurrentUser Text (8/16) read Logged-in user name
@CurrentUserLevel Numeric (8-bit) read Authorization level of current user (0–99)
@CurrentUserGroup Numeric read Index of the current user group
@LocalMachineName Text (16) read Windows computer name of the runtime PC
@ProjectName Text read Name of the loaded project
@ServerName Text read WinCC server name (client/server systems)
@ScreenName Text read Currently active process screen
@CursorPosX / @CursorPosY Numeric read Mouse cursor coordinates (pixels)
@Language Numeric read/write Currently active language index
@Dater / @Timer Text read Current date / time as formatted string
@RedundantServerState Numeric read Redundancy status (0 = primary, 1 = standby, 2 = fault)
@UserLoginRequired Numeric read Configured user administration mode
@WorkVersion Text read Project version string

Syntax restrictions that apply in Professional and V7.x:

  • Tag names are case-insensitive in scripts but appear mixed case in the editor.
  • The @ prefix is reserved; attempting to create a user tag with the same name raises error 0x80040E14 (tag name invalid) at project compile.
  • Numeric system tags are 16-bit signed by default; reading them in 32-bit VBScript variables requires an explicit conversion via CInt or CLng.
  • Some tags are available only in the WinCC Explorer scope (e.g. @ServerName) and are not visible on a WinCC client until the client connection is fully established.

WinCC Unified (RT Unified, TIA Portal V16 – V20)

WinCC Unified re-introduces a documented System tags catalog. According to the official TIA Portal V20 help:

"System tags are internal tags that are required for internal management of the project. The system tag names always start with the '@' character."

Unified system tags are grouped under HMI Tags > System tags in the project tree. Representative entries (V20 documentation):

Tag name (Unified) Data type Access Description
@UAHmiVersion String read Runtime version of Unified HMI
@UAProjectName String read Project name of the loaded Unified project
@UAConnectionState_X Int read Connection state of HMI connection X (0=disconnected, 1=connected, 2=fault)
@UAClientName String read Name of the Unified client (Unified PC only)
@UAUserName String read Logged-in user (replaces @CurrentUser)
@UACurrentScreen String read Active screen of the Unified runtime
@UALanguage Int read/write Active runtime language
@UADate / @UATime String read Local date/time of the runtime device

Unified restricts system tag usage in scripts to qualified access via the tag-prefix scope (e.g. Tags("@UAUserName").Read). Direct script access to local-process system tags such as cursor coordinates is no longer supported in V17 onward; use the new Screen.Items(...).Position properties instead.

Cross-Platform Comparison

Feature Comfort / Advanced Professional / V7.x Unified
System tag editor folder No Yes Yes
Prefix convention None enforced @ @ (new tags use @UA prefix)
@CurrentUser in tag list No Yes (Text 16) No (replaced by @UAUserName)
Read user from VBScript Workaround: HMIRuntime.Tags("@CurrentUser").Read (case-by-case) Direct Direct: Tags("@UAUserName").Read
Documentation chapter Only system functions Tag management > System tags Configuring tags > System tags (RT Unified)
User-modifiable N/A No No
Available since TIA Portal V11 WinCC V7.0 / TIA V13 SP1 TIA Portal V16

Why @CURRENTUSER Appears to Work in WinCC Comfort Scripts

User reports in the field show inconsistent behavior when @CURRENTUSER is read in VBScript on a Comfort panel (e.g. KTP, TP, or Comfort Panel with WinCC Comfort V14 SP1):

  • Reading HMIRuntime.Tags("@CurrentUser").Read inside a VBScript on a Comfort Panel returns an empty string on some firmware versions and the actual user name on others.
  • The tag is not declared in the HMI tag list, so the runtime implicitly creates a transient internal variable with that name.
  • If a project happens to declare a tag literally named @CurrentUser (which the tag editor will accept in Comfort because the prefix is not reserved), the script returns the value of the user-declared tag — not the runtime's user identity.

Recommended practice in Comfort/Advanced: do not rely on @CurrentUser for user identity. Use the documented system function GetUserName:

' VBScript on a Comfort Panel (WinCC Comfort V14 SP1+)
Dim sUser
sUser = HMIRuntime.SysFct.GetUserName()  ' Always returns the logged-in user
SmartTags("LoggedUser") = sUser           ' Write to a declared HMI tag

If the deployment must remain compatible with both Comfort panels and PC-based Advanced runtime, declare an internal HMI tag (e.g. LoggedUser) and populate it on screen start with the function above.

Workarounds for Comfort and Advanced Projects

Method 1 – System functions called on screen change

  1. Open the screen in the Comfort/Advanced editor.
  2. In the Events tab, add the GetUserName system function to the Loaded event of the root screen.
  3. Set the function's output tag to an internal HMI tag of type Text (recommended length 32 characters).
  4. Compile and download. The tag updates on every screen change.

Method 2 – Scheduled task in the scheduler

  1. Open Schedules in the HMI project tree.
  2. Create a new task running every 1 second.
  3. In the VBScript editor, call HMIRuntime.SysFct.GetUserName() and write the result to a tag.
  4. Use the tag in animations, I/O fields, or visibility expressions.

Method 3 – Project-wide variable initialized at runtime start

  1. Add a global VBScript action attached to the Runtime start event.
  2. Inside the action, query the user once and cache the result in an HMI tag.
  3. Combine with GetGroupNumber and GetLanguage if group or language information is also required.
Security note: GetPassword returns the user password in clear text on Comfort/Advanced panels. Avoid calling it from logs, audit screens, or any object whose visibility is not restricted by the same user group. In WinCC Unified the password is no longer exposed as a system tag.

Tag Naming Conventions and Restrictions

Rule Comfort / Advanced Professional / V7.x Unified
Maximum tag name length 128 characters 128 characters 128 characters
Allowed characters A–Z, a–z, 0–9, underscore A–Z, a–z, 0–9, underscore A–Z, a–z, 0–9, underscore
Reserved prefix @ Not reserved (can collide with system functions) Reserved for system tags Reserved for system tags (user tags with @ are rejected at compile)
Case sensitivity at runtime Insensitive in tag list, sensitive in VBScript strings Insensitive Insensitive
Leading digit allowed No No No

Firmware and Version Compatibility

TIA Portal version WinCC Comfort WinCC Advanced WinCC Professional WinCC Unified V20
V13 SP1 / V13 SP2 Yes (no system tags) Yes (no system tags) Yes (system tags present) —
V14 / V14 SP1 Yes Yes Yes —
V15 / V15.1 Yes Yes Yes —
V16 Yes Yes Yes Initial release
V17 Yes Yes Yes Yes
V18 Yes Yes Yes Yes
V19 / V20 Yes (last release to ship Comfort) Yes Yes Yes

For Unified runtime the minimum panel firmware that supports the documented @UA* system tag set is image version 17.0.x (Unified Comfort V2 hardware) and 16.0.x (Unified Comfort V1 hardware). Older Unified Comfort panels running V15 image firmware do not expose the @UAConnectionState_X tags.

Diagnostics and Verification

Use the following steps to confirm that a system tag is being read correctly in a runtime project:

  1. Open an I/O field on any screen in the project.
  2. Set its process value to the system tag (e.g. @CurrentUser for Professional, @UAUserName for Unified, or the internal tag populated by GetUserName for Comfort/Advanced).
  3. Configure the field as Output only with string display type.
  4. Compile, download, and start the runtime.
  5. Log in as a known user; the I/O field should show the user name within one update cycle (typically 250 ms for Comfort/Advanced, 100 ms for Unified).

If the field is empty:

  • Confirm the tag prefix scope is correct (e.g. server-side tags on a WinCC client require the @ServerName: prefix).
  • Open the WinCC diagnostics window (Tools > Diagnostics) and check the channel diagnostics for the system tag row.
  • For Unified, run the Tag simulator from the runtime start menu and verify each @UA* tag against the documentation.

Common Errors and Resolution

Symptom Platform Likely cause Resolution
Compile error: tag name invalid (begins with @) Unified Attempted to create user tag with reserved prefix Rename the tag without the @ prefix or use a system tag
Empty value from @CurrentUser in script Comfort Tag not declared; runtime does not provide it on Comfort Replace with HMIRuntime.SysFct.GetUserName()
@CurrentUser shows PLC value, not user name Advanced User declared a tag with the same name and connected it to a PLC Rename the user tag and use the system function
Error 1902 "System tag not available" in V7.x Professional / V7.x Tag read before the user logged in Evaluate the tag inside a script triggered by the User change event
@UAConnectionState_X always 0 Unified Panel firmware older than V17 Update Unified Comfort panel to firmware ≥ 17.0
Tag appears in the tag browser but Read returns VT_EMPTY All System tag requires a specific runtime context (e.g. @ServerName on a server) Check the platform chapter; some tags are local-process only

Migration Notes: Comfort/Advanced → Unified

When porting a Comfort/Advanced project to WinCC Unified, the following substitutions are required:

Comfort/Advanced construct Unified equivalent
System function GetUserName System tag @UAUserName
System function GetGroupNumber System tag @UAUserGroup (V20+, verify availability)
System function GetLanguage / SetLanguage System tag @UALanguage (read/write)
System function GetScreenName System tag @UACurrentScreen
System function GetDate / GetTime System tags @UADate / @UATime
Always verify each substitution against the TIA Portal version in use. Tag names prefixed with @UA were standardized in V17; V16 only ships a subset and uses different casing for some entries.

Related Concepts Outside WinCC

For comparison only — the Ignition SCADA platform (Inductive Automation) uses the term "system tag" in a different sense: every Ignition tag is implicitly associated with a built-in System tag provider that exposes client, gateway, and historical metadata. Functions such as system.tag and system.tag.browse provide browse and read/write access to that provider. The System Tags lesson in Inductive University covers the provider model in detail. These concepts are not directly portable to WinCC, but the naming convention and the @ prefix reserved for internal use is industry-consistent across both platforms.

FAQ

Where do I find the official list of system tags in WinCC Comfort V14 SP1?

There is no official list because WinCC Comfort and WinCC Advanced do not expose system tags in the tag editor. Use the system functions GetUserName, GetGroupNumber, GetLanguage, and GetScreenName from the task card or from VBScript via HMIRuntime.SysFct.

Can I read @CurrentUser in a VBScript on a Comfort Panel?

It is not officially supported. Some firmware versions return the user name, but the tag is not declared in the tag list and the runtime does not guarantee its value. Replace with HMIRuntime.SysFct.GetUserName() for a stable, documented behavior.

Why does my project compile in Comfort/Advanced with a tag named @CurrentUser while the same name is rejected in Unified?

Comfort/Advanced does not reserve the @ prefix, so user tags with that prefix are accepted. Unified reserves the prefix, which is why the editor rejects it. If you have such a tag, rename it in the source project before migrating.

What is the Unified equivalent of @CurrentUser?

Use the system tag @UAUserName (introduced in TIA Portal V17). It can be read in VBScript with Tags("@UAUserName").Read and is also selectable in I/O field configuration.

Are @LocalMachineName or @ServerName available on Unified Comfort panels?

Unified Comfort panels expose @UAHmiVersion, @UAProjectName, and the @UAConnectionState_X tags. They do not expose a @LocalMachineName equivalent; the panel name is available through the device configuration instead.

Back to blog