Table of Contents

Class SiemensCycle800TiltSyntax

Namespace
Hi.NcParsers.LogicSyntaxs.Siemens
Assembly
HiMech.dll

Siemens CYCLE800 (swivel cycle): resolves the tilted work plane from the positional arguments captured by SiemensCycleCallSyntax and composes it into ProgramToMcTransform as the shared TransformSource entry — the Siemens sibling of IsoG68p2TiltSyntax its XmlDoc promises. Unlike Fanuc G68.2 (plane only), CYCLE800 also positions the rotary axes implicitly (the G53.1 half): with IMachineKinematics wired, the tilt normal is solved to machine ABC and written into MachineCoordinateState, and the block gets a non-modal rapid MotionEvent with Term = “CYCLE800” (mirroring G53p1RotaryPositionSyntax).

Argument layout (HardNc reference NcArgCycle800): CYCLE800(FR, TC, ST, MODE, X0, Y0, Z0, A, B, C, X1, Y1, Z1, DIR [, FR_I, DMODE]) — 15- and 16-arg post variants both occur in the corpus. MODE is bit-coded: bits 7-6 select the swivel mode (00 axis-by-axis, 01 solid angle, 10 projection angle, 11 direct rotary), bit pairs 1-0/3-2/5-4 select each angle's axis (01=X, 10=Y, 11=Z). The motion-convention matrix is T(X1,Y1,Z1) · R · T(X0,Y0,Z0) (row-vector; the post-rotation zero offset applies innermost). ST units digit 1 composes additively onto the current programmable frame; FR/FR_I retraction and DIR solution preference are recorded in the section but not simulated (DIR = 0 suppresses the rotary positioning, per the control's frame-only variant).

Cancel forms — bare CYCLE800, empty parentheses, the single-argument CYCLE800(0), or swivel-data-record name TC = "0" — reset the tilt to the shared inactive sentinel (Term = "G69" + identity entry, HardNc's convention). An in-between argument count (1–9 with a live TC) is treated as a truncated/unmodeled capture, not a cancel — warning + visible residue, so a mis-parsed call can never silently drop an active swivel. The rotary axes are not re-positioned on cancel: the retract/re-orient behavior depends on the machine's swivel data record, which does not exist offline; corpus programs follow the cancel with explicit G0 A.. C.. moves anyway.

Fail-soft: a non-numeric argument (machine-runtime variable) leaves the Parsing.CYCLE800 residue visible and applies no transform (Coord-Tilt--003); an IK failure keeps the euler tilt and skips positioning (Coord-Tilt--004); a rotating CYCLE800 on a machine without kinematics/rotary axes keeps the tilt and warns (Coord-Tilt--005).

Must run before SiemensProgrammableFrameSyntax (which owns the once-per-block TiltTransform modal carry and composes additive AROT/ATRANS onto this cycle's fresh matrix) and before G53p1RotaryPositionSyntax / the coordinate-offset syntaxes (chain order: frame entry ahead of CoordinateOffset).

public class SiemensCycle800TiltSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
Inheritance
SiemensCycle800TiltSyntax
Implements
Inherited Members
Extension Methods

Examples

Cancel via empty parentheses — tilt reset to the shared inactive sentinel: #BeforeBuild:

{ "Parsing": { "CYCLE800": { "Args": [] } } }

#AfterBuild:

{
  "TiltTransform": { "Term": "G69" },
  "ProgramToMcTransform": [
    {
      "Source": "TiltTransform",
      "Kind": "Static",
      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
    }
  ]
}

Cancel via the bare word (corpus N140 CYCLE800 shape): #BeforeBuild:

{ "Parsing": { "CYCLE800": { "Bare": true } } }

#AfterBuild:

{
  "TiltTransform": { "Term": "G69" },
  "ProgramToMcTransform": [
    {
      "Source": "TiltTransform",
      "Kind": "Static",
      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
    }
  ]
}

Cancel via swivel-data-record deselection (TC = “0”): #BeforeBuild:

{ "Parsing": { "CYCLE800": { "Args": ["0", "\"0\"", "0", "57"] } } }

#AfterBuild:

{
  "TiltTransform": { "Term": "G69" },
  "ProgramToMcTransform": [
    {
      "Source": "TiltTransform",
      "Kind": "Static",
      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
    }
  ]
}

Full-parameter corpus shape, no kinematics dependency — the tilt is complete on its own (positioning would warn only when a rotation is commanded; here MODE 57 maps A→X, B→Y, C→Z and A=30 gives Rx(30°)). 15-arg “R_DATA” family with DIR = -1: #BeforeBuild:

{
  "Parsing": {
    "CYCLE800": {
      "Args": [
        "1", "\"R_DATA\"", "0", "57", "0", "0", "0",
        "30", "0", "0", "0", "0", "0", "-1", "0"
      ]
    }
  }
}

#AfterBuild:

{
  "TiltTransform": {
    "Term": "CYCLE800",
    "TC": "R_DATA", "ST": 0, "MODE": 57,
    "X0": 0, "Y0": 0, "Z0": 0,
    "A": 30, "B": 0, "C": 0,
    "X1": 0, "Y1": 0, "Z1": 0,
    "DIR": -1
  },
  "ProgramToMcTransform": [
    {
      "Source": "TiltTransform",
      "Kind": "Static",
      "Mat4d": [
        1, 0, 0, 0,
        0, 0.8660254037844387, 0.49999999999999994, 0,
        0, -0.49999999999999994, 0.8660254037844387, 0,
        0, 0, 0, 1
      ]
    }
  ]
}

Constructors

SiemensCycle800TiltSyntax()

Initializes a new instance with default settings.

public SiemensCycle800TiltSyntax()

SiemensCycle800TiltSyntax(XElement)

Initializes a new instance by deserializing from the given XML element.

public SiemensCycle800TiltSyntax(XElement src)

Parameters

src XElement

Source XML element.

Properties

Name

Syntax kind name (typically the concrete type name).

public string Name { get; }

Property Value

string

XName

XML element name used to register this syntax with XFactory.

public static string XName { get; }

Property Value

string

Methods

Build(LazyLinkedListNode<SyntaxPiece>, List<INcDependency>, NcDiagnosticProgress)

Build syntax arrangement into the syntaxPieceNode in-place.

public void Build(LazyLinkedListNode<SyntaxPiece> syntaxPieceNode, List<INcDependency> ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)

Parameters

syntaxPieceNode LazyLinkedListNode<SyntaxPiece>
ncDependencyList List<INcDependency>
ncDiagnosticProgress NcDiagnosticProgress

MakeXmlSource(string, string, bool)

Creates an XML representation of the object. This method may also generate additional resources such as related files.

public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)

Parameters

baseDirectory string

The base directory for resolving relative paths

relFile string

The relative file path for the XML source

exhibitionOnly bool

if true, the extended file creation is suppressed.

Returns

XElement

An XML element representing the object's state

Remarks

For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file.

Reg(XFactory)

Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent.

public static void Reg(XFactory factory = null)

Parameters

factory XFactory