1. Overview: Dashed FB Call in Online LAD Status Display
When an S7-300/S7-400 program is monitored online in STEP 7 (LAD or FBD editor), every call to a code block (FC, FB, SFC, SFB) is rendered in the program status window either as a solid box or a dashed box. The dashed appearance is frequently interpreted as a fault, an un-called block, or a download issue. In practice it can mean either of two completely unrelated things, and the correct remedy depends on which root cause is active.
This reference documents both root causes — the ENO/BR status word condition and the block-not-called condition — and provides the exact LAD, FBD, and STL patches used to force a solid box. Procedures apply to STEP 7 V5.x (classic) targeting S7-300/S7-400 CPUs. Differences for TIA Portal / S7-1200/S7-1500 are summarized in a dedicated section at the end.
Reference documentation: Siemens Industry Online Support, STEP 7 V5.x Programming and Operating Manual, S7-300 CPU 31x/31xC, Programming Manual.
2. How STEP 7 Renders Block Calls in Online LAD/FBD
The online status display in STEP 7 V5.x cycles at the configured monitor refresh rate (default 1000 ms; user-changeable via Options > Customize > Online & Diagnostics). For each network that contains a box instruction (FC, FB, SFC, SFB, or complex box), the editor evaluates the runtime status of that block call:
| Display | Interpretation | Indicates |
|---|---|---|
| Solid green/blue box | Block executed with ENO = 1 | Block was processed during the current scan and produced no signal-flow interruption |
| Solid box, EN = 0 | Block present but enable input is false | The enable (EN) rung is not energized; the block was skipped for this scan |
| Dashed box (any color) | ENO = 0 after execution, OR block not active | Either the BR bit was cleared inside the block, or the call site is not in the active execution path |
| Grayed-out / hatched | Block is not on the CPU | The referenced FC/FB number exists in the offline project but is missing from the online CPU |
Note that the dashed and grayed-out appearances are visually similar but diagnostically different. The grayed-out appearance is a compile-time symbol resolution issue (block not in the CPU's load memory), whereas the dashed appearance is a runtime status indication.
3. The Status Word, BR Bit, and ENO Signal Chain
Every S7-300/S7-400 CPU maintains a 16-bit status word (ACCU1/STW pair concept, exposed in the system area). The relevant bit is BR — Binary Result, bit 8 of the status word (mask 0x0100). Many instructions implicitly modify BR; this is intentional and is the mechanism by which ENO is updated.
| Status Word Bit | Name | Effect on ENO |
|---|---|---|
| BR (bit 8 / /ER) | Binary Result | When 0, ENO of the current block is OFF, dashed appearance of call site |
| OV (bit 5) | Overflow | Set by arithmetic instructions; implicitly clears BR |
| OS (bit 4) | Stored overflow | Latched overflow; implicitly clears BR |
| A0, A1 (bits 0, 1) | Condition codes | Do not directly affect ENO but are set/cleared alongside BR by compare and math instructions |
The chain is therefore:
Arithmetic / compare instruction
-> sets/clears BR in status word
-> runtime evaluates BR at block end
-> ENO = BR (1 = solid, 0 = dashed)
Reference: STEP 7 V5.5 Programming Manual, Section 5.2 — Status Word.
4. Cause #1: BR Bit Cleared — ENO OFF → Dashed Display
The most common reason for a dashed box is that some instruction inside the called FC/FB cleared the BR bit. Every LAD/FBD box carries an ENO output that reflects BR at the moment the block terminates. If a divide-by-zero, an overflow, a conversion error, or a compare with a non-Boolean result leaves BR = 0, ENO goes OFF, and the next higher-level call site displays the box as dashed.
Typical in-block instructions that reset BR to 0:
- Any floating-point math operation that detects an invalid operand (NaN, infinity, denormal).
- Integer division by zero (DIV, MOD).
- EN/ENO propagation through nested math function boxes.
- Conversion functions (ITD, DTR, BTI, BTD, RND, TRUNC) when input value is out of range.
- Comparison boxes whose result is the implicit A0/A1 condition codes.
Even a single, harmless instruction that does not explicitly set BR will leave it in whatever state the previous instruction set it to. A long block with twenty math instructions and no SAVE will end with BR = 0 unless every math instruction succeeded.
LAR1 P##DB_IN followed by a series of moves can finish with BR = 0 because the pointer arithmetic did not change BR. Result: solid boxes become dashed the moment the FB is touched.5. Cause #2: Block Not Called or Not on the CPU
The second common cause is unrelated to the BR bit: the dashed appearance can indicate that the call site is not in the active execution path. This happens when:
- The calling OB1/OB3x/OB10x network has an enable condition that is false at runtime.
- The calling block (the parent FB/FC) was not downloaded to the CPU.
- The calling block exists online but has a different timestamp/CRC than the project, causing the editor to flag the call as unresolved.
- The called block was replaced via online Edit but the call was not re-resolved.
To distinguish Cause #1 from Cause #2 quickly, perform the two-call test: add a parallel call to the same FB from a known-good unconditional rung (an M0.0-driven rung, for instance). If the parallel call renders solid while the original remains dashed, the issue is in the original call path. If both are dashed, the block contents are clearing BR.
6. The SAVE Instruction: Behavior, Syntax, and Placement
The SAVE instruction copies the BR bit into the RLO (result of logic operation) of the next instruction. Used as a coil with an always-true rung, it forces BR to 1 for the remainder of the block. Standard placement is the last network of the FC/FB so that the saved RLO becomes the block's outgoing ENO.
LAD example (last network in FB100):
Network 99 (final network):
--| M1.0 |--+--( SAVE )--
|
... (other always-true bits)
If you prefer a single-bit source, dedicate a tag Always_1 in a global DB or use TRUE (STEP 7 V5.5+) as the enable. The rung must execute every scan; placing SAVE behind a conditional branch defeats the purpose.
Equivalent FBD (last network):
Network 99 (final network):
M1.0 -----[ AND ]---------( SAVE )
SAVE does not require its own ENO input — it is a coil-type instruction. The output is the BR-bit value after the coil is processed, and that becomes ENO when the block ends.
--[ENO]-->... to skip error propagation), then unconditionally setting BR to 1 with SAVE will defeat that protection. Reserve SAVE for blocks whose contents you have audited and for which no failure path can occur. For blocks that legitimately need to propagate error, use a named status output (e.g., ErrorFlag) instead of relying on ENO.7. STL Equivalent: SET / SAVE Sequence Before Block End
In Statement List (STL) programming, the canonical pattern is:
FUNCTION FC 100 : VOID
TITLE = 'Solid FB example'
VERSION : 0.1
BEGIN
NETWORK 1 // ... work ...
NETWORK 99 // last network
SET ; // RLO = 1
SAVE ; // BR := RLO -> ENO = 1
END_FUNCTION
The SET instruction forces RLO = 1 unconditionally. SAVE then copies RLO into the BR bit. Without the explicit SET, SAVE would copy whatever RLO the previous instruction left behind — usually 0 after an arithmetic block, hence the dashed display.
For blocks written in pure STL with no LAD boxes, BR/ENO has no visible effect inside the block, but it still affects ENO of the block's call site. Adding SET / SAVE at the end of every FC/FB is a defensive habit and is recommended in style guides published by Siemens' application engineering group.
8. RET Instruction and Conditional Block-End Effects on ENO
The RET (Return) instruction, used to terminate a block conditionally, has a side effect: it sets BR = 1 (and therefore ENO = 1) at the moment of return, regardless of the previous state of the status word. This is true for both LAD/FBD and STL forms of RET.
| Block End Mechanism | BR Result | ENO Result | Display |
|---|---|---|---|
| Normal end (fall off end of block), no SAVE | Inherited from last instruction | Same as BR | Dashed if last instruction cleared BR |
| Normal end with trailing SAVE coil | Forced to 1 | 1 | Solid |
| RET executed | Forced to 1 | 1 | Solid |
| RET with conditional branch executed on true | Forced to 1 on the return | 1 | Solid |
This means a quick patch for a dashed box is to add a RET as the last network of the FC/FB. The trade-off is the same as SAVE: ENO loses its error-propagation value.
9. Step-by-Step Troubleshooting Procedure
Follow this matrix in order. Most cases are resolved at step 3 or 4.
- Confirm CPU online state. In SIMATIC Manager, PLC > Online > Display Accessible Nodes. Verify the CPU is in RUN or RUN-P.
- Refresh online view. Press F5 or Window > Update. Online status can lag the actual block state by up to one monitor refresh cycle.
- Inspect the dashed block's contents. Open the called FC/FB (double-click the dashed box). Walk to the last network. Identify the last instruction. If it is a math, compare, or conversion operation, BR is almost certainly 0.
-
Apply the SAVE patch. Insert a new network as the final network of the block. Add a normally-closed contact
--|NOT|--onAlways_1or use aSAVEcoil driven by a known-true bit. Download the block (incremental download is sufficient). - Verify. Return to the calling network, refresh online status. The dashed box should now render solid.
- If still dashed: check parent call path. Use the cross-reference (Options > Cross-References) to find every call site of this FB/FC. Verify the calling block (often OB1) is on the CPU: PLC > Online > Compare Offline/Online. Download any missing blocks.
- If still dashed: check timestamp mismatch. In SIMATIC Manager, PLC > Diagnostic > Operating Mode. If the timestamp of the calling block differs from the online version, do a full download of the calling block's program folder.
- If still dashed: clear and reload. MRES the CPU (MRES button or PLC > Clear/Reset), then perform a full download. This eliminates any in-RAM block remnants from a hot-swap scenario.
10. Verification and Online Test Procedure
After applying the patch, verify with this checklist:
| Test | Pass Criteria | Tool |
|---|---|---|
| Online status shows solid box at call site | Box has continuous green/blue outline, no dashes | STEP 7 LAD/FBD editor, online view |
| ENO signal is high | Monitor Status tab shows ENO = 1 |
Open block, status tab |
| Cross-reference is consistent | All call sites of FB resolve to same FC/FB number | Options > Cross-References |
| Force table test | Manually forcing an input still produces a solid box and ENO = 1 when input is valid | PLC > Monitor/Modify |
| Trigger an error path | Box goes dashed (or ENO = 0) when a known error is induced, confirming error propagation still works | Test harness with division by zero or invalid range input |
If step 5 in the verification shows ENO stays 1 even on a deliberate error, the SAVE patch has over-masked error propagation and a different error-reporting mechanism (a dedicated Status word output) should be used.
11. Edge Cases: Nested FBs, Multi-Instance DBs, and Re-entrancy
The dashed/solid rule applies recursively. A chain OB1 → FB10 → FB20 → FB30 can render with three solid boxes and one dashed. The dashed box is the one whose internal logic cleared BR. The boxes downstream of a dashed box may themselves render solid because their own SAVE forced BR.
Multi-instance DBs: When an FB is called as a multi-instance (inside another FB's instance DB), the BR propagation is identical. A multi-instance FB that clears BR will render dashed at the multi-instance call site. The fix (trailing SAVE) applies equally.
Re-entrant calls: S7-300/S7-400 FBs are not re-entrant. If you have recursion via a pointer-driven indirect call, the dashed appearance at the indirect call site is a separate diagnostic (no symbol resolution in online view). Use the cross-reference and the stack register (STW / STL stack inspector) to debug.
SFC/SFB calls: System blocks shipped by Siemens always end with an internal RET and therefore render solid in well-formed ladder. If a Siemens system block renders dashed, it usually indicates the input parameters are out of range (e.g., SFC20 BLKMOV with overlapping source/destination ranges) and ENO has been forced to 0 by the SFC's own error handler.
12. STEP 7 V5.x vs TIA Portal — Differences in Program Status Display
TIA Portal (V13+) handles the same situation differently:
| Aspect | STEP 7 V5.x | TIA Portal V13+ |
|---|---|---|
| Dashed box meaning | ENO = 0 or block not active | Same — but tooltips are richer |
| Tooltip on hover | Not available in older versions; tooltip in V5.5+ shows BR state | Always available; shows EN/ENO/BR values directly |
| ENO override via SAVE | Same approach (final network SAVE coil) | Same approach; TIA Portal supports the SAVE coil in LAD/FBD |
| Cross-reference resolution | View > Cross-References | Project tree > Show cross-references |
| S7-1200/1500 behavior | n/a | Optimized blocks; ENO behavior still tied to BR analog; EN at top of box is mandatory in SCL and optional in LAD |
For S7-1200/S7-1500, the BR concept is preserved internally but is largely hidden from the programmer. ENO behavior in TIA Portal blocks (especially SCL-derived FBs) is set in the block properties: Block properties > Attributes > Set ENO automatically. When this attribute is on, the compiler inserts the equivalent of SAVE; when off, ENO follows the runtime BR state.
Reference: STEP 7 V5.5 Programming Manual, Section 7.4 — ENO/EN mechanism.
13. Frequently Asked Questions
What does a dashed FB call mean in Siemens S7 online LAD monitoring?
A dashed FB call means ENO = 0 at that call site, which happens when the BR bit (status word bit 8) was cleared by an instruction inside the block before it ended. It can also mean the call site is not in the active execution path. Distinguish the two by adding an unconditional parallel call to the same FB from a known-good rung; if the parallel call is solid, the issue is in the original call path, not in BR.
How do I force a dashed FB call to render solid without changing block logic?
Add a final network to the called FC/FB containing a SAVE coil driven by an always-true bit (e.g., M1.0 or DB tag "Always_1"). In STL, insert SET followed by SAVE before the block end. This forces BR = 1 and ENO = 1, producing a solid box on every call site. Reference: STEP 7 V5.x Siemens Industry Online Support.
Does using SAVE to make the box solid break error propagation?
Yes. If downstream code depends on the calling block's ENO to detect and suppress an error path, an unconditional SAVE will mask legitimate errors. Reserve SAVE for blocks whose logic is known good; for blocks that can fail, expose a dedicated status word output (e.g., Error, Status) and check that instead of ENO.
Will an RET instruction force a solid box even without SAVE?
Yes. RET unconditionally sets BR = 1 at the moment of return, so ENO = 1 regardless of prior status-word state. RET has the same trade-off as SAVE: it suppresses error propagation via ENO.
Why does a Siemens system block (SFC/SFB) render as dashed?
Siemens system blocks always end with their own error-handler logic. They render dashed when their input parameters are out of range or an internal error condition is set, and they themselves force ENO = 0 to signal the failure. Fix the input parameters (verify range, check overlapping regions for BLKMOV, validate handles, etc.) rather than patching the system block.