Lista de Códigos G y M para Programación CNC

Busca y filtra comandos ISO por control, máquina o función.

El lenguaje de programación CNC se basa en bloques de código estructurados para controlar trayectorias, avances y funciones de la máquina herramienta. En esta lista de códigos G y M encontrarás una referencia rápida de los comandos más utilizados en mecanizado para torno y fresadora. Aunque existe un estándar ISO, la ejecución exacta de un ciclo fijo o una interpolación avanzada puede variar según el control numérico Fanuc, Heidenhain, Siemens, Haas y los parámetros del fabricante.

Estos códigos pueden variar según control, postprocesador, máquina y parámetros del fabricante. Antes de ejecutar un programa real, confirma la sintaxis en los manuales oficiales de la máquina/control y simula el recorrido. GetGCode no se hace responsable de daños personales, daños materiales, paradas de producción, errores de programación, errores de diagnóstico ni decisiones tomadas a partir de esta información orientativa. Las marcas citadas pertenecen a sus respectivos titulares (ver Aviso legal).
Agregar mis códigos
Puedes usar la tabla libremente. Guardar tus propios códigos está reservado a las cuentas con acceso Pro.
Código
Nombre
Familia
Ejemplo
Qué hace
Filtros

G91 hace que cada cota se mida desde la posición actual de la herramienta y no desde el cero pieza: X10. en G91 significa diez milímetros más allá de donde estás, en el sentido positivo del eje. Es modal y se usa en casos concretos: la retirada segura G91 G28 Z0., los patrones repetidos con K o L y los subprogramas de geometría. Fuera de ahí, olvidarse de volver a G90 es una de las causas de choque más frecuentes.

Ver la ficha completa de la familia

Sintaxis por control

Fanuc / Haas (movimiento)

G91 G01 X25. Y0. F300

Cada cota es un incremento con signo desde donde está la herramienta. Al terminar el tramo incremental hay que volver a G90 explícitamente: el control no lo hace solo.

Fanuc / Haas (retirada segura)

G91 G28 Z0.

El uso más habitual de G91: sube el eje Z desde donde esté hasta el punto de referencia, sin punto intermedio. El mismo bloque en G90 pasaría antes por el Z0 del cero pieza, es decir, por la cara de la pieza.

Siemens 840D / 828D

G91 G1 X25 F300

Siemens permite además dar una cota incremental suelta dentro de un bloque absoluto con IC(): X=IC(25). Así se evita cambiar de modo para un solo eje.

Heidenhain TNC (Klartext)

L IX+25 R0 F300

No hay un G91 modal: la I delante del nombre del eje marca que esa cota concreta es incremental. Las cotas sin I siguen siendo absolutas dentro del mismo bloque.

Letras que lo acompañan

LetraQué indicaUnidad
X Y ZIncremento con signo desde la posición actual. El signo marca el sentido, no el lado de la pieza.mm / pulg
Z y R en ciclos fijosCon G91, la R se mide desde la posición actual del eje y la Z es la profundidad medida desde el plano R, no cotas del cero pieza.mm / pulg
K / LRepeticiones del ciclo fijo, que solo tienen efecto en modo incremental: K en Fanuc, L en Haas. Cada repetición aplica de nuevo el incremento de X e Y.número entero

Ejemplo comentado

Fila de cinco agujeros de Ø5 separados 25 mm en X, en una placa de 14 mm. En absoluto habría que escribir las cinco cotas; en incremental basta con programar el ciclo una vez y repetirlo cuatro veces más con el paso de 25 mm. Los agujeros quedan en X20, X45, X70, X95 y X120.

