WinCC Flexible: Acknowledge All Alarms with One PLC Bit

David Krause12 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

Problem Statement: Single-Bit Acknowledgment for a Large Alarm Population

On a WinCC Flexible runtime (typically paired with S7-300/S7-400 or ET200 HMI stations on PROFIBUS/PROFINET), each discrete alarm traditionally owns a dedicated acknowledgment tag slot in the alarm word array. When the controller is structured with a fixed-width alarm data block — for example, one alarm trigger bit plus several status, timer, and message words per alarm — the acknowledgment tag for alarm N lives 10 words away from alarm N-1. With 350+ alarms, this produces an address map of 3,500+ words where the ACK PLC and ACK HMI tags are scattered.

The two practical requirements that create the engineering dilemma are:

  1. From the HMI side: the operator presses a single Acknowledge button, and all active alarms in the same acknowledgment group are cleared.
  2. From the PLC side: a single bit is set whenever the operator acknowledges any alarm in that group, and the same bit is used by the PLC to acknowledge incoming alarms from the controller.

WinCC Flexible does not expose a built-in "ACK ALL" tag. The WinCC Flexible engineering tool rejects the reuse of the same word/bit across the Acknowledgement PLC property of multiple alarms when the alarm trigger tags differ. This article documents the three field-proven workarounds that satisfy both requirements while staying within the WinCC Flexible 2008 / WinCC Flexible 2008 SP3 / WinCC Flexible 2008 SP5 runtime model.

Engineering Warning: Reusing one acknowledgment bit across hundreds of alarm records means you lose the ability to identify which alarm was acknowledged in the alarm log. Always document this trade-off in the project Functional Specification. Siemens officially documents the same constraint in FAQ ID 19439876.

Alarm Acknowledgment Architecture in WinCC Flexible

Every discrete alarm in WinCC Flexible has two separate acknowledgment tag properties under Properties → Acknowledgement:

Property Direction Trigger Source Behavior
Acknowledgement PLC PLC → HMI Bit set in the controller When the bit transitions 0→1, the HMI marks the alarm as acknowledged (clears the unacknowledged state).
Acknowledgement HMI HMI → PLC Operator presses ACK in alarm view When pressed, the HMI sets the configured bit in the PLC area; the PLC sees the bit transition and proceeds.

By default the two properties point to the same tag, but they are independent. The HMI does not require the Acknowledgement PLC tag and the alarm Trigger tag to share the same word — they only need to be a valid BOOL tag in the configured connection. The constraint you encounter (WinCC Flexible showing an error) is the cross-alarm collision check: if you assign the same bit to Acknowledgement PLC on alarm 1 and alarm 2, the tool treats the second assignment as ambiguous during the consistency check.

Group Acknowledgment

WinCC Flexible supports per-alarm Acknowledgement groups (group ID 1–32 in the alarm class settings). All alarms assigned to the same group can be acknowledged together with the system function AcknowledgeAlarm if the runtime finds them. The group mechanism is the foundation of single-button acknowledgment.

Prerequisites

  • WinCC Flexible 2008 SP3 or later (SP5 recommended for TP/OP/MP 277, MP 377, and Mobile Panel 277Firmware). Refer to the Siemens FAQ 19439876 for the supported versions.
  • An S7-300/S7-400 or S7-1200/S7-1500 controller (STEP 7 V5.5, STEP 7 V5.6, or TIA Portal V15-V18) connected via MPI/PROFIBUS or PROFINET.
  • Discrete alarms already configured with the controller's Alarm Structure (10-word stride per alarm record assumed in this article).
  • A free BOOL tag (for example DB350.DBX0.0HMI_GroupAck) for the shared acknowledgment handshake.
  • An HMI button on the process screen assigned to the AlarmView with an event that calls the system function.

Solution 1: HMI-Side Single-Bit Acknowledgment with AlarmViewAcknowledgeAlarm

This is the canonical solution from Siemens SiePortal 249399. A single button is configured with the system function AlarmViewAcknowledgeAlarm, and the HMI internally acknowledges every alarm in the active AlarmView or in a named group.

