WinCC V7.4 Structure Tags with Tag Prefix for Pop-up Displays

David Krause11 min read
SiemensTutorial / How-toWinCC
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

Reusable pop-up faceplates are the standard pattern in SIMATIC WinCC V7.4 for displaying and editing process data that has the same shape across many plant objects (motors, valves, tanks, drives, dosing units, etc.). Instead of duplicating a picture per instance, you build one picture that uses structure tags (UDT-style compound tags) plus the Tag Prefix property of the Picture Window object. The prefix acts as a runtime pointer to the active structure instance, so the same I/O fields, status symbols, and scripts inside the faceplate automatically read/write the correct element of the correct motor.

This reference walks through the complete configuration: defining the structure type, instantiating structure tags for each motor, binding the elements to absolute S7 addresses, building the faceplate picture, configuring the picture window with a tag prefix, and calling the pop-up dynamically. The pattern is documented in Siemens FAQ 23690358 and is the foundation of the WinCC Faceplate Designer approach.

Prerequisites

  • SIMATIC WinCC V7.4 SP1 or later (Update 7+ recommended for stability of the tag prefix engine). Earlier V7.3/V7.2 projects can be migrated, but always retest faceplates after migration.
  • WinCC Explorer project with a working Tag Management and an active channel (e.g., SIMATIC S7 PROTOSUITE or SIMATIC S7-1200/S7-1500 Channel).
  • Established S7 connection to the AS (PLC) — verify with the Channel Diagnosis tool before binding addresses.
  • A defined S7 data block (DB) or UDT on the PLC that mirrors the structure you plan to build in WinCC. Mismatched data types are the #1 cause of "quality bad" I/O fields.
  • Authoring rights on the WinCC project (the Structure tag editor is disabled in runtime-only client configurations).
Engineering rule: Build the structure type in WinCC first, then mirror it in STEP 7 as a UDT. Do not freehand the DB in STEP 7 and reverse-engineer WinCC to match — this creates pointer drift when a new element is added.

Step 1 — Define the Structure Type

In WinCC Explorer, right-click Tag Management → Add New Structure Type. The structure type is a template; it does not contain values, only element definitions. Use a naming convention such as MOTOR_Type, VALVE_Type, or TANK_Type to keep the tag browser readable.

Element name Data type (WinCC) Maps to S7 Length (bytes) Notes
.on Binary tag BOOL 1 bit Start command (write from HMI)
.off Binary tag BOOL 1 bit Stop command (write from HMI)
.running Binary tag BOOL 1 bit Run feedback (read only)
.fault Binary tag BOOL 1 bit Fault feedback (read only)
.rpm Signed 32-bit DINT 4 Speed actual
.setpoint Signed 16-bit INT 2 Speed setpoint
.name Text tag, 16 chars STRING[16] 18 Label (header on faceplate)

Reserve 4-byte alignment for any 32-bit elements placed next to a 16-bit element to avoid padding issues; WinCC V7.4 will not auto-align elements and the S7 will. A Pack bits option exists for internal structures — leave it off when the structure is bound to an S7 DB.

Step 2 — Create Structure Tag Instances

Right-click the new Structure Type in the tag browser and choose Add New Structure Tag. Create one instance per physical object:

  • motor1 → DB100
  • motor2 → DB101
  • motor3 → DB102
  • …

A structure instance is a single WinCC tag whose address points to the start of the corresponding S7 DB. All elements (.on, .off, .rpm, …) are accessed as motor1.on, motor1.rpm, etc. The instance itself can be referenced by its short name (motor1), which is what gets fed into the picture window's Tag Prefix property at runtime.

Limitation: Structure tag instance names are case-sensitive and limited to alphanumeric + underscore. They cannot contain dots, slashes, or spaces. Plan the naming scheme with the maximum number of instances in mind — renaming instances after the faceplate is in service requires a project regeneration on every HMI client.

Step 3 — Bind Structure Elements to S7 Addresses

Select the structure instance (e.g., motor1) and open its Properties dialog. The dialog exposes every element defined by the structure type. Each element has its own address field.

For an S7-300/400 channel, the address takes the form DB<n>,DBX<byte>.<bit> for BOOL, DB<n>,DBB<byte> for byte, DB<n>,DBW<word> for INT/WORD, and DB<n>,DBD<dword> for DINT/DWORD. For an S7-1200/1500 optimized DB, use the symbolic form: "Motor_1".on.

