CNC Turning Programming Basics: G-Code, Examples and Best Practice
Program structure, coordinates, the safe startup block, G and M codes by function, tool offsets, the six operations every lathe part needs, canned cycles, prove-out and the errors that actually crash machines — explained by why, not just what.
Quick answer
A CNC turning program is an ordered sequence of G-code and M-code blocks that tells a lathe which tool to use, how fast to turn the spindle, how the tool moves and at what feed. A sound program always has the same skeleton: a safe startup block that puts the control into a known modal state, a tool call, spindle and coolant commands, an approach move, the cutting moves or canned cycle, a safe retract, then a program end. Codes differ slightly between FANUC, Haas, Siemens and Mitsubishi controls, so any template must be checked against the manual for your machine.
Published: · Updated:
01What CNC Turning Programming Actually Is
Almost every “basic CNC turning program” article online shows the same thing: a short block of code, a list of what G00 and G01 mean, and an ending. That teaches you to read a program. It does not teach you to write one that runs safely on an unfamiliar machine, on the first part, without a crash.
The difference is that a real program answers a set of questions before a single line is typed:
- Which end of the part is datum Z0, and why that end?
- How is the part held, and where does the chuck become an obstacle?
- Which operations, in which order, and what stays for finishing?
- Which tools, and which station does each one live in?
- Constant surface speed or constant RPM — and what is the RPM clamp?
- Where is the safe retract point that clears every tool in the turret?
- Which dimensions get corrected by wear offset when the first part is measured?
- What happens if the operator starts the program mid-way through?
Those decisions determine the code. If you write the code first and answer the questions afterwards, you end up debugging on the machine with a part in the chuck — which is the expensive way to learn.
Manual programming, conversational, or CAM?
Simple prismatic shafts
Faster than opening CAM for a stepped shaft with a groove and a thread. Fully transparent, easy to edit at the machine, and it is how you learn what the control is actually doing. Still standard practice for small batches.
Shop-floor programming
The control builds the cycle from prompts — diameter, length, feed, depth. Quick for one-offs and repairs. The trade-off is portability: the generated code is usually control-specific.
Complex or live-tooled work
Necessary once you have profiles with arcs, C-axis milling, sub-spindle transfer or Swiss-type work. CAM will not save a bad process plan, though — it just produces the wrong tool path faster.
02Program Structure: the Skeleton Every Turning Program Shares
Once you can see the skeleton, an unfamiliar program stops being intimidating. Every well-written lathe program — hand-written or CAM-posted — is the same nine stages repeated once per tool. The stages exist for a reason, and each one is protecting you from a specific failure.
Why the skeleton repeats per tool
The single most useful property of a well-structured program is that any tool block can be run on its own. If the operator has to re-run only the grooving tool after a broken insert, they should be able to start at that tool’s block without the machine being in some leftover state from the tool before it. That is only true if every tool block re-states its own speed mode, feed mode, offset and approach, and ends at a common safe point.
03Coordinates, Diameter Programming and Where Z0 Lives
Two conventions cause more beginner scrap on a lathe than any code: X is programmed in diameter, and Z0 is a decision, not a given. Get either wrong and the part is out by exactly twice the amount you expect, or by the whole facing allowance.
The three coordinate systems you are juggling
| System | Zero point | What it is for |
|---|---|---|
| Machine coordinates | Machine home, set by the builder | Fixed reference the control uses internally. Tool change positions and travel limits are expressed here. You rarely program in it directly. |
| Work coordinates (G54–G59) | A datum you choose on the part | What the program is written in. Stored as an offset from machine zero so the same program runs regardless of where the part sits along Z. |
| Tool offsets | Per tool, per register | The distance from the turret reference point to each tool tip, so all tools agree on where X0 Z0 is. Covered in section 08. |
G50 X.. Z.., which shifts the coordinate system relative to the current tool position. It works, but it makes the program depend on where the tool happened to be. Modern practice is to store the datum in G54 and leave G50 for the spindle-speed clamp. If you inherit a program that uses G50 for both, read it carefully — the same code word is doing two unrelated jobs. The same principle applies on machining centres; see our CNC machining process for how datums are set in production.
Why Z0 belongs on the finished face
If you set Z0 on the raw, unfaced end of the blank, every Z dimension in your program is measured from a surface that you are about to remove. Face off 0.5 mm and every shoulder is now 0.5 mm out. Setting Z0 on the finished face means the facing pass cuts to Z0 and everything downstream is correct by definition.
Two practical consequences follow. First, the facing pass has to be programmed to cut to Z0, taking the stock that is in front of it. Second, when a second operation flips the part, the new Z0 goes on the newly finished face — and any length dimension that spans both operations depends on the accuracy of that transfer, not on the machine.
04The Safe Startup Block, Line by Line
G-codes are modal: once set, they stay set until something changes them — including across programs. The safe startup block exists because you cannot know what state the previous job left the control in. It costs one line and prevents an entire category of crash.
| % | Tape start marker on controls that use it. Harmless where it is not needed. |
| O1001 (SHAFT 30X50 REV B) | Program number and a comment that identifies the part and revision. |
| G21 | Millimetre input. The single most damaging mode to get wrong. If the control is left in G20 inch mode, a move to X50 becomes 50 inches. G21 costs nothing and removes the possibility entirely. |
| G18 | ZX plane. Turning happens in ZX. It matters for circular interpolation: G02 and G03 need to know which plane the arc lives in, and the direction convention flips if the plane is wrong. |
| G40 | Cancel tool nose radius compensation. If the previous program left G41 or G42 active, your first approach move will be offset by the nose radius in a direction you did not intend. Cancel first, apply deliberately later. |
| G80 | Cancel any canned cycle. A drilling or threading cycle left active will re-trigger on the next axis move. This is the classic “why did it just drill a hole there” block. |
| G99 | Feed per revolution. On a lathe, feed is naturally per revolution — it is what determines chip thickness and surface finish. If the control is in G98 (per minute) and you command F0.2, the tool crawls at 0.2 mm/min and the insert rubs until it fails. |
| G54 | Work coordinate system. State it explicitly rather than relying on the control’s power-on default. |
| G00 X200 Z200 | Move to a known safe point before the first tool change, in a single rapid that cannot foul the part. |
G28 U0 W0 to reference the turret, which is right on some machines and a crash on others depending on where the tool sits. Always start from the template in your machine’s programming manual and adapt.
What people add, and when it is right
G28 U0 W0 sends the turret to reference in incremental zero, useful before a tool change on machines where that is the builder’s convention. G97 S500 M03 is sometimes used to start in constant RPM before switching to G96. M08 may be delayed until after the approach on machines with weak pumps.
What does not belong there
Anything that moves an axis before the modal state is defined. Tool calls before the safe position is reached. And on most controls, G50 S____ should sit with the tool that uses G96, not in the header — the clamp is meaningful per operation, not per program.
05G-Codes That Actually Matter, Grouped by Job
Most beginner pages list G-codes alphabetically and stop. That is the least useful order, because on a lathe you think in jobs — move, set the frame, compensate, run a cycle. Group them that way and the list becomes a checklist you can run through as you write.
Motion — how the tool travels
- G00
- Rapid traverse. Moves as fast as the machine allows — never through the part. Used for approach and retract only.
- G01
- Linear cut at the federate in F. This is the actual machining move for facing, turning and parting.
- G02 / G03
- Circular interpolation, clockwise and counter-clockwise. Needs the ZX plane (G18) and an arc radius or centre. Used for radii, tapers with arcs and fillets.
Coordinate & frame — where zero is
- G54–G59
- Work coordinate systems. Picks which stored datum the program is written in. State it in the startup block; do not rely on the power-on default.
- G90 / G91
- Absolute vs incremental input for the cycle. On lathes G90 (absolute) is the default you almost always want; G91 creeps in from drilling cycles.
- G21 / G20
- Millimetre vs inch input. Lives in the startup block. Wrong one here and X50 is 50 inches.
Compensation — accounting for the tool
- G40
- Cancel tool nose radius compensation. Always cancel before a tool change so the next approach is not offset by the wrong nose.
- G41 / G42
- Compensate left / right of the path by the programmed nose radius. Lets you program the finished profile and let the control add the radius. Direction depends on tool orientation.
- G96 / G97
- Constant surface speed vs constant RPM. Covered in section 07 — it decides what the S word means.
Canned cycles — do the repetitive work
- G71
- Rough turning along a profile. One definition of the finish shape, the control does the passes. The single highest-leverage code on a lathe — section 10.
- G70
- Finish pass that follows a G71 (or G72/G73) using the same profile block range.
- G72 / G73
- Facing cycle (G72, cuts facing-in) and pattern repeat (G73, for castings/forgings already near shape).
- G74 / G75
- Peck drilling / peck grooving along the Z and X axes respectively.
- G76
- Multiple-pass thread cycle. Replaces hand-written thread passes — section 11.
G00 once and the control keeps rapiding until a G01 appears; call G41 and it stays on until G40. This is why the safe startup block cancels the dangerous ones up front: it is cheaper to force a known state than to discover a leftover mode on the first cutting move.
06The M-Codes: What the Machine Does, Not Where It Goes
M-codes are the auxiliary commands — spindle, coolant, program flow. They do not move the tool, but a wrong one still scraps a part or leaves a spindle running. The small set below covers the vast majority of turning work.
| Code | Does | When you use it & the gotcha |
|---|---|---|
| M03 | Spindle on, clockwise (as viewed from the spindle nose on most lathes) | Before the first cutting move. Direction is a convention — confirm it matches your tool and turret side, or the first cut is on the wrong face. |
| M04 | Spindle on, counter-clockwise | For the other turret side or reverse for threading in some setups. Rare on simple 2-axis work. |
| M05 | Spindle stop | At program end and any time the tool is clear and you want the spindle still. Pair with M09. |
| M08 | Coolant on | Before cutting. On some machines M08 also engages through-tool or flood; on others you may prefer to start it after the approach if the pump is weak. |
| M09 | Coolant off | Before M05 at the end, and before any handling move where you do not want spray. |
| M00 | Unconditional stop | Operator must press cycle start to continue. Useful before a critical dimension so the operator can measure first. |
| M01 | Optional stop | Like M00 but only stops if the operator has enabled optional stop. Good for inspection points you can switch off in production. |
| M98 / M99 | Call / return from a subprogram | Repeats a routine (e.g. a repeated groove) without writing it twice. M99 returns; an M99 with no subprogram loops the main. |
| M30 | Program end and rewind | The safe end. Spindle and coolant off, then reset to the top so the next run starts clean. Prefer it to M02, which ends without rewinding on many controls. |
07G96 vs G97: Constant Surface Speed or Constant RPM
This is the pair most beginners get backwards, and it is the one that decides whether your surface finish is good at the face and your insert survives at the centre. The S word means two completely different things depending on which one is active.
| G96 S180 M03 | Constant surface speed. S is the target cutting speed in metres per minute. As the tool moves toward the centre (smaller diameter), the control raises RPM to keep the surface speed constant. Finish passes love this: same speed at the face and at the bore. |
| G97 S1200 M03 | Constant RPM. S is simply revolutions per minute, fixed regardless of diameter. Grooving and parting use this, because at the centre G96 would spin the spindle to a dangerous speed. |
| G50 S2500 | RPM clamp — only meaningful under G96. Caps the spindle so it cannot run away as the diameter shrinks. Without it, a tool approaching centre under G96 can try to spin at thousands of RPM. Some controls use G92 S____ instead; check the manual. |
08Tool Offsets: Geometry, Wear and Nose Radius
The program talks about X0 Z0 on the part. Every physical tool sits at a different place in the turret, with a different tip shape. Offsets are what make all of them agree on where the datum is — and they are what you correct after measuring the first part.
Where the tool tip is
Measured once when the tool is set, by touching off to a known reference (a setter, a test bar or the part face). It captures the X and Z distance from the turret reference point to the tip. Get it wrong and every dimension from that tool is out by the same amount.
The fine correction
A small separate adjustment on the same tool. After you measure the first part, you do not re-teach geometry — you put the correction in wear. This keeps the setup value clean and lets you drift a dimension without disturbing the datum.
G41 / G42
The insert tip is a small radius, not a point. Without compensation the control cuts to the tip centre and the part comes out undersize by the radius at every shoulder and corner. Compensating lets you program the finished profile and the control adds the radius on the correct side.
09Six Programs You Will Actually Write
Every turned part is some combination of these six operations. Learn each one as a recipe — the goal, the safe order of moves, and the one line that saves you when something is wrong. Diameter programming and the safe retract are the same in every one.
① Facing the end
Facing program (OD 50 bar)
O1002 (FACE OD50) G21 G18 G40 G80 G99 G54 G50 S2500 T0101 (facing / rougher) G96 S200 M03 G00 X52 Z2 G00 Z0.1 G01 X-0.5 F0.15 (face to past centre) G00 X52 (out in X first) Z2 G00 X200 Z200 M05 M09 M30
Why this order: approach to Z0.1, then feed in X to a touch past centre. Retract in X before Z so the tool clears the diameter. Under G96 the surface speed is constant across the face.
② Turning the OD to size
OD turning program
O1003 (TURN OD TO 40) G21 G18 G40 G80 G99 G54 G50 S2500 T0101 G96 S180 M03 G00 X52 Z2 G00 X50 Z0.2 G01 Z-30 F0.2 (turn to length) G00 X52 Z2 G00 X200 Z200 M05 M09 M30
Why approach at Z0.2 then feed to Z-30: the tool clears the face before it engages, so the entrance is clean. Feed per revolution (G99) is set in the startup block, so F0.2 means 0.2 mm per spindle turn — the same chip load at any speed.
③ Grooving
Grooving program
O1004 (GROOVE Z-20) G21 G18 G40 G80 G99 G54 T2020 (grooving tool) G97 S600 M03 (fixed RPM: diameter is small here) G00 X44 Z-18 G01 X36 F0.08 (first pass, root) G00 X44 Z-19 G01 X36 F0.08 (step along Z) G00 X44 Z-20 G01 X36 F0.08 G00 X44 Z2 G00 X200 Z200 M05 M09 M30
Why G97 here: the groove is near the centreline where G96 would over-speed the spindle. Fixed RPM keeps the weak grooving insert under control. Plunging to X36 in three Z steps spreads the load.
④ Threading with G76
G76 threading program (see section 11 for the full decode)
O1005 (THREAD M20X2.5) G21 G18 G40 G80 G99 G54 T3030 (threading tool, 60°) G97 S800 M03 G00 X22 Z2 G76 P010060 Q50 R0.05 G76 X18.40 Z-18.0 P1300 Q400 F2.5 G00 X200 Z200 M05 M09 M30
Why a cycle, not hand passes: the tool must re-enter at the identical Z each pass or the flanks shift. G76 handles the synchronized start, the decreasing depth and the finish pass so the thread is consistent.
⑤ Drilling / centre-drilling the end
Centre drill then drill (lathe drilling)
O1006 (DRILL FACE) G21 G18 G40 G80 G99 G54 T2020 (centre drill) G97 S2500 M03 G00 X0 Z5 G01 Z0.5 F0.05 (spot / centre) G00 Z5 T2121 (twist drill 8) G97 S1200 M03 G00 X0 Z5 G74 Z-30 R1 Q5 F0.08 (peck drill, retract to R each peck) G00 Z5 G00 X200 Z200 M05 M09 M30
Why a centre drill first: it gives the twist drill a true starting point on the centreline so it does not wander. On a lathe, drilling is a Z-axis move with the spindle turning; G74 is the peck cycle that breaks the chip and clears swarf.
⑥ Parting off
Parting-off program
O1007 (PART OFF Z-50) G21 G18 G40 G80 G99 G54 T4040 (parting blade) G97 S400 M03 (low fixed RPM) G00 X52 Z-50 G01 X-1 F0.05 (feed past centre) G00 X52 Z2 G00 X200 Z200 M05 M09 M30
Why G97 and low RPM: parting is near the centreline, so G96 would over-speed the spindle, and the blade is the weakest tool in the turret. Low, fixed RPM and a slow feed keep it from chattering or snapping. A small negative X guarantees a clean break.
10G71: The One Cycle That Pays for Learning It
If you learn a single canned cycle, make it this one. G71 turns a profile — steps, tapers, radii — in roughing passes from one definition of the finished shape. Hand-writing those passes is where most transcription errors, and most scrap, come from.
| G71 U2 R1 | U2 = depth of cut per pass, 2 mm. R1 = retract after each pass, 1 mm. The control repeats the cut at this depth until the profile is roughed. |
| G71 P10 Q20 U0.5 W0.1 F0.25 | P10 Q20 = the sequence-number range that defines the finish profile. U0.5 W0.1 = finish allowance left in X (0.5 mm radius) and Z (0.1 mm) for the finish pass. F0.25 = roughing feed. |
| N10 G00 X… Z… | The profile definition starts here. Program the finished shape, not the stock removal — the cycle works out the passes. |
| … profile moves … | G01/G02/G03 describing the part. No depth-of-cut thinking here; just the target geometry. |
| N20 G01 X… | The profile definition ends at this block. Keep moves monotonic in Z within the range or the roughing gets confused. |
| G70 P10 Q20 | The finish pass: follows the same profile at the finish feed and spindle speed set just before it, removing the U/W allowance. |
O1008 (G71 SHAFT) G21 G18 G40 G80 G99 G54 G50 S2500 T0101 G96 S180 M03 G00 X60 Z2 G71 U2 R1 G71 P10 Q20 U0.5 W0.1 F0.25 N10 G00 X20 Z1 N11 G01 Z-15 F0.15 N12 X30 N13 Z-35 N14 X44 N15 Z-60 N20 G01 X58 G70 P10 Q20 (finish pass) G00 X200 Z200 M05 M09 M30
11G76: A Thread in One Line Pair
Hand-writing thread passes means computing depths, leads and retreats for every pass and getting them identical each time. G76 collapses that to two blocks and, more importantly, keeps every pass synchronized at the start of the thread.
| G76 P010060 Q50 R0.05 | P packs four values: 01 = two finish passes (sometimes unused), 00 = chamfer, 60 = thread angle in degrees, plus the leading zeros are the pull-out. Q50 = minimum cut depth 0.05 mm. R0.05 = finish allowance. |
| G76 X18.40 Z-18.0 P1300 Q400 F2.5 | X = minor diameter (Ø18.4 for an M20×2.5). Z = thread end. P1300 = thread depth 1.3 mm, in microns (1300). Q400 = first-pass depth 0.4 mm. F2.5 = the lead (pitch × starts; 2.5 mm here). |
Why a cycle and not hand passes
Every thread pass must start at the same Z or the flanks shift and the thread is scrap. Doing that by hand means re-positioning to the exact start each pass. G76 handles the synchronized start, the decreasing depth and the pull-out so the thread is consistent pass to pass.
The numbers that bite
The thread depth P is in microns — P1300 is 1.3 mm, not 1300 mm. The angle in the first block must match your insert (60° for a standard V-thread). And the minor diameter must be computed from the thread standard, not eyeballed, or the bolt will not fit.
12Prove It Out Before You Cut Metal
A program that reads correctly on paper can still crash a machine. Proving-out is the set of checks between “written” and “running the part” that turns a possible crash into a cheap discovery. This is where experience shows — and where EEAT is earned.
Dry run
Executes the program with the spindle and feed off, often with rapid overrides, so you watch the motions without cutting. Catches gross errors in order and position.Use: every new program, first pass
Single block
Runs one block per cycle-start press. Lets you stop and verify after any suspicious move — especially before the first cutting block of each tool.Use: first article, suspicious moves
Feed override
Drops the feed to 5–10% for the first cut, then raises it once the chip looks right. Cheap insurance against a wrong F word.Use: first contact with stock
Graphics simulation
The control draws the tool path over the part shape with no material present. Catches crashes, wrong retracts and profile errors before you touch the machine.Use: before dry run, complex profiles
Air cut
Runs the program with the spindle on and the tool offset pulled clear of the stock, so everything spins and moves but nothing is removed. Confirms spindle direction, coolant and sync.Use: after sim, before first part
13Eight Errors That Actually Crash Lathes
These are not theoretical. They are the eight failures that show up most often on the floor — each with the cause that a careful program prevents, and the fix that stops it recurring.
Tool crash into the part or chuck
Cause
- Rapid move in Z while still at cutting diameter
- Approach point not clear of the blank
- Mid-program restart from a block that assumes a safe position
Fix
- Retract in X before Z; approach 2–3 mm clear
- Make every tool block self-contained (section 02)
- Never restart mid-program without confirming state
Wrong tool offset
Cause
- Tool call T0101 but offset register points at a different tool
- Geometry offset never set, or set to the wrong datum
- Reused a program on a machine with different offset numbers
Fix
- Confirm T-number and offset register match at setup
- Verify the geometry offset by touching off before the run
- Standardize station = offset number in the shop
Wrong feed or speed
Cause
- G99 vs G98 mix-up: F0.2 becomes 0.2 mm/min, the insert rubs
- Left in G20 inch mode from a previous job
- Forgot the feed override is at 0% from a prior setup
Fix
- Startup block forces G99 and G21 every time
- Single-block and low feed override on first contact
- Check override position before pressing cycle start
Wrong tool number called
Cause
- Turret station in the program does not match the tool loaded
- Same physical tool in a different station after a tool change
- Typo in the T address
Fix
- Cross-check the tool list against the turret before running
- Label stations; keep a setup sheet per part
- Air-cut to confirm the right tool engages
G71 / G70 alarm
Cause
- Profile not monotonic in Z inside the P–Q range
- Start point not clear of stock, first pass plunges
- P/Q point at the wrong blocks
Fix
- Define the profile from the chuck end outward, Z one direction
- Start the profile clear of the blank
- Verify the sequence range before running
Over-travel
Cause
- Coordinate set so a move exceeds the machine limit
- Z0 placed so a long part runs past the carriage travel
- Safe point X200 Z200 beyond the machine envelope
Fix
- Confirm travel limits against the program extremes
- Place Z0 so the full length is within travel
- Set the safe point inside the machine envelope
Diameter vs radius programming
Cause
- Program written for radius mode, run on a diameter-mode control
- Inherited program from a control set the other way
- Assumed X is radius because of milling habit
Fix
- Confirm the control’s diameter/radius parameter before the first run
- Read the part print in diameter and program accordingly
- Air-cut and measure the first diameter before committing
G96 / G97 confusion
Cause
- G96 left active into a groove or part-off; spindle over-speeds
- G97 left active into a finish pass; surface speed varies
- No RPM clamp (G50 S) with G96 near centre
Fix
- State the speed mode explicitly in every tool block
- Add G50 S____ under G96 near centre
- Use G97 for grooving and parting by rule
14The Workflow, and How Goldcattle Develops a Turning Program
A turning program is the last output of a process, not the first step. The order below is the difference between “we can run this” and “we can run this repeatedly, in tolerance, on any shift.”
The programming workflow
How Goldcattle develops a turning program
At our Xiamen workshop the program is never the first thing we write. A part goes through the same disciplined path every time, because a program is only as good as the process behind it — and the process is what lets us hold tolerance across a batch and across shifts.
DFM and quote feedback
We read the drawing for turnability: tolerances that need a second op, radii the insert cannot reach, undercuts that need a live tool or a sub-spindle, materials that work-harden. If the part is better made another way, we say so before you pay for it.
Process routing
Which operations, in which order, and what stays as stock for the finishing pass. The routing is a document, not a memory — so the night shift runs the same plan as the day shift.
Fixture and datum
How the part is held and where Z0 lives. We choose the datum so facing allowance never shifts a downstream dimension, and so the part can be flipped for op 2 without losing the reference.
Tool and insert selection
Which stations, which insert geometries and nose radii. The tool list is cross-checked against the turret before the first run, and station numbers are standardized to offset numbers.
Cutting parameters
Speeds, feeds and depths set from the material and the machine’s power — not copied from a forum. Grooving and parting get low fixed RPM; finishes get constant surface speed.
Simulation and first article
Graphics sim, dry run, air cut, then the first part at low feed. We measure it, put the correction in the wear offset, and only then release the batch.
Production with SPC
Key dimensions are checked per batch, not per part, using statistical checks so drift is caught before it becomes scrap. The program stays the same; the wear offset carries the correction.
15Frequently Asked Questions
What is a CNC turning program?
What is the difference between G96 and G97?
What does G71 do on a CNC lathe?
What is G76 used for?
How do I write my first CNC turning program?
What is the safe startup block and why do I need it?
How do I choose the right feed and speed?
What is the difference between a geometry offset and a wear offset?
How do I avoid crashing a CNC lathe?
Can CAM software generate the turning program for me?
The CNC Turning Programming Hub
This page is the hub for lathe programming on the site. Start here for the whole picture, then follow the deeper guides as you need them. Related pages already published are linked; the ones marked planned are being written to keep this cluster complete.
About this guide
This guide is written from how we actually develop turning programs in our workshop — DFM first, then a process plan, then a program proved out before any production, then SPC through the batch. It is reviewed by the engineers who run the machines, not generated from a generic source. For our full capability see Manufacturing Services. Sources include our machine builders’ programming manuals and the company process standards documented on that page.
Need Precision CNC Turning for Custom Parts?
Send us the drawing. Our turning team returns a process plan, a realistic lead time and a quote — and we will tell you if the part is better made another way.
Upload a STEP, DWG, DXF or PDF. If you only have a sketch, send that — we will help with the rest.