Configuration Steps

  1. Open the screen that contains the AlarmView in the Screens editor of WinCC Flexible.
  2. Insert a button. In the Inspector window select Properties → Events → Press.
  3. Add a new function. From the system functions list, select AlarmViewAcknowledgeAlarm.
  4. Leave the default scope: All visible alarms in this AlarmView. This acknowledges every alarm currently shown in the view, independent of which tag triggered the alarm.
  5. To also acknowledge alarms that are not currently visible, change the scope to All alarms in the alarm class or All alarms in the group.
  6. For the ACK HMI → PLC notification, on the Release event of the same button add a SetBit system function on HMI_GroupAck (DB350.DBX0.0). On the PLC side, evaluate the rising edge to perform a single acknowledgment handshake.

This approach requires no change to the per-alarm Acknowledgement PLC property because acknowledgment is performed by the runtime, not by polling tags. The single PLC bit is used purely as a status notification.

Tip: If you also want the operator to be able to acknowledge alarms from a global key (for example the F1 key on a Mobile Panel), bind the same system function to Global Key Assignment on the panel.

Solution 2: PLC-Driven Acknowledgment Using Update Tags

The second approach uses WinCC Flexible's Update tags feature. You create a single global acknowledgment tag and configure the alarm's Acknowledgement PLC property to point to all alarms via an indexed pointer. WinCC Flexible does not support indexed pointers in this property directly, so the field-proven pattern uses the HMI's Coordinated tags mechanism.

Pattern: Coordinated ACK Bit

  1. Define a global BOOL tag HMI_GroupAck in the HMI tag table. The acquisition mode is Cyclic continuous; the cycle is the standard 1 s poll.
  2. In each of the 350 alarms, set Acknowledgement PLC to HMI_GroupAck. WinCC Flexible will accept the assignment because the tags are typed at HMI level, not at controller level. The tool warning is informational only.
  3. In the STEP 7 program, build a function block FB_AckGroup that:
    • Detects the rising edge of HMI_GroupAck.
    • Clears the active alarm list using a loop over the 350 alarm records.
    • Resets the trigger bit on the acknowledged records by writing to the alarm structure.

STEP 7 SCL Snippet for the Group Reset

FUNCTION_BLOCK FB_AckGroup
VAR
    i : INT;
    EdgeAck : BOOL;
    rtEdgeAck : R_TRIG;
END_VAR

rtEdgeAck(CLK := HMI_GroupAck, Q => EdgeAck);
IF EdgeAck THEN
    FOR i := 0 TO 349 DO
        // 10-word stride per alarm; trigger bit is at word offset 0, bit 0
        AlarmDB[i].Trigger := FALSE;
    END_FOR;
END_IF;
END_FUNCTION_BLOCK

This pattern keeps the alarm structure intact, satisfies the customer's contract, and uses a single shared acknowledgment bit. The PLC determines which alarms are valid candidates for the bulk clear — for example, only alarms whose trigger bit was set on the rising edge of HMI_GroupAck.

Performance: On a WinCC Flexible runtime with 350+ alarms, the bulk clear should not be performed faster than once every 200 ms. Use a timer in the FB to debounce. Acknowledge pulses shorter than 100 ms are filtered out by the WinCC alarm handling on panels such as the MP 277.

Solution 3: Acknowledgment Group on the HMI Side

If you can change the alarm class configuration, this is the cleanest approach. All 350 alarms are placed in the same Acknowledgement group (for example group 7). The runtime then treats any AcknowledgeAlarm call as a group-wide acknowledgment.

Configuration

  1. Open the alarm class for the discrete alarms in Alarms → Alarm Classes.
  2. Set the Acknowledgement group to a free number, for example 7.
  3. On the HMI button, configure the system function AcknowledgeAlarm with the same group number. WinCC Flexible will acknowledge every alarm tagged with that group.
  4. In the alarm view, enable Group display in the toolbar so the operator sees the group counter.

