Introducción a G-code y M-code en CNC e impresión 3D

Última actualización: 17/12/2025
Autor: Isaac
  • El G-code define la geometría y el movimiento de máquinas CNC e impresoras 3D.
  • El M-code controla funciones auxiliares como husillo, refrigerante y cambios de herramienta.
  • CAD/CAM y slicers generan automáticamente códigos G y M, pero es clave entenderlos.
  • Dominar estos códigos evita errores, mejora la precisión y optimiza la producción.

introduccion a G-code y M-code

Si trabajas con máquinas CNC o impresoras 3D, tarde o temprano vas a cruzarte con el famosísimo G-code y su inseparable compañero, el M-code. A muchos les suena a lenguaje marciano, pero en realidad son solo instrucciones muy estructuradas que la máquina entiende al pie de la letra. Entender qué dicen y cómo se combinan es clave para dejar de ir «a ciegas» y tener control real sobre el mecanizado o la impresión.

Piensa que tu máquina, por muy cara o moderna que sea, es bastante «simple»: solo sabe moverse a coordenadas X, Y, Z, girar un husillo o extruir material cuando se lo ordenas. Todo lo demás lo pone el G-code y el M-code. En este artículo vamos a desgranar con calma qué son, cómo nacieron, en qué se diferencian, cómo se usan hoy con CAD/CAM y slicers, qué errores típicos provocan y veremos incluso ejemplos de programas más complejos, tanto en torno CNC como en impresión 3D.

Qué es el mecanizado CNC y por qué dependen tanto del G-code y M-code

El mecanizado CNC es, en esencia, el uso de máquinas controladas numéricamente por ordenador (tornos, fresadoras, centros de mecanizado, etc.) para fabricar piezas con una precisión que sería imposible de conseguir de forma manual y repetitiva. El control numérico marca posiciones, velocidades y trayectorias; la máquina obedece.

Entre sus ventajas destacan una precisión altísima, eficiencia en eliminación de material, posibilidad de trabajar con geometrías muy complejas y una repetibilidad brutal: si el programa está bien hecho, puedes sacar 10 o 10.000 piezas prácticamente idénticas.

Antes de que existieran los ordenadores tal y como los conocemos ahora, los maquinistas usaban tarjetas perforadas o cintas para codificar las instrucciones. Hacer agujeros en la secuencia correcta era un proceso lento y frágil: si la tarjeta se dañaba o se perdía, se iba el trabajo al traste y se paralizaba la producción.

Con la llegada del control numérico y los primeros ordenadores, los operadores empezaron a introducir líneas de código manualmente. Esto era un avance, pero para piezas complejas con muchas operaciones se convertía en algo extremadamente tedioso y propenso a errores de tecleo o cálculo.

Hoy la película es muy distinta: usamos software CAD para diseñar y programas CAM para generar automáticamente las trayectorias de herramienta. El propio CAM produce los archivos de G-code y M-code listos para que la máquina los ejecute. Eso no quita que entender qué hay ahí dentro sea vital para revisar, optimizar, corregir y, cuando toca, programar a mano.

codigo G y M en cnc e impresion 3d

Cómo la programación CNC controla las máquinas

En un flujo de trabajo típico, el programador prepara en el CAM el entorno de mecanizado: modelo de pieza, modelo de mordazas o útiles, selección de herramientas y rutas de herramienta para cada operación (desbaste, acabado, taladrado, roscado, etc.). A partir de todo eso, el software genera el programa CNC compuesto por bloques de instrucciones.

Cada bloque suele ser una línea de texto con un código G, opcionalmente un código M y diversos parámetros: coordenadas X, Y, Z, radios, avances (F), velocidad de husillo (S), número de herramienta (T), etc. El control interpreta estos bloques en orden secuencial y mueve la máquina o cambia su estado según lo que hay escrito.

En la práctica, el programa suele combinar instrucciones de movimiento (G-code) y funciones auxiliares (M-code) junto con algunos comandos adicionales como F, S, T, o N para numerar líneas. La lógica es: el G-code manda sobre «cómo» se mueve la máquina, el M-code manda sobre «qué hace» la máquina en cuanto a funciones de hardware.