G91 G28 Z0.( Z a referencia en incremental antes del cambio. )
T4 M06( Broca de Ø5. )
G90 G54 G00 X20. Y30.( El punto de partida siempre en absoluto: primer agujero de la fila. )
G43 H04 Z25. M03 S2400( Longitud de la T4 y husillo en marcha. Z25 queda como posición de partida del eje. )
M08( Refrigerante. )
G91 G99 G81 X0. Y0. Z-18. R-23. F180( Ciclo en incremental: R-23 baja 23 mm desde Z25 hasta la cota Z2, y Z-18 es la profundidad medida desde el plano R (de Z2 a Z-16). X0 Y0 taladra en la posición actual sin moverse. )
X25. K4( Repite el ciclo cuatro veces más desplazándose 25 mm en X cada vez. En Haas la repetición se escribe L4. En G90 este bloque repetiría el mismo agujero en el mismo sitio. )
G80 G90 G00 Z25. M09( Cancela el ciclo y vuelve a absoluto en el mismo bloque. Dejar G91 activo aquí es la causa clásica de un movimiento inesperado en el bloque siguiente. )
G91 G28 Z0. M05( Retirada segura en incremental y husillo parado. )
G90( Deja el control en absoluto. )
M30( Fin de programa. )

Cuándo compensa programar en G91

En tres situaciones concretas. La primera, la retirada segura: G91 G28 Z0. sube el eje desde donde esté sin pasar por el cero pieza. La segunda, los patrones repetidos: una fila o una matriz de agujeros se escribe una vez y se repite con K o L, que solo funcionan en incremental. La tercera, los subprogramas de geometría que se reutilizan en varias posiciones: el subprograma lleva la forma en incremental y el programa principal la coloca posicionándose en absoluto antes de cada llamada. Para todo lo demás, el absoluto es más seguro y más fácil de depurar.

Cómo se combina con los ciclos fijos y con G90

En un ciclo fijo el cambio de modo cambia el significado de la R y de la Z: en incremental la R se mide desde la posición actual del eje y la Z es la profundidad desde el plano R. Por eso, al pasar un ciclo de absoluto a incremental hay que recalcular las dos, no solo copiarlas. La regla de taller que evita disgustos es cerrar siempre el tramo incremental con G80 G90 en el mismo bloque, y no dejar nunca un G91 activo al llegar a un cambio de herramienta, a un final de programa o a un salto de subprograma.

Qué gana y qué pierde el incremental

Gana en programas cortos y reutilizables: un patrón de veinte agujeros cabe en dos bloques y el mismo subprograma sirve para cuatro posiciones distintas. Pierde en trazabilidad, porque para saber dónde está la herramienta hay que sumar todos los bloques anteriores, y en precisión acumulada, porque si el plano está acotado en absoluto y tú encadenas incrementos redondeados, el último punto arrastra la suma de todos los redondeos. Por eso los planos acotados desde un origen común se programan en absoluto y solo las repeticiones se hacen en incremental.

Errores que cuestan una pieza (o una herramienta)

  • Olvidar volver a G90 después del tramo incremental: todos los movimientos siguientes se suman a la posición actual y la herramienta acaba dentro del amarre o fuera del recorrido.
  • Escribir G90 G28 X0. Y0. Z0. creyendo que es la retirada segura: con G90 la máquina pasa primero por el cero pieza, atravesando la pieza o las bridas, y luego sube a referencia.
  • Pasar un ciclo fijo a G91 sin recalcular R y Z: en incremental la R se mide desde la posición actual y la Z desde el plano R, así que el agujero sale con otra profundidad o la broca baja de más.
  • Usar K o L en modo absoluto: el control repite el mismo agujero en el mismo sitio tantas veces como digas, con la broca entrando de nuevo en el agujero ya hecho.
  • Encadenar cotas incrementales sacadas de un plano acotado en absoluto: cada redondeo se acumula y el último punto se sale de tolerancia sin que ningún bloque parezca mal.
  • Terminar el programa en G91: si el control no restaura los modales por parámetro, el siguiente programa o el primer movimiento en manual arranca en incremental.

Preguntas Frecuentes (FAQ)

¿Por qué se escribe G91 G28 Z0. y no G28 Z0.?

Porque en G91 el punto intermedio es la posición actual y la máquina sube directa a referencia. En G90, ese Z0. es la cota Z0 del cero pieza, o sea la cara de la pieza: la herramienta baja hasta ahí antes de subir. Es uno de los choques más habituales en fresadora.

¿Cuándo conviene usar G91 en vez de G90?

