GCODE-la syntaxe

le GCODE est un langage informatique a syntaxe simple. il est composé d’une succession de ligne de programme comportant des commandes qui décrivent des actions  a effectuer sur la base d’un code  a partir de lettres et de chiffres.

on distingue plusieurs type de commandes dont voici les principales lettres de codage:

  • les commandes de type G =>  liées a des fonctions préparatoires : en général des consignes de déplacements (linéaires, circulaires)
  • les commandes de type X/Y/Z/A/B/C=> liées aux coordonnées des déplacements sur les axes concernés
  • les commandes de type M=>  liées a des consignes spécifiques des machines( démarrage et arrêt de broches, lubrifications, etc..)
  • les commandes de type T=> liées aux outils ( Tools en anglais )
  • les commandes de type S=>  liées aux vitesses de rotation (Speed en anglais )
  • les commandes de type F=> liées aux vitesses de déplacemnt (Feed en anglais )

prenons un exemple très simple:

G00 X10 Y20  =>  cette ligne de programme  demande d’avancer en ligne droite en mode rapide (G00), jusqu’au point de coordonnée X10 et Y20.

LES TYPES DE DEPLACEMENTS

le GCODE ne connais que 2 type de déplacement :

  • le déplacement linéaire  (en ligne droite d’un point a un autre) avec 2 syntaxes de base:
    1. G00: déplacement linéaire en avance rapide
    2. G01:  déplacement a vitesse lente paramétrée ( valeur a définir dans le programme)

 

  • le déplacement circulaire ( arc de cercle d’un point a un autre) avec également 2 syntaxes de base:
    1. G02: déplacement circulaire dans le sens horaire (ClockWise en anglais)
    2. G03: déplacement circulaire dans le sens antihoraire (CounterClockWise en anglais)

LES AXES DE DEPLACEMENTS

en plus des axes classiques X-Y-Z du repère cartésien, le G CODE sait commander  des axes supplémentaires ce sont les axes A-B-C qui en général sont des axes “tournants” ( indexeurs ou plateaux tournants).

il existe egalement des axes U-V-W souvent utilisés par des portiques , des tourelles porte outils, etc ..

LES VITESSES

pour fixer une vitesse d’avance, on utilise la lettre F suivie d’un nombre qui caractérise la vitesse en mm/mn (millimetres par minutes) .

pour fixer une vitesse de rotation broche, on utilise la lettre S suivie d’un nombre qui caractérise la vitesse de rotation en Tr/mn (tours par minutes) .

 

EXEMPLES :

sur le principe de ces concepts de base, prenons un exemple:

G01 F300 X25 Y55 Z12 

si l’on prend dans l’ordre les consignes ont pourrait remplacer chaque code par du texte en francais:

GO1: avance en ligne droite  a vitesse  parametrée

F300: vitesse d’avance de 300 mm/mn

X25 Y55 Z12 : jusqu’au point de coordonnées X=25mm, Y=55mm et Z=12mm

traduit en bon francais cela donnerait donc la consigne suivante:: ” avance en ligne droite a la vitesse de 300 mm/mn en direction du point de coordonnées x25mm – y55mm – z12mm”

c’est en empilant ce type de lignes de code que l’on va faire exécuter une trajectoire complexe a l’outil.

exemple de trajectoire: partant du principe que l’outil est positionné au point d’origine (0,0), pour réaliser la trajectoire ci dessous a une vitesse d’avance fixe de 300 mm/mn:

voici le GCODE correspondant:

les concepteurs du GCODE ont fait en sorte de rendre l’écriture des programmes la plus simple possible. ils ont donc fait en sorte d’eviter de devoir écrire systématiquement les redondances , par exemple , il n’est pas nécessaire de répéter systématiquement le F300 dans chaque ligne . il suffit de le prendre comme une consigne simple et en écrivant le programme comme suit on obtient le même résultat:

 une fois la vitesse d’avance fixée a 300 mm/mn , plus besoin de le repréciser tant que la vitesse n’a pas besoin d’être changée.