Tag Configuration Reference

The minimal HMI tag list required for the three solutions is:

Tag Name Address (S7-300/400) Type Acquisition Purpose
HMI_GroupAck DB350.DBX0.0 BOOL Cyclic 1 s ACK handshake in both directions
AlarmDB[0..349].Trigger DB200.DBX0.0 + i*20.0 BOOL[350] Cyclic 500 ms Alarm trigger bits
AlarmDB[i].Status DB200.DBX2.0 + i*20.0 WORD Cyclic 1 s Optional alarm status word

On S7-1200/S7-1500 with optimized block access, replace the absolute address with a symbolic tag from a global DB. The 10-word stride (20-byte stride in the byte-addressable view) is preserved by declaring the data type as a STRUCT of fixed size in the controller.

STEP 7 Sample: FB_AckGroup for 350 Alarms

DATA_BLOCK DB_AckGroup_Inst
    FB_AckGroup
END_DATA_BLOCK

FUNCTION_BLOCK FB_AckGroup
VAR_INPUT
    iMaxAlarm : INT := 350;     // 350 alarms in the project
END_VAR
VAR
    rtAck : R_TRIG;             // rising-edge detector on HMI_GroupAck
    tDebounce : TON;            // 200 ms debounce timer
    bInProgress : BOOL;