Para patrones repetidos con K o L, para subprogramas de geometría reutilizables y para movimientos de retirada. Para el resto del programa, el absoluto es más seguro porque un error en un bloque no se arrastra a los siguientes.

¿Se acumulan errores programando en incremental?

Sí, si los incrementos vienen de restar cotas redondeadas de un plano acotado en absoluto. El control calcula con más decimales que los que tú escribes, así que el error está en el programa, no en la máquina. La solución es programar en absoluto lo que el plano acota en absoluto.

¿Puedo dar una cota incremental sin cambiar de modo?

En Siemens con IC() y en Heidenhain con la I delante del eje, sí, eje por eje. En Fanuc y Haas no: hay que cambiar el modo con G91 y volver con G90, y ese ida y vuelta conviene hacerlo en el mismo bloque que el resto de la cancelación.

¿G91 cambia el cero pieza?

No. El origen sigue siendo el que diga G54 o el que esté activo: lo único que cambia es desde dónde se miden las cotas de cada bloque. Eso sí, un G10 L2 escrito con G91 activo suma valores al origen en vez de sustituirlos, y eso sí desplaza el cero.

Códigos relacionados

G00

Movimiento

Posicionamiento rápido

Movimiento rápido hasta una coordenada sin controlar avance de corte.

G01

Movimiento

Interpolación lineal

Movimiento lineal controlado con avance programado.

G02

Movimiento

Interpolación circular horaria

Arco circular en sentido horario en el plano activo.

G02.1/G03.1

Interpolación

Interpolación espiral (circular threading B)

Interpolación espiral CW/CCW: movimiento helicoidal continuo con paso variable; usado en roscado B y algunas operaciones de lapeado.

G02.2/G03.2

Interpolación

Interpolación evolvente

Interpolación a lo largo de una evolvente de círculo (involute interpolation), usada en fabricación de engranajes.

G03

Movimiento

Interpolación circular antihoraria

Arco circular en sentido antihorario en el plano activo.

G04

Control de programa

Pausa temporizada

Detiene temporalmente la ejecución durante un tiempo o número de revoluciones definido.

G05/G05.1

Alta velocidad

Alta velocidad / AI contour

Activa funciones de mecanizado de alta velocidad, anticipación de trayectoria o control avanzado de contorno.

G5/G5.1/G5.2

Interpolación avanzada

Splines y NURBS

Interpolaciones por spline cúbica, spline cuadrática o NURBS en controles que lo soportan.

G05.4

Alta velocidad

HRV3/HRV4 on/off

Activa o desactiva el control de corriente HRV3/HRV4 (High Response Vector) para mejorar la precisión de servo en alta velocidad.

G06.2

Alta velocidad

Interpolación NURBS

Interpolación de curvas NURBS (Non-Uniform Rational B-Spline) directamente en el control, reduciendo puntos de bloque y mejorando la suavidad.

G07

Interpolación

Interpolación eje hipotético

Define un eje hipotético (virtual) para interpolación; usado en mecanizado de piezas con simetría o para coordinar movimientos no físicos.

G7/G8

Torno

Modo diámetro/radio en torno

Selecciona si las coordenadas X de torno se interpretan como diámetro o radio según control.

G08/G09

Trayectoria

Suavizado y parada exacta puntual

Funciones usadas para activar/desactivar suavizado o exigir parada exacta en un bloque concreto según control.

G10

Offsets

Escritura de offsets

Permite escribir offsets de herramienta, trabajo u otros datos desde el programa.

G12/G13

Ciclos fresado

Cajera circular

Ciclo de interpolación circular para mecanizar cajeras o patrones circulares según control.

G15/G16

Coordenadas

Coordenadas polares

Activa o cancela programación en coordenadas polares, normalmente radio y ángulo.

G17/G18/G19

Plano

Selección de plano

Define el plano activo para arcos y compensaciones.

G20/G21

Unidades

Unidades pulgadas / milímetros

Selecciona programación en pulgadas o milímetros.

G22/G23

Seguridad

Límites de carrera programados

