Heidenhain TNC Error Messages & Diagnostics
Heidenhain publishes one consolidated NC Error Messages list for the current TNC generation — the 10/2023 edition covers TNC7, TNC7 basic, TNC 640, TNC 620, TNC 320, TNC 128 (all at software version -18) plus the CNC PILOT 640 and MANUALplus 620 lathe controls, and runs to nearly 6,000 entries. You will meet perhaps forty of them. This page explains how TNC error numbers are structured, maps the major groups so you can triage a number before looking it up, and curates the errors a programmer or machinist actually hits — with the exact numbers, texts, and fixes from the official list.
How TNC Errors Are Structured
A modern TNC error number has the form GROUP-CODE, both parts hexadecimal: 230-02BD is code 02BD in group 230. The group identifies the software subsystem that raised the error — 160 is the NC interpreter, 280 is the cycle package, 230/231 are axis and drive-controller land — so the prefix alone tells you whether you are debugging your program or calling the service tech. Every entry in the official list has three parts: the error message (what appears on screen; placeholders like %1/%2 are filled in with names, block numbers, or axes), the cause of error, and the error correction. An error that references a block number was caused in that block or the one before it.
Where they display and how bad they are: on a TNC7, messages land in the message menu on the information bar — the arrow next to a new message blinks until acknowledged, and expanding the menu shows date, error number, message, and the cause/correction details (with a copy-to-clipboard button). The symbol encodes the severity:
| Message type (TNC7) | What it means |
|---|---|
| Error — question type | A dialog with several responses; you cannot clear it, only answer it |
| Error — reset type | The control must be restarted; the message cannot be cleared |
| Error — emergency-stop type | The control performs an emergency stop; clearable only after the cause is eliminated |
| Error | Must be cleared to continue, after eliminating the cause |
| Warning | You can keep working; most can be cleared at any time |
| Information / Note | Purely informational; a note disappears at the next valid keystroke |
On the older-generation controls (iTNC 530, TNC 640/620/320 in classic UI) the same idea appears as an error class in the ERR-key list: ERROR, FEED HOLD (feed-rate release canceled), PGM HOLD (run interrupted, control-in-operation symbol blinks), PGM ABORT (INTERNAL STOP), EMERG. STOP, RESET (control restarts), WARNING, and INFO, plus a category column (OPERATING / PROGRAMMING / PLC / GENERAL). Clearing works the same everywhere: fix the cause, then press CE (or Delete all in the TNC7 message menu). On the iTNC 530 the HELP key pops up the cause and correction for the pending error.
The Major Error Groups
Group prefixes and content verified against the 10/2023 list. Learn the handful in bold — they cover nearly everything a programmer sees.
| Group | Subsystem | Typical content |
|---|---|---|
| Your NC program — fix it at the keyboard | ||
| 160 | NC interpreter | Syntax, labels, Q parameters, nesting, undefined tools/touch probes (287 entries) |
| 145 | Geometry | Arc definitions, scaling factors, chamfer/rounding input |
| 1A0 | Path calculation | Tool radius compensation, approach/departure, chamfer/rounding geometry, working-plane rules (413 entries) |
| 1A1 / 1A2 | Kinematics / transformations | Kinematics configuration, PRESET command errors |
| 402 | FK free-contour programming | Contradictory input, missing FPOL, FSELECT problems |
| 280 | Cycles | Machining-cycle and touch-probe-cycle runtime errors, FN 14 output (632 entries — the biggest group) |
| Operation, files, and tables | ||
| 250 | Program run | Mid-program startup, “program was edited”, memory |
| 240 / 241 / 242 | File and text handling | File not found, write protection, editor buffers |
| 270 | SQL / tables | Table server errors behind tool and preset tables |
| 322 | Block scan / tool management | Tool call ambiguity, block-scan restrictions |
| 2A9 | Simulation graphics | Faulty BLK FORM, graphics memory exhausted |
| Machine side — usually your machine builder or service agency | ||
| 230 | Axis / hardware config | Axis parameters, SIK enables — but also touch-probe hardware messages (stylus contact, probe battery) |
| 231 / 237 / 238 / 239 | Drive controller (CC), power supply, functional safety | Servo, inverter, emergency-stop tests, FS monitoring |
| 234 / 235 / 236 / 23A | HSCI / hardware / PROFINET / devices | Bus and component faults |
| 320 / 330 | PLC / safety self-test | PLC program messages, STO and E-stop checks |
| 120–141, 2xx misc | UI, config data, system | Soft-key configuration, self-tests, config server, OPC UA (303), Python (2D4) |
| Turning platforms | ||
| 600–663, 900–905 | Turning cycles / smart.Turn | Mostly CNC PILOT 640 / MANUALplus 620 lathe-cycle errors that share the list |
One warning about self-diagnosis: group 280 contains both trivial programming mistakes and OEM-cycle messages, and group 230 mixes harmless probe-battery warnings with axis-configuration faults. Read the cause text before deciding whose problem it is — anything mentioning “Inform your service agency” means exactly that.
Errors You Will Actually Meet
Curated from the full list: number, on-screen text, and the practical cause → fix. These are the recurring offenders in Klartext/Q-parameter programming, probing, and day-to-day running.
| Error | Text | Cause → remedy |
|---|---|---|
| Programming — interpreter and Q parameters (160, 145, 402) | ||
| 160-0003 | Block format incorrect | Keyword or G function missing in the block → edit the NC program |
| 160-001B | Label number not found | CALL LBL (ISO: L x,x) targets a label that does not exist → fix the number or insert the missing LBL SET |
| 160-0028 | Invalid Q parameter | Q-parameter index out of range → check indexed accesses |
| 160-0032 | Arithmetical error | Division by zero, square root of a negative number, or similar in a Q-parameter calculation → check input values |
| 160-00A8 | Recursive label call | A subprogram calls the label it begins with — a subprogram cannot call itself → restructure |
| 160-00AA | Excessive program nesting | CALL LBL / CALL PGM nesting too deep, usually a hidden recursion → edit the program |
| 160-00C5 | Tool not defined | TOOL CALL names a tool that is not in the tool table → add it or call another |
| 145-0001 | Circular arc not fully defined | Start angle of the arc missing → complete the arc definition |
| 402-0001 | FK programming: Contradictory input | Conflicting data within or across FK contour elements → re-check the entered constraints |
| 402-0003 | FK programming: No FPOL defined | Polar coordinates used in an FK sequence without a pole → program FPOL first |
| Contour and radius compensation (1A0) | ||
| 1A0-0092 | Rounding radius for inside corners too large | The inside-corner rounding radius from Cycle 20 does not fit between neighboring contour elements → smaller radius |
| 1A0-0094 | Cannot calculate tool radius compensation | RR/RL not computable for the programmed contour in this plane → circles are compensated only in the working plane |
| Machining cycles (280) | ||
| 280-03E8 | Spindle must be turning | Fixed cycle called with spindle off → program M3/M4 before the cycle call |
| 280-03E9 | Tool axis is missing | Positioning block with radius compensation before any tool call → add the TOOL CALL with tool axis |
| 280-03EA | Tool radius too small | Tool too small for the operation — e.g. slot cycles limit slot width vs. tool radius, Cycle 240 centering diameter vs. tool diameter → larger tool or smaller feature |
| 280-0406 | Q202 not defined | No plunging depth in a 2xx fixed cycle → enter Q202 |
| 280-0412 | Traverse direction not defined | Probing cycle with Q267 = 0 → enter +1 or −1 |
| Touch probes (230, 280, 160) | ||
| 230-02BD | Stylus already in contact | Stylus deflected at the start of a probing move → clear the probe and repeat; if it recurs, inspect the stylus/probe for damage |
| 280-03F6 | Touch point inaccessible | No trigger within the measuring range (TCH PROBE 0 / manual probing) → pre-position closer to the workpiece |
| 280-05F2 | No touch probe data | No probe inserted, no tool axis active for it, or contradictory probe data → insert the probe, define the tool axis, check the touch-probe table |
| 280-05FB | Calibrate touch probe | Automatic tool measurement attempted with an uncalibrated TT table probe → run TCH PROBE 30 / Cycle 480 calibration |
| 280-0471 | Touch probe data incomplete | Touch-probe table entries missing or wrong → check the TYPE column |
| 280-0483 | Hole is smaller than the stylus tip | Stylus ball bigger than the bore being measured → smaller stylus tip |
| 160-011C | Touch probe not defined | Called a probe that is not in the touch-probe table, or the table is write-protected/missing → add the probe / remove write protection |
| 230-019E | Exchange touch probe battery | Probe battery dead → replace it (do this before it dies mid-cycle) |
| Program run, files, and tables (250, 240, 322, 280, 2A9) | ||
| 250-138B | Program was edited | The running program (or one of its callers) changed, so the control cannot resume where it was → use mid-program startup (block scan) or GOTO to re-enter |
| 250-138D | Current program not selected | The displayed program was never selected in Program Run → select it via the file manager |
| 240-07D1 | File '%1' not found | The file does not exist at the given path → check path/name spelling or regenerate the file |
| 240-07D0 | No permission to write | You opened a write-protected file for editing → remove write protection first (code number 86357) |
| 322-0004 | Tool call unclear | Two tools would have to be inserted/exchanged at once → correct the NC program |
| 280-0622 | Row does not exist in preset table | Programmed preset activation points at a missing line → check/extend the preset table |
| 280-0624 | Preset table not found | The preset table selected for the test run cannot be opened → reselect an existing table or create one |
| 2A9-0004 | Graphics memory exhausted | 3D material-removal simulation ran out of memory and aborted itself → lower the model quality, restart the simulation |
FN 14: ERROR — Raising Errors from Your Own Program
FN 14: ERROR (ISO: D14) outputs a pre-defined error message under program control — the standard way to abort a program from Q-parameter logic, e.g. when a probed dimension is out of tolerance or an OEM cycle detects bad input. When the control executes FN 14 in program run or simulation, it interrupts the program and displays the message; the program must then be restarted. On screen the event itself is error 280-0064 “FN 14: error code %1”.
; abort if probed diameter (Q160) exceeds tolerance
36 FN 11: IF +Q160 GT +Q31 GOTO LBL 99 ; out of tolerance?
...
98 LBL 99
99 FN 14: ERROR=1000 ; display error dialog no. 1000
; TNC7 navigation: Insert NC function → All functions → FN
; → Special functions → FN 14 ERROR
The error number picks a message from fixed ranges. On the current generation (TNC7 / 640 / 620 / 320):
| Error number range | Message source |
|---|---|
| 0 – 999 | Machine-dependent dialog — defined by your machine builder |
| 1000 – 2999 | Control-dependent dialog — pre-defined by Heidenhain |
| 3000 – 9999 | Machine-dependent dialog |
| 10 000 and higher | Control-dependent dialog |
The 1000-series numbers are preassigned by Heidenhain and are the ones worth memorizing: on the TNC7, FN 14: ERROR=1000 yields “Spindle must be turning”, 1001 “Tool axis is missing”, 1002 “Tool radius too small”, 1014 “Touch point inaccessible”, 1016 “Contradictory entry”, 1030 “Q202 not defined”, and so on — the same texts the built-in cycles use. The full assignment lives in the Overview of Machine Parameters, Error Numbers and System Data (ID 1445456-xx), not in the User's Manual. The iTNC 530 used a narrower legacy scheme (0–299 generic “FN 14: error code” texts, 300–999 machine-dependent, 1000–1099 pre-defined internal messages) with near-identical 1000-series texts, so FN 14 logic ports across generations. Not every number exists on every control/software version — test your abort paths. For formatted operator output that does not abort the program, use FN 16: F-PRINT (or FUNCTION REPORT on the TNC7) instead.
Looking Errors Up and Capturing Evidence
At the control: on the TNC7, expand the message menu — each entry carries its number, cause, and correction, and the Details button reveals the internal information a service tech will ask about. The Group toggle collapses repeats of the same error number into one row (CE then clears the whole group). On the iTNC 530 and the classic-UI TNC 640/620/320, press ERR for the list of all pending errors and HELP for the cause/remedy window.
Offline: the complete list is the free NC Error Messages PDF on Heidenhain's TNCguide portal (one file for the whole -18 control generation). Note it does not cover the iTNC 530 generation — for those, use the control's HELP key or the iTNC documentation.
Service files: for anything intermittent or machine-side, create a service file before the evidence evaporates: message menu → Save service files (saved under TNC:\service, up to 10 MB including active NC programs, tool data, and keystroke logs; five files per name are kept before the oldest is overwritten). You can also register up to five error numbers for which the TNC7 saves a service file automatically the moment the error fires — the right tool for a fault that only appears at 2 a.m. Machine-builder (PLC) messages and drive faults are the OEM's domain: collect the service file and the exact number/text, and hand both to them.
What This Page Leaves Out
The 10/2023 list contains 5,979 messages; this page curates the shop-floor subset. Deliberately omitted: the drive-controller runtime groups (231/237/238/239 — servo, inverter, and functional-safety monitoring), HSCI/PROFINET bus faults (234/236), the PLC and safety self-test groups (320/330), configuration-data and UI-internals groups (120–141, 210–221), and the turning-platform groups (600s/900s) that belong to the CNC PILOT 640 and MANUALplus 620. Those all end in “inform your service agency” or “contact your machine builder” anyway — what matters on the floor is capturing the number and the service file, which the sections above cover.
References
- Heidenhain, NC Error Messages (TNC7, TNC7 basic, TNC 640, TNC 620, TNC 320, TNC 128, CNC PILOT 640, MANUALplus 620), NC software xxxxxx-18, 10/2023.
- Heidenhain, TNC7 User's Manual for Setup and Program Run, 10/2025, ID 1358774-24 (message menu, service files).
- Heidenhain, TNC7 User's Manual for Programming and Testing, 10/2025, ID 1358773-24 (FN 14: ERROR).
- Heidenhain, Overview of the Machine Parameters, Error Numbers and System Data (TNC7 series), 10/2025, ID 1445456-xx (preassigned FN 14 error numbers).
- Heidenhain, iTNC 530 User's Manual, NC SW 60642x-04 SP8, ID 737759-24 (ERR/HELP keys, error classes, FN 14 legacy ranges).
Have a question or want to contribute?
Contact us with corrections, additions, or topics you'd like covered.
Get in Touch