Aunque los CAM ahorran mucho trabajo, cuando la pieza es sofisticada el postprocesado puede requerir revisar a mano ciclos, compensaciones, avances o secuencias de seguridad. En proyectos complejos no es raro que la generación, ajuste y validación del código se prolongue durante días o incluso semanas.

Qué es el G-code (código G) en CNC e impresión 3D

El G-code, también conocido como RS-274 o ISO-Code, es el lenguaje estándar de programación geométrica de las máquinas CNC (diferencias entre código de máquina y bytecode). La «G» viene precisamente de «geometría»: describe cómo debe moverse la máquina en el espacio y con qué parámetros.

En CNC tradicional (tornos, fresadoras, láser, etc.) el G-code indica trayectorias, planos de trabajo, velocidades de avance y demás información relacionada con el movimiento de la herramienta respecto a la pieza. En impresión 3D hace exactamente lo mismo, pero aplicado a los ejes de la impresora y al extrusor.

Un comando típico de G-code empieza con la letra G seguida de un número, por ejemplo G00, G01, G02, G03, G17, etc. Cada combinación tiene un significado muy concreto. A menudo, la línea incorpora más parámetros como X, Y, Z, R, F, S o E (en impresión 3D para el extrusor).

  Cómo Ocultar Los Chats De WhatsApp Sin Archivar

Aunque hay estándares (ISO 6983, DIN 66025, dialectos de Siemens, FANUC, Haas, entre otros), cada control puede añadir extensiones o variaciones. Además, algunos detalles de formato cambian entre fabricantes: por ejemplo, una máquina puede aceptar G3 y otra exigir G03, o permitir omitir ciertos ceros y espacios.

En todos los casos, la idea base es la misma: una secuencia de bloques que, ejecutados en orden, componen toda la ruta de la herramienta y, por tanto, la forma final de la pieza o del objeto impreso.

Letras y parámetros habituales en el G-code

Además de la letra G el lenguaje usa otras letras para indicar parámetros importantes. En mecanizado CNC clásico encontramos, entre otras:

  • X, Y, Z: coordenadas cartesianas que sitúan la herramienta o la pieza en tres dimensiones. X e Y suelen ser el plano horizontal, Z la profundidad o altura.
  • A: rotación o giro alrededor del eje X (en máquinas multieje).
  • R: radio de un arco cuando se hace interpolación circular.
  • I, J: componentes incrementales del centro de un arco en interpolaciones circulares.
  • N: número de línea o bloque del programa.
  • F: avance, es decir, velocidad de corte o de desplazamiento en las operaciones de mecanizado.
  • S: velocidad de husillo, en revoluciones por minuto.
  • T: herramienta a utilizar en combinación con instrucciones como M06.

En impresión 3D FFF/FDM, además, aparece muy a menudo la letra E para indicar la cantidad de filamento extruido, junto con comandos de posicionamiento tipo G0/G1 sobre X, Y y Z.

Principales códigos G en mecanizado CNC

Algunos de los códigos G más frecuentes en fresadoras y tornos CNC son los siguientes:

  • G00 – Posicionamiento rápido: mueve la herramienta lo más deprisa posible hasta una coordenada indicada, sin pretender cortar. Se usa para aproximaciones y retiradas donde solo importa llegar rápido y sin colisionar.
  • G01 – Interpolación lineal: ordena desplazarse en línea recta entre dos puntos con un avance F determinado. Es el comando clásico para cortes rectos y mecanizados de contorno.
  • G02 – Interpolación circular horaria: traza arcos o círculos siguiendo un sentido de las agujas del reloj, normalmente usando X, Y (o X, Z / Y, Z según el plano activo) y un radio R o un centro I, J.
  • G03 – Interpolación circular antihoraria: igual que G02 pero con sentido inverso, muy útil para perfilar redondeos, ranuras circulares o bolsillos curvos.
  • G04 – Pausa o permanencia: obliga a la máquina a detenerse durante un tiempo especificado. Se aprovecha para dejar estabilizar el husillo, enfriar una herramienta o permitir el efecto de un refrigerante.
  • G17, G18, G19 – Selección de plano: G17 activa el plano XY, G18 el XZ y G19 el YZ, algo imprescindible cuando se trabaja en multieje o se quieren interpolar arcos fuera del plano estándar.
  • G21 / G20: definen el sistema de unidades, normalmente G21 para milímetros y G20 para pulgadas.
  • G43 – Compensación de longitud de herramienta: tiene en cuenta que cada herramienta tiene una longitud distinta y aplica el corrector adecuado para que la profundidad real del mecanizado sea la deseada.

