Resolving Stuck Alarm Popups on Secondary Displays in Multi-Monitor WinCC PCS 7 Clients

Resolving Stuck Alarm Popups on Secondary Displays in Multi-Monitor WinCC PCS 7 Clients

In multi-monitor SIMATIC PCS 7 OS Clients (such as dual-monitor workstations), an alarm popup that closes on the primary monitor but remains stuck open on the secondary monitor occurs because the acknowledgment script targets only the active screen window context rather than enumerating across all monitor containers. In WinCC Basic Process Control (BPC), each physical display is encapsulated in a dedicated monitor screen window (@Screen1, @Screen2, etc.) inside the runtime container. A script executing HMIRuntime.Screens(...) or setting visibility by local object name addresses only the monitor where the script currently has focus. To resolve this, rewrite the VBS closing script to loop through all configured monitor containers (@Screen1 to @ScreenN) using the @NumberOfMonitors internal tag, or utilize standard Split Screen Manager (SSM) API functions (such as SSMGetScreen) to broadcast the close command across all displays.

Table of Contents

Executive Summary

Multi-monitor operator workstations are standard across modern industrial process plants, allowing operators to monitor plant overviews on one screen while interacting with detailed unit displays, trends, or alarm journals on adjacent monitors. When high-priority alarms trigger, control philosophies often demand displaying an intrusive popup dialog simultaneously across all physical displays to ensure immediate operator visibility.

However, automation engineers implementing custom Visual Basic Scripts (VBS) or C-actions to control popup lifecycles frequently encounter a stubborn multi-display defect: clicking the 'Acknowledge' or 'Close' button closes the popup on the primary (left) monitor, but the popup remains permanently frozen on the secondary (right) monitor. This occurs because WinCC multi-monitor architecture treats each display as an isolated screen container (@Screen1, @Screen2). Scripts written with single-monitor assumptions address only the focused window context. This technical guide examines the WinCC Split Screen Manager architecture, explains why single-context scripts fail in multi-screen layouts, and provides a multi-monitor VBS script template that guarantees simultaneous popup closure across all operator displays.

Architecture and Fundamental Mechanics

The multi-monitor subsystem in SIMATIC PCS 7 operates via the Basic Process Control (BPC) Split Screen Manager (SSM):
1. Screen Window Virtualization Architecture:
* When WinCC Runtime activates on a multi-monitor station, the master container picture (typically @1001.pdl or @Screen.pdl) loads a primary display manager.
* The total desktop surface is partitioned into discrete screen window objects named sequentially: @Screen1 (Monitor 1), @Screen2 (Monitor 2), up to @Screen4.
* Inside each @Screen<n> container, WinCC instantiates independent child picture windows: @Overview<n>.pdl, @Area<n>.pdl, @AlarmOneLine<n>.pdl, and @1001_popup windows.
2. The Mechanism of Single-Screen Closure Failures:
* When a global script opens a popup on both monitors, it instantiates or sets Visible = True on the popup picture window inside both @Screen1 and @Screen2.
* When the operator clicks the 'Acknowledge' button on Monitor 1, the script event executes within the local runtime context of Monitor 1.
* If the script contains code such as ScreenItems("Popup_Window").Visible = False or HMIRuntime.ActiveScreen.ScreenItems(...), the script resolves the object reference ONLY within the active container (@Screen1).
* The corresponding window inside @Screen2 remains completely untouched because it resides in a separate object hierarchy path (@[email protected]_Window).
3. Multi-Monitor Broadcasting Solution:
* WinCC maintains an internal system tag named @NumberOfMonitors (or @MonitorCount), which dynamically reflects the number of displays configured in the OS Project Editor (e.g., 2, 3, or 4).
* A robust multi-monitor script must query @NumberOfMonitors and execute a For...Next loop, programmatically constructing the absolute container path to each monitor and toggling the visibility of the popup across all screens simultaneously.

Step-by-Step Implementation Procedure

Step 1: Inspect Multi-Monitor Architecture in OS Project Editor

  1. In WinCC Explorer on the Engineering Station, double-click OS Project Editor.
  2. On the Layout tab, verify the monitor layout configuration:
    * Number of monitors: 2 (or matching your hardware setup).
    * Layout arrangement: 1x2 or 2x1.
    * Monitor resolution: e.g., 1920x1080.
  3. Note the standard system screen container naming convention (@Screen1, @Screen2).

