Class ArcRadialClosure
Classifies the radial closure of an arc motion — how far the arc's endpoint sits off the circle its center defines, measured as the gap between the begin radius and the end radius on the arc plane. A genuine arc closes (gap 0). The simulation accepts any gap and runs the block as a spiral whose radius blends linearly (ActMcXyzSpiralContour), but real controls check this closure and refuse the block once the gap passes their arc tolerance (e.g. Heidenhain error 5824 once MP7431 — typically around 0.016 mm — is exceeded). A program can therefore simulate cleanly and still stop on the machine; the diagnostics built from this class exist to close that gap. One gap the spiral cannot run: an end on the center in the active plane (typically an XZ / YZ approach arc written under G17) with the radii differing by more than TypicalControllerTolerance_mm. A control refuses that block, and the spiral has no defined path, so GetDerivative(vec3d_t, vec3d_t, vec3d_t, vec3d_t, int, out vec3d_t, out double, out double, out vec3d_t, out double, out double) gives it no length and the block produces no motion, travel along the plane normal included; the gate reports it with its own wording. Within the tolerance such a block runs as the straight line from begin to end, as a control runs it, and is classified by its gap like any other arc.
public static class ArcRadialClosure
- Inheritance
-
ArcRadialClosure
- Inherited Members
Fields
AdviceThreshold_mm
Advice threshold: half of TypicalControllerTolerance_mm. A gap past this consumes a substantial share of the tolerance budget and deserves attention even though a control still accepts it.
public const double AdviceThreshold_mm = 0.008
Field Value
DiagnosticId
Diagnostic id shared by the SoftNc and HardNc arc gates.
public const string DiagnosticId = "Arc-EndpointOffRadius"
Field Value
TypicalControllerTolerance_mm
The arc tolerance a typical control enforces before refusing the block (e.g. the Heidenhain MP7431 family default).
public const double TypicalControllerTolerance_mm = 0.016
Field Value
Methods
TryDescribe(double, double, double, double, out string, out Dictionary<string, object>)
Classifies an arc block by its begin/end radius pair and by whether
the spiral simulation produces any motion for it. Returns true with a
constant notification text and a value-carrying
detail in two cases: the block moves the tool by
more than AdviceThreshold_mm but the spiral has no
length (approxCurveLength_mm ≤ 0, so no act is
built — from GetDerivative(vec3d_t, vec3d_t, vec3d_t, vec3d_t, int, out vec3d_t, out double, out double, out vec3d_t, out double, out double) only
for an end on the center past TypicalControllerTolerance_mm);
or the spiral runs and the radial gap passes
AdviceThreshold_mm. Returns false otherwise — a closing
arc, or a block that neither moves nor runs (both ends on the center at
one position).
public static bool TryDescribe(double beginRadius_mm, double endRadius_mm, double approxCurveLength_mm, double travel_mm, out string text, out Dictionary<string, object> detail)
Parameters
beginRadius_mmdoubleBegin-point radius about the center, on the arc plane.
endRadius_mmdoubleEnd-point radius about the center, on the arc plane.
approxCurveLength_mmdoubleThe spiral length GetDerivative(vec3d_t, vec3d_t, vec3d_t, vec3d_t, int, out vec3d_t, out double, out double, out vec3d_t, out double, out double) returned for the block; ≤ 0 means the block produces no motion.
travel_mmdoubleStraight distance from the block's begin point to its end point.
textstringConstant notification text (fold-stable), or null.
detailDictionary<string, object>Measured radii, gap and travel, or null.