pour faciliter la lecture  d’un programme, on peut numéroter les lignes de programme. la numérotation utilisée pour les lignes sera du type Nxx. de façon a pouvoir éventuellement intercaler des instruction ultérieurement sans devoir changer les numéros des lignes, on prends l’habitude de numéroter de 10 en 10. ainsi l’exemple précédent devient:

autre point important , comme pour le F300 , on peut eviter de répéter les coordonnées des axes qui ne changent pas . dans l’exemple ci dessous , vous constater que rien n’est jamais précisé concernant Z . cela veut dire que le Z ne bouge pas jusqu’a ce qu’une ligne de programme avec une valeur Z soit rencontrée.

de la même façon un code G qui ne change pas , ici le code G01 a chaque ligne, n’a pas besoin d’être répété. on pourrait ainsi simplifier l’écriture de l’exemple ainsi :

en effet , une fois le G01 rencontré en ligne 20 , plus besoin de le repeter en ligne 30 -40 – 50 et 60 . l’interpréteur GCODE sait qu’il faut continuer a appliquer un G01.

commentaires dans un programme=> comme pour un programme informatique, il peut etre necessaire de commenter un programme GCODE, pour cela il suffit de rajouter le commentaire entre parenthese soit en fin de ligne d’une ligne de commande pour commenter cette ligne de commande soit seul sur une ligne pour annoncer un bloc de programme. les caracteres ainsi transcrits entre parentheses, ne seront pas pris en compte par le logiciel de pilotage de la machine.

Exemple:

N10 F300     ( vitesse d’avance parametrée a 300 mm/mn)

Nous avons fait le tour des principales notions et principes a connaitre concernant  la syntaxe d’une ligne de commande et d’un programme en GCODE .

 

 

 

 

 

 

 

 

GCODE-G00/G01

les codes G00 et G01 permettent de programmer des trajectoires lineaires, donc des droites. ces 2 instructions ont exactement la meme action a la difference pret que l’une se fait a vitesse maxi de la machine et l’autre a vitesse programmée ( il faudra préciser une vitesse d’avance).

G00: avance en ligne droite a vitesse max du point courant au point de destination

G01 : avance en ligne droite a vitesse programmée du point courant au point de destination

la syntaxe de chacune est du type :

G01  Xn Yn Zn

ou XnYnZn sont les coordonnées du point a atteindre .

pour illustrer , prenons un petit exemple simple en 2 dimensions dans le plan XY (croquis ci dessous): l’objectif étant de partir du point A(5,7) pour aller au point B(9,3)  .

suivant le type de code G la ligne GCODE va être la suivante:

pour une avance a vitesse max:

G00 X9 Y3

pour une avance a vitesse de 200mm/mn:

G01  F200 X9 Y3

NOTA: la vitesse d’avance maxi est la vitesse configurée dans le logiciel de pilotage de la CN ( Mach3 par exemple) . le GCODE n’a pas besoin de connaitre cette vitesse , c’est le logiciciel de pilotage qui en recevant l’instruction G00 applique automatiquement la vitesse max configurée.

voici maintenant l’exemple d’un petit cycle carré programmé en empilant quelques lignes GCODE. l’objectif est , partant du point 1 de faire le tour par les points 2, 3 et 4 pour revenir au point 1 a vitesse constante de 30 mm/mn.

le point courant au demarrage etant le point (3,3) le programme sera le suivant ( on numerote les ligne et on specifie la vitesse d’avance en debut de programme):

N10 F30                         ( vitesse d’avance parametrée a 30mm/mn)

N20 G01 X3 Y9        ( avance au point (3,9))

N30 GO1 X9 Y9       ( avance au point (9,9))

N40 G01 X9 Y3       ( avance au point (9,3))

N50 G01 X3 Y3       ( avance au point (3,3))

comme expliqué dans le chapytre BASES, l’ecriture du programme peut etre simplifiée de la façon suivante:

N10 F30                         ( vitesse d’avance parametrée a 30mm/mn)

N20 G01 X3 Y9         ( avance au point (3,9))

N30 X9                           ( avance au point (9,9))

N40 Y3                           ( avance au point (9,3))

N50 X3                           ( avance au point (3,3))

GCODE-G02/G03

les codes G02 et G03 permettent de programmer des trajectoires en arcs de cercles. ces 2 instructions se distingues de par le sens de rotation de l’arc de cercle concerné.