En tornos también son habituales códigos específicos como G71 para ciclos de desbaste longitudinal, G70 para acabado del perfil, o G76 para roscado cíclico, que permiten definir un contorno y dejar que el control genere automáticamente la famosa «escalerita» de pasadas intermedias.

Ejemplo avanzado de G-code en un torno CNC

Para ver el potencial real de estos ciclos, fíjate en este escenario típico: partimos de un tocho cilíndrico y queremos desbastar grandes cantidades de material con pocas líneas, dejando algo de sobrematerial para una pasada de acabado y rematar con una rosca.

En un programa de torno podríamos arrancar definiendo el tamaño del material inicial con una instrucción tipo en el simulador, identificando el programa con un número como O0001, seleccionando sistema métrico con G21 y fijando el modo de avance por revolución con G99.

A continuación, se ordena un cambio de herramienta con algo tipo M06 T0101 (herramienta 1 con su offset 1), se definen las revoluciones del husillo en modo G97 (RPM constantes) con S1800 M03 para girar en sentido horario, y se posiciona rápidamente con G00 cerca de la pieza (por ejemplo X26 Z2).

Después, usando G01 se puede frentear el tocho atravesando el centro (X-1 F.05), volver a posición de seguridad y entrar en el famoso ciclo de desbaste G71. Este ciclo se define en dos líneas, especificando profundidad de pasada U, retirada R, bloque inicial P y final Q del contorno, sobremedidas U y W y avance F.

A continuación se describen las líneas del contorno entre, por ejemplo, N1 y N2: un frenteado hasta X0, un avance en Z, un arco G03 con determinado radio, cilindrados y conos. Lo importante es que el perfil sea monótonamente creciente o decreciente en diámetro para que el ciclo funcione correctamente.

Una vez terminado el desbaste por G71, se lanza un G70 P1 Q2 para que, con la velocidad y avance finos, haga el acabado siguiendo el mismo contorno. Después se puede enviar el carro a referencia con G28 U0 W0, parar el husillo con M05, cambiar a una herramienta de roscado T0303 y activar un ciclo G76 para generar una rosca con múltiples pasadas y parámetros de profundidad, ángulo, paso (F1.5, por ejemplo) y diámetro interior.

  Cómo ver qué GPU tienes en Windows 11: Guía completa y detallada

Finalmente, se vuelve a sacar el carro a posición segura (G28 U0 W0) y se termina el programa con M30 (fin y rebobinado) o M00 (parada sin rebobinar). Todo este proceso se puede describir con muy pocas líneas de programa gracias a los ciclos fijos, lo que simplifica muchísimo el trabajo diario.

Qué es el M-code (código M) y qué papel juega

El M-code se conoce como código «misceláneo» o de «funciones de máquina». Mientras que el G-code se ocupa de la geometría y el movimiento, el M-code controla acciones auxiliares: arrancar o parar el husillo, encender el refrigerante, cambiar herramienta, detener o terminar el programa, etc.

Formalmente son comandos que empiezan por la letra M seguida de un número, como M00, M03, M05, M06, M08, M30. Cada uno actúa como un interruptor que enciende o apaga algo o hace que el control pase a otro estado.

Un detalle importante es que, por norma general, en cada bloque solo se emplea un único código M. Meter dos o más en la misma línea suele ser mala idea porque muchas funciones son excluyentes: no puede estar el husillo arrancando y parando a la vez en el mismo comando sin que la máquina se «rayes».

