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
- Architecture and Fundamental Mechanics
- Step-by-Step Implementation Procedure
- Verification
- Limitations and Operational Precautions
- Engineer FAQ
- Technical References
- Related Articles
- Related Tags
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
- In WinCC Explorer on the Engineering Station, double-click
OS Project Editor. - On the
Layouttab, verify the monitor layout configuration:
* Number of monitors:2(or matching your hardware setup).
* Layout arrangement:1x2or2x1.
* Monitor resolution: e.g.,1920x1080. - Note the standard system screen container naming convention (
@Screen1,@Screen2).
Step 2: Implement Multi-Monitor Aware VBS Popup Closure Script
- Open the popup picture in WinCC Graphics Designer.
- Select the 'Acknowledge' or 'Close' button, right-click, and select
Properties. - Navigate to
Events > Mouse > Mouse Clickand edit the VBScript action. -
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
-
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 = 1For 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
- Save the modified picture in Graphics Designer.
- In SIMATIC Manager, perform an OS Compile and download changes to the OS Client workstations.
Verification
- On the dual-monitor OS Client, activate WinCC Runtime.
- Trigger the critical alarm condition by forcing the trigger tag (
CriticalAlarm_Popup_Active = 1). - Confirm that the popup window appears simultaneously on both Monitor 1 (left) and Monitor 2 (right).
- Move the mouse to Monitor 1 and click the 'Acknowledge' button.
- Verify that the popup closes instantly on Monitor 1 AND simultaneously vanishes from Monitor 2.
- 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
- Hardcoding screen names (such as
@Screen1) without querying@NumberOfMonitorswill cause runtime script errors if the project is later deployed on single-monitor stations; always includeOn Error Resume Nextor check monitor bounds. - Avoid opening high-frequency non-critical popups on all monitors, as constant visual interruption causes operator fatigue.
- Screen window object names (
ScreenItems("...")) are case-sensitive in some script contexts; verify exact character casing in Graphics Designer. - 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
- SIMATIC Process Control System PCS 7 OS Process Control (Entry ID: 109780584)
- WinCC V7.5 SP2 - Working with WinCC (Entry ID: 109792585)
- SIMATIC WinCC V7.5 Scripting: VBS, ANSI-C, VBA Manual (Entry ID: 109792585)
Related Articles
- Resolving Multi-Monitor Coordinate Offsets and Trend Pop-up Placement on 2x2 PCS 7 OS Clients
- Optimizing Multi-Monitor 4K Display Performance and Faceplate Latency on PCS 7 OS Clients
- Resolving Missing Process Data on WinCC OS Clients in PCS 7 Custom C-Script Faceplates
Related Tags
- Multi-Monitor
- Dual Monitor
- WinCC VBScript
- OS Project Editor
- Split Screen Manager