TIA Portal Watch Table Adding Variables via Drag-and-Drop

David Krause12 min read
SiemensTIA PortalTutorial / How-to
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Overview

The TIA Portal watch table is the primary online debugging surface for S7-1200, S7-1500, S7-300, and S7-400 programs. Beginning with STEP 7 V11 SP2 and continuing through V13, V14, V15, V15.1, V16, V17, and V18, engineers can populate a watch table by selecting one or more operands directly in a ladder (LAD) or function block diagram (FBD) network and dragging them into an open watch table. The drag-and-drop path is the fastest method to create a column of monitored or forced variables while stepping through logic, and it is the only method that automatically inherits the full symbolic and absolute address context from the source network.

This article documents the exact drag-and-drop behavior, the operand classes that are accepted, the classes that are rejected (and the reason), the version-specific quirks observed in V11 SP2 Update 5 and V13, and the supported workarounds for local (block-scope, # prefix) variables, constants, and entire data blocks.

Prerequisites

  • STEP 7 Basic or Professional installed (V11 SP2 Update 5 or later; behavior verified against V13, V15.1, V16, V17, V18).
  • An open project with at least one compiled S7-1200 / S7-1500 / S7-300 / S7-400 PLC station.
  • At least one program block (OB, FB, FC) compiled without errors so that the LAD/FBD editor exposes the operand tokens.
  • An online connection to the target CPU is not required to populate the table; it is required to monitor values.
  • The user account must hold read or read/write rights for the watch table, configured under Project tree > PLC > Watch and force tables > [table] > Properties > Protection.

Supported Operand Classes

The watch table accepts the operand classes listed below when dragged from a network. The class is identified by the prefix token shown in the LAD/FBD editor.

Prefix Operand Class Drag-and-Drop Result Example
%I Process input (bit, byte, word, dword) Row added with Name, Address, Display format, Monitor value %I0.0, %IB0, %IW2
%Q Process output Row added; can be forced if access rights permit %Q0.1, %QB4
%M Bit memory / flag Row added; merker bits forceable from watch table %M10.0, %MW20
DB Data block element (symbolic or absolute) Row added with full symbolic path "DB"."Tag" "Motor_DB".Speed_SP
%T Temporary (L stack) local Row added but flagged invalid outside the active block context %LW0 (S7-300/400)
%L Local stack (S7-300/400) / TEMP in S7-1200/1500 Row added with display limitation note %L0.0
PI / PQ Peripheral I/O (direct) Row added; force not permitted %PQB0

Rejected Operand Classes

The drag-and-drop target is restricted by design. The following operand classes cannot be inserted, and the cursor changes to a red "x" indicator when the user attempts to drop:

Class Reason for Rejection Workaround
Literal constants (e.g., 16#ABCD, 1.0e+3, TRUE, 'A') Constants are compile-time resolved; the watch table requires a memory address to monitor Type the constant into the Modify value column of an existing row, or build a small FB that copies it to a tag
Whole data block reference (e.g., the "DB" header in the network) DBs are containers; the watch table cannot display a non-scalar value Drag individual DB elements; use the All button on the watch table toolbar to expand a DB tag into a hierarchy
Block-local variables with "#" prefix (S7-1200/1500) #-prefixed tags are block-scope temporaries; their physical address is reassigned at every compile See the Workarounds for Local Variables section below
Multi-instance DB references in FBD The editor cannot resolve the indirect instance path at drag time Open the multi-instance DB in the project tree and drag from there
Slice access (e.g., %MW10.%X0) without parent selection Slicing is a runtime view, not a discrete address Drag the parent word and add a Display format of "Binary" to view individual bits

Step-by-Step: Drag-and-Drop from a LAD/FBD Network

  1. Open the project in TIA Portal and expand PLC_1 > Program blocks > [block name].
  2. Double-click the block to launch the LAD or FBD editor.
  3. Open the Watch and force tables folder in the project tree. Double-click an existing table (or right-click and choose Add new watch table) to open it in the working area.
  4. Arrange the windows so that both the block and the watch table are visible. Use Window > Split editor area vertically for side-by-side layout.
  5. In the LAD/FBD editor, click the operand token (e.g., "%MW100" or "Motor_DB.Speed_SP") so that it is highlighted in orange.
  6. Press and hold the left mouse button; the cursor turns into a drag-handle icon.
  7. Drag the operand over the watch table working area. The cursor changes to a green plus (+) when the drop target is valid, or to a red X (red prohibition symbol) when the operand is not allowed.
  8. Release the mouse button over the row position where the operand should be inserted. A new row is created at the drop position with the following columns auto-populated: Name, Address, Display format, Monitor value, and Modify value.
  9. Click the Monitor all icon on the watch table toolbar (the eyeglass icon) to begin online monitoring. A successful read shows a green check; a timeout or access error shows a red X with an error code in the Status column.

Version-Specific Behavior

STEP 7 V11 SP2 Update 5 (Basic)

The drag-and-drop mechanism is functional in V11 SP2 Update 5. The constraint is that the operation pulls all parameters of the calling block from the same network. If the user attempts a multi-select across networks within the same block, only the parameters of the last network highlighted at the moment of drop are inserted. The workaround is to repeat the operation per network or to use Ctrl + click in the watch table header to copy rows from one table to another.

STEP 7 V13 (Basic / Professional)

V13 introduced the polished drag-and-drop interaction documented in the original tip. The behavior is consistent across LAD and FBD; the only divergence is in FBD, where dragging a function block's instance name inserts the instance as a hierarchical tag that can be expanded using the plus icon in the Name column. STL (statement list) editors do not expose the drag source because the operand is inline with the instruction; in that case, use the Insert operand from program command instead.

STEP 7 V14 / V15 / V15.1

Drag-and-drop continues to function identically. The change in V14 was the introduction of the PLC tag table filter row, which does not interact with the drop operation. The Watch and force tables folder was reorganized in V15.1 but the drop target remains the same open editor tab.

STEP 7 V16 / V17 / V18

No behavior change is documented for the drag-and-drop path. V16 added a tooltip preview during drag showing the symbol, address, and data type before the drop. V17 and V18 retain the V16 preview and add the ability to drag operands directly from the cross-reference view (opened via Tools > Cross-references) into a watch table.

Limitations and Field-Proven Constraints

  • Single-block scope at a time. The user cannot drag operands from two different block editors into the same drop; the drop operation only sees the foreground editor.
  • Single-network multi-select is allowed in V13 and later, but only if the operands share the same scope (e.g., all from the same FB instance). Mixing parameter and local symbols is permitted but the local symbols will still show the limitation described below.
  • Local (#) variables appear with a warning. When a #Temp tag is dropped, the watch table inserts the row with the tag's symbolic name. Upon first online monitoring, the value column shows invalid in red because the temporary is reallocated by the compiler for each scan. The value is correct only while the OB in which the block is called is being single-stepped with breakpoints.
  • Optimized data blocks (S7-1500 only). Tags inside an optimized DB can be dragged, but the Address column shows %DBxx.DBB y only after a download; the symbolic name is the primary identifier.
  • Know-how-protected blocks. Operands inside a block protected with Know-how protection are not exposed for dragging, even if the user has the password. The drop target rejects the operand with a red X.

Workarounds for Local Variables (# Prefix)

Local (block-scope) variables prefixed with "#" are the most common source of confusion. Three field-proven workarounds are listed in order of preference:

  1. Move the variable to the block's static area (VAR / VAR_STAT). The static area retains a fixed address across cycles. After re-compile, drag the static tag instead of the #Temp version. This is the recommended long-term solution.
  2. Use a monitor breakpoint in the same network. Right-click the network title and choose Set breakpoint. When execution halts, the local stack is fully resolved and the watch table can read the #Temp value. This is a debugging-only workflow and is not suitable for production monitoring.
  3. Copy the value to a flag in the network. Add a single line in the network: #Visible := #Temp;, where Visible is a static tag. Drag the static tag. This is the lowest-impact workaround when the developer cannot change the block interface.

Alternative Methods to Populate a Watch Table

Method Path Best Use Case
Drag-and-drop from LAD/FBD As described in this article Working inside a single block; need symbolic + absolute address inheritance
Drag-and-drop from PLC tag table Drag from PLC tags > Default tag table Inserting all tags of a tag table; useful for I/O checkouts
Drag-and-drop from DB editor Drag from Program blocks > [DB] opening the data view Watching a complete data block or a single STRUCT
Insert operand from program (context menu) Right-click watch table row → Insert operand from program STL programs where drag source is unavailable
Cross-reference drag (V17+) Tools > Cross-references → drag a hit to watch table Tracing where a tag is used and inserting it from a hit row
Copy/paste from one table to another Ctrl+C in source, Ctrl+V in target Re-using a tested table between projects or CPUs
Import from CSV / XLSX Watch table → Tools > Import Bulk-loading tag lists generated from EPLAN or Excel

Verification

  1. Go online with the target CPU: Online > Go online or press Ctrl+K.
  2. Click the Monitor all icon (eyeglass). All rows should transition from gray to green check after the first scan cycle.
  3. Open the Status column by right-clicking the header and enabling it. Verify that no row shows a red X. A red X with status code 16#0001 indicates an access error (tag is in a deleted DB); 16#0002 indicates a protected-tag access violation.
  4. Use Modify mode (the pencil icon) to write a test value to a Q or M row. Confirm the value is reflected in the HMI or downstream logic within one scan cycle.
  5. For force operations, switch to Force mode (the lock icon) and use the Force all command. Note: forced values persist across CPU STOP/RUN transitions. Remove all forces with Force > Remove all forces when commissioning is complete.

Best Practices

  • Use a dedicated watch table per logical area (e.g., one for the safety tag list, one for the valve manifold, one for the motor starters). TIA Portal supports up to 250 watch tables per CPU.
  • Name each watch table in line with the IEC 61131-3 naming convention; the name becomes the column header in the HMI Tag simulation view when the table is exported.
  • Avoid mixing bit and word tags on the same row; the Display format column overrides default formatting and a wrong selection yields a hard-to-read value.
  • Prefer Monitor with trigger for slow-changing tags. A trigger condition (rising edge, falling edge, value equals) reduces CPU ↔ PG traffic and is the recommended way to capture transient faults.
  • Save the watch table inside the project (not on the desktop) so that it is downloaded with the program and survives a project restore.

Troubleshooting Matrix

Symptom Likely Cause Resolution
Cursor shows red X on drop Operand is a constant, a whole DB, or a # local Use the matrix in the Rejected Operand Classes section; copy the constant to a tag first
Row inserted but value is always invalid Local (TEMP) tag in a non-current OB context Move to static area or set a breakpoint
Drag source from STL does nothing STL editor does not expose operand token Use Insert operand from program from the right-click menu
Drag works in V13 but not V11 V11 pre-SP2 does not implement drop target Upgrade to V11 SP2 Update 5 or later
Optimized DB tag shows no absolute address S7-1500 optimized blocks hide offset by design Use symbolic name; switch to standard (non-optimized) DB if address is required
Know-how-protected block rejects drag Block protection prevents operand token enumeration Contact the block author for an unprotected debug copy or use the PLC tag table path
Multi-select from two networks drops only one network Drop operation takes the foreground network's selection Drag each network separately or use cross-reference view (V17+)
Value never updates despite online connection Trigger condition is set and not met Click the trigger column and set Update continuously for verification, then re-enable trigger
Force value disappears after STOP/RUN Forced tags in non-retentive area Use M-flag area declared retentive in PLC > Properties > Retentive memory

Watch Table vs Force Table vs Cross-Reference

Feature Watch Table Force Table Cross-Reference
Purpose Read and (optionally) write values online Persistent override of inputs/outputs Locate all usages of a tag
Persistence on STOP/RUN Modify values clear on STOP Forces persist until removed Not applicable
Drag-and-drop from LAD/FBD Yes (V11 SP2+) Yes (V13+) No (read-only listing)
Permission required Read / Read-write Read-write + force right Read
Trigger / breakpoint integration Yes (rising / falling / value) No No

FAQ

Why does the cursor show a red X when I try to drop a tag into my TIA Portal watch table?

The drop target rejects constants, whole data blocks, and block-local (# prefix) tags. Convert constants to a tag, drag individual DB elements instead of the DB header, and move # locals to the static area of the block. The rejection is by design and applies to all TIA Portal versions from V11 SP2 through V18.

Can I drag operands from a Statement List (STL) program into a watch table?

No. The STL editor does not expose a separate operand token for the drag source. Use the right-click context menu Insert operand from program command on the watch table row instead. The dialog accepts the full STL operand text including address and data type.

Why does my # local variable show an "invalid" value in the watch table?

Temporary (# TEMP) variables are re-allocated on the local stack at every compile and only have a valid address while the OB that owns the block is actively executing. Place a breakpoint in the network, run the CPU in single-step mode, and the value will be valid during the breakpoint. For permanent monitoring, move the variable to the static (VAR_STAT) area of the block.

How do I bulk-load a watch table from an Excel file?

Open the watch table, choose Tools > Import, and select a CSV or XLSX file with the columns Name, Address, Display format, Monitor value, Modify value. The import is additive; existing rows are not overwritten. The export is symmetrical via Tools > Export.

Does the drag-and-drop feature work in TIA Portal V11 SP2 Basic or only Professional?

It works in both. The original tip and field testing confirm the function in STEP 7 V11 SP2 Update 5 Basic and in V13 Basic/Professional. The constraint in V11 SP2 is that you can drag only the parameters of the calling block from a single network; multi-network multi-select is added in V13.

Back to blog