Resolving Sinumerik Alarm 15110 REORG Before Cycle978 Call

David Krause10 min read
Motion ControlSiemensTroubleshooting
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

1. Problem Overview

When a Siemens SINUMERIK 840D sl or SINUMERIK 828D controller executes the measuring cycle CYCLE978 from a user-defined subprogram, the NCK can raise:

Alarm 15110 — REORG not possible (Reorganisation of the block memory not possible)

The alarm is raised during preprocessing of the block that calls CYCLE978. The interpreter reaches the cycle line, the NCK attempts to reorganise its lookahead buffer, and the reorganisation fails because the block contains variables whose values have not yet been resolved to a single, valid execution-time representation.

The fault blocks the program; no measuring motion is started, the probe is never deflected, and the operator sees the red alarm banner on HMI sl / SINUMERIK Operate.

2. Affected Systems and Firmware

Controller NCK Software Version HMI Status
SINUMERIK 840D sl (NCU 710 / 720 / 730) SW 4.5 SP2 and later HMI sl / Operate Reproducible
SINUMERIK 828D (PPU 24x / 26x / 28x) SW 4.5 SP2 and later Operate Reproducible
SINUMERIK 840D (classic NCU 561/571/572) SW 4.4 and later HMI sl Reproducible
SINUMERIK ONE SW 6.13 and later Operate Reproducible

The alarm applies to any measuring cycle that depends on synchronised settable frames or R-parameters evaluated by the cycle after a TRANS or frame write: CYCLE977, CYCLE978, CYCLE979, CYCLE982, CYCLE984 and customer OEM cycles that follow the same _KNUM / _PRNUM / _MVAR interface.

3. Anatomy of a CYCLE978 Call

The user program passes the work-table corner and probe coordinates through R-parameters and through the measurement system variables before the call. A minimal, representative block pattern looks like the example below. The numbering matches a typical N-numbered program where R5, R9 and R6 carry the work-table origin in X / Y / Z, R7 the measuring height, R34 the probing X-coordinate, and the system variables select the trigger event and probe.

;==================================================
; Measurement parameters
R5  = 40          ; Work-table origin X
R9  = 88.6/2      ; Work-table origin Y (half inner dimension)
R6  = 12          ; Work-table origin Z (web / part)
R7  = 24.4        ; Measuring height in Y
R34 = -50         ; Measuring point in X
;==================================================
N10  IF $P_SEARCH1==1 GOTOF Ohne
N20  G0 A2=0
N30  T99              ; Touch probe
N40  L26
N50  T1
N60  R8=R9-8
;---- Measure Z value 2:1 ----------------------------
N70  $P_UIFR[1,Z,FI]=0
N80  G17 G90 G54
N90  TRANS X=R5 Y=310 Z=0
N100 D1 M22           ; Probe monitoring ON
N110 TEST_D1_K2
N120 G0 X=R34 Y=0 Z=150 M5
N130 Z=75
N140 G1 Z=R6+10 F15000
N150 _CHBIT[0]=0      ; 1st measuring input
N160 _MVAR=100 _SETVAL=R6 _MA=3 _KNUM=1 _EVNUM=0
N170 _TSA=30 _PRNUM=2 _VMS=0 _NMSP=1 _FA=5
N180 CYCLE978         ; <<< Alarm 15110 raised here
N190 G0 Z150
N200 STOPRE
N210 R10=$P_UIFR[1,Z,FI]
N220 R41=R10
N230 STOPRE

The alarm fires during the preprocessing of block N180. Blocks N90 through N170 have written and read several variables that the interpreter must resolve before launching CYCLE978. The NCK prepares the next several blocks in its lookahead buffer so that contouring speed and look-ahead distance remain consistent; that preparation requires reorganisation of the buffer to recompute the order of motion blocks after the measuring cycle is inserted.

4. Root Cause: REORG and the Preprocessing Buffer

SINUMERIK interpreters pre-execute NC blocks up to a configurable depth (look-ahead) so that jerk-limited, look-ahead velocity profiling can be calculated. When a new block is inserted into the buffer — for example by a modal subprogram, an IF…GOTOF branch, a synchronous procedure call, or the substitution cycle loader — the buffer must be reorganised.

REORG can fail for three reasons relevant to a measuring cycle call:

  1. Frame, R-parameter or system variable still pending write. $P_UIFR[1,Z,FI], TRANS, and the measurement system variables (_MVAR, _SETVAL, _KNUM, _TSA, _PRNUM, _VMS, _NMSP, _FA) all modify interpreter state. When the values for the next block are not yet committed, the reorganisation cannot continue and alarm 15110 is raised.
  2. Modal subroutine or ASUB context active. A probe-monitoring routine such as TEST_D1_K2 runs in a modal context that holds an open reorganisation state.
  3. Asynchronous subroutine (ASUB) start active. If the program was reached from an ASUB — for example a probe-deflection triggered start — the buffer is locked for reorganisation until the ASUB ends.