G02 : permet de faire des arcs de cercle dans le sens horaire (CW = Clock Wise en anglais).

G03 : permet de faire des arcs de cercle dans le sens anti horaire (CCW= Counter Clock Wise en anglais).

la syntaxe de chacune est du type :

G02 Fnnn  Xn Yn Zn Inn Jnn Knn

ou XnYnZn sont les coordonnées du point a atteindre et  InnJnnKnn les coordonnées du centre de rotation exprimées en coordonnées relatives par rapport au point courant (point de départ). la coordonnée I est suivant l’axe X, la coordonnée J suivant l’axe Y , et la coordonnée K suivant Z .

pour illustrer , prenons un petit exemple simple en 2 dimensions dans le plan XY (croquis ci dessous): l’objectif étant de partir du point A(5,7) pour aller au point B(9,3) dans le sens horaire en tournant autour du point bleu à la vitesse d’avance de 200mm/mn . la ligne GCODE va être la suivante:

G02 F200 X9 Y3 I0 J-4

quelques explications sont nécessaire , le point de départ A est le point courant ( position actuelle de l’outil) . le point de destination est le point B(9,3). c’est donc les coordonnées de B qui vont apparaitre dans la ligne de commande. le point de rotation (I,J) doit être spécifié en coordonnées relatives par rapport au point courant A(point de départ). refaisons le croquis précédent en faisant figurer le repère IJ pour aider a la compréhension :

dans le cas présent, le point de rotation (rond bleu)  est sur la même coordonnée que A sur l’axe I donc la distance sur I est nule . par contre le point de rotation est 4 cases en dessous de A donc suivant J il faut descendre de 4 unités , il est donc a une coordonnées relative de A de -4 suivant J . d’ou les valeurs rentrées dans l’instruction:

G02 X9 Y3 IO J-4

dans l’exemple suivant nous allons tourner dans le sens anti horaire mais ce coup ci en partant du point A vers le Point B . ce sera donc une instruction G03 qu’il faudra .

si comme précédemment on rajoute le repère IJ sur le point courant pour aider a la comprehension, le croquis devient :

les coordonnées du point bleu ( centre de rotation) dans le repere IJ sont (-4,0) , l’instruction GCODE du mouvement a 200mm/mn sera donc:

G03 F200 X5 Y7 I-4 J0

en synthese , bien retenir que les coordonnées du point de destinations X/Y/Z sont en coordonnées absolues ( sauf si instruction GCODE spécifique=> voir code G correspondant) , mais les coordonnées I/J/K du centre de rotation sont en coordonnées relatives par rapport au point courant ( point de départ).

prenons un dernier exemple un peu plus compliqué pour enfoncer le clou une dernière fois .

dans l’exemple ci dessous pour aller de A a B a 300 mm/mn l’instruction est:

G03 F300 X-7 Y-1 I3 J-4

GCODE-G90/G91

les codes G90 et G91 sont des codes qui permettent de préciser quel type de coordonnées de déplacements sont utilisées , a savoir coordonnées absolues ou coordonnées relatives . le mode de déplacement en coordonnées relatives est aussi appelé mode incrémental .

les programmes Gcodes utilisent majoritairement les déplacements en coordonnées absolues mais par sécurité , même en mode absolu il vaut mieux systématiquement préciser le mode choisis (G90)  en début de programme .

le mode de déplacement relatif est simple dans son principe , les coordonnées du point a atteindre sont exprimées en valeur de décalage suivant les axes par rapport au point courant. le trajet vers le point suivant est donc systématiquement exprimé en valeur de décalage par rapport au point précedent.

prenons 2 exemples pour expliquer et illustrer la différence entre déplacement en coordonnées absolues et coordonnées relatives .

premier exemple simple:

faire la trajectoire ci dessous à 200 mm/mn, en partant du point d’origine (0,0).

le programme en coordonnées absolues est le suivant:

en mode incrémental ( coordonnées relatives) , le programme devient:

deuxième exemple:

prenons la trajectoire ci dessous ( exemple utilisé dans le chapitre bases/syntaxe)

en mode coordonnées absolues , a vitesse de déplacement de 200mm/mn, si on part du point d’origine, le programme est le suivant:

passons maintenant en mode incrémental ( coordonnées relatives), le programme devient:

 

GCODE-G15/G16 mode cartésien / polaire

la programmation GCODE se fait généralement en coordonnées cartésiennes. mais le GCODE offre la possibilité de travailler en coordonnées polaires.

le système de coordonnées polaire , utilise un systeme de coordonnées basé sur le rayon  R entre l’origine et le point et l’angle A entre l’axe des X et la droite formée par l’origine et le point considéré . les angles positifs vont dans le sens trigonométrique ce qui correspond au  sens antihoraire (CCW = Counter Clock Wise en anglais).

ainsi  en coordonnées polaires les points 1 et 2 du schéma ci dessous auront pour coordonnées 1 ( R1,A1) et 2 (R2,A2)

pour spécifier un mode de coordonnées polaires en GCODE ou utilise le code G16.

pour revenir au système cartésien après un passage en polaire on utilisera le code G15.

en mode polaire (G16) on conserve le X et le Y comme lettres de valeur de coordonnées sauf que le X matérialise le rayon R et le Y l’angle A .  et les coordonnées des points 1 et 2 du croquis sont donc 1(X1,Y1°) et 2(X2,Y2°) ou X et Y sont respectivement les rayons et angles .

comme en coordonnées cartésiennes les Modes G90 (coordonnées absolues) et G91 (coordonnées relatives) s’appliquent.

prenons un exemple: supposons que nous sommes au point courant de coordonnées (10,0°) en coordonnées polaires  et que nous souhaitons aller en ligne droite en coordonnées absolues (G90) et mode  travail au point de coordonnées (5,60°) . les lignes GCODE seraient:

  • G90 G16
  • G01 X5 Y60

et le résultat serait le suivant :

 

la même commande en mode relatif avec les 2 lignes de code suivantes:

  • G91 G16
  • G01 X5 Y60

donneraient le résultat du croquis ci-dessous:

 

l’intérêt des coordonnées polaires concerne principalement toutes les opérations centrées sur un point donnée ( perçage circulaires, fraisage d’hexagones ou polygones réguliers, etc..).

exemple:

le petit programme ci dessous fait le fraisage d’un 6 pans sur un rayon de 20mm.

petite vidéo  du résultat dans CUTVIEWER MILL:

 

 

GCODE-Codes G et M spécifiques

certains code G et codes M simple  sont utilisés dans des cas particuliers, ils sont regroupés dans cette section.

G17-G18-G19:

certaines fraiseuses sont équipées de têtes rotatives ou birotatives en bout de portique:

dans ce cas d’équipement , il est nécessaire  de connaitre le plan de travail et/ou l’axe des cycles de perçage ou taraudage synchronisé de façon a travailler soit dans le plan soit sur l’axe adéquat. c’est à cela que servent les codes G17-G18-G19:

G17 : travail dans le plan XY et axe d’outil sur Z

G18 : travail dans le plan ZX et axe d’outil sur Y

G19 : travail dans le plan YZ et axe d’outil sur X

quand rien n’est spécifié , le travail est considéré dans le plan XY et l’axe outil suivant Z. il peut être également nécessaire d’utiliser ces instruction sur les fraiseuses CN classiques a tête d’usinage horizontale.

 

G20-G21:

ces 2 codes G permettent de préciser si les unités de travail sont en Pouces ou en mm. on place ce code en début de programme.

G20: travail/programme en pouces

G21 : travail/programme en mm

G94-G95:

ces 2 codes G permettent de préciser les unités d’avance.  on place ce code en début de programme.

G94: avances en unités par minutes

G95 : avances en unités par tour

G94 est l’instruction la plus courante mais certaines operations necessitent des avances par tour par exemple:

  • filtetage sur un tour a commande numerique => l’avance outil doit etre synchronisée avec la rotation broche
  • filetage synchronisé sur une fraiseuse CN

G28:

le G28 permet un retour a la position d’origine. il est équivalent a la ligne GCODE  suivante G01 X0 Y0 Z0.

M30-M99:

M30: indique la fin d’un programme.

M99: indique la fin d’un sous programme

%:

le caracter % indique le début et la fin d’un programme GCODE . son utilisation n’est pas obligatoire.

GCODE- M98:sous programmes et boucles

en programmation GCODE,  il peut être intéressant de faire appel à des sous programmes. c’est l’instruction M98 qui permet cela , elle a en plus la possibilité d’incrementer un compteur de boucle via la variable L permettant de répéter plusieurs fois le sous programme.

la syntaxe d’une commande M98 avec boucle de comptage est la suivante:

M98 Pxxx Ln

Pxxx appelle le sous programme numero xxx et va répéter n fois cet appel au sous programme. quand le nombre de rappel aura ete fait , le programme GCODE passera a la ligne suivante apres le M98 Pxxx Ln

le sous programme xxx lui va va être écrit après le corps de programme principal et sera inclus entre 2 ligne de code de ce type :

Oxxx                (numero du sous programme)

       ligne de codes

M99                 ( fin du sous programme Oxxx et retour au pgme principal

 

rien de mieux qu’un exemple concret pour illustrer ce principe, soit le programme ci dessous

reprenons le en version ligne a ligne commentée:

la boucle de sous programme 01000 a pour effet de tracer la figure suivante:

et le L4 de M98 P1000 L4 combinée au mode relatif a pour effet de répéter 4 fois la figure en partant de la dernière position de la boucle précédente soit au final la figure ci dessous:

voila un moyen simple de faire un programme de balayage de surface avec une fraise. il suffit de faire varier la valeur de Y et de X ( fonction du diamètre de fraise ) ainsi que le nombre de répétitions pour générer n’importe quelle fraisage de surface .

à partir de ce principe, on pourrait rajouter une boucle de sous programme qui décrémente le Z pour réaliser les prises de passes . voici ce que pourrait être le programme pour obtenir ce resultat:

la particularité ici est d’avoir 2 boucles imbriquées. la premiere instruction M98 P1000 L5 appelle 5 fois le sous programme 01000 qui lui meme appelle 4 fois le sous programme 02000.  dans 01000 , une fois que O2000 a ete fait 4 fois , l’outil revient en arriere de 40mm et descends de 2 mm ce qui effectue la prise de passe. le pointeur de programme retourne dans le programme principal a l’instruction M98 P1000 L5 et recommence le cycle une seconde fois et ainsi de suite jusqu’a effectuer 5 fois ce cycle soit 5 passes de 2mm, ce qui fait une profondeur finale de 10mm.

vue ISO de la trajectoire outil ( en bleu) une fois le programme GCODE chargé dans le logiciel MACH3:

GCODE- #nn : des variables dans le GCODE

comme dans une multitude de langage de programmation , il est possible d’utiliser des variables dans un programme GCODE.

pour designer une variable on utilise le caracter “#” suivi d’un numero de variable puis la valeur de la variable .

petit exemple de programme pour illustrer cela :

on peut utiliser les opérations de base ( addition, soustraction, multiplication et division). cela permet de faire des programmes passe partout type cycle de fraisage ou il ne reste plus qu’a rentrer les valeurs de paramètres en début de programme pour obtenir différentes variantes de fraisages .

petit exemple du fraisage d’une rainure rectangulaire paramétrée:

l’ecriture du programme GCODE de fraisage  paramétré pourrait ainsi être la suivante:

pour faire varier la taille et la position de la rainure , il n’y a plus qu’a changer les valeurs des variables sans avoir à refaire tout le programme.

NOTA: le GCODE à quelques limitations sur l’utilisation des variables:

#1 à #33 pour des  variables locales

#100 à #199 pour des variables utilisateurs ( remises a zero apres RESET)

#500 à #999 pour des  variables système (mémorisées après RESET ou coupure CNC).

outre les opérations de base, il est possible de faire des calculs évolués sur les variables. Dans la syntaxe GCODE, les parenthèse étant réservées aux commentaires , pour les formules , ou les calcul complexes nécessitant classiquement des parenthèses, ils faudra remplacer ces parenthèses () par des crochets [ ]. le GCODE reconnait egalment un certain nombre de fonctions mathematiques simples dont voici la liste:

pour des exemples de calculs sur les variables voir la rubrique EXEMPLES du chapitre sur le GCODE.