Table of Contents

Namespace Hi.NcParsers.Dependencys.Generic

Classes

DwellWordConfig

How this control reads a decimal point in a dwell word written in milliseconds — the P of G04 and the bottom-dwell P of G82 / G89. A whole number is the least input increment on every ISO control (P1000 dwells 1 s, the dwell command and the cycles alike); a decimal point is where they part. Syntec reads the cycle P as seconds (Mill Machine Program Manual §2.64: "P: dwelling time(sec)", G82 … P2. dwells 2 s; §2.70 G87–G89: “with decimal points, unit: second”) and its G04 P as whole milliseconds (§2.9: "dwell time (in milliseconds, decimal point not permitted)", G04 P2.5 delays 2 ms — the 2012–2015 editions printed 2 s on that line, corrected by the 2020 revision that is still current). Fanuc refuses it: B-64304EN/02 §5.6 DWELL marks P “(decimal point not permitted)” and its alarm list defines PS0007 ILLEGAL USE OF DECIMAL POINT as “a decimal point (.) was specified at an address where no decimal point may be specified” — the manual states no G04 example, so the alarm is the two statements read together. Mazak refuses it too (H740PB0030E §8-1: “For address P, the decimal point is not available. Setting a decimal point will cause an alarm”, G04 P 12.345 ; Alarm; p.14-38: the cycle P's “relationship between time and designated value is same as for G04”), and neither that manual nor the MATRIX alarm list H740HA0030E numbers the alarm. One DecimalPointDwellRule per word: G04DecimalPointP for the dwell command, CycleDecimalPointP for the cycles.

Read where the word is turned into a number: by the capture (MillisecondsParamPrefixes, which sees the source text) and, for a P spoken on a modal-repeat block of a cycle, by CannedCycleSyntaxUtil.MergeModalCycleSection through the evaluator's source-text mirror. Under Alarm the word is reported (ReportRefused(NcDiagnosticProgress, ISentenceCarrier, DwellWordConfig, string, string, string), Dwell--DecimalPointRefused) and dropped, and the block does not dwell: a G04 arrives at DwellSyntax as a bare flag, a cycle still drills, and a repeat block that spoke the word dwells nothing, as do the repeats after it until a new P — reported, not moved, as the arc gate treats a block a control refuses. A runner whose dependency list carries no instance reads both words as DefaultRule. The brand presets carry an explicit instance so the rule is visible and editable in the controller XML:

<DwellWordConfig>
  <G04DecimalPointP>Alarm</G04DecimalPointP>
  <CycleDecimalPointP>Alarm</CycleDecimalPointP>
  <Alarm>PS0007 ILLEGAL USE OF DECIMAL POINT</Alarm>
</DwellWordConfig>
FallbackConfig

HiNC-specific fallback dependency that provides default values for all optional configuration interfaces.

Should be placed as the last element in PipelineNcDependencyList so that brand-specific parameter tables (which appear earlier) take priority via OfType<T>().FirstOrDefault().

When a brand table (e.g., FanucParameterTable) implements the same interface, its values are used instead. This class serves as a safety net for brands that do not define certain parameters (e.g., Siemens/Heidenhain have no system parameter for G83 peck retraction — it is per-call).

GenericBlockSkipConfig

Default IBlockSkipConfig. Mirrors the typical Fanuc factory default: layer 1 (bare / prefix) is ON, other layers are OFF. Each layer can be toggled individually.

XML form:

<GenericBlockSkipConfig>
  <EnabledLayers>1,3</EnabledLayers>
</GenericBlockSkipConfig>
When EnabledLayers is absent the default is layer 1 only.
IsoCoordinateTable

Coordinate table for NC controller. The dictionary key is a G-code coordinate name (e.g. “G54”, “G59.2”); the dictionary value is machine coordinate offset.

Brand-agnostic standalone implementation of IIsoCoordinateConfig. Brand parameter tables (Fanuc, Syntec, Siemens, Heidenhain) provide hardware-faithful alternatives that map to real controller parameters.

IsoCoordinateTableProxy

Get-or-create INcDependencyProxy for IsoCoordinateTable: a placeholder in the shared PipelineNcDependencyList that resolves the host project's own per-case work coordinate offsets (G54–G59…).

The proxy may carry a Seed — the shape (which ids exist, all zero) a fresh host table is cloned from. The Fanuc, Mazak and Syntec presets mount this proxy behind their brand parameter table with the ExtendedG59x seed, so the brand table keeps G54–G59 and G54.1 P1–P48 while this table carries only the extended G59.1–G59.9 the brand tables cannot map. Without a seed the fresh table is the full brand-neutral set (the shape every pre-seed <IsoCoordinateTableProxy/> element materialized).

MachineAxisConfig

Brand-neutral IMachineAxisConfig backed by a plain axis→type map, for pipelines that have no controller parameter table (e.g. the NX CLSF runner). Typically populated from the machine chain via ConfigureByMachiningChain(IMachiningChain); rotary axes default to modular (IsModularRotary(string) inherited), matching the cyclic shortest-path treatment of McAbcCyclicPathSyntax.

SubProgramFolderConfig

Folder lookup configuration for SubProgramCallSyntax: where to find an O<n> file when the host program executes M98 P_ L_ (InternalFolder) or M198 P_ (ExternalFolder, modelling Fanuc's external storage call — memory card, USB, DNC drive — whose only difference from M98 is the search root).

Either path may be absolute or relative; when relative, it resolves against the PROJECT directory at lookup time — the ProjectFolderDependency base the host wires (MacroFileResolver), never the host NC file's own folder. Either may be null — a null ExternalFolder falls back to InternalFolder; a null InternalFolder is the project directory itself.

ToolOffsetAgreementCheck

The H / T agreement check: whether a tool length offset number must be the number of the tool in the spindle. On by default — one offset row per tool, numbered like the tool, is the habit worth encouraging, and a program that keeps it never sees the check. ToolHeightOffsetSyntax (G43 / G44) and G43p4RtcpSyntax (G43.4) read the one instance on the runner: on the block that activates the compensation, and on a tool change under a still-active one, an H that is not the T warns (Comp-ToolHeight–HDiffersFromTool, Comp-ToolHeight–HOutlivesToolChange) with both rows' lengths. H0 and G49 are exempt, and before the first tool change there is no T to compare. Diagnostics only — the compensation follows the H word, as it does on the control.

Fanuc has no such check built in; Haas ships it as Setting 15 "H & T Code Agreement" (alarm 332 "H AND T NOT MATCHED", H0 exempt there too). A program written with another habit — tool numbers 101–106 on offset rows 1–6, one tool switching between G43.4 H02 and G43 H03 — turns the check off with HMustMatchTool.

A runner whose dependency list carries no instance behaves as if HMustMatchTool were true, so a project saved before the option existed is checked as well. The brand presets carry an explicit instance so the setting is visible and editable in the controller XML:

<ToolOffsetAgreementCheck>
  <HMustMatchTool>true</HMustMatchTool>
</ToolOffsetAgreementCheck>
A radius offset (D) agreement check, should one be wanted, belongs on this same dependency.
ToolOffsetRow

Single row of a ToolOffsetTable. Stores geometry (ideal) and wear components for height and radius. Matches Fanuc Memory C layout where H and D share the same row.

ToolOffsetTable

Integer-keyed tool offset table implementing IToolOffsetConfig. Suitable for Fanuc (H/D), Heidenhain (tool number), Mazak, Okuma, and other ISO-compatible controllers. Key = offset number (Fanuc H or D number).

ToolOffsetTableProxy

Get-or-create INcDependencyProxy for ToolOffsetTable: a placeholder in the shared PipelineNcDependencyList that resolves the host project's own per-case tool offsets. The shared runner file holds only this proxy, never the offset data.

ToolingMcConfig

HiNC-specific: machine position axes move to during tool change (M06). Not a standard Fanuc parameter — in real Fanuc, tool change motion is programmed in the macro program (O9006). Each axis value: a position to move to, or NaN to stay.

Enums

DecimalPointDwellRule

What a control makes of a decimal point in a dwell word written in milliseconds — the P of G04 and the bottom-dwell P of G82 / G89, whose whole number is the least input increment (P1000 dwells 1 s). The controls differ, so DwellWordConfig carries one rule per word on each brand preset; a runner with no config reads the word as Seconds.

RadiusOffsetBasis

Which cutter-radius compensation strategy the NC program was posted for — decides what a tool-house refresh writes into the radius (D) column of a tool offset table. The height (H) column is refreshed the same way under both strategies. This is an output-affecting, project-level choice: the user or agent picks it after confirming how the NC program was posted, because a refresh under the wrong basis silently offsets the tool by a full cutter radius.