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.
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.
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 :
steps/mm configurés) pour atteindre la position demandée, à la vitesse indiquée par F.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.
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.
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 / format | Comparaison 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é.
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ètre | Signification |
|---|---|
G1 | Commande : déplacement linéaire |
X50 Y50 | Position cible sur les axes X et Y (en mm) |
Z0.2 | Hauteur de la tête (souvent la hauteur de couche) |
F1500 | Vitesse de déplacement (feedrate), en mm/min |
E5.2 | Longueur 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
| Commande | Description |
|---|---|
G0 | Déplacement rapide (sans extrusion, vitesse maximale) |
G1 | Déplacement linéaire contrôlé (avec ou sans extrusion) |
G2 | Arc horaire (utilisé surtout en CNC et pour certains contours) |
G3 | Arc antihoraire |
G28 | Retour à l'origine (homing) — sans paramètre, sur tous les axes |
G90 | Mode de positionnement absolu — les coordonnées sont mesurées depuis l'origine |
G91 | Mode de positionnement relatif — les coordonnées sont mesurées depuis la position actuelle |
G92 | Redéfinir la position actuelle sans déplacer la machine (ex : remettre E à 0) |
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.| Commande | Description |
|---|---|
G20 | Unités en pouces |
G21 | Unités en millimètres (par défaut sur la grande majorité des imprimantes 3D) |
M82 | Extrusion en mode absolu |
M83 | Extrusion en mode relatif |
M92 | Définir les pas par mm (steps/mm) pour chaque axe |
M203 | Définir la vitesse maximale par axe |
M84 | Désactiver les moteurs pas-à-pas |
| Commande | Description |
|---|---|
M104 S200 | Chauffer la buse à 200°C sans attendre (la machine continue d'exécuter les lignes suivantes) |
M109 S200 | Chauffer la buse à 200°C et attendre que la température soit atteinte avant de continuer |
M140 S60 | Chauffer le plateau à 60°C sans attendre |
M190 S60 | Chauffer le plateau à 60°C et attendre |
G10 / G11 | Rétraction et dé-rétraction du filament (firmware retract) |
| Commande | Description |
|---|---|
M106 S255 | Allumer le ventilateur de refroidissement à pleine vitesse (0-255) |
M107 | Éteindre le ventilateur de refroidissement |
M18 / M84 | Désactiver les moteurs pas-à-pas (libère les axes) |
M112 | Arrêt d'urgence — coupe immédiatement tout |
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
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.
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 :
| Commande | Description |
|---|---|
M3 S12000 | Démarrer la broche (spindle) en rotation horaire, à 12000 tr/min |
M5 | Arrêter la broche |
G17 / G18 / G19 | Choix du plan de travail (XY, XZ ou YZ) pour les arcs et le compensation d'outil |
G43 | Compensation de longueur d'outil |
G54 | Sé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.
Le G-code est utilisé bien au-delà de l'atelier amateur — c'est le langage de fond de l'industrie manufacturière moderne :
| Secteur | Usage typique |
|---|---|
| Automobile et aérospatiale | Usinage de pièces de précision, moules et outillages en série ou en petite série. |
| Ameublement sur mesure | Découpe et fraisage de panneaux, gravure de motifs personnalisés. |
| Dispositifs médicaux | Usinage de pièces à tolérances très serrées (implants, instruments). |
| Prototypage rapide | Impression 3D et usinage de petites séries pour valider un design avant production. |
| Atelier personnel / maker | Impression 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.
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.
Quelques erreurs reviennent très souvent, que ce soit en impression 3D ou en CNC :
G91 (relatif) et continuer à donner des coordonnées comme si on était en G90 (absolu), ce qui provoque des déplacements imprévus.M3 (démarrage broche) avant une passe d'usinage, ou en impression 3D, oublier G28 (homing) avant de commencer.G20 (pouces) actif par erreur alors que le reste du programme est pensé en millimètres.Pour l'éviter :
;) pour se rappeler pourquoi chaque ligne existe.| Symptôme | Cause probable | Piste de solution |
|---|---|---|
| La machine s'arrête avec une erreur au démarrage | Erreur 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ée | Coordonné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ée | Commande non supportée par ce firmware/contrôleur | Vé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 montage | Trajectoire d'outil mal planifiée ou hauteur Z incorrecte | Simuler 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.
Une fois les bases maîtrisées, quelques notions permettent d'aller plus loin :
G0) inutiles, ce qui diminue le temps total d'impression ou d'usinage sans changer le résultat final.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).
| Code | Nom | Syntaxe | Description |
|---|---|---|---|
G0 | Déplacement rapide | G0 X10 Y10 Z5 | Déplace la tête à la vitesse maximale, sans extrusion (impression 3D) ni usinage (CNC). |
G1 | Déplacement linéaire | G1 X10 Y10 F1500 E2 | Déplacement en ligne droite à une vitesse contrôlée (F), avec extrusion optionnelle (E). |
G2 | Arc horaire | G2 X10 Y10 I5 J0 | Trace un arc de cercle dans le sens horaire, I/J définissant le centre relatif. |
G3 | Arc antihoraire | G3 X10 Y10 I5 J0 | Identique à G2 mais dans le sens antihoraire. |
G4 | Pause (dwell) | G4 P500 | Marque une pause de P millisecondes (ou S secondes) avant la ligne suivante. |
G10 | Rétraction | G10 | Rétracte le filament (retrait firmware), utilisé pour éviter le suintement. |
G11 | Dé-rétraction | G11 | Ramène le filament rétracté (opération inverse de G10). |
G17 / G18 / G19 | Plan de travail | G17 | Sélectionne le plan XY (G17), XZ (G18) ou YZ (G19), utilisé surtout pour les arcs en CNC. |
G20 | Unités impériales | G20 | Passe les coordonnées en pouces. |
G21 | Unités métriques | G21 | Passe les coordonnées en millimètres (par défaut sur la plupart des machines). |
G28 | Retour à l'origine | G28 ou G28 X Y | Effectue le homing sur tous les axes, ou seulement ceux listés. |
G29 | Nivellement automatique | G29 | Lance une routine de mesure du plateau (bed leveling), selon la sonde installée. |
G30 | Sonde simple point | G30 | Mesure la hauteur à la position actuelle avec la sonde de nivellement. |
G32 / G33 | Calibration delta | G33 | Lance l'auto-calibration sur les imprimantes de type delta. |
G43 | Compensation de longueur d'outil | G43 H1 | Applique un décalage de longueur pour l'outil sélectionné (CNC). |
G54–G59 | Systèmes de coordonnées pièce | G54 | Sélectionne un des six systèmes de coordonnées enregistrés (work offsets), utilisé en CNC. |
G80 | Annuler cycle fixe | G80 | Annule un cycle de perçage ou taraudage actif (CNC). |
G90 | Positionnement absolu | G90 | Les coordonnées X/Y/Z sont mesurées depuis l'origine. |
G91 | Positionnement relatif | G91 | Les coordonnées sont mesurées depuis la position actuelle. |
G92 | Redéfinir la position | G92 E0 | Redéfinit une coordonnée sans déplacer la machine — souvent utilisé pour remettre l'extrudeur à zéro. |
G94 | Mode d'avance par minute | G94 | La vitesse F est interprétée en unités par minute (mode par défaut). |
| Code | Nom | Syntaxe | Description |
|---|---|---|---|
M0 / M1 | Pause programme | M0 | Met le programme en pause jusqu'à une action de l'utilisateur. |
M2 / M30 | Fin de programme | M30 | Signale la fin du fichier G-code. |
M3 | Broche sens horaire | M3 S12000 | Démarre la broche CNC en rotation horaire à la vitesse S (tr/min). |
M5 | Arrêt broche | M5 | Arrête la rotation de la broche (CNC). |
M6 | Changement d'outil | M6 T1 | Lance une routine de changement vers l'outil T1 (CNC). |
M17 | Activer moteurs | M17 | Active (alimente) les moteurs pas-à-pas. |
M18 / M84 | Désactiver moteurs | M84 | Coupe l'alimentation des moteurs, qui peuvent alors être déplacés à la main. |
M82 | Extrusion absolue | M82 | Le paramètre E est mesuré depuis le début de l'impression. |
M83 | Extrusion relative | M83 | Le paramètre E est mesuré depuis la position actuelle (mode recommandé par la plupart des slicers). |
M92 | Pas par mm | M92 X80 Y80 Z400 E93 | Définit le nombre de pas moteur par mm de déplacement, pour chaque axe. |
M104 | Chauffer la buse (sans attendre) | M104 S200 | Lance le chauffage de la buse à S°C, la machine continue d'exécuter les lignes suivantes. |
M105 | Lire les températures | M105 | Renvoie les températures actuelles de la buse et du plateau. |
M106 | Ventilateur ON | M106 S255 | Allume le ventilateur de refroidissement, vitesse de 0 à 255. |
M107 | Ventilateur OFF | M107 | Éteint le ventilateur de refroidissement. |
M109 | Chauffer la buse (avec attente) | M109 S200 | Chauffe la buse à S°C et attend que la température soit atteinte avant de continuer. |
M110 | Définir le numéro de ligne | M110 N0 | Réinitialise le compteur de lignes, utilisé pour la vérification d'intégrité (checksum). |
M112 | Arrêt d'urgence | M112 | Coupe immédiatement tous les moteurs et chauffages. |
M114 | Position actuelle | M114 | Renvoie la position actuelle de chaque axe. |
M115 | Infos firmware | M115 | Renvoie la version et les capacités du firmware. |
M117 | Message écran | M117 Impression en cours | Affiche un message sur l'écran LCD de la machine. |
M140 | Chauffer le plateau (sans attendre) | M140 S60 | Lance le chauffage du plateau à S°C sans attendre. |
M141 | Chauffer la chambre | M141 S40 | Chauffe la chambre d'impression, sur les machines équipées. |
M190 | Chauffer le plateau (avec attente) | M190 S60 | Chauffe le plateau à S°C et attend avant de continuer. |
M203 | Vitesse max par axe | M203 X500 Y500 | Définit la vitesse maximale (mm/s) pour chaque axe. |
M204 | Accélération | M204 P1000 | Définit l'accélération pour les déplacements avec impression (P) et sans (T). |
M205 | Jerk / vitesse de jonction | M205 X8 Y8 | Définit le changement de vitesse instantané autorisé entre deux segments. |
M220 | Vitesse globale | M220 S100 | Ajuste la vitesse d'impression en pourcentage de la valeur programmée. |
M221 | Débit d'extrusion | M221 S100 | Ajuste le débit d'extrusion en pourcentage (flow rate). |
M600 | Changement de filament | M600 | Met l'impression en pause et lance la routine de changement de filament. |
M900 | Avance linéaire | M900 K0.06 | Dé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.
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.