Activa o desactiva comprobación de zona/límites almacenados según control.

¿Qué son los códigos preparatorios (G) y auxiliares (M)?

Los códigos G preparan y gobiernan el movimiento de la herramienta: desplazamientos rápidos, interpolación lineal, interpolación circular, ciclos fijos, planos de trabajo y compensaciones. Los códigos M controlan funciones auxiliares de la máquina como husillo, refrigerante, parada, cambio de herramienta o fin de programa.

Categorías principales de programación

Movimiento e interpolación (G00, G01, G02, G03)

G00 se usa para posicionamiento rápido, G01 para avance lineal de corte y G02/G03 para interpolación circular horaria o antihoraria. Son la base de la mayoría de programas CNC en fresadora y torno.

Ciclos fijos y subprogramas

Los ciclos fijos simplifican operaciones repetitivas como taladrado, roscado, mandrinado o desbaste. Su sintaxis cambia mucho entre controles, por lo que conviene validar siempre el manual de máquina.

Preguntas Frecuentes (FAQ)

¿Cuál es la diferencia entre un código G y un código M?

Los códigos G (preparatorios) definen la geometría y el movimiento de la herramienta, como interpolaciones lineales o ciclos de desbaste. Los códigos M (misceláneos o auxiliares) controlan el hardware de la máquina, como el encendido del husillo (M03), el refrigerante (M08) o el fin de programa (M30).

¿Los códigos G son universales para todos los tornos y fresadoras?

No totalmente. Aunque los movimientos básicos como G00, G01, G02 y G03 son universales, los ciclos fijos complejos, como G71 para desbaste o G83 para taladrado profundo, tienen sintaxis y parámetros diferentes según uses Fanuc, Haas, Siemens o Heidenhain.

¿Qué es y cuándo se usa el código G01?

G01 es el código de interpolación lineal. Se utiliza para ordenar a la herramienta que se mueva en línea recta hasta una coordenada específica a un avance de corte controlado y programado por la letra F.

¿Qué diferencia hay entre los códigos G90 y G91?

El código G90 establece el sistema de posicionamiento absoluto, donde todas las coordenadas se miden desde el cero pieza (origen). El G91 activa el posicionamiento incremental, donde cada nuevo movimiento se calcula desde la posición actual de la herramienta.

¿Para qué sirven los códigos G41 y G42 en mecanizado?

Estos códigos activan la compensación del radio de la herramienta o plaquita. G41 compensa la trayectoria hacia la izquierda del contorno programado según el sentido de avance, y G42 hacia la derecha. Se usan para mecanizar perfiles, chaflanes y radios con medidas exactas sin clavar la herramienta.

¿Cómo se cancelan los ciclos fijos y las compensaciones?

Para evitar colisiones, es obligatorio cancelar las funciones modales cuando ya no se necesitan. El código G80 cancela cualquier ciclo fijo activo, como los de taladrado. G40 cancela la compensación de radio de herramienta, y G49 cancela la compensación de longitud, muy usado en fresadora.

¿Cuáles son los códigos M auxiliares imprescindibles?

Los códigos de hardware más estandarizados son M03 (giro del husillo a derechas), M04 (giro a izquierdas), M05 (parada del husillo), M08 (encendido del refrigerante o taladrina), M09 (apagado del refrigerante) y M30 (fin del programa, detención de ejes y rebobinado).

¿Los ciclos fijos de Fanuc funcionan igual en otros controles?

No. Aunque los movimientos de interpolación (G00 a G03) son un estándar ISO muy extendido, la sintaxis de los ciclos complejos cambia. Por ejemplo, el ciclo de desbaste en torno es un G71 en Fanuc, pero en Siemens requiere una estructura de parámetros diferente, como CYCLE95.

¿Qué significa la letra F, S y T en el código CNC?

Acompañando a los códigos G y M, la letra F (Feed) define el avance de corte, la letra S (Speed) establece las revoluciones por minuto o la velocidad de corte del husillo, y la letra T (Tool) llama al número de la herramienta y su corrector en la torreta o cargador.

Herramientas relacionadas