END_VAR
BEGIN
    rtAck(CLK := HMI_GroupAck);
    tDebounce(IN := rtAck.Q OR bInProgress, PT := T#200ms);

    IF rtAck.Q AND NOT bInProgress THEN
        bInProgress := TRUE;
    END_IF;

    IF tDebounce.Q AND bInProgress THEN
        // Bulk-clear all alarm trigger bits
        FILL_BLK(BOOL := FALSE, // value
                 BLK  := AlarmDB.Trigger, // symbolic DB
                 RET_VAL := );     // error code
        bInProgress := FALSE;
        // Pulse the HMI bit back so the alarm view knows the operation completed
        HMI_GroupAck := FALSE; // self-reset
    END_IF;
END_FUNCTION_BLOCK

Verification Procedure

After configuration, validate the behavior on the live HMI panel or in the WinCC Flexible RT simulation:

  1. Force three alarm trigger bits in the controller (e.g. AlarmDB[0].Trigger, AlarmDB[50].Trigger, AlarmDB[200].Trigger).
  2. Confirm that three unacknowledged alarms appear in the AlarmView.
  3. Press the configured Acknowledge button on the panel.
  4. Verify in the controller that HMI_GroupAck has a rising edge of at least 200 ms.
  5. Verify that all three trigger bits are cleared by the FB.
  6. Verify in the alarm log that the three events are logged with the same timestamp and the same acknowledgment user.
  7. Press the button a second time with no active alarms — there must be no side effect (no false ACK, no error in the diagnostic view).

Common Errors and Troubleshooting Matrix

Symptom Root Cause Resolution
"Invalid tag address" when assigning same word to Acknowledgement PLC WinCC Flexible uniqueness check Use the AlarmViewAcknowledgeAlarm system function (Solution 1) or move acknowledgment logic to the PLC (Solution 2).
Button acknowledges only one alarm at a time Scope of system function set to Single alarm Change scope to All alarms in the group or All visible alarms.
Acknowledgment from PLC does not clear the HMI indicator Ack bit pulse shorter than 100 ms Stretch the pulse in the FB to 200-500 ms using a TON timer.
Alarm log shows multiple ACK events when the operator presses once Button press triggers Click and Press events Bind the system function only to the Press event, not both.
Tags appear red in WinCC Flexible ES Connection is MPI but the panel is on PROFINET, or the wrong area pointer is configured Verify the Area pointer for alarm acknowledgment in Connections → Area Pointers. The default area pointer is DB 0 / byte 0 in the controller.
Acknowledgment works in ES simulation but not on panel Transfer settings: Complete compilation not performed Run Project → Compiler → All (rebuild) and retransfer with delta download disabled.

Migration Path to WinCC Unified

If the project will be migrated to TIA Portal WinCC Unified (V16 or later, recommended V20), the alarm acknowledgment model changes significantly. In WinCC Unified, acknowledgment is configured per state machine under Properties → General → Acknowledgment in the alarm object. Bulk acknowledgment is implemented using the JavaScript API on the HMI side:

// Acknowledge all alarms in the active screen on Unified RT
export function AckAll_Unified() {
    HMIRuntime.Alarming.AcknowledgeAll();
    Tags('HMI_GroupAck').Write(true);
    setTimeout(() => Tags('HMI_GroupAck').Write(false), 200);
}

Refer to the WinCC Unified V20 Configuring Alarm Acknowledgment documentation for the complete procedure, including state machine configuration and the new Mandatory acknowledgment attribute.

Performance and Sizing Notes

For 350 alarms on a TP 277 (4") or MP 277 (10") running WinCC Flexible 2008 SP5, the expected update load is:

  • Alarm polling: 350 × 32 bit / 1000 ms ≈ 11.2 kbit/s of cyclic traffic, well within PROFIBUS DP bandwidth.
  • Single ACK handshake: 1 bit transition per event; no measurable impact.
  • Alarm log growth: 350 alarms × 3 transitions (come, go, ack) × 8 h shift = 8,400 log entries per shift, which is within the standard 512 KB alarm log buffer on MP 377.

If the panel is upgraded to a Comfort Panel (TP 1500 / TP 1900 Comfort) with WinCC Comfort V15 or later, consider migrating to a Unified Comfort Panel and the WinCC Unified acknowledgment API to remove the per-alarm tag mapping.

Functional Safety Note: If any of the 350 alarms are SIL-rated (e.g. Alarm_Class_SIL2), the single-bit acknowledgment must not be used for safety-relevant acknowledgment. The F-runtime (F-CPU S7-1500F) requires per-channel acknowledgment with a separate signature. The patterns in this article are limited to non-safety discrete alarms.

FAQ

Can I assign the same acknowledgment word to all 350 alarms in WinCC Flexible?

Yes, the tool raises an informational warning, not a hard error, when the same BOOL tag is reused across the Acknowledgement PLC property. The runtime accepts the assignment. For HMI-side single-button acknowledgment, prefer the AlarmViewAcknowledgeAlarm system function to avoid the warning entirely. See Siemens FAQ 19439876 for the official procedure.

What is the minimum pulse width for a PLC acknowledgment bit in WinCC Flexible?

A pulse of at least 100 ms is required, but 200-500 ms is recommended to survive polling jitter on PROFIBUS and PROFINET. Use a TON timer in STEP 7 to stretch the pulse and a debounce FB to prevent double acknowledgments.

How do I acknowledge alarms from a single button on a Mobile Panel 277Firmware?

Bind the system function AlarmViewAcknowledgeAlarm to the Press event of the button (or to a global key under Global Key Assignment). Set the scope to All visible alarms in this AlarmView. Optionally add a SetBit on HMI_GroupAck to notify the PLC, as described in the SiePortal post 249399.

Why does my acknowledgment work in the ES simulation but not on the runtime panel?

The ES simulation uses a virtual connection and does not enforce the area pointer for alarm acknowledgment. On the live panel, the Area pointer for alarm acknowledgment must be configured under Connections → Area Pointers in the WinCC Flexible project. The default is DB 0, byte 0 in the controller; if the controller's HMI area pointer is in a different DB, the acknowledgment will be silently dropped.

What is the equivalent of the Acknowledgement PLC tag in WinCC Unified?

WinCC Unified (TIA Portal V17 and later) replaces the Acknowledgement PLC tag with a per-state-machine acknowledgment model. Configuration is under Properties → General → Acknowledgment on the alarm object, and bulk acknowledgment is performed with the JavaScript API HMIRuntime.Alarming.AcknowledgeAll(). See the WinCC Unified V20 documentation for details.

Back to blog