Step 2: Implement Multi-Monitor Aware VBS Popup Closure Script

  1. Open the popup picture in WinCC Graphics Designer.
  2. Select the 'Acknowledge' or 'Close' button, right-click, and select Properties.
  3. Navigate to Events > Mouse > Mouse Click and edit the VBScript action.
  4. Replace single-context closing code with the following multi-monitor broadcast pattern:
    ```vbscript
    Sub OnClick(ByVal Item)
    Dim numMonitors, i, screenName, objWindow, ackTag

    ' Reset the triggering process alarm tag
    Set ackTag = HMIRuntime.Tags("CriticalAlarm_Popup_Active")
    ackTag.Write 0

    ' Query total number of configured monitors
    numMonitors = HMIRuntime.Tags("@NumberOfMonitors").Read
    If numMonitors < 1 Then numMonitors = 1

    ' Loop through all monitor containers and hide the popup window
    For i = 1 To numMonitors
    On Error Resume Next
    ' Construct path to popup window in each screen container
    Set objWindow = HMIRuntime.Screens("@Screen" & CStr(i)).ScreenItems("PW_CriticalAlarm")
    If Not objWindow Is Nothing Then
    objWindow.Visible = False
    End If
    On Error GoTo 0
    Next
    End Sub
    ```

Step 3: Align the Popup Opening Script

  1. In the global script or trigger action that opens the popup, ensure identical multi-monitor iteration is used:
    ```vbscript
    Sub ShowCriticalPopup()
    Dim numMonitors, i, objWindow
    numMonitors = HMIRuntime.Tags("@NumberOfMonitors").Read
    If numMonitors < 1 Then numMonitors = 1

    For i = 1 To numMonitors
    On Error Resume Next
    Set objWindow = HMIRuntime.Screens("@Screen" & CStr(i)).ScreenItems("PW_CriticalAlarm")
    If Not objWindow Is Nothing Then
    objWindow.Visible = True
    End If
    On Error GoTo 0
    Next
    End Sub
    ```

Step 4: Save and Download Project to OS Stations

  1. Save the modified picture in Graphics Designer.
  2. In SIMATIC Manager, perform an OS Compile and download changes to the OS Client workstations.

Verification

  1. On the dual-monitor OS Client, activate WinCC Runtime.
  2. Trigger the critical alarm condition by forcing the trigger tag (CriticalAlarm_Popup_Active = 1).
  3. Confirm that the popup window appears simultaneously on both Monitor 1 (left) and Monitor 2 (right).
  4. Move the mouse to Monitor 1 and click the 'Acknowledge' button.
  5. Verify that the popup closes instantly on Monitor 1 AND simultaneously vanishes from Monitor 2.
  6. Repeat the test by triggering the alarm again and clicking 'Acknowledge' on Monitor 2: verify that both monitors close properly regardless of which screen receives operator interaction.

Limitations and Operational Precautions

  1. Hardcoding screen names (such as @Screen1) without querying @NumberOfMonitors will cause runtime script errors if the project is later deployed on single-monitor stations; always include On Error Resume Next or check monitor bounds.
  2. Avoid opening high-frequency non-critical popups on all monitors, as constant visual interruption causes operator fatigue.
  3. Screen window object names (ScreenItems("...")) are case-sensitive in some script contexts; verify exact character casing in Graphics Designer.
  4. Ensure Windows display scaling is set to 100% on all monitors to prevent coordinate clipping of multi-monitor popups.

Engineer FAQ

Why did the popup close only on the monitor where I clicked Acknowledge?

The original script used local screen context referencing (e.g., ScreenItems(...)). WinCC executes the script inside the container of the clicked monitor (@Screen1), leaving the secondary container (@Screen2) unaddressed.

What internal tag tells me how many monitors are active?

The internal WinCC tag @NumberOfMonitors contains the active monitor count configured in the OS Project Editor.

Can I use C-scripts instead of VBS for multi-monitor closing?

Yes. In C-scripting, you can use the Split Screen Manager function SSMGetScreen(...) and iterate through monitor indices using SetVisible(...).

Does this apply to standard APL faceplates?

Standard APL faceplates handle multi-monitor positioning automatically via internal BPC scripts. This issue applies specifically to custom popups and user-created picture windows.

Where is multi-monitor layout configured in PCS 7?

Multi-monitor layout is configured in WinCC Explorer under the OS Project Editor on the Layout tab.

Technical References

Related Articles

Related Tags

  • Multi-Monitor
  • Dual Monitor
  • WinCC VBScript
  • OS Project Editor
  • Split Screen Manager
20 respuestas