Element S7-400 DB100 address S7-1500 symbolic
motor1.on DB100,DBX0.0 "MotorDB".on
motor1.off DB100,DBX0.1 "MotorDB".off
motor1.running DB100,DBX0.2 "MotorDB".running
motor1.rpm DB100,DBD4 "MotorDB".rpm
motor1.setpoint DB100,DBW8 "MotorDB".setpoint
motor1.name DB100,DBB10.0 (STRING[16] = 18 bytes) "MotorDB".name

When the structure type is changed (a new element added or one removed), WinCC will reapply the template to all instances and clear any address that is no longer valid. The instance will be flagged in the tag browser with a warning icon — re-enter the affected addresses before going live.

Step 4 — Build the Pop-up Faceplate Picture

Open the Graphics Designer and create a new picture (e.g., motor_faceplate.pdl). Lay out the controls exactly the way you want them to appear for any motor instance:

  • Header field (text I/O) bound to name
  • Start button (button with set tag action writing to on)
  • Stop button (button writing to off)
  • Status lamp for running
  • Status lamp for fault
  • I/O field for setpoint (output + input)
  • I/O field for rpm (output only)

Critically, when wiring an I/O field you reference the structure element without the instance prefix:

  • Tag for the speed I/O field: rpm
  • Tag for the start button: on
  • Tag for the name header: name

These bare element names will be resolved at runtime against the picture window's tag prefix. If you accidentally type motor1.rpm in the faceplate, the picture is no longer reusable — it is hard-bound to a single instance.

Engineering rule: Any tag configured in a faceplate that will be used inside a picture window with a tag prefix must be a structure element of the same structure type. Mixing a structure element from a different type, a free WinCC tag, or an internal tag with the tag prefix produces quality-bad values at runtime.

Step 5 — Configure the Picture Window with a Tag Prefix

Add a Picture Window object to your main process picture. In its configuration dialog set:

  • Picture Name: the picture to display — motor_faceplate.pdl
  • Tag Prefix: the runtime structure instance — e.g., motor1
  • Display: True / False or a tag that toggles visibility
  • Size, position, border style: cosmetic only

The picture window now behaves like a function call: it opens the faceplate, points it at motor1, and the picture internally reads rpm → resolves to motor1.rpm, writes on → resolves to motor1.on, and so on. Add a separate picture window per simultaneous instance (or reuse one window and dynamically change the prefix — see Step 6).

Step 6 — Calling the Pop-up with Different Instances

To call the same faceplate for a different motor, set the picture window's Tag Prefix property dynamically using a C/VBScript or a tag trigger:

VBScript example (button click → open faceplate for motor3):

Dim objWnd
Set objWnd = ScreenItems("PopupWindow")
objWnd.PictureName = "motor_faceplate.pdl"
objWnd.TagPrefix   = "motor3"
objWnd.Visible     = True

Alternative — direct tag property on the button:

  1. In the button's Mouse Click event, use a Set Property action targeting PopupWindow.TagPrefix.
  2. Source value: a WinCC string tag (e.g., sel_motor_prefix) that the screen itself sets with the clicked motor's name.
  3. Triggering expression: sel_motor_prefix <> ""

This is the mechanism used in the Siemens faceplate technology documented in FAQ 23690358.

Verification

Run the project in WinCC Runtime and validate the chain end-to-end:

  1. Tag prefix resolution — open the faceplate for motor1; in Tag Diagnosis confirm motor1.rpm updates when the S7 value changes. Repeat for motor2; the same I/O field should now display motor2's value without any change to the faceplate picture.
  2. Write path — type a new setpoint in the I/O field and verify the S7 DB changes (monitor the variable in STEP 7 or via the S7 diagnostic buffer).
  3. Switch instances — fire the VBScript above; the picture window content should refresh to the new motor within the configured update cycle (default 250 ms; reduce to 100 ms for fast processes, 1000 ms for slow).
  4. Compile and consistency check — compile the OS (Operator Station) project. Any unresolved tag prefix will be listed in the compiler output as "Tag prefix refers to a non-existent structure instance".
  5. Redundancy / multi-client — in a redundant server pair, replicate the structure tags identically; the tag prefix is a runtime property and is not stored in the tag database.
Performance: Each picture window that opens a faceplate consumes a tag prefix slot and adds update overhead. WinCC V7.4 supports up to 64 simultaneously open faceplate windows per picture; a well-built pop-up pattern with a single reusable window is more efficient than one window per motor.

Troubleshooting Matrix

