Guide complet pour comprendre le G-code : la langue commune des imprimantes 3D et des machines CNC. De la structure d'une ligne aux commandes les plus utilisées, avec des exemples concrets.

Qu'est-ce que le G-code ?

Le G-code (aussi appelé RS-274) est le langage utilisé pour piloter des machines à commande numérique : imprimantes 3D, fraiseuses CNC, découpeuses laser. Chaque ligne est une instruction simple — se déplacer ici, chauffer à telle température, extruder tant de filament — que le firmware de la machine (Marlin, Klipper, GRBL, etc.) exécute une à une, dans l'ordre.

Un fichier G-code n'est presque jamais écrit à la main en entier : un logiciel de tranchage (slicer) comme Cura, PrusaSlicer ou Orca Slicer transforme un modèle 3D en milliers de lignes de G-code. Mais comprendre ces lignes est très utile pour dépanner une impression, ajuster un réglage fin ou écrire des scripts de démarrage/arrêt personnalisés.

Comment fonctionne le G-code ?

Le principe est le même partout : la machine possède un contrôleur (une carte électronique avec un microcontrôleur) qui lit le fichier G-code ligne par ligne, dans l'ordre, comme une recette de cuisine. Chaque ligne déclenche une action précise avant de passer à la suivante :

  1. Le contrôleur lit une ligne et l'interprète (quelle commande, quels paramètres).
  2. Il traduit cette commande en signaux électriques pour les moteurs pas-à-pas, les éléments chauffants ou d'autres actionneurs.
  3. Les moteurs se déplacent au nombre de pas calculé (déterminé par les steps/mm configurés) pour atteindre la position demandée, à la vitesse indiquée par F.
  4. Une fois l'action terminée (ou immédiatement pour certaines commandes), le contrôleur passe à la ligne suivante.

Le G-code lui-même ne « sait » rien de la géométrie de la pièce : c'est une suite plate d'instructions de bas niveau. Toute l'intelligence (calcul de trajectoire, gestion du remplissage, évitement de collisions) est faite en amont par le slicer ou le logiciel de CAO, avant même que la machine ne reçoive le fichier.

Conception Modèle CAD (STL, STEP) Slicer / CAO Calcul des trajectoires Fichier G-code Suite d'instructions .gcode Machine Firmware + moteurs

Origine et histoire du G-code

Le G-code trouve ses racines dans les débuts de la commande numérique (CN / NC en anglais), dans les années 1950. Le John T. Parsons Company et le laboratoire de servomécanismes du MIT ont développé les premières machines-outils à commande numérique au début des années 1950, avec une démonstration publique d'une fraiseuse pilotée par un programme perforé en 1952. C'est souvent ce projet qui est cité comme le point de départ de l'usinage à commande numérique moderne.

Le langage utilisé pour programmer ces premières machines s'appelait APT (Automatically Programmed Tools), également développé au MIT dans la même période. Le G-code tel qu'on le connaît aujourd'hui découle de cette lignée : il a été formalisé et standardisé aux États-Unis sous le nom EIA RS-274 par l'association Electronic Industries Alliance, avec une révision majeure (RS-274-D) publiée en 1979. Une version internationale a ensuite été normalisée par l'ISO sous la référence ISO 6983.

Avec la démocratisation de l'impression 3D grand public dans les années 2000-2010 (portée notamment par le projet open-source RepRap), le G-code — jusque-là surtout utilisé en usinage industriel — a été repris et adapté pour piloter des imprimantes 3D FDM, avec l'ajout de commandes propres à l'extrusion (comme le paramètre E) qui n'existaient pas dans le G-code d'usinage original.

Comparer avec d'autres langages et formats

Le G-code n'est pas la seule façon de piloter une machine-outil. Voici les principales alternatives et comment elles se comparent :

