Drilling calculations (user guide)¶
mfgparams calculates parameters for twist-drill drilling, alongside milling (end milling and face milling). This page covers using it from the interactive text GUI; see Drilling API reference (developers) for the library API.
Selecting an operation in the text GUI¶
Launch the text GUI with:
mfgparams
(equivalently, python -m mfgparams or python -m mfgparams.console —
all three reach the same interface.) A persistent menu bar stays visible at
the top of the screen: Exit, Machining, Configuration, About,
Help — each reachable with the arrow keys and Enter, or its underlined
keyboard shortcut. Selecting Machining expands a tree in place, showing
Milling and Drilling as flat leaves; selecting Drilling opens
its operation screen directly, with no further tree-level expansion. It
appears as a centered, bordered floating window over the menu bar and tree
(which stay visible underneath, untouched): the left pane lists every
drilling input at once (unit system, calculation mode, material type,
material, drilling tool, drill diameter, hole depth, available power), all
simultaneously visible and editable, with no separate screen per field; the
right pane shows the live result, updating automatically as you fill in or
change an input. Choosing Milling instead switches to the flow described
in Milling calculations (user guide).
Up/Down (or j/k) always moves to the next/previous field, regardless
of its type. A radio field (unit system, mode, material type, material, and
tool) is always a single Label: value line — Left/Right/h/l/
Space cycle its value with wraparound and commit it immediately, with no
separate confirm step. Once metal is chosen as the material type, the
Material field also opens a dedicated selection window on Enter, on top
of that ordinary cycling — see Selecting a metal material below. Numeric
fields (drill diameter, hole depth, available
power) become editable the instant you select them — start typing a digit
(or ./-) and it edits the field’s buffer immediately, no separate
“start editing” step; Left/Right nudges the buffer up or down by a small
step: drill diameter and hole depth nudge by 1 mm under the metric
unit system, or 0.1 in under the imperial unit system — a whole-inch step
is too coarse for these dimensions — while available power nudges by
the shared 1 display-unit step under either unit system; Backspace
removes the last character. That text is only written to
the field once you navigate away from it (Up/Down) — text that still
doesn’t parse as a number at that point is discarded (the field keeps its
last valid value) and a message appears in the status bar beneath both
panes until you correct it.
Pressing Escape moves focus back to the menu bar without closing the open operation window or changing the tree’s expand/collapse state — so you can collapse the Machining tree to see more of the screen without losing your place. Pressing Escape again, from the menu bar, closes the operation and returns to the menu bar/tree, letting you start another calculation — the same operation or a different one — without leaving the text GUI. Each operation remembers its own previous answers as defaults for the rest of the session, so switching from drilling to milling and back does not lose your drilling inputs.
Selecting a metal material¶
Once metal is chosen as the material type, the Material field still
cycles one material at a time with Left/Right/h/l/Space, exactly
like any other radio field — but pressing Enter on it instead opens a
centered selection window for finding a material by more than just cycling
through the list. It lists every metal material in three columns — common
name, EN material number (e.g. 1.0038), and shortened/DIN-style
designation (e.g. S235JR) — with an independent search field for each
column; a material missing a recorded number/designation shows that cell
blank. Tab/Right and Shift+Tab/Left switch which column’s
search field receives typed characters, without losing text already typed
into the others; typing narrows the list to materials matching every
non-empty search across all three columns at once. Up/Down move the
highlighted row; Enter selects the highlighted material and closes the
window; Escape closes it without changing the current selection.
Reopening the window always starts with the material you already had
selected (if any) highlighted, and every search field cleared. A materials
config file can add material_number/short_notation to a
[[materials]] entry to make it searchable this way too — see
specs/023-material-selector-dialog/contracts/materials-config-schema-delta.md.
Non-metal material types are unaffected and only ever offer the ordinary
Left/Right/Space radio-cycling behavior, with no selection window.
Drilling inputs¶
After the unit system, calculation mode, material type, material and tool, drilling asks for two geometry values:
Prompt |
Meaning |
|---|---|
Drill diameter |
Diameter of the twist drill, in mm / in. |
Hole depth |
Depth of the hole to be drilled, in mm / in. |
Calculation modes¶
Right after choosing the unit system, the text GUI asks for a calculation
mode: standard, power-constrained, or fixed-rpm.
standardThe unconstrained calculation used throughout the rest of this guide. Available power stays optional and only advisory: if the calculated power exceeds it, the result is shown anyway with a warning.
power-constrainedAvailable power becomes a required field instead of an optional one, and the result label always reads “adjusted to fit available power” instead of “recommended” — regardless of whether an adjustment actually happened. If your machine can already deliver the calculated power the numeric values are unchanged even though the label switches. Otherwise the spindle speed is reduced until the power required matches what you supplied exactly. A budget too small for any feasible spindle speed produces an “infeasible power budget” error in the right pane in place of a result — correct the available-power field in place to retry, without leaving the screen.
fixed-rpmAdds a required “Target spindle speed (RPM)” field. The spindle speed in the result is exactly what you entered — labeled “user-specified” — and every other value is recomputed for that speed. Available power stays optional/advisory here too, so an insufficient machine still produces a result, with a warning.
Switching mode on an open Drilling screen clears any previous mode’s power/RPM answer rather than carrying it over as a stale default.
Reading the results¶
A drilling result looks like this (10 mm diameter, 25 mm depth, Mild Steel, Carbide, standard mode):
Spindle speed: 1989.4 RPM (recommended)
Feed rate: 437.7 mm/min
Machining time: 0.06 min
Torque: 10.5 N·m
Power required: 2.18 kW
These five lines mean the same as they do for milling: spindle speed and feed rate describe how the drill is driven, machining time is how long the hole takes to cut, and torque/power are what the spindle needs to deliver. Drilling does not report a material removal rate — that line is specific to milling and never appears in a drilling result.
If you supply an available machine power and the calculated power exceeds it, the result is still shown, with a warning line telling you the cut is beyond what the machine can deliver.
Limits and validation¶
Drill diameter and hole depth are validated as part of the calculation itself: an out-of-range value produces a clear, actionable error in the right pane rather than a result, and the field stays editable in place to correct it — nothing is discarded and the session never aborts. Text that cannot be parsed as a number at all (rather than a number that is merely out of range) is caught even earlier, before it ever reaches the calculation, with its own distinct message. The bounds themselves are:
Setting |
Default |
Applies to |
|---|---|---|
|
100.0 mm |
Drill diameter. |
|
500.0 mm |
Hole depth. |
In addition, both values must be positive, finite, and within the bound
above. NaN, +inf/-inf and non-numeric values are all rejected
as INVALID_DIAMETER/INVALID_DEPTH before the bound is checked, so
the CLI re-prompts for them — including the literal nan that
float() happily parses as nan — rather than
letting a NaN poison the calculation (fixed in issue #56).
Library callers
can override these bounds via calculate()’s config_path argument
(see Drilling API reference (developers)); the CLI does not expose an equivalent flag — its
only configuration flag, --materials-config, overrides materials/tools,
not these geometry bounds.
Assumptions¶
The drilling model uses standard twist-drill machining formulas as
published in widely-referenced industry sources (Sandvik Coromant’s
“Machining Formulas” reference and Machinery’s Handbook), including a
point-engagement allowance approximated as a fraction of drill diameter to
account for the drill point’s cutting geometry when computing machining
time. See specs/001-metal-drilling-calc/research.md for the formulas
and their sources.