The fix is to commit all pending interpreter writes before the cycle call by inserting STOPRE.

5. Solution: Insert STOPRE Before the Cycle Call

The command STOPRE (Stop preprocessing, execute from here) flushes the NCK preprocessing buffer so that all preceding blocks are decoded and executed before the next block is processed. After STOPRE the buffer is empty, the state is consistent, and REORG can proceed.

Apply the fix by inserting a single STOPRE line immediately before CYCLE978:

N175 STOPRE            ; flush preprocessing buffer
N180 CYCLE978          ; measuring cycle, REORG now succeeds

The STOPRE takes effect on the next NC block after the cycle call as well — placing one immediately after the call (as the original program already did at N200) ensures the cycle's measured result is read consistently into $P_UIFR.

Why STOPRE works. STOPRE closes the reorganisation window by forcing the NCK to decode all queued blocks first. Once CYCLE978 is entered, the only modification to interpreter state is the cycle's own modal outputs (frame writes, M-functions, protocol entries). The interpreter can reorganise the buffer around those deterministic outputs without ambiguity, and alarm 15110 is no longer raised.

6. Verification Procedure

  1. Select the program in Program Manager → Workpieces → NC Programs and load it to the NCK.
  2. Switch to AUTO mode and confirm dry-run feed is enabled.
  3. Single-block from N10 through N170; verify no alarm.
  4. Single-block at N175; the channel status should show STOPRE active and the buffer pointer at the cycle line.
  5. Run N180; the probe should approach the part, deflect, retract, and the measuring log should write one entry.
  6. Run N200; verify $P_UIFR[1,Z,FI] returns a valid measurement.
  7. Inspect Diagnostics → NC/PLC Variables for the value of $P_UIFR[1,Z,FI]; it must equal the actual deviation measured by the cycle.
  8. Reset and run a full automatic execution; no alarm 15110 should appear.

7. Alarm 15110 Detail Sheet

Field Value
Alarm number 15110
Alarm text REORG not possible
Reaction Interpreter stop; rapid stop on all axes; clear alarm required
Clear condition RESET key, NCK reset, or part-program end
Cause class Preprocessing / reorganisation
Common triggers Frame write without STOPRE, ASUB active, modal subprogram open, measurement system variable set without STOPRE
Workaround Insert STOPRE before the affected block

The full Siemens alarm list is maintained in the SINUMERIK 840D sl / 828D / ONE Alarm List documentation (Siemens Industry Online Support).

8. Parameter and Variable Reference for CYCLE978

The cycle reads its inputs from a fixed set of NC system variables. When any of these are written in the same program section as the call, place a STOPRE immediately before CYCLE978.

Variable Type Meaning Effect on REORG
_CHBIT[0] BOOL Probe input selector Modifies buffer state
_MVAR INT Measuring variant Modifies buffer state
_SETVAL REAL Setpoint value for measuring Modifies buffer state
_MA INT Measuring axis (1=X, 2=Y, 3=Z) Modifies buffer state
_KNUM INT Probe number (1=workpiece probe) Modifies buffer state
_EVNUM INT Event number for protocol Modifies buffer state
_TSA REAL Safe clearance in measuring plane Modifies buffer state
_PRNUM INT Log file / protocol number Modifies buffer state
_VMS INT Measuring feed mode Modifies buffer state
_NMSP INT Number of measuring points Modifies buffer state
_FA REAL Measuring feedrate Modifies buffer state
$P_UIFR[n, axis, FI] FRAME component Settable frame read/write Strong effect — always followed by STOPRE if read after write
TRANS Frame command Programmable frame Strong effect — forces reorganisation
G54 … G599 Settable frames Work offsets Effect depends on whether frame was just written

9. Extended Pattern: Multiple Measuring Calls in One Program

When several measuring cycles run in sequence, STOPRE must be inserted before each call. A consolidated pattern for the original program is shown below.