Langage / formatComparaison avec le G-code
APT
(Automatically Programmed Tools)
Le prédécesseur direct du G-code, développé au MIT dans les années 1950. Plus orienté « décrire la géométrie et laisser le système calculer la trajectoire » plutôt que d'indiquer chaque mouvement ligne par ligne. Largement remplacé par le G-code depuis les années 1970-80.
STEP-NC
(ISO 14649)
Un format plus moderne, orienté objet, pensé pour décrire des opérations d'usinage complètes (« percer ce trou », « fraiser cette poche ») plutôt que des mouvements bruts. Il vise à remplacer le G-code dans l'industrie, mais son adoption reste limitée face à l'omniprésence du G-code existant.
Langages conversationnels
(ex : Mazatrol, Heidenhain)
Langages propriétaires intégrés à certaines commandes machines, où l'opérateur décrit l'opération via un menu guidé plutôt que d'écrire du code. Plus simples à utiliser directement sur la machine, mais moins portables d'une marque à l'autre — contrairement au G-code qui reste largement compatible entre machines.
Fichiers de configuration/macros
(ex : Klipper)
Klipper ne remplace pas le G-code : il continue de recevoir des commandes G-code standards, mais délègue les calculs de trajectoire complexes à un ordinateur externe (comme un Raspberry Pi) plutôt qu'au microcontrôleur seul, et permet de définir des macros G-code personnalisées.

Malgré l'existence d'alternatives plus modernes, le G-code reste le standard de facto en 2026, principalement parce qu'il est simple, largement documenté, et supporté par pratiquement tous les firmwares et logiciels du marché.

Structure d'une ligne

Une ligne de G-code est composée d'une commande suivie de paramètres, chacun étant une lettre suivie d'un nombre :

G1 X50 Y50 Z0.2 F1500 E5.2
ParamètreSignification
G1Commande : déplacement linéaire
X50 Y50Position cible sur les axes X et Y (en mm)
Z0.2Hauteur de la tête (souvent la hauteur de couche)
F1500Vitesse de déplacement (feedrate), en mm/min
E5.2Longueur de filament extrudé depuis le début (en mm)

Les commentaires commencent par un point-virgule ; et sont ignorés par la machine :

G1 X50 Y50 ; deplacement vers le coin de la piece

Commandes de déplacement

CommandeDescription
G0Déplacement rapide (sans extrusion, vitesse maximale)
G1Déplacement linéaire contrôlé (avec ou sans extrusion)
G2Arc horaire (utilisé surtout en CNC et pour certains contours)
G3Arc antihoraire
G28Retour à l'origine (homing) — sans paramètre, sur tous les axes
G90Mode de positionnement absolu — les coordonnées sont mesurées depuis l'origine
G91Mode de positionnement relatif — les coordonnées sont mesurées depuis la position actuelle
G92Redéfinir la position actuelle sans déplacer la machine (ex : remettre E à 0)
Astuce : la plupart des slicers utilisent G90 pour les axes X/Y/Z (positionnement absolu) mais M83 pour l'extrudeur (extrusion relative), afin de simplifier les calculs de longueur de filament.

Configuration et unités

CommandeDescription
G20Unités en pouces
G21Unités en millimètres (par défaut sur la grande majorité des imprimantes 3D)
M82Extrusion en mode absolu
M83Extrusion en mode relatif
M92Définir les pas par mm (steps/mm) pour chaque axe
M203Définir la vitesse maximale par axe
M84Désactiver les moteurs pas-à-pas

Température et extrusion

