Problem Overview
When an S7-1200 PLC is connected to a Siemens MP 277 HMI panel running WinCC Flexible 2008, scalar tags (BOOL, INT, REAL) usually update without issue once the S7-300/400 driver is configured. Array tags, however, frequently fail to reflect values written by the PLC program. Typical symptoms reported in the field:
- Individual BOOL/INT tags from the same DB update on the HMI faceplate.
- Array elements of type
Array[0..109] of DINTshow 0, #, or constant stale values. - Changes made in the PLC (verified with a watch table) are never visible on the HMI screen.
- Communication status between the panel and the S7-1200 shows Connected — the link is healthy; the data is simply not being read.
Root Cause Analysis
Three independent root causes account for nearly every field case. Each must be verified before assuming a single fault.
1. DB Attribute Mismatch: Optimized vs. Standard Block Access
The S7-1200 stores data blocks in two formats:
- Standard (non-optimized, compatible with S7-300/400): fixed start addresses, symbolic names are an additional layer. External partners (HMI, OPC, third-party) read bytes by absolute offset.
- Optimized block access: symbolic only, the compiler re-orders memory, no fixed byte offset exists. Available from STEP 7 Basic V11 onward and firmware V4.x of the S7-1200.
The S7-300/400 driver in WinCC Flexible 2008 requires the standard (non-optimized) format. If the DB that contains your array is created with optimized access enabled, every absolute address configured in the HMI tags points to a location the driver cannot resolve reliably — the panel reads garbage or zeros.
2. Array Address Mapping in the HMI Tag Editor
WinCC Flexible 2008 treats each array element as a separate external tag. When you create a single DINT tag, point to DB100.DBD0, DB100.DBD4, DB100.DBD8, ..., DB100.DBD436 (110 × 4 bytes = 440 bytes). Forgetting the 4-byte step for DINT, mixing 2-byte DBW offsets inside a DINT array, or starting at offset 1 instead of 0 is the most common user error.
3. Driver / Connection Parameters
The MP 277 must use the S7-300/400 driver (the only one WinCC Flexible 2008 SP2/SP3 ships that talks to the S7-1200 via the integrated PN/DP interface). The slot must be 1 (CPU 1200 slot in the S7-1200 rack), and the rack must be 0. A wrong slot is a frequent cause of "Connected, but no data."
Affected Versions and Compatibility
| Component | Tested Versions | Notes |
|---|---|---|
| SIMATIC S7-1200 CPU | CPU 1211C / 1212C / 1214C / 1215C / 1217C, firmware V2.2, V3.0, V4.1, V4.2, V4.4 | Firmware V4.x defaults DBs to Optimized block access; switch to Standard - compatible with S7-300/400. |
| STEP 7 Basic (TIA) | V10.5, V11, V13 SP1, V14, V15.1, V16, V17, V18 | Used to author the S7-1200 program; older STEP 7 Basic V10.5 cannot disable optimized access. |
| WinCC Flexible 2008 | 2008 SP1, SP2, SP3, SP5 | SP2 is the minimum that supports S7-1200 PN/PN on the integrated PROFINET interface. |
| MP 277 | 6AV6 643-0BA01-1AX0 (8" key), 6AV6 643-0CB01-1AX1 (10" touch), 6AV6 643-0DD01-1AX1 (10" key) | Image ≥ WinCC Flexible 2008 SP2 Update 1 required. |
Prerequisites
- STEP 7 Basic / TIA Portal installed and licensed.
- WinCC Flexible 2008 SP2 or later with the S7-1200 HSP installed (TIA Portal > Options > Support Packages > SIMATIC HMI > MP 277).
- Ethernet cable between the MP 277 PN/DP port and the S7-1200 PROFINET port (direct or via switch).
- CPU in STOP when changing DB attributes (optimized ↔ standard).
- Active project backup (.ap13 / .zap13 / .s7p / .tfwx) before edits.
Step-by-Step Resolution
Step 1 — Verify the DB Block Attribute
- In the TIA Portal project tree, expand Program blocks.
- Right-click the DB containing the array, choose Properties.
- Open Attributes and uncheck Optimized block access.
- Confirm with OK. The compiler warning "Symbolic address only" disappears from the array element.
Step 2 — Declare the Array Correctly
Inside the standard DB, declare the array in the data block interface editor:
// Data block "DB_Recipe" (DB100) — Standard block access
DATA_BLOCK "DB_Recipe"
TITLE = Recipe values
{ S7_Optimized_Access := 'FALSE' }
STRUCT
RecipeValues : Array[0..109] of DINT; // 110 elements × 4 bytes = 440 bytes
Spare1 : DINT; // padding to keep alignment predictable
END_STRUCT;
END_DATA_BLOCK
The S7_Optimized_Access := 'FALSE' attribute is exactly what the WinCC Flexible 2008 S7-300/400 driver expects. The array must be a member of a data block — array tags declared inside VAR_GLOBAL of a non-DB source cannot be addressed absolutely.
Step 3 — Configure the MP 277 Connection
- In WinCC Flexible 2008, open Project > Connections.
- Create or edit the S7-1200 connection:
| Parameter | Value |
|---|---|
| Driver | S7-300/400 |
| HMI device address | 192.168.0.10 (MP 277) |
| PLC address | 192.168.0.1 (S7-1200) |
| Access point | S7ONLINE |
| Rack | 0 |
| Slot | 1 (CPU 1200 slot) |
| Cycle / acyclic | Cyclic on tag demand (default 1 s) |
Step 4 — Create the External HMI Tags for the Array
- In WinCC Flexible, open HMI tags and choose New tag > External.
- Set Connection = the S7-1200 connection created in Step 3.
- Set Data type = DInt (32-bit).
- Enter the address in the form DB <n> DBD <offset>:
Tag name Address Length (bytes)
Recipe_000 DB 100 DBD 0 4
Recipe_001 DB 100 DBD 4 4
Recipe_002 DB 100 DBD 8 4
...
Recipe_109 DB 100 DBD 436 4
The pattern is DBD[0 + 4 × i] for a DINT array starting at offset 0. For an Array[0..109] of REAL the same offsets apply (REAL is also 32 bits). For an Array[0..109] of INT use DBW[0 + 2 × i].
Step 5 — Verify the Same Data with a Watch Table
- Open the S7-1200 online connection in TIA Portal.
- Create a watch table with the same DB offsets (
DB100.DBD0,DB100.DBD4, ...). - Force a value, e.g.
DB100.DBD20 = 12345, and observe the MP 277 faceplate within one acquisition cycle.
If the watch table updates and the HMI does not, the problem is in the WinCC Flexible configuration (Steps 3-4). If neither updates, the problem is in the DB attribute (Step 1) or the PLC program is writing to a different tag.
Step 6 — Rebuild and Transfer
- Compile the WinCC Flexible project (Project > Compiler > All) and transfer the runtime to the MP 277 via Ethernet or MPI/Profibus (PN recommended).
- Download the STEP 7 program (with the corrected DB attribute) to the S7-1200. A re-download is mandatory; the runtime already on the CPU was compiled against the old optimized layout.
- Cycle power to the panel if the new image requires it (rare; SP2+ does not need it).
Alternative: Symbolic Single-Tag Mode (Avoids the Array Problem Entirely)
If the array is a 110-element DINT recipe table and the recipe is edited only from the HMI, a robust alternative is to expose one symbolic tag per element rather than an array:
// Data block "DB_Recipe_Symbolic"
STRUCT
Recipe_000 : DINT;
Recipe_001 : DINT;
...
Recipe_109 : DINT;
END_STRUCT
This is less elegant than a true array but works around the WinCC Flexible 2008 limitation. With TIA Portal + WinCC Comfort V11+ this hack is no longer necessary because the SIMATIC S7-1200 driver understands symbolic array access.
Alternative: Move to TIA Portal (Recommended Long-Term Path)
The root cause of the entire class of "array tags not updating" issues is that WinCC Flexible 2008 predates symbolic S7-1200 access. The clean fix is a migration to TIA Portal with a Comfort Panel:
- Migrate the S7-1200 program to TIA Portal V16 or V17.
- Replace the MP 277 with a Comfort Panel (e.g. TP700 Comfort, 6AV2 124-1GC01-0AX0) or KTP1200 Basic (6AV2 123-1MA05).
- Use the SIMATIC S7-1200 HMI driver. Arrays of any length are imported as Structured tags automatically.
The S7-1200 array data type, as documented in the TIA Portal help, lets the block interface editor declare an array, expose it symbolically, and consume it on the HMI without offset arithmetic. See the official manual page at Array data type — S7-1200 manual collection.
Verification Matrix
| Check | How to verify | Expected result |
|---|---|---|
| DB attribute | DB Properties > Attributes > Optimized block access | Unchecked |
| DB compiles without "symbolic-only" warning | TIA Portal > Compile > Software (rebuild) | No warnings on the array |
| MP 277 slot | WinCC Flexible > Connections > Properties | Rack 0 / Slot 1 |
| Tag offsets | HMI tag list, column "Address" | DB 100 DBD 0, 4, 8, ..., 436 |
| Watch table | TIA Portal online > Monitor / Modify | Forced value visible at the same offsets |
| HMI faceplate | Online view in WinCC Flexible (Start Runtime > Simulator with PLCSIM) or real panel | Forced value within 1 acquisition cycle |
| Connection status | MP 277 > System > Connections | Status = "Connected" with no error code |
Common Fault Patterns
| Symptom on MP 277 | Likely cause | Fix |
|---|---|---|
| Connection = "Connected", all DINTs = 0 | DB optimized, driver cannot resolve offset | Disable optimized block access, recompile, re-download |
| Connection = "Connected", alternating values (DBW used inside a DINT array) | Offset stride wrong (2 bytes used for 4-byte data) | Use DBD with 4-byte stride |
| Connection = "Disconnected" or "Error 0x0002" | Wrong slot, wrong rack, firewall on PC port | Set rack 0 / slot 1; disable Windows firewall on engineering port |
| Connection = "Connected", some array elements update, others don't | Tags point to addresses outside the array bounds | Recount: array length × 4 = total offset span |
| Connection = "Connected", values flicker every cycle | PLC program is overwriting the same memory each scan with default 0 | Inspect the write logic; use a watch table to confirm |
| Values freeze at the last good value | Acquisition cycle set to "On demand" with no trigger | Set acquisition cycle to 1 s for the affected tags |
Field-Commissioning Notes
- Before downloading, take a backup of the S7-1200 project, the WinCC Flexible project, and the MP 277 image. Use Card Reader > Backup (ProSave) for the panel.
- If the S7-1200 firmware is upgraded from V3 to V4, optimized block access becomes the default for new DBs. The Standard attribute must be re-applied to legacy DBs explicitly; it is not migrated automatically.
- WinCC Flexible 2008 SP2 introduced the S7-1200 connection as a separate driver entry on TIA Portal-side engineering but the field panel firmware still calls it the S7-300/400 driver. Do not mix the two on the same panel.
- For arrays larger than ~250 DINTs, prefer splitting into multiple DBs. A single HMI connection of the S7-300/400 type can read contiguous blocks faster, and the engineering becomes easier to troubleshoot.
- If the customer insists on symbolic access without migrating, the only stable workaround is the per-element symbolic pattern shown earlier.
Safety Considerations
FAQ
Why does my array show zeros on the MP 277 even though the connection is OK?
The data block is in optimized block access. Open the DB in TIA Portal, disable Optimized block access in Properties > Attributes, recompile, and re-download to the S7-1200. The WinCC Flexible 2008 S7-300/400 driver only reads non-optimized DBs.
Do I have to declare 110 separate HMI tags for a 110-element DINT array?
Yes, in WinCC Flexible 2008 each element is a separate external tag with its own address (DB 100 DBD 0, 4, 8 ... 436 for DINT). There is no bulk-import for arrays in this toolchain. As an alternative, expose the array as 110 individual symbolic DINTs in the DB and configure one tag per element.
Which rack and slot must I configure on the MP 277 for an S7-1200?
Use rack 0 and slot 1. Slot 1 corresponds to the CPU 1200 in the S7-1200 virtual rack. Slot 0 is the interface module of an S7-300 and is invalid for the S7-1200; the connection still appears to establish but no data is exchanged.
Will the array work if I migrate from WinCC Flexible 2008 to WinCC Comfort in TIA Portal?
Yes. The SIMATIC S7-1200 driver in TIA Portal V13+ supports symbolic array access. You import the array as a structured tag, and all 110 elements are visible without per-tag offset arithmetic. This is the recommended long-term path.
My values freeze at the last reading and never update. What should I check?
Check the acquisition cycle of the tag in WinCC Flexible. If it is set to On demand with no variable trigger, the panel will not re-read the tag. Set the acquisition cycle to 1 s (or another value matching your process speed) and recompile the project.