;==================================================
; Measurement parameters
R5  = 40          ; Work-table origin X
R9  = 88.6/2      ; Work-table origin Y (half inner dimension)
R6  = 12          ; Work-table origin Z (web / part)
R7  = 24.4        ; Measuring height in Y
R34 = -50         ; Measuring point in X
;==================================================
N10  IF $P_SEARCH1==1 GOTOF Ohne
N20  G0 A2=0
N30  T99              ; Touch probe
N40  L26
N50  T1
N60  R8=R9-8
;---- Measure Z value 2:1 ----------------------------
N70  $P_UIFR[1,Z,FI]=0
N80  G17 G90 G54
N90  TRANS X=R5 Y=310 Z=0
N100 D1 M22           ; Probe monitoring ON
N110 TEST_D1_K2
N120 G0 X=R34 Y=0 Z=150 M5
N130 Z=75
N140 G1 Z=R6+10 F15000
N150 _CHBIT[0]=0
N160 _MVAR=100 _SETVAL=R6 _MA=3 _KNUM=1 _EVNUM=0
N170 _TSA=30 _PRNUM=2 _VMS=0 _NMSP=1 _FA=5
N175 STOPRE            ; <<< flush before cycle
N180 CYCLE978
N190 G0 Z150
N200 STOPRE            ; <<< flush after cycle, before frame read
N210 R10=$P_UIFR[1,Z,FI]
N220 R41=R10
N230 STOPRE

10. Related Alarms and Differences

Alarm Text Distinguishing feature Fix
15110 REORG not possible Raised during preprocessing, no motion started Insert STOPRE before cycle or ASUB end
15175 Program %1 cannot be executed because of block %2 Subprogram not found or wrong path Check file path and program name
22000 Channel %1 block %2 spindle programming not allowed Channel condition prevents motion Verify channel state and modal context
26017 Axis %1 hardware limit switch %2 traversed Limit switch hit Check axis travel range
61234 Probe not ready / deflected Probe wiring or test routine Check probe interface and TEST_D1_K2 routine

11. Best-Practice Checklist for Measuring Programs

  • Always assign R-parameters in one contiguous block at the top of the program; avoid scattering parameter writes between motion blocks.
  • Insert STOPRE before any cycle that uses _KNUM, _PRNUM, _MVAR or _FA.
  • Insert STOPRE after any cycle that writes a frame, before the frame is read back into R-parameters.
  • Avoid IF…GOTOF jumps that skip a STOPRE in the same reorganisation window.
  • Set _KNUM, _EVNUM, _PRNUM once at program start; do not change them between calls unless necessary.
  • When using an ASUB for the probe-deflection trigger, make sure the ASUB returns via REPOS and not directly to the main program line.
  • For OEM cycles that wrap CYCLE978, replicate the same STOPRE discipline around the wrap.

12. Edge Cases and OEM Variants

OEM cycles that call CYCLE978 internally. Many machine builders wrap CYCLE978 inside a manufacturer cycle (for example CYCLE_USER_MEAS) that sets _MVAR and _FA from machine data. The wrap still requires STOPRE on the calling side because the wrap itself can introduce additional reorganisation points.

ASUB-driven measurement. If the program reaches the measurement section through an asynchronous subroutine (for example after a soft-key Measure in the HMI), the ASUB must end with REPOS or the buffer remains locked. In this case STOPRE inside the calling program is not sufficient; the ASUB must be ended correctly first.

Synchronous actions. Synchronised actions with ID=... that read $P_UIFR while the measuring cycle is still writing can raise alarm 15110. Move the synchronous action into the cycle's idle phase, or guard it with a status flag that becomes true after the cycle's last block.

Multi-channel machines. If another channel modifies a global frame or system variable, REORG in the measuring channel can fail even when the local program is clean. Use channel-specific frames ($P_UIFR indexed by channel) where possible, and avoid cross-channel R-parameter writes during the measuring section.

13. Related Documentation

Frequently Asked Questions

What does Sinumerik alarm 15110 REORG not possible mean?

Alarm 15110 indicates the NCK cannot reorganise its preprocessing block buffer at the current line. The buffer contains variables whose values are not yet resolved, typically frame writes, R-parameter assignments or measurement system variables, so the interpreter cannot reorder motion blocks reliably around the call.

Why does CYCLE978 trigger alarm 15110?

CYCLE978 is a measuring cycle that runs after the program sets measurement system variables (_MVAR, _KNUM, _FA, etc.) and possibly a programmable frame via TRANS or $P_UIFR. The cycle call inserts a new block into the lookahead buffer, triggering a reorganisation. When the previous writes are still pending, REORG fails.

Where do I insert STOPRE to clear the alarm?

Place STOPRE on the line directly before the CYCLE978 call. This flushes the preprocessing buffer so all preceding frame writes and measurement variable assignments are committed before the cycle is entered.

Do I also need STOPRE after CYCLE978?

Yes, when the cycle writes a frame that is read back into an R-parameter on the next line, place STOPRE after the call as well. The original program already had a STOPRE at N200 before the $P_UIFR read at N210; that placement is correct.

Is alarm 15110 dangerous for the machine or part?

No. The alarm is a preprocessing fault raised before any motion is started. The interpreter stops, all axes are braked to a controlled stop, and the operator must clear the alarm and restart the program. No collision or overtravel occurs.

Back to blog