A production-grade SIMATIC WinCC Comfort operator interface implemented in Siemens TIA Portal for an S7-1212C DC/DC/DC PLC — covering HMI tag architecture, dynamic process visualisation, discrete and analogue alarm configuration, alarm buffer management, and live runtime validation in SIMATIC WinCC Runtime Advanced
This project delivers a complete operator interface for an industrial batch mixing station, built as a SIMATIC WinCC Comfort HMI panel project within TIA Portal and validated in WinCC Runtime Advanced. The HMI communicates with a PLC_1 [CPU 1212C DC/DC/DC] and exposes real-time process state to the operator through a structured Root Screen: tank visualisation, live numeric readouts for Level, Step, and Temperature, operator command buttons, and a fully configured alarm system surfacing both process anomalies and connection diagnostics.
The architecture separates concerns cleanly: the PLC owns all control logic; the HMI owns all presentation and operator interaction. Tags are declared once in the PLC and exposed via the HMI connection layer — no control logic executes on the panel. This separation is the same pattern used in pharmaceutical, food and beverage, and chemical processing installations worldwide, where a panel failure must never compromise PLC-level process safety.
A batch mixing process operating under PLC-level GRAPH sequential control required a structured operator interface that could satisfy the following requirements without embedding any control logic on the HMI side:
CurrentStep (Int) — PLC tag, read-only on HMI. Sourced from the GRAPH FB's S_NO output; drives the Step IO field and indirectly the level animation positionHighTempWarning (Bool) — PLC tag; alarm trigger for the HIGH TEMP WARNING discrete alarm. Set by the PLC when the temperature analogue input crosses the process safety thresholdMixerTemperature (Int / Real) — PLC tag; drives the Temperature IO field display and the analogue alarm upper-limit checkTankLevel (Int / Real) — PLC tag; drives the Level (%) IO field and the tank fill animation object@DiagnosticsIndicatorTag (SInt) — WinCC-generated internal diagnostics tag; populates the connection-level alarm entries automatically when the HMI connection to the PLC drops or encounters a module configuration mismatchTankLevel; a circular status indicator (circle graphic object, colour-animated) provides an at-a-glance running / stopped / fault state without requiring the operator to read textHighTempWarning (Bool), bit 0, rising-edge detection. Alarm class: Warning. Text: "HIGH TEMP WARNING – Mixer overheating". Assigned to acknowledge group 0. This alarm fires when the PLC asserts the flag after the temperature analogue input exceeds the configured safety limitMixerTemperature, upper-limit mode, threshold value 85 (engineering units). Fires independently of the discrete alarm path — provides a second, tag-direct detection channel that does not depend on PLC-side flag logic, increasing alarm coverage redundancy@DiagnosticsIndicatorTag — surfaces connection drops, operating mode changes, module configuration errors, and user administration events without requiring manual alarm configuration. These are visible in the runtime alarm buffer alongside process alarms, giving operators a unified fault viewComplete tag binding table for the Root Screen, mapping each visual element to its data source and access mode.
| HMI Element | Tag / Source | Type | Access | Notes |
|---|---|---|---|---|
| Level (%) IO field | TankLevel |
PLC-connected | Read | Also drives tank fill animation object via movement property |
| Step IO field | CurrentStep |
PLC-connected (Int) | Read | Sourced from GRAPH FB S_NO output |
| Temperature IO field | MixerTemperature |
PLC-connected | Read | Also used as analogue alarm trigger tag (upper limit 85) |
| Start Batch button | Start command Bool | PLC-connected | Write (SetBit) | Event action on MouseClick; no HMI script |
| Stop button | Stop command Bool | PLC-connected | Write (ResetBit) | Event action on MouseClick |
| Status indicator circle | Derived from process state | Animation | Read | Colour animation: green = running, grey = idle |
| HIGH TEMP WARNING alarm | HighTempWarning (Bool, bit 0) |
PLC-connected | Alarm trigger | Discrete alarm, Warning class, acknowledge group 0 |
| Analogue alarm | MixerTemperature |
PLC-connected | Alarm trigger | Upper limit mode, threshold 85 |
| Alarm view panel | @DiagnosticsIndicatorTag + all alarms |
Internal + PLC | Read | Buffer mode; columns: Date, Status, Text, Ack Group |
@DiagnosticsIndicatorTag (SInt) and CurrentStep (Int) bindings. Project tree shows HMI_1 [KP700 Comfort] under PLC_1 [CPU 1212C DC/DC/DC]. Compile output: errors 0, warnings 2.
# DISCRETE ALARM — HIGH TEMP WARNING # Trigger tag: HighTempWarning (Bool, PLC-connected) # Trigger bit: 0 # Detection: Rising edge (0 → 1) # Alarm class: Warning # Ack group: 0 # Text: "HIGH TEMP WARNING – Mixer overheating" # Appears in: Alarm buffer (persistent after acknowledgement) # Set by PLC when MixerTemperature analogue input > safety limit # Decouples HMI alarm display from analogue threshold arithmetic — # the PLC evaluates the condition; the HMI only reads the Bool flag. # ANALOGUE ALARM — TEMPERATURE UPPER LIMIT # Trigger tag: MixerTemperature (Int/Real, PLC-connected) # Mode: Upper limit # Threshold: 85 (engineering units) # Independent of HighTempWarning Bool path — # provides a second detection channel that fires directly # from the raw process value, regardless of PLC flag logic. # Increases alarm coverage: if the PLC flag fails to assert, # the analogue alarm still fires on the raw tag value. # SYSTEM / DIAGNOSTICS ALARMS # Source: @DiagnosticsIndicatorTag (SInt, WinCC internal) # Auto-generated — no manual configuration required. # Entries surfaced in runtime: # - Connection disconnected: HMI_Connection_1 # - General connection error / Missing user rights # - Incorrect access point or module configuration # - Change to operating mode 'online' # - User administration imported successfully # Unified with process alarms in single alarm buffer view — # operator sees process faults and comm faults in one panel.
@DiagnosticsIndicatorTag is exposed in the same alarm buffer as process alarms. When a HIGH TEMP WARNING fires alongside a "Connection disconnected" entry, the operator immediately sees both events in chronological order and can determine whether the process fault preceded or followed the communication loss — critical information for root cause analysis.
CurrentStep (Int). Exposing the active GRAPH step number as a live IO field gives the operator actionable situational awareness ("Step 1 — Idle", "Step 4 — Mixing") rather than a binary Running / Stopped indicator. This is sourced directly from the GRAPH FB's S_NO output, requiring no intermediate PLC data conversion.
The complete HMI was validated in SIMATIC WinCC Runtime Advanced, confirming end-to-end tag binding, alarm triggering, and alarm buffer population without a physical PLC. Key validation steps:
HighTempWarning forced to TRUE — "HIGH TEMP WARNING – Mixer overheating" appears in alarm buffer with correct timestamp, Status I (Info/Active), and acknowledge group 0MixerTemperature simulated above 85 — upper-limit alarm fires independently of the Bool path, confirming dual-channel coverageThe most persistent challenge was alarm triggering behaviour during initial configuration. The HIGH TEMP WARNING alarm failed to appear in the runtime view despite the trigger tag being asserted. Root cause: the alarm view object had been placed in current-alarm mode rather than buffer mode, and the alarm was firing and immediately clearing before the operator could observe it. Switching to buffer mode and configuring the alarm trigger for rising-edge detection resolved the issue — the alarm now fires on the 0→1 transition and persists in the buffer until explicitly acknowledged.
The second challenge was the distinction between discrete and analogue alarm types. Initial attempts to configure the temperature alarm as a discrete Bool alarm produced incorrect trigger behaviour when the temperature tag was an Int rather than a Bool. Understanding that analogue alarms operate on threshold comparisons against numeric tags — not bit-level reads — required a structural reconfiguration of that alarm's trigger definition, switching from discrete to upper-limit analogue mode.
The third challenge was tag architecture hygiene. Early in development, several display tags were declared as HMI-internal tags and manually assigned test values, which masked genuine PLC-connection issues. Migrating all process-relevant tags to PLC-connected definitions — and using only @DiagnosticsIndicatorTag as an HMI-internal system tag — produced a clean separation that made subsequent debugging significantly more tractable.
TIA Portal's HMI compiler also surfaced non-obvious warnings when IO field format masks did not match the declared data type of the bound tag. Resolving these required aligning the display format (integer vs floating-point) with the PLC tag type, which in turn surfaced a type inconsistency between CurrentStep (Int) and an early IO field configured for Real display — corrected by standardising the tag type across the PLC interface and HMI binding.
@DiagnosticsIndicatorTag and auto-generated connection-level fault surfacingS_NO / CurrentStep output)