Problem Overview
When configuring historical data logging on a SIMATIC TP900 Comfort Panel against a SIMOTION D455-2 controller, the HMI tag selection window for a logging tag becomes empty when the source is a one-dimensional ARRAY[*] OF REAL declared inside an ST source unit. Individual scalar PLC tags appear in the selection list, but the entire array, and any array elements that exceed a per-unit variable footprint, are filtered out. The effect appears as "invisible" array elements in the HMI tag table, and pressing Show all in the logging tag picker still returns an empty list.
This is a memory boundary problem, not a USB or data-type limitation. It blocks the common use case of capturing several thousand measurement samples and writing them to a CSV file on the panel's USB stick.
Affected Environment
- Controller: SIMOTION D455-2 (drive-based SIMOTION, PROFINET/Profibus variants, 6AU1 455-2AD00-0AA0 class). Functions here as a PLC proxy inside the TIA Portal project.
- HMI: SIMATIC TP900 Comfort (9-inch widescreen, 6AV2 124-1JC01-0AX0 family) with WinCC Comfort V13 SP1 / TIA Portal V13.
- Engineering: SIMOTION SCOUT TIA, project coupling via the TIA device proxy so that the HMI is configured in TIA Portal but the SIMOTION program is built in SCOUT.
-
Data source: An ST source unit (for example
ST_1) containing an array such asTAB2 : ARRAY[0..2999] OF REAL;used as a measurement buffer.
Root Cause: 64 KB HMI Variable Boundary
Per the SIMOTION SCOUT ST Programming and Reference Manual, every unit (compilation unit) exposes its variables to the HMI through a contiguous symbolic image. The HMI can address at most 65,536 bytes (64 KB) of that image per unit. When a single variable crosses the boundary, the HMI import marks every variable that follows it as unreachable, and those variables are filtered out of the HMI tag table and the logging tag picker.
For a 32-bit REAL array, each element consumes 4 bytes. A 3,000-element ARRAY[0..2999] OF REAL therefore occupies 12,000 bytes, and with two large tables declared in the same unit, the total symbolic footprint easily exceeds 64 KB. The compiler does not raise this as a hard error; it issues a warning that is hidden by default in SCOUT.
Why the Array Looks Empty in the Logging Tag Picker
The TP900 logging tag selector reads its candidate list from the HMI tag table. If the array is declared in the same unit as another large array, and the first array already consumes most of the 64 KB window, the second array is excluded by the HMI import filter. The symptoms in TIA Portal V13 are:
- The PLC tag table shows the array as a single collapsed entry with no children listed under the Details view.
- The HMI tag table is empty for the affected array; you cannot drag or browse into it.
- The Logging wizard's tag selection window returns an empty list even after enabling Show all.
This is identical behavior to what is observed when the user clicks the + on TAB2 in the HMI tag table and gets a blank drop-down: the elements are symbolically present in the SIMOTION project but are not in the HMI's view of the unit.
SIMOTION-to-Comfort Panel Integration
The TP900 Comfort is connected to a SIMOTION D455-2 using the SCOUT TIA device proxy. The proxy presents the SIMOTION controller as a PLC-like device inside TIA Portal so that HMI tags, connections, and historical data logging can be configured in the familiar TIA environment. The HMI is still programmed in WinCC Comfort; SIMOTION remains the runtime.
Procedure summary, per the official Siemens documentation at Using Comfort Panels with SIMOTION SCOUT:
- In the SCOUT project, insert the SIMOTION device and the HMI station. The HMI appears in the project tree as a SIMATIC TP900 Comfort.
- Create a device proxy for the SIMOTION controller. The proxy is what TIA Portal uses to bind HMI tags to SIMOTION variables.
- Inside the proxy, expose only the variables and array elements that the HMI will actually use. Whole arrays are exposed; individual elements are exposed as scalar tags of the same data type.
- Build the SCOUT project, then switch to TIA Portal. The HMI configuration downloads with the proxy-generated tags already present in the HMI tag table.
For diagnostic and logging use cases such as this one, expose the array one element at a time, using the array element notation DB_ArrayOfReal{index} (for example ST_1.TAB2{0} through ST_1.TAB2{2999}).
Solution 1 - Reduce the Per-Unit Variable Footprint
The cleanest fix is to keep the cumulative HMI-visible variable size in any single unit below 64 KB. Two proven tactics:
-
Split the array across multiple units. Move
TAB2to a dedicated ST source unit with no other large variables. Each unit has its own 64 KB budget, so an isolated 12,000-byte array fits easily. -
Shrink the array. In the reported case, reducing
TAB2from 3,000 elements (12,000 bytes) to a smaller size caused the elements to reappear in the HMI tag table and the logging selector. Test with progressively smaller values until the boundary is no longer crossed.
Solution 2 - Expose Array Elements Individually (Drag-and-Drop)
For arrays that fit under the 64 KB ceiling but are still large, expose each element as its own HMI tag rather than a single multi-element tag. This is the workflow that unlocks the logging tag picker.
- In TIA Portal, open the HMI tags editor for the TP900 Comfort.
- In the project tree, select the PLC / device proxy tag table that contains the array. Do not open the table; leave it collapsed.
- At the bottom of the project tree, switch the lower pane to Details view. Enlarge that pane so the array's elements are listed.
- Click the first element, hold Shift, and click the last element to select the contiguous range (for example,
TAB2{0}throughTAB2{999}). - Drag the selection from the Details view directly into the HMI tag table. The dropped tags are created as scalar
REALentries of the formST_1.TAB2{0},ST_1.TAB2{1}, and so on. - Open the HMI logging configuration. In the tag selection window, the first element of the array is now visible. Configure the logging cycle and acquisition mode for that one tag.
- Copy that configured logging tag in the project tree and paste it as many times as you have elements. Edit the index in each pasted tag to step through the array (0, 1, 2, … n). The logging tag is then bound to
ST_1.TAB2{i}automatically.
The element access syntax in WinCC Comfort is the standard array element notation:
ST_1.TAB2{0} // first element
ST_1.TAB2{1} // second element
…
ST_1.TAB2{2999} // last element
This is the only pattern through which the TP900 logging tag picker will display array contents at the individual index level. Selecting the array as a whole (that is, the parent node TAB2) is not supported by the historical data subsystem on Comfort Panels.
Solution 3 - Aggregating Records Above 10,000 Samples
For measurement campaigns that need more than 10,000 records, do not log every sample as a separate HMI tag. Instead, run the aggregation in the SIMOTION application and log the result.
- Use the ST source file to compute a running mean and standard deviation as the buffer fills. SIMOTION D455-2 supports single-precision floating-point arithmetic natively; a Welford online algorithm fits in a few lines of ST.
- Write only the aggregated statistics to a second, much smaller array (for example, 60 elements representing one summary per minute or per 100 records).
- Expose that small array to the TP900 through the drag-and-drop method above. The HMI only has to subscribe to a handful of tags, which trivially fits in the 64 KB window.
Pattern for incremental statistics in ST:
// Running mean and variance (Welford, single pass)
FOR i := 0 TO 2999 DO
n := n + 1;
delta := TAB2[i] - mean;
mean := mean + delta / n;
M2 := M2 + delta * (TAB2[i] - mean);
END_FOR;
variance := M2 / n;
stdDev := SQRT(variance);
This pattern preserves fidelity for thousands of samples while keeping the HMI-visible variable count in the low double digits.
Configuring the USB CSV Export
The TP900 Comfort writes historical data to its Service USB or X61 interface. Configure the export in the HMI project, not in SCOUT.
- In the TIA Portal project tree, open Historical data under the TP900 node.
- For each logging tag, set Data log method to Circular log or Segmented log. A segmented log is appropriate when the goal is post-trip CSV analysis; a circular log is appropriate for continuous rolling capture.
- Under Storage location, choose USB storage and specify the directory. Typical path:
/media/usb/<project_name>/<log_name>.csv. - Set the trigger that starts a new segment, either a configurable time interval or a bit from SIMOTION. Triggering from SIMOTION is recommended for deterministic campaign boundaries.
- Download the HMI project to the TP900. The data log is created automatically the first time the trigger fires.
Verification
After the HMI project is downloaded, confirm the fix end-to-end:
- On the TP900, open Control Panel → Logs. Verify that one log entry exists per array index that was created in Solution 2, or per aggregated tag in Solution 3.
- Force a manual segment close from the panel or by setting the trigger bit from SCOUT. Insert the USB stick and confirm that the CSV file appears at the configured path.
- Open the CSV in a text editor. Each row should contain a timestamp followed by the
REALvalue. Decimal separator is locale-dependent; configure the panel's regional settings to match the host analysis tool. - In SCOUT, enable the Display all messages compiler option and recompile
ST_1. Confirm that the 65,536-byte warning is no longer raised. If it persists, split the offending variable into a separate unit. - From the SCOUT side, monitor
n,mean, andstdDevlive to confirm the aggregation matches an independent MATLAB or Excel calculation of the raw array.
Troubleshooting Matrix
| Symptom | Likely Cause | Action |
|---|---|---|
HMI tag table shows TAB2 but expanding it is empty |
Unit exceeds 64 KB symbolic footprint, or the array sits after the boundary variable | Enable Display all messages in SCOUT compiler options; split the unit or reorder variables |
| Logging tag picker is empty even with Show all enabled | No scalar HMI tags exist for the array elements; the array is not reachable | Use the drag-and-drop method to create per-element HMI tags |
| Some array elements appear, others do not | Boundary crosses inside the array, not at its start | Move the array to a dedicated unit or reduce its size until the entire range is reachable |
| CSV file is created but contains only headers | Trigger condition never fires, or logging is configured for acquisition but not for storage | Verify the trigger bit from SIMOTION and confirm Storage location = USB in the log properties |
| HMI project download fails with "symbol not found" | SCOUT project not rebuilt after the variable change | Rebuild the SCOUT project, then re-download the HMI image from TIA Portal |
| Aggregated values drift over long campaigns | Numerical accumulation error in single precision | Switch to the Welford incremental method shown above, or accumulate in LREAL
|
Notes on Firmware and Compatibility
- The 64 KB symbolic boundary is a function of the SIMOTION runtime export, not of TIA Portal V13 SP1 itself. The same limit applies in TIA V15, V16, V17, and V18 when the HMI is connected through the SCOUT TIA device proxy.
- WinCC Comfort V13 SP1 on the TP900 supports logging tags whose source is a scalar
REALorLREAL. Array types are not directly bindable to a single logging tag in any Comfort firmware revision through V18; per-element binding is the supported pattern. - When the controller is migrated from D455-2 to a SIMOTION D4x5-2 DP/PN with a newer firmware (V5.x), the 64 KB HMI export limit is preserved for backward compatibility. Larger buffers must still be partitioned across units.
Reference Documentation
- Siemens TIA documentation: Using Comfort Panels with SIMOTION SCOUT
FAQ
Why are my SIMOTION array elements invisible in the TP900 logging tag picker?
The SIMOTION unit's symbolic image has exceeded the 64 KB (65,536 byte) HMI export limit. Every variable placed after the boundary variable in the unit is filtered out of the HMI tag table. Enable Options → Settings → Compiler → Display all messages in SCOUT and recompile to see which variable crosses the boundary.
What is the syntax for accessing a single SIMOTION array element from the TP900?
Use the standard array element notation as it appears in the HMI tag table after the drag-and-drop step, for example ST_1.TAB2{0} for the first element of a 3,000-element REAL array. The element is exposed as a scalar tag of the underlying data type.
Can the TP900 Comfort write a single CSV file from a whole SIMOTION array at once?
No. Comfort Panels do not bind a whole array to one historical data log. Expose the array as individual HMI tags (one per element) and configure one logging tag per element, or aggregate the array in SIMOTION and log only the result.
How can I log more than 10,000 measurement records when each HMI tag counts against the 64 KB limit?
Do not log every raw sample through the HMI. Compute the running mean, standard deviation, or other aggregate in the SIMOTION ST program and expose a small array of results (for example, one entry per 100 samples). The aggregate array stays well under 64 KB and is easy to bind through the drag-and-drop method.
Does the 64 KB HMI variable limit change with newer TIA Portal versions?
No. The 64 KB limit is enforced by the SIMOTION runtime's symbolic export and is preserved across TIA Portal V13 through V18 when the HMI is connected through the SCOUT TIA device proxy. Splitting large buffers into dedicated ST source units is the supported workaround on every firmware revision.