CommandeDescription
M104 S200Chauffer la buse à 200°C sans attendre (la machine continue d'exécuter les lignes suivantes)
M109 S200Chauffer la buse à 200°C et attendre que la température soit atteinte avant de continuer
M140 S60Chauffer le plateau à 60°C sans attendre
M190 S60Chauffer le plateau à 60°C et attendre
G10 / G11Rétraction et dé-rétraction du filament (firmware retract)

Ventilateur et moteurs

CommandeDescription
M106 S255Allumer le ventilateur de refroidissement à pleine vitesse (0-255)
M107Éteindre le ventilateur de refroidissement
M18 / M84Désactiver les moteurs pas-à-pas (libère les axes)
M112Arrêt d'urgence — coupe immédiatement tout

Exemple annoté

Voici un extrait simplifié de début de fichier G-code généré par un slicer, avec des commentaires explicatifs :

G21             ; unites en millimetres
G90             ; positionnement absolu pour X/Y/Z
M83             ; extrusion en mode relatif
G28             ; retour a l'origine (homing) sur tous les axes
M104 S210       ; commence a chauffer la buse a 210 C (sans attendre)
M140 S60        ; commence a chauffer le plateau a 60 C (sans attendre)
M109 S210       ; attend que la buse atteigne 210 C
M190 S60        ; attend que le plateau atteigne 60 C
G1 Z0.2 F300    ; leve legerement la buse
G1 X10 Y10 F3000 ; deplacement rapide vers le point de depart
G1 X100 Y10 E5 F1200 ; trace une ligne en extrudant du filament
M106 S255       ; allume le ventilateur de refroidissement
...
M107            ; eteint le ventilateur en fin d'impression
G1 Z10 F300     ; leve la buse pour degager la piece
G28 X Y         ; retour a l'origine sur X et Y
M104 S0         ; eteint le chauffage de la buse
M140 S0         ; eteint le chauffage du plateau
M84             ; desactive les moteurs

Démo interactive : construisez votre G-code

Assemblez des blocs de commandes ci-dessous pour construire un petit programme G-code, et voyez le tracé apparaître en temps réel sur le plan cartésien. Cliquez sur un bloc pour l'ajouter au programme, ajustez ses paramètres, puis réordonnez ou supprimez-le au besoin.

G0 (rapide, sans trace)   G1/G2/G3 (trace)

G-code pour le fraisage CNC

Le G-code utilisé en fraisage CNC partage la même base que celui des imprimantes 3D (G0, G1, G2, G3, G28, G90/G91), mais ajoute des commandes propres à l'usinage :

CommandeDescription
M3 S12000Démarrer la broche (spindle) en rotation horaire, à 12000 tr/min
M5Arrêter la broche
G17 / G18 / G19Choix du plan de travail (XY, XZ ou YZ) pour les arcs et le compensation d'outil
G43Compensation de longueur d'outil
G54Sélection du système de coordonnées de la pièce (work offset)

Contrairement à l'impression 3D où le G-code décrit un dépôt de matière couche par couche, le G-code CNC décrit un retrait de matière — la vitesse d'avance, la profondeur de passe et la vitesse de broche doivent être adaptées au matériau usiné pour éviter de casser l'outil ou de brûler la pièce.

Applications pratiques

Le G-code est utilisé bien au-delà de l'atelier amateur — c'est le langage de fond de l'industrie manufacturière moderne :

SecteurUsage typique
Automobile et aérospatialeUsinage de pièces de précision, moules et outillages en série ou en petite série.
Ameublement sur mesureDécoupe et fraisage de panneaux, gravure de motifs personnalisés.
Dispositifs médicauxUsinage de pièces à tolérances très serrées (implants, instruments).
Prototypage rapideImpression 3D et usinage de petites séries pour valider un design avant production.
Atelier personnel / makerImpression 3D, CNC de bureau, découpe laser pour projets personnels et petites entreprises.

Dans tous ces contextes, le G-code influence directement la précision, la vitesse et l'efficacité de fabrication : une trajectoire mal optimisée ou des paramètres d'avance inadaptés se traduisent directement par une pièce plus longue à produire, moins précise, ou par une usure prématurée de l'outil.

Générer et lire du G-code

Pour l'impression 3D, le G-code est presque toujours généré automatiquement par un slicer à partir d'un fichier STL ou 3MF. Les réglages du slicer (hauteur de couche, vitesse, température, remplissage) déterminent directement le contenu du fichier G-code produit.

Pour la CNC, le G-code provient généralement d'un logiciel de CAO (conception assistée par ordinateur) qui calcule les trajectoires d'outil à partir d'un modèle 3D ou d'un dessin 2D.

Dans les deux cas, il est possible d'ouvrir un fichier G-code dans un éditeur de texte simple pour l'inspecter ou le modifier manuellement — utile pour ajouter un script de démarrage personnalisé, corriger une température, ou déboguer un problème d'impression.

Bonnes pratiques et erreurs courantes

Quelques erreurs reviennent très souvent, que ce soit en impression 3D ou en CNC :

  • Mélanger les modes de positionnement — oublier qu'on est passé en G91 (relatif) et continuer à donner des coordonnées comme si on était en G90 (absolu), ce qui provoque des déplacements imprévus.
  • Omettre une commande essentielle — en CNC, oublier M3 (démarrage broche) avant une passe d'usinage, ou en impression 3D, oublier G28 (homing) avant de commencer.
  • Ignorer les limites physiques de la machine — programmer une position ou une vitesse hors des capacités réelles des axes, ce qui peut causer un décrochage moteur ou une collision.
  • Ne pas remettre les unités à zéro — laisser G20 (pouces) actif par erreur alors que le reste du programme est pensé en millimètres.

Pour l'éviter :

  • Générer le G-code via un slicer ou un logiciel de CAO plutôt que de l'écrire entièrement à la main.
  • Toujours simuler ou visualiser le parcours avant de lancer une impression ou un usinage réel (la plupart des slickers et interfaces machine offrent un aperçu 3D du trajet).
  • Tester sur une pièce ou un matériau bon marché avant de lancer une production finale.
  • Garder les scripts de démarrage/arrêt courts et documentés avec des commentaires (;) pour se rappeler pourquoi chaque ligne existe.

Dépannage

SymptômeCause probablePiste de solution
La machine s'arrête avec une erreur au démarrageErreur de syntaxe (paramètre manquant, caractère invalide)Relire la ligne indiquée par le message d'erreur ligne par ligne.
La pièce est décalée ou mal positionnéeCoordonnées incorrectes ou mode absolu/relatif inverséVérifier la présence de G90/G91 et l'origine définie par G28 ou G54.
« Commande inconnue » ou ignoréeCommande non supportée par ce firmware/contrôleurVérifier la documentation du firmware (Marlin, Klipper, GRBL, contrôleur industriel) pour confirmer que la commande existe.
Collision entre l'outil et la pièce ou le montageTrajectoire d'outil mal planifiée ou hauteur Z incorrecteSimuler le parcours avant exécution, vérifier les hauteurs de sécurité (Z) entre les déplacements.

Pour les cas complexes (multi-broches, machines industrielles propriétaires), une vérification par un technicien ou un formateur spécialisé reste souvent la solution la plus rapide.

Sujets avancés

Une fois les bases maîtrisées, quelques notions permettent d'aller plus loin :

  • Macros et sous-programmes — regrouper une séquence de commandes répétée (ex : un cycle de changement de filament, une routine de sondage) sous un nom réutilisable, pour éviter de dupliquer le même bloc de code partout.
  • Optimisation des trajectoires — réduire le nombre et la longueur des déplacements rapides (G0) inutiles, ce qui diminue le temps total d'impression ou d'usinage sans changer le résultat final.
  • Dialectes propres à chaque marque — les contrôleurs industriels (Fanuc, Haas, Siemens) et les firmwares grand public (Marlin, Klipper, GRBL) partagent le cœur du G-code standard mais ajoutent chacun des commandes ou variantes propriétaires. Un fichier G-code écrit pour l'un n'est pas toujours directement compatible avec l'autre.

Tableau de référence complet

Voici la liste des commandes G-code et M-code les plus courantes, avec leur syntaxe et leur signification. Ce tableau couvre le G-code standard utilisé en impression 3D (Marlin/Klipper) et en usinage CNC (GRBL et équivalents).

Codes G — mouvements et modes

CodeNomSyntaxeDescription
G0Déplacement rapideG0 X10 Y10 Z5Déplace la tête à la vitesse maximale, sans extrusion (impression 3D) ni usinage (CNC).
G1Déplacement linéaireG1 X10 Y10 F1500 E2Déplacement en ligne droite à une vitesse contrôlée (F), avec extrusion optionnelle (E).
G2Arc horaireG2 X10 Y10 I5 J0Trace un arc de cercle dans le sens horaire, I/J définissant le centre relatif.
G3Arc antihoraireG3 X10 Y10 I5 J0Identique à G2 mais dans le sens antihoraire.
G4Pause (dwell)G4 P500Marque une pause de P millisecondes (ou S secondes) avant la ligne suivante.
G10RétractionG10Rétracte le filament (retrait firmware), utilisé pour éviter le suintement.
G11Dé-rétractionG11Ramène le filament rétracté (opération inverse de G10).
G17 / G18 / G19Plan de travailG17Sélectionne le plan XY (G17), XZ (G18) ou YZ (G19), utilisé surtout pour les arcs en CNC.
G20Unités impérialesG20Passe les coordonnées en pouces.
G21Unités métriquesG21Passe les coordonnées en millimètres (par défaut sur la plupart des machines).
G28Retour à l'origineG28 ou G28 X YEffectue le homing sur tous les axes, ou seulement ceux listés.
G29Nivellement automatiqueG29Lance une routine de mesure du plateau (bed leveling), selon la sonde installée.
G30Sonde simple pointG30Mesure la hauteur à la position actuelle avec la sonde de nivellement.
G32 / G33Calibration deltaG33Lance l'auto-calibration sur les imprimantes de type delta.
G43Compensation de longueur d'outilG43 H1Applique un décalage de longueur pour l'outil sélectionné (CNC).
G54–G59Systèmes de coordonnées pièceG54Sélectionne un des six systèmes de coordonnées enregistrés (work offsets), utilisé en CNC.
G80Annuler cycle fixeG80Annule un cycle de perçage ou taraudage actif (CNC).
G90Positionnement absoluG90Les coordonnées X/Y/Z sont mesurées depuis l'origine.
G91Positionnement relatifG91Les coordonnées sont mesurées depuis la position actuelle.
G92Redéfinir la positionG92 E0Redéfinit une coordonnée sans déplacer la machine — souvent utilisé pour remettre l'extrudeur à zéro.
G94Mode d'avance par minuteG94La vitesse F est interprétée en unités par minute (mode par défaut).

Codes M — actions machine

CodeNomSyntaxeDescription
M0 / M1Pause programmeM0Met le programme en pause jusqu'à une action de l'utilisateur.
M2 / M30Fin de programmeM30Signale la fin du fichier G-code.
M3Broche sens horaireM3 S12000Démarre la broche CNC en rotation horaire à la vitesse S (tr/min).
M5Arrêt brocheM5Arrête la rotation de la broche (CNC).
M6Changement d'outilM6 T1Lance une routine de changement vers l'outil T1 (CNC).
M17Activer moteursM17Active (alimente) les moteurs pas-à-pas.
M18 / M84Désactiver moteursM84Coupe l'alimentation des moteurs, qui peuvent alors être déplacés à la main.
M82Extrusion absolueM82Le paramètre E est mesuré depuis le début de l'impression.
M83Extrusion relativeM83Le paramètre E est mesuré depuis la position actuelle (mode recommandé par la plupart des slicers).
M92Pas par mmM92 X80 Y80 Z400 E93Définit le nombre de pas moteur par mm de déplacement, pour chaque axe.
M104Chauffer la buse (sans attendre)M104 S200Lance le chauffage de la buse à S°C, la machine continue d'exécuter les lignes suivantes.
M105Lire les températuresM105Renvoie les températures actuelles de la buse et du plateau.
M106Ventilateur ONM106 S255Allume le ventilateur de refroidissement, vitesse de 0 à 255.
M107Ventilateur OFFM107Éteint le ventilateur de refroidissement.
M109Chauffer la buse (avec attente)M109 S200Chauffe la buse à S°C et attend que la température soit atteinte avant de continuer.
M110Définir le numéro de ligneM110 N0Réinitialise le compteur de lignes, utilisé pour la vérification d'intégrité (checksum).
M112Arrêt d'urgenceM112Coupe immédiatement tous les moteurs et chauffages.
M114Position actuelleM114Renvoie la position actuelle de chaque axe.
M115Infos firmwareM115Renvoie la version et les capacités du firmware.
M117Message écranM117 Impression en coursAffiche un message sur l'écran LCD de la machine.
M140Chauffer le plateau (sans attendre)M140 S60Lance le chauffage du plateau à S°C sans attendre.
M141Chauffer la chambreM141 S40Chauffe la chambre d'impression, sur les machines équipées.
M190Chauffer le plateau (avec attente)M190 S60Chauffe le plateau à S°C et attend avant de continuer.
M203Vitesse max par axeM203 X500 Y500Définit la vitesse maximale (mm/s) pour chaque axe.
M204AccélérationM204 P1000Définit l'accélération pour les déplacements avec impression (P) et sans (T).
M205Jerk / vitesse de jonctionM205 X8 Y8Définit le changement de vitesse instantané autorisé entre deux segments.
M220Vitesse globaleM220 S100Ajuste la vitesse d'impression en pourcentage de la valeur programmée.
M221Débit d'extrusionM221 S100Ajuste le débit d'extrusion en pourcentage (flow rate).
M600Changement de filamentM600Met l'impression en pause et lance la routine de changement de filament.
M900Avance linéaireM900 K0.06Définit le facteur de compensation de pression (linear advance), propre à Marlin.

Les commandes présentées ici couvrent le G-code standard utilisé par la plupart des firmwares grand public (Marlin, Klipper, GRBL). Certaines commandes ou paramètres peuvent varier légèrement d'un firmware ou d'une machine à l'autre — se référer à la documentation du firmware spécifique pour les cas particuliers.

Suivre les derniers développements

Inscrivez-vous dès maintenant pour ne rien manquer ! Recevez en exclusivité toutes les nouveautés, avancées de projets et informations importantes directement dans votre boîte mail.

S'inscrire →