Problem Overview
When configuring analog alarms in WinCC (WinCC 6.0 SP4 HF2, WinCC 7.x, or WinCC Professional in the TIA Portal), engineers frequently need to record the actual process value that triggered the alarm rather than the configured limit setpoint. A common symptom is that the alarm message field always shows the configured lower or upper limit constant instead of the live tag value at the moment the alarm became active.
For example, an analog tag named TankLevel with Lower Limit = 5 may log the value 5 in the alarm regardless of whether the actual measured tank level was 2.0, 0.5, or -3.7 when the alarm became active. This makes post-event diagnostics useless because the operator cannot determine how far the process had deviated from the configured envelope.
This article documents the root cause, the resolution using Process Value Blocks (also called user text blocks or message blocks in legacy WinCC), and the modern TIA Portal configuration approach for the same functionality.
Root Cause Analysis
WinCC alarm messages are composed of message blocks. There are three families of blocks:
- System blocks – populated by the runtime with timestamps, state, priority, and acknowledged information.
- User text blocks – static descriptive text supplied by the engineer at design time.
- Process value blocks – dynamically populated with the current value of a configured tag at the moment the alarm event occurs.
If the engineer inserts the tag name into a user text block or simply displays the limit constant inside the message text, the value rendered in the Alarm Control and Alarm Logging database is the literal string from the design-time configuration. The runtime does not interpret a tag name typed inside a user text block as a live reference; it treats it as opaque text.
The remedy is to use the dedicated Process Value Block system in WinCC, which binds a specific index position in the message to the live value of a tag at the time the alarm becomes active, becomes acknowledged, or clears. There are up to 10 process value blocks per message in WinCC 6.x and WinCC 7.x; TIA Portal Professional offers up to 10 as well.
Process Value Block Index Reference
The following table summarizes the conventional block mapping for analog alarms in WinCC 6.x / 7.x. The exact behavior of each index is documented in the WinCC Information System under Alarm Logging > Configuring Messages > Process Value Blocks.
| Block Index | Content | Typical Use |
|---|---|---|
| 1 | Process value at alarm activation (going-in) | Capture value when limit is first violated |
| 2 | Reserved / system limit reference (varies by project) | Often contains the configured limit constant; avoid for live data |
| 3 | Process value at last change / current value | Capture the most recent value while the alarm is active |
| 4 | Process value at alarm end (going-out) | Capture value when the alarm clears |
| 5-10 | Additional user-defined process values | Bind to derived tags, calculation results, or control outputs |
Engineers typically require Process Value Block 1 to log the trip value and Process Value Block 3 to display the most recently polled value while the alarm is still active. Using both gives the operator a snapshot of the process excursion both at the entry point and during the dwell.
Solution: Configure Process Value Blocks in WinCC 6.x / 7.x
Prerequisites
- WinCC 6.0 SP4 HF2 or later (applies equivalently to WinCC 7.0, 7.2, 7.3, 7.4, 7.5).
- Configured analog tag (internal or external) with associated alarm class.
- Alarm Logging runtime component installed and licensed.
- SQL Server-based Alarm Logging database accessible from the WinCC project.
Step-by-Step Procedure
-
Open the Tag Management. In the WinCC Explorer, right-click Tag Management and verify the analog tag (e.g.,
TankLevel) is defined with the correct data type (Signed 16-bit,Floating-point 32-bit IEEE 754, etc.). - Open Alarm Logging. In the WinCC Explorer, right-click Alarm Logging and select Open.
-
Locate the analog alarm message. Double-click the message row corresponding to the
TankLevellimit (e.g., TankLevel_LowerLimit). - Open the Message Blocks tab. Switch to the Message Blocks tab in the dialog.
-
Bind Process Value Block 1. In the Process Value Blocks list, select index
1. Click the assignment field and choose the tagTankLevel. Confirm the data type matches the tag definition (e.g.,floatfor analog values). -
Bind Process Value Block 3. Select index
3and assign the same tagTankLevel. Block 3 will update while the alarm remains active, giving operators the current live value. - Verify the column layout. Switch to the Column Settings tab of the Alarm Control and ensure that Process Value Block 1 and Process Value Block 3 are included as visible columns in the runtime alarm view.
- Save and recompile. Save the Alarm Logging configuration and restart the WinCC Runtime to apply the changes.
Inline Configuration Snippet (XML Export Reference)
For projects where the alarm configuration is exported to XML for source control or migration, the Process Value Block binding appears in the <ProcessValueBlocks> node as follows:
<ProcessValueBlock Index="1" Tag="TankLevel" DataType="float"/>
<ProcessValueBlock Index="3" Tag="TankLevel" DataType="float"/>
Verification Procedure
After applying the configuration, validate that the runtime captures the correct live value:
-
Force the tag value below the lower limit. Use the WinCC Tag Simulator or the
SetTagfunction in a global script to setTankLevel = 2.0. - Activate WinCC Runtime. Start the project and trigger the limit violation by setting the tag to a value outside the configured envelope.
-
Inspect the Alarm Control. In the active alarm window, confirm that Process Value Block 1 displays
2.0(the trip value), not5.0(the configured limit). -
Inspect the Alarm Logging database. Open the SQL Server backend and query the
MSALMCOMSLOtable or the corresponding archived alarm log to confirm the same value is persisted. Example query:
SELECT MsgNr, TimeCome, Text1, Text2, PValue1, PValue3
FROM MSALMCOMSLO
WHERE MsgNr = (SELECT MsgNr FROM MS_ALARM WHERE Name = 'TankLevel_LowerLimit')
ORDER BY TimeCome DESC;
If PValue1 matches the trip value rather than the limit constant, the configuration is correct. If it still shows the limit constant, re-open the message and verify the index binding under the Message Blocks tab.
Modern Equivalent: TIA Portal WinCC Professional & Advanced
Projects migrated to TIA Portal V15.1 or later (WinCC Professional / WinCC Advanced) follow a similar workflow but use the HMI tag configuration directly. The Logging Process Values and Alarms documentation describes the relevant timing and cyclic behavior:
- Logging cycle: WinCC Advanced minimum 1 second; WinCC Professional minimum 500 ms.
- Comfort Panel: Same cycle applies with the limitation that tag logging capacity is bounded by the panel's storage size.
TIA Portal Step-by-Step
- In the TIA Portal project tree, expand HMI Tags and select the analog tag (e.g.,
TankLevel). - Open Properties > Events or Properties > Limits depending on whether the alarm is event-triggered or limit-triggered.
- Under the limit definition, locate the Alarm text area. Use the placeholder syntax
{tag_name}or insert a process value field via the menu Insert > Process Value. - Choose the trigger point: On coming, On going, or On acknowledgment. On coming corresponds to legacy Process Value Block 1; On going corresponds to legacy Process Value Block 4.
- Compile and download to the HMI panel or PC Runtime.
Edge Cases and Field-Proven Caveats
1. Structured Tags (UDT / PLC UDTs)
When the alarm tag is a member of a PLC UDT or WinCC structure, bind the Process Value Block to the fully-qualified member path, e.g., RecipeData.TankLevel. Binding to the parent structure is invalid and produces no value at runtime.
2. Scaled vs. Raw Values
If the tag is scaled via WinCC linear scaling (Tag Management > Properties > Linear Scaling), the value displayed in the Process Value Block is the scaled value, not the raw PLC value. Verify scaling before commissioning to avoid apparent discrepancies between HMI and PLC-reported values.
3. High-Speed Acquisitions
On PC-based WinCC Runtime with sub-second logging cycles, the value captured by Process Value Block 1 is the value at the moment the alarm state transitioned. The value in Process Value Block 3 is the last polled value within the active alarm window. If the alarm flickers (chattering), the value in Block 1 may differ between events.
3.1 Logging Cycle Guidance
Use the following rule of thumb when sizing logging cycles against the rate of change of the source process:
T_cycle <= 0.1 * T_process_change
where T_process_change is the time for the process to traverse from the lower to the upper alarm envelope. For example, a tank level that can rise 30% per minute requires a logging cycle of at most 6 seconds; an analog pressure loop that can move 100 psi in 2 seconds requires a logging cycle of at most 200 ms, which is achievable only with WinCC Professional and a sufficiently fast acquisition channel.
4. Multi-Language Projects
Process Value Block text is locale-neutral because it is a numeric value, not a translated string. However, the column header in the Alarm Control is translated via the Text Library. Ensure that the text library entry for the new column has been generated for every language active in the project.
Best Practices
- Always bind Block 1 and Block 3 for analog alarm messages to capture both the entry value and the dwell value.
- Document the limit constant separately in a static user text block (e.g., Configured Lower Limit: 5.0) so that the operator can compare the trip value against the configured setpoint without ambiguity.
- Use the WinCC Information System search with the keyword Process Value Block to navigate directly to the relevant configuration page in the F1 help.
- Cross-reference the Siemens support entry 15351140 for additional background on user text and process value block usage.
- Avoid placing the tag name as static text inside the alarm message; this is the most common configuration mistake that produces the symptom described in this article.
- Validate against the Alarm Logging database in addition to the on-screen Alarm Control, because column visibility settings can mask a correctly bound block.
Troubleshooting Matrix
| Symptom | Likely Cause | Resolution |
|---|---|---|
| Alarm shows the configured limit constant only | Tag name placed in a user text block rather than a Process Value Block | Bind Process Value Block 1 to the tag in the message configuration |
| Process Value Block is empty in the alarm view | Block not added as a visible column in the Alarm Control layout | Add the Process Value Block column in Column Settings |
| Value persists as 0 or null in the database | Tag data type mismatch or tag not in the runtime tag list | Verify the tag type and confirm the tag is loaded by Runtime |
| Value updates only at alarm end, not during alarm | Using Process Value Block 4 instead of Block 3 | Bind Block 3 in addition to or instead of Block 4 |
| Value is the configured limit constant (5.0) regardless of trip | Block 2 used (limit reference) instead of Block 1 | Use Block 1 for the going-in value, Block 3 for the dwell value |
| Value displayed with insufficient precision | Column format string not set, or scaling applied at runtime | Configure the column format to 9.2f or as required |
| Process Value Block differs between Runtime and Engineering | Project not saved/recompiled after change | Save, recompile, and restart Runtime |
Performance and Sizing Notes
Each active Process Value Block entry adds one row to the SQL-backed Alarm Logging archive per alarm event. For high-frequency alarm environments (more than 100 events per second aggregate across the system), consider:
- Increasing the Alarm Logging archive cycle from 500 ms to 1 s.
- Enabling segmented archives with automatic rollover to avoid monolithic database files.
- Using WinCC Performance Tags or direct OPC UA subscriptions for the high-frequency signals and reserving Alarm Logging for operator-relevant events.
The minimum logging cycle for WinCC Professional is 500 ms, and for WinCC Advanced it is 1 s, per the official archiving documentation. Selecting a cycle below these thresholds produces a runtime warning and may corrupt the archive.
Related Configuration Areas
Alarm Classes vs. Alarm Types
Process Value Block behavior is consistent across all alarm classes (Errors, Warnings, Information, etc.) and across all alarm types (limit, message, system). The only requirement is that the bound tag exists in runtime and is accessible from the Alarm Logging component.
Connection to SCADA / Higher-Level Systems
The alarm log can be forwarded to a higher-level historian or operations dashboard via WinCC Connectivity Pack, OPC UA Historical Access, or a SQL replication job. The captured PValue1 and PValue3 columns persist with the alarm record and are available downstream without additional configuration.
Which Process Value Block should I use to capture the value that triggered the alarm?
Use Process Value Block 1 in WinCC 6.x / 7.x. Block 1 captures the live value at the moment the alarm transitions from inactive to active (the trip value). Block 3 captures the current value while the alarm is still active.
Why does my alarm display show the configured limit constant (e.g., 5.0) instead of the actual trip value?
The tag name was placed inside a static user text block rather than bound to a Process Value Block. Open the alarm message properties, switch to the Message Blocks tab, and bind Process Value Block 1 to the tag. Also confirm the column is visible in the Alarm Control column settings.
What is the minimum logging cycle for WinCC alarm and process value logging?
WinCC Advanced supports a minimum logging cycle of 1 second; WinCC Professional supports a minimum of 500 ms. Selecting a shorter cycle produces a runtime warning and is not officially supported.
Does this apply to WinCC Comfort Panels and TIA Portal projects?
Yes. In TIA Portal WinCC Advanced / Professional, the same concept is implemented via the Insert > Process Value placeholder in the alarm text editor. Choose the trigger point On coming for the trip value and On going for the dwell value. Comfort Panels with firmware prior to V14 SP1 may display reduced decimal precision; upgrade the firmware if higher precision is required.
Can I bind a derived or calculated tag to a Process Value Block?
Yes, any tag visible to Alarm Logging (internal tag, external tag, or a script-generated internal tag) can be bound to a Process Value Block. The binding only resolves at runtime, so the tag must exist in the runtime tag list at the time of the alarm event.