Table of Contents

Class ArcRadialClosure

Namespace
Hi.Numerical.Acts
Assembly
HiMech.dll

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

double

DiagnosticId

Diagnostic id shared by the SoftNc and HardNc arc gates.

public const string DiagnosticId = "Arc-EndpointOffRadius"

Field Value

string

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

double

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_mm double

Begin-point radius about the center, on the arc plane.

endRadius_mm double

End-point radius about the center, on the arc plane.

approxCurveLength_mm double

The 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_mm double

Straight distance from the block's begin point to its end point.

text string

Constant notification text (fold-stable), or null.

detail Dictionary<string, object>

Measured radii, gap and travel, or null.

Returns

bool