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
srcXElementSource XML element.
Properties
Name
Syntax kind name (typically the concrete type name).
public string Name { get; }
Property Value
XName
XML element name used to register this syntax with XFactory.
public static string XName { get; }
Property Value
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
syntaxPieceNodeLazyLinkedListNode<SyntaxPiece>ncDependencyListList<INcDependency>ncDiagnosticProgressNcDiagnosticProgress
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
baseDirectorystringThe base directory for resolving relative paths
relFilestringThe relative file path for the XML source
exhibitionOnlyboolif 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
factoryXFactory