Symptom Likely cause Fix
I/O field shows red X Tag prefix points to a structure instance that does not exist, or element name does not match structure type Confirm instance exists in Tag Management; confirm element is spelled identically to the structure type definition
Value frozen at 0 Element address points to wrong byte/bit in the S7 DB Compare the DB layout with the structure element offsets; check bit order on S7-1500 optimized DBs (LSB first)
Runtime error 130001 "Tag not found" Tag prefix is empty or contains a typo Trace the script that sets the prefix; ensure it is called before the picture window is set visible
Faceplate updates one motor but not the other One structure instance not created or not bound to an address Open Tag Management, verify both motor1 and motor2 exist and have valid addresses (no yellow warning triangle)
Value flashes between two instances when navigating Two picture windows share the same name Rename to unique names (PWMotor1, PWMotor2) — the tag prefix is per object, not per picture
String element shows garbage S7 STRING length mismatch with WinCC text tag length Match the WinCC text tag length to the S7 STRING[n] maximum length plus 2 header bytes

Advanced Patterns

Nested structures: WinCC V7.4 supports one level of structure element nesting. If you need motor1.drive.speed, define drive as a sub-structure of MOTOR_Type with its own elements. The tag prefix in the picture window still resolves to the outer instance.

Array-style access: For loops over 10..20 motors, create structure instances named motor[1]…motor[N] and build the prefix dynamically. The Index property of a C-action can drive a script that concatenates "motor" + IndexVar.

User-defined buttons per faceplate: Add a child picture window inside the faceplate for secondary dialogs (e.g., a curve display for the motor's vibration). The child picture window inherits the parent's tag prefix only if you explicitly copy it via a script.

WinCC Faceplate Designer: As of WinCC V7.4 SP1, the Faceplate Designer add-in automates the tag prefix plumbing and generates a VB function library. The underlying mechanism is the same; the add-in just hides the manual steps above.

Field-Proven Caveats

  • Structure tag instance rename in the tag browser does not propagate to faceplate scripts. Search the project for the old name before renaming.
  • Do not delete a structure type while instances exist. WinCC will orphan the instances and the compiler will not catch it until the next full rebuild.
  • The picture window Tag Prefix field accepts only the instance short name. It does not accept a fully qualified StructureName.InstanceName path — the structure type is implicit from the faceplate's I/O field bindings.
  • On slow networks (≥ 500 ms RTT), increase the picture window's Update property above the default 250 ms; otherwise the prefix change may commit before the new instance's first value is fetched, producing a brief flicker of the previous motor's data.

FAQ

How do I bind a structure tag element to a specific S7 DB address?

Open the structure instance in Tag Management, select the element (e.g., on), and enter the S7 address in the element's Properties → Address field. For S7-300/400 use DB100,DBX0.0 (BOOL) or DB100,DBD4 (DINT); for S7-1200/1500 optimized DBs use the symbolic form "MotorDB".on. See the WinCC V7.4 Communication Manual for the full address syntax per channel.

Can a single pop-up faceplate show different motor instances at runtime?

Yes. Use one Picture Window object and change its Tag Prefix property dynamically (e.g., from motor1 to motor2) via a VBScript on a button click or on a tag trigger. The faceplate picture itself is built once and contains only bare element names such as on, rpm, fault — they resolve against the active prefix at runtime. Siemens documents this in FAQ 23690358.

What is the difference between an internal tag and an external tag in WinCC V7.4?

Internal tags exist only in WinCC — they have no address and no connection to the PLC — and are typically used for screen-local logic (e.g., a toggle for a maintenance override). External tags have an address pointing to a memory location in the connected AS (PLC); WinCC reads/writes them on the configured update cycle. A structure element bound to a faceplate must be an external tag, otherwise the picture window tag prefix has no AS endpoint to resolve to.

Does the tag prefix mechanism support nested structures (e.g., motor1.drive.speed)?

Yes, WinCC V7.4 supports one level of structure element nesting. Define a sub-structure inside the parent structure type and reference its elements with a dot inside the faceplate (e.g., drive.speed). The tag prefix in the picture window still resolves to the parent instance only; the sub-element is resolved relative to the prefix.

Why does my picture window show a red X for every I/O field after I configure the tag prefix?

The most common cause is that the prefix value does not match any structure instance name in the project, or the faceplate's I/O fields reference element names that do not exist on the structure type. Open the tag browser and confirm the instance (e.g., motor1) is present and has no warning icon. Then re-open the faceplate and confirm each I/O field's tag is spelled identically to the structure type's element list (case-sensitive, no prefix such as motor1. inside the faceplate picture).

Back to blog