Problem Overview
When configuring alarm behavior on Advanced Process Library (APL) function blocks inside the SIMATIC PCS 7 CFC Editor, the engineer is expected to open the Object Properties dialog, switch to the General tab, and click the Messages... button. The resulting message configuration dialog exposes a Message Class drop-down for every message row that is not greyed-out. In affected installations the drop-down never opens: clicking the arrow does nothing, the control appears locked, and the engineer cannot change the class from, for example, Alarm - above to Warning - above or Fault - below.
The symptom is observed on blocks such as Alarm8P, Alarm8, MSG_LOCK, SMC_DIR, and any APL block that derives from the standard message-capable FB family. It is independent of the program logic, the CPU firmware (S7-300 / S7-400 / AS 410 / AS 410E), and the project hierarchy; only the engineering station's display topology matters.
Affected Versions and Software Components
| Component | Versions Reporting the Defect | Notes |
|---|---|---|
| SIMATIC PCS 7 ES | V7.0, V7.1 SP1, V7.1 SP2, V8.0, V8.1, V8.2, V9.0, V9.0 SP1, V9.0 SP2, V9.1 | Defect reproduced at every major release from V7.0 through V9.1. |
| APL Library | V7.0, V7.1 SP5, V8.0, V8.1, V8.2, V9.0, V9.1 | Block family is correct; defect is in the Win32/WinForms combo control of the ES shell. |
| Windows (ES host) | Windows 7 SP1 (x64), Windows Server 2008 R2, Windows 10 LTSC 2019 | Any multi-monitor topology that extends the desktop across two or more displays. |
| OS engineering rights | Local administrator required for some workarounds | Per PCS 7 Engineering manual (ID 109812497), message class configuration is project-wide and CPU-wide. |
How to Reproduce the Defect
- Log in to a Windows engineering station on which PCS 7 ES has been installed identically to a working reference station (same DVD, same Setup, same Hotfix bundle).
- Extend the desktop to a second monitor (DisplayPort, DVI, HDMI, or USB graphics adapter) so the primary device is monitor 1 and the secondary device is monitor 2.
- Open the SIMATIC Manager → project → CFC Editor and load a chart that contains an APL block such as
FB 1869 <ALARM_8P>orFB 49 <SMC_DIR>. - Right-click the block header and choose Object Properties... (or double-click the block body).
- On the General tab, click Messages.... The Message Configuration dialog appears.
- Click the Message Class drop-down arrow for any non-greyed row. Expected: the list of available classes appears. Actual: nothing happens, the arrow does not react, the control is unresponsive.
- Drag the entire Message Configuration dialog from monitor 2 to monitor 1 without closing it, then click the same drop-down. The list opens normally.
The defect is therefore tied to the screen on which the parent dialog is rendered, not to the project, the chart, the user, or the block instance.
Root Cause Analysis
The Message Configuration dialog is a Win32 child window owned by the CFC Editor's MDI frame. The drop-down is a ComboBoxEx32 control that uses a drop-down list, not a simple list. When the parent dialog is positioned on a non-primary display, the OS computes the candidate popup rectangle relative to the monitor that owns the top-left corner of the parent. If that rectangle is clipped, fully obscured, or if the parent has the WS_EX_TOPMOST bit cleared in a way that conflicts with the secondary monitor's DWM composition policy, the popup is either:
- placed at coordinates that the OS interprets as off-screen, and therefore never drawn, or
- drawn behind the parent dialog and therefore not visible to the user.
Microsoft documents the underlying behavior in the Win32 ComboBox reference: the popup is created with WS_EX_TOPMOST derived from the parent, and its z-order is decided by SetWindowPos using the parent's monitor handle. On extended desktops the monitor handle of the parent is not always the primary monitor handle, and the secondary monitor's composition state can differ when the dialog is moved there after creation (a classic DWM timing issue when a window is dragged across a monitor boundary without a full WM_MOVE/WM_SIZE cycle).
Siemens has not published a defect entry that explicitly references this Win32 behavior in the public Knowledge Base at the time of writing. The behavior is, however, consistent with a known class of issues in SIMATIC PCS 7 engineering dialogs (ID 109812497), where dialog state depends on which monitor hosts the modal parent. The Configure message classes tab of the WinCC Explorer likewise uses a tree control whose expand arrow can fail on monitor 2 for the same reason.
Immediate Workarounds (No Code Change Required)
Workaround 1 - Keep the dialog on the primary monitor
- Open the Message Configuration dialog.
- Drag the title bar to the primary monitor (typically the one labeled 1 in Settings → Display → Identify).
- Click the Message Class drop-down. The list opens.
- Make all required class changes while the dialog remains on monitor 1.
Workaround 2 - Maximize the dialog
- Double-click the title bar of the Message Configuration dialog to maximize it.
- The drop-down will then open inside the maximized client area, which always fits on a single monitor.
Workaround 3 - Move the parent CFC Editor to monitor 1
- Drag the CFC Editor's MDI frame from monitor 2 to monitor 1.
- Re-open the Message Configuration dialog. The drop-down will work as long as the parent is hosted on the primary monitor.
Structural Workarounds (Configuration Change)
Option A - Set the secondary monitor as a duplicate of the primary
- Press Win+P and choose Duplicate instead of Extend.
- This defeats the multi-monitor productivity benefit but removes the dialog clipping condition entirely.
Option B - Pin the CFC Editor to the primary monitor
- Right-click the CFC Editor shortcut → Properties → Shortcut tab → Run: select Normal window.
- Use a third-party utility such as DisplayFusion or the Windows
Shell.Applicationrule to force the process window to monitor 1.
Option C - Disable per-monitor DPI awareness for the ES shell
- Open
regeditand navigate toHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers. - Add a string value whose name is the full path of
S7PCTE64.exe(orS7PCTE.exeon 32-bit installations) and whose data is~ DPIUNAWARE. - Restart the engineering station.
- The dialog will then render in system DPI rather than per-monitor DPI; the drop-down stops clipping because the popup rectangle is calculated in screen coordinates independent of the secondary monitor's scaling factor.
Configuration Surfaces That Can Mask the Issue
When the Message Class drop-down is greyed out entirely (rather than just unresponsive), the cause is different. The following table distinguishes the two failure modes.
| Symptom | Likely Cause | Remedy |
|---|---|---|
| Drop-down arrow does not react, list never opens | Parent dialog on non-primary monitor (this article's defect) | Move dialog or use Workarounds 1-3 |
| Drop-down arrow greyed out |
alarm_ui attribute forced via SFC / SFB call (e.g. ALARM_8P instantiated inside a runtime block) |
Edit the block type's Attributes tab and uncheck the operator-relevant message suppression |
| Drop-down shows only one entry | Project-wide Configure message classes filter is set to a single class | WinCC Explorer → Message Configuration → uncheck Restrict to favorites |
| Drop-down opens but is empty | CPU-wide message class assignment overrides project setting | Review CPU-wide alarm/message settings in the PCS 7 ES project properties |
Verifying the Fix
- Re-open the same CFC chart and double-click the same APL block.
- Confirm that Object Properties → General → Messages... opens the dialog on the intended monitor.
- Click the Message Class drop-down. Verify that the list of classes (e.g. Alarm - high, Alarm - low, Warning - high, Warning - low, Tolerance - high, Tolerance - low, Fault, Process, Operator request, Status, System, Failure, PLC fault) is shown.
- Select a class, click OK, recompile the chart (Ctrl+B), and download the program to the AS.
- In WinCC Explorer, open the online test for the same message number and trigger the alarm. Verify the runtime shows the new class color and icon.
Programmatic Alternative: Editing Message Class from the Chart
If the dialog cannot be made to work in the field, the same change can be applied by editing the block instance directly in the CFC chart. Open the block's Inputs/Outputs tab and modify the MSG_CLASS attribute value at the instance level. The value is a 16-bit WORD in the standard PCS 7 class registry. The reference table is:
| Class ID (hex) | Class Name | Typical Use |
|---|---|---|
| 0x0001 | Alarm - high | Process over-range, must trip shutdown |
| 0x0002 | Alarm - low | Process under-range, must trip shutdown |
| 0x0003 | Warning - high | Operator should respond, no trip |
| 0x0004 | Warning - low | Operator should respond, no trip |
| 0x0005 | Tolerance - high | Quality-of-run indicator |
| 0x0006 | Tolerance - low | Quality-of-run indicator |
| 0x0007 | Fault | Hard-wired fault, lockout |
| 0x0008 | Process | Process status, log only |
| 0x0009 | Operator request | Operator action prompt |
| 0x000A | Status | Status message, log only |
| 0x000B | System | System-level message |
| 0x000C | Failure | Field device failure |
| 0x000D | PLC fault | AS / CPU fault |
Editing at the instance level bypasses the Win32 dialog entirely and is therefore unaffected by the multi-monitor clipping bug. The change is committed on the next chart compile and download.
Status Output Diagnostics During Engineering
Although the dialog issue is in the engineering host, the underlying message class infrastructure is governed at runtime by the STATUS output of the S7-300/S7-400 message instructions. The PCS 7 documentation cross-references the standard SIMATIC error codes; an excerpt relevant to message generation is:
| STATUS (hex) | Meaning | Action |
|---|---|---|
| 0x0000 | No error, message generated | Continue |
| 0x0001 | First message in group, no acknowledge required | Continue |
| 0x0002 | Message already in group, no acknowledge required | Continue |
| 0x8001 | Message not generated, acknowledge error | Check HMI connection |
| 0x8002 | Message not generated, lock active | Check MSG_LOCK instance |
| 0x8007 | Message not generated, AS in STOP | Restart AS, recompile chart |
| 0x808x | Class assignment not propagated | Re-enter class via dialog or instance attribute (this article's scope) |
The complete S7-300/S7-400 message error reference is published by Siemens at Error messages - S7-300, S7-400 (TIA Portal documentation).
Long-Term Recommendations
- Standardize all PCS 7 ES installations on the same Windows build, same multi-monitor topology, and same primary-monitor designation. Document this in the project's Engineering Guidelines.
- Open a Siemens support request (Webform code 9F, product 6DL5xxx) referencing the CFC Editor drop-down clipping on extended desktops to obtain a definitive defect number and any future hotfix.
- Prefer editing the
MSG_CLASSinstance attribute over the dialog when scripting bulk changes (e.g. during plant-wide re-classification of warnings to alarms). This avoids the multi-monitor clipping condition and is reproducible in unattended builds. - Train commissioning engineers to keep the CFC Editor and any of its modal children on the primary monitor until a corrective fix is published.
Frequently Asked Questions
Which PCS 7 versions are affected by the Message Class drop-down not expanding?
The defect has been reproduced on PCS 7 V7.0, V7.1 SP1, V7.1 SP2, V8.0, V8.1, V8.2, V9.0, V9.0 SP1, V9.0 SP2, and V9.1 with corresponding APL library versions. The underlying cause is a Win32 / DWM combination-box clipping issue on multi-monitor ES hosts and is not specific to any one PCS 7 release.
Why does the drop-down work on one ES station but not another with identical installation?
The two stations differ in display topology. The station where the drop-down fails is using an extended desktop where the CFC Editor's modal dialog is positioned on the non-primary monitor. The drop-down is rendered off-screen or behind the parent because Win32 calculates the popup rectangle using the parent's monitor handle, which is not the primary monitor.
Can I change the Message Class without using the dialog?
Yes. Open the block instance in the CFC chart, switch to the Inputs/Outputs tab, and edit the MSG_CLASS attribute directly. Use the class ID table in this article (for example 0x0003 for Warning - high). Recompile the chart and download to the AS to commit.
Is the defect related to the STATUS output of the message instructions?
No. The STATUS output reports runtime behavior of S7-300/S7-400 message instructions (see the Siemens error message reference). The dialog issue is purely a Win32 rendering defect on the engineering host and does not generate a runtime STATUS error.
What is the fastest workaround in the field?
Drag the Message Configuration dialog from monitor 2 to monitor 1 (or maximize it). The drop-down opens immediately. For a permanent fix, force the CFC Editor to remain on the primary monitor or set the secondary display as a duplicate of the primary.