Table of Contents

Namespace Hi.NcParsers.Keywords.Siemens

Classes

Msg

Block-root section recording a Siemens MSG("...") operator display message, written by SiemensMsgSyntax. A section without Text records the bare MSG() clear form. Record-only: simulation ignores it; the section exists for bidirectional NC-text reconstruction and UI display.

SiemensCall

Siemens subprogram-call record. Two lifetimes share the shape:

  • Parsing.SiemensCall — written by SiemensCallStatementSyntax when a whole-line call statement is captured (L9810, L123 P3, HQ_FC(1,2)). Carries Name, optional verbatim Args, optional P.
  • block-root SiemensCall — written by SiemensSubProgramCallSyntax on the host block and on every inlined body block once the call is consumed. FileName records the resolved subprogram file; Skipped marks the safe-skip outcome (no file found — OEM / measuring cycles like HQ_FC, Renishaw L9810) where the call is consumed with zero motion effect and a structured warning replaces the raw unparsed-text noise.
SiemensFor

Siemens FOR <var> = <start> TO <end> ... ENDFOR counting-loop record. The Parsing capture stores the start expression as a single-entry Init map ({ “R1”: 0 }) — the variable name is a JSON key, which the evaluator's pass-2 tree walk never rewrites (values only), so a loop variable whose name matches a set named variable is not clobbered; the start/end values are substituted normally. The block-root stamp records the loop variable and its per-iteration Value.

SiemensGoto

Siemens GOTOF/GOTOB jump record. Two lifetimes share the shape:

  • Parsing.SiemensGoto — written by SiemensGotoParsingSyntax for both the bare jump (GOTOF LBL1) and the single-line conditional (IF R1==1 GOTOF LBL1).
  • block-root SiemensGoto — stamped by SiemensGotoSyntax after the control-flow decision, with Fired flipped true on a successful redirect.

Unlike Fanuc's numbered GOTO n, the target is a named label (LBL1: line) or an N<num> block number; direction is explicit in the mnemonic — GOTOF scans forward from the host line, GOTOB scans backward to the nearest label above.

SiemensIf

Siemens IF/ELSE/ENDIF block-conditional record. Parsing.SiemensIf carries the captured phrase; the block-root stamp written by SiemensIfSyntax adds the gate outcome. Unlike the loop family there is no frame stack: an ELSE reached in the normal stream always means the true branch just finished (a false condition jumps past the ELSE line directly), so ELSE unconditionally skips to its matching ENDIF and ENDIF itself is a consumed no-op.

SiemensKeywords

Siemens Sinumerik G-code and M-code constants.

SiemensLabel

Block-root record for a Siemens label line (LBL1:), written by SiemensLabelSyntax. Labels are passive jump targets — the record only makes the consumed token visible to cache dumps and lets SiemensRepeatSyntax's scan probe match candidates.

SiemensLoop

Siemens LOOP ... ENDLOOP endless-loop record. The construct has no exit condition — real programs leave it via GOTOF/GOTOB or a subprogram return; offline replay is bounded by SiemensLoopIterationDependency, which is therefore a hard requirement for the ENDLOOP back-jump (a missing watchdog suppresses the jump instead of hanging the pipeline).

SiemensLoopFrame

One entry on the SiemensLoopFrames stack. Identity is (Kind, FilePath, BeginLineNo) — the file path disambiguates a loop line in the main program from the same line number inside an inlined subprogram, and lets the terminator refuse a cross-file mismatch.

SiemensLoopFrames

Block-root carrier for the active Siemens loop-construct stack, mutated by SiemensLoopSyntax at the Evaluation stage and carried block-to-block by ModalCarrySyntax's Logic tracked-key list (plus an eager previous-block clone inside the loop syntax itself, mirroring the Fanuc WhileFrames pattern). Wrapped in a JSON object ({ “Frames”: [ ... ] }) rather than a bare array so the ModalCarry deep-clone JsonObject carry applies — the same reason CallStack wraps its frame list.

A single shared stack (rather than one per construct kind) is what makes mixed-construct nesting work: a FOR inside a WHILE pushes on top of the WHILE frame, and each terminator validates that the innermost (last) frame carries its own Kind.

SiemensPathSmoothing

Section data holder for ISiemensPathSmoothingDef.

SiemensProc

Block-root record for a Siemens PROC declaration header, written by SiemensProcSyntax. The declaration is consumed whole (parameter binding is a later work item); Statement keeps the verbatim remainder visible.

SiemensRepeat

Siemens REPEAT record. Parsing.SiemensRepeat carries the captured label pair; the block-root section written by SiemensRepeatSyntax adds the firing outcome, and every inlined repetition block is stamped with a clone carrying Iteration so cache-dump readers can see which pass a block belongs to.

SiemensRepeatUntil

Siemens REPEAT ... UNTIL <cond> post-test loop record. The bare REPEAT line (no label — the labelled forms belong to SiemensRepeat) opens the loop; UNTIL evaluates the exit condition after each pass.

SiemensWhile

Siemens WHILE ... ENDWHILE pre-test loop record. Parsing.SiemensWhile carries the captured phrase; the block-root stamp adds the per-arrival gate outcome. Loop state lives on the shared SiemensLoopFrames stack managed by SiemensLoopSyntax.

Stopre

Block-root section recording a consumed Siemens STOPRE (stop preprocessing / block-search buffer sync), written by SiemensStopreSyntax. STOPRE has no effect in offline simulation — the section exists solely so the token survives for bidirectional NC-text reconstruction.

Interfaces

ISiemensPathSmoothingDef

Siemens path-control / smoothing modal registers recorded by SiemensPathSmoothingSyntax under the brand-invariant PathSmoothing section key. Record-only — simulation does not alter the tool path; the registers exist for bidirectional NC-text reconstruction and UI display.

Each property mirrors one orthogonal Sinumerik modal group; a property is absent from the JSON section until its group is first programmed. IsEnabled is derived: true while a CYCLE832 high-speed setting is armed (Tolerance present) or a continuous-path mode (G64/G641/G642) is active. Term records the token that last changed the path-control state (a G code or CYCLE832).