A diferencia del G-code, que está más estandarizado, los códigos M varían bastante entre fabricantes. El significado de M03 o M05 suele ser igual en casi todos, pero otros códigos (cambio de palet, pinza, ciclos especiales) pueden cambiar e incluso el formato (M3 vs M03) puede provocar errores si el control es estricto.

Códigos M más utilizados en CNC

Entre los M-code más frecuentes que vas a ver en programas CNC están:

  • M00 – Parada de programa: detiene la ejecución de forma controlada hasta que el operador pulse para continuar. Se usa para inspecciones, cambios manuales o intervenciones puntuales.
  • M02 / M30 – Fin de programa: indican que el programa ha finalizado. M30, en muchos controles, además de parar rebobina al inicio del programa para dejarlo listo.
  • M03 – Husillo en marcha (sentido horario): arranca el husillo en sentido de las agujas del reloj, normalmente acompañado de un valor S de RPM.
  • M04 – Husillo en marcha (sentido antihorario): igual que M03 pero girando en sentido opuesto, útil para ciertas operaciones o configuraciones especiales.
  • M05 – Parada de husillo: frena la rotación, paso necesario antes de cambiar herramienta o finalizar una operación de corte.
  • M06 – Cambio de herramienta: ordena a la máquina realizar un cambio automático a la herramienta indicada en T. Indispensable en centros de mecanizado con almacén de herramientas.
  • M08 – Refrigerante ON: enciende el sistema de refrigeración (chorro, lluvia, etc.) para mantener temperatura y mejorar el acabado superficial.
  • M09 – Refrigerante OFF: corta el flujo de refrigerante, muy utilizado justo antes de cambios de herramienta o al terminar la operación.

Aunque muchos de estos códigos se parecen de una máquina a otra, es obligatorio revisar el manual específico del control porque algunos M pueden tener funciones totalmente distintas según el fabricante.

G-code y M-code en impresión 3D FDM/FFF

En impresión 3D pasa algo muy curioso: aunque hablamos de una tecnología distinta, el corazón del control se basa en el mismo concepto de G-code y M-code que en CNC. El firmware de la impresora (Marlin, Klipper, RepRap, etc.) interpreta las líneas y mueve motores, calienta el hotend, enciende ventiladores o realiza nivelados de cama.

La impresora no entiende de STL, OBJ o mallas 3D; únicamente sabe que tiene que mover el cabezal a unas coordenadas, depositar material (extruir) y hacerlo a una cierta velocidad y temperatura. El slicer es el que traduce la geometría 3D a miles de líneas de G-code.

Un ejemplo simple de orden en una impresora sería algo como G0 X15, que desplaza el eje X 15 mm en la dirección positiva. Combinando X, Y, Z y E con comandos G0/G1 se consigue dibujar cada capa de la pieza sobre la cama.

Además del G-code que describe la pieza, los slicers generan siempre un código de inicio y de final (start G-code y end G-code) que se ejecuta antes y después de cada impresión. Estos scripts se repiten en todos los trabajos salvo que tú los cambies.

En el inicio se suele incluir homing (G28), calentamiento de cama y hotend (M140, M104, M109), nivelación automática si hay sensor, extrusión de una línea de purga, etc. Al terminar se apagan calentadores (M104 S0, M140 S0), motores (M84), ventiladores (M106 S0), y a veces se mueve el eje Z para alejar la pieza del hotend.

Por qué modificar el G-code de inicio y final en impresión 3D

Aunque la mayoría de slicers traen scripts por defecto bastante genéricos que funcionan con muchas impresoras, a menudo conviene personalizarlos para sacarles más partido. Algunas razones típicas son:

  • Añadir una secuencia de nivelación automática de cama si tu impresora tiene sensor.
  • Incluir líneas de purga previas para limpiar el extrusor y mejorar la adhesión de la primera capa.
  • Configurar sonidos o avisos al terminar la impresión.
  • Controlar mejor el enfriado del hotend y de la cama para evitar warping o goteos de filamento.
  • En impresoras sin EEPROM, reestablecer offsets de Z, parámetros de PID o ajustes que se pierden al apagar.
  Tesla facilitará la actualización gratuita a HW4 para coches con HW3 y FSD

En slicers como Cura es bastante sencillo: entras en la configuración de la impresora, abres los ajustes de máquina y verás dos cajas de texto para el start G-code y el end G-code. Ahí puedes editar, pegar fragmentos de código y adaptarlo a tu modelo concreto.

Comandos de G-code habituales en scripts de impresoras 3D

Algunos comandos que suelen aparecer en estos scripts (no programas completos) son:

  • G92 E0: resetea el extrusor a cero para que a partir de ahí las órdenes de extrusión sean relativas a ese punto.
  • G28: lleva todos los ejes a su origen (homing), imprescindible antes de comenzar a imprimir.
  • G1 X Y F E: combina movimiento en X/Y, avance F y extrusión E, normalmente para trazar líneas de purga o moverse a una posición concreta sobre la cama.
  • G1 Z: ajusta la altura del eje Z para evitar golpes del hotend contra la cama o contra la pieza acabada.
  • G1 F E: órdenes de retracción de filamento al terminar, para evitar goteos.
  • M106 S: configura la velocidad del ventilador de capa, desde 0 (apagado) hasta el máximo.
  • M104 S0 / M140 S0: apagan el extrusor y la cama al terminar el trabajo.
  • M84: desactiva todos los motores para que los ejes queden libres.

Junto con estos comandos, cada firmware añade sus propios códigos para nivelación de cama, pausas avanzadas, cambio de filamento, etc. Por eso es tan importante conocer qué entiende exactamente tu impresora.

Diferencias clave entre G-code y M-code

Aunque siempre aparecen juntos y se complementan, G-code y M-code tienen roles distintos dentro de la programación CNC y de impresión 3D. Podemos resumir sus diferencias en varios puntos:

  • Propósito: el G-code controla rutas de herramienta, posiciones, orientaciones y velocidades de avance. El M-code gestiona funciones auxiliares como husillos, refrigerantes, cambios de herramienta o finalización del programa.
  • Tipo de instrucción: el G-code es de naturaleza geométrica, dicta cómo se mueve la máquina; el M-code es operacional, se centra en estados de la máquina que no implican necesariamente movimiento.
  • Normalización: los códigos G están relativamente estandarizados en la industria, por lo que G00, G01, G02, etc. suelen significar lo mismo en distintas máquinas. En cambio, muchos M-code son más dependientes del fabricante y sus significados pueden cambiar.
  • Peso en la precisión: el G-code afecta directamente a la exactitud dimensional de la pieza; un G01 mal parametrizado puede arruinar un contorno. El M-code influye más de forma indirecta (por ejemplo, encender o no el refrigerante afecta a la estabilidad térmica y al acabado).
  • Complejidad: los bloques de G-code suelen ser más densos, con muchas coordenadas, radios y avances, mientras que los M-code tienden a ser más simples pero muy críticos para la seguridad y la secuencia.

En el fondo, se puede ver el programa como una orquesta donde el G-code marca las notas y la melodía, y el M-code decide cuándo entra cada instrumento, cuándo se hace silencio y cuándo se cierra el telón.

Otros comandos complementarios en programación CNC

Además de G y M, hay tres letras que son imprescindibles tanto en CNC como en impresión 3D: F, S y T. Estas no son códigos independientes, sino parámetros que acompañan a los movimientos o funciones:

  • F (Feed): define la velocidad de avance, por ejemplo en mm/min o mm/vuelta según esté activo G94 o G95 (o G99 en algunos controles). Un F demasiado alto rompe herramientas; demasiado bajo penaliza tiempos de ciclo y puede generar malos acabados.
  • S (Spindle speed): indica la velocidad del husillo en RPM cuando se combina con M03 o M04. También puede representar otras velocidades en ciertos contextos.
  • T (Tool): selecciona la herramienta que se utilizará en el cambio de herramienta M06, siendo crítico que coincida con la posición real de la herramienta en el almacén.

Un ejemplo de movimiento en CNC podría ser G01 X-100. Y-50. Z35. F10, que ordena un desplazamiento lineal con avance de 10 unidades por minuto (según el sistema). Si añadimos M03 S3000, estaríamos indicando que a esa posición queremos el husillo girando a 3000 RPM en sentido horario.