1. Table des M-codes

Code Description

M0 M1

Pause dans le programme

M2 M30

Fin de programme

M60

Pause pour déchargement pièce

M3 M4 M5

Contrôle de la broche

M6 Tn

Appel d’outil n=numéro d’outil

M7 M8 M9

Contrôle des arrosages

M48 M49

Contrôle des correcteurs de vitesse

M50

Contrôle du correcteur de vitesse travail

M51

Contrôle du correcteur de vitesse de broche

M52

Correcteur dynamique de vitesse d’avance

M53

Contrôle de la coupure de vitesse

M61

Correction du numéro de l’outil courant

M62 à M65

Contrôle de sortie numérique

M66

Contrôle d’entrée numérique et analogique

M67

Contrôle sortie analogique synchronisée

M68

Contrôle sortie analogique directe

M100 à M199

M-codes définis par l’utilisateur

2. M0, M1, pause dans le programme

  • M0 - Effectue une pause temporaire dans le programme en cours (quelle que soit la position du bouton d’arrêt facultatif). LinuxCNC reste en mode automatique afin que le MDI ou d’autres actions manuelles ne puissent pas être activés. Presser le départ cycle après cette commande relance le programme à la ligne suivante.

  • M1 - Stoppe temporairement le programme en cours (mais seulement si le bouton d’arrêt optionnel est activé). LinuxCNC reste en mode automatique afin que le MDI ou d’autres actions manuelles ne puissent pas être activés. Presser le départ cycle après cette commande relance le programme à la ligne suivante.

Note
Il est permis de programmer M0 et M1 en mode données manuelles (MDI), mais l’effet ne sera probablement pas perceptible, puisque le comportement normal en mode MDI est de s’arrêter, de toute façon, à la fin de chaque ligne.

3. M2, M30, fin de programme

  • M2 - Indique la fin du programme. Presser le départ cycle après cette commande relance le programme au début du fichier.

  • M30 - Décharge le porte-pièce du chargeur et termine le programme. Presser le départ cycle après cette commande relance le programme au début du fichier.

Les deux commandes précédentes produisent les effets suivants:

  1. Changement du mode automatique au mode MDI.

  2. Les décalages d’axes sont mis aux valeurs par défaut (comme avec G54).

  3. Le plan de travail actif devient XY (comme avec G17).

  4. Le mode de déplacement devient absolu (comme avec G90).

  5. La vitesse travail passe en unités par minute (comme avec G94).

  6. Les correcteurs de vitesse sont activés (comme avec M48).

  7. Les compensations d’outil sont désactivées (comme avec G40).

  8. La broche est arrêtée (comme avec M5).

  9. Le mode mouvement courant devient G1 (comme avec G1).

  10. L’arrosage est arrêté (comme avec M9).

Note
Les lignes de code placées après un M2 ou un M30 ne sont pas exécutées.

4. M60, pause pour déchargement pièce

  • M60 - Procède au changement de porte-pièce avec le chargeur de pièces et effectue une pause dans le programme en cours (quel que soit le réglage du bouton d’arrêt facultatif). Presser ensuite le bouton de départ cycle pour relancer le programme à la ligne suivante.

5. M3, M4, M5 Contrôle de la broche

  • M3 Snnnnn - Démarre la broche en sens horaire à la vitesse nnnnn.

  • M4 Snnnnn - Démarre la broche en sens anti-horaire à la vitesse nnnnn.

  • M5 - Arrête la rotation de la broche.

Il est permis d’utiliser M3 ou M4 si la vitesse de broche est à zéro. Si cela est fait (ou si le bouton du correcteur de vitesse est activé mais mis à zéro), la broche ne tournera pas. Si, plus tard la vitesse de broche est augmentée (ou que le correcteur de vitesse est augmenté), la broche va se mettre en rotation. Il est permis d’utiliser M3 ou M4 quand la broche est déjà en rotation ou d’utiliser M5 quand la broche est déjà arrêtée.

6. M6 Appel d’outil

6.1. Changement d’outil manuel

Si le composant de HAL, hal_manualtoolchange est chargé, M6 va arrêter la broche et inviter l’utilisateur à changer l’outil. Pour plus d’informations sur hal_manualtoolchange voir la section sur le changement manuel d’outil.

6.2. Changement d’outil

Pour changer l’outil, actuellement dans la broche, par un autre, nouvellement sélectionné en utilisant le mot T, voir la section sur le choix de l’outil, programmer M6. Un changement d’outil complet donnera:

  • La rotation de la broche est arrêtée.

  • L’outil qui a été sélectionné (par le mot T sur la même ligne ou sur n’importe quelle ligne après le changement d’outil précédent), sera placé dans la broche. Le mot T est un nombre entier indiquant le numéro de poche d’outil dans le carrousel (non son index).

  • Si l’outil sélectionné n’est pas déjà dans la broche avant le changement d’outil, l’outil qui était dans la broche (s’il y en avait un) va être replacé dans son emplacement dans le chargeur.

  • Les coordonnées des axes seront arrêtées dans les mêmes positions absolues qu’elles avaient avant le changement d’outil (mais la broche devra peut-être être réorientée).

  • Aucune autre modification ne sera apportée. Par exemple, l’arrosage continue à couler durant le changement d’outil à moins qu’il ne soit arrêté par M9.

Attention
La longueur d’outil n’est pas modifié par M6, utilisez un G43 après le M6 pour changer la longueur d’outil.

Le changement d’outil peut inclure des mouvements d’axes pendant son exécution. Il est permis (mais pas utile) de programmer un changement d’outil avec le même outil que celui qui est déjà dans la broche. Il est permis également, si il n’y a pas d’outil dans le slot sélectionné, dans ce cas, la broche sera vide après le changement d’outil. Si le slot zéro a été le dernier sélectionné, il n’y aura pas d’outil dans la broche après le changement.

7. M7, M8, M9 Contrôle de l’arrosage

  • M7 - Active l’arrosage par gouttelettes.

  • M8 - Active l’arrosage fluide.

  • M9 - Arrête tous les arrosages.

Il est toujours permis d’utiliser une de ces commandes, que les arrosages soient arrêtés ou non.

8. M48, M49 Contrôle des correcteurs de vitesse

  • M48 - Autorise les curseurs de corrections de vitesses de broche et celui de vitesse d’avance travail.

  • M49 - Inhibe les deux curseurs.

Il est permis d’autoriser ou d’inhiber ces curseurs quand ils sont déjà autorisés ou inhibés. Ils peuvent aussi être activés individuellement en utilisant les commandes M50 et M51, voir ci-dessous.

9. M50 Contrôle du correcteur de vitesse travail

  • M50 <P1> - Autorise le curseur de correction de vitesse d’avance travail. Le paramètre P1 est optionnel.

  • M50 P0 - Inhibe le curseur de correction d’avance travail.

Quand il est inhibé, le curseur de correction de vitesse n’a plus aucune influence et les mouvements seront exécutés à la vitesse d’avance travail programmée. (à moins que ne soit actif un correcteur de vitesse adaptative).

10. M51 Contrôle du correcteur de vitesse broche

  • M51 <P1> - Autorise le curseur de correction de vitesse de la broche. Le paramètre P1 est optionnel.

  • M51 P0 - Inhibe le curseur de correction de vitesse de broche.

Quand il est inhibé, le curseur de correction de vitesse de broche n’a plus aucune influence, et la broche tournera à la vitesse programmée, en utilisant le mot S comme décrit dans la section sur le réglage de la vitesse de broche.

11. M52 Contrôle de vitesse adaptative

  • M52 P1 - Utilise une vitesse adaptative. Le paramètre P1 est optionnel.

  • M52 P0 - Cesse l’utilisation d’une vitesse adaptative.

Quand la vitesse adaptative est utilisée, certaines valeurs externes sont utilisées avec les correcteurs de vitesse de l’interface utilisateur et les vitesses programmées pour obtenir la vitesse travail. Dans LinuxCNC, la HAL pin motion.adaptive-feed est utilisée dans ce but. Les valeurs de motion.adaptive-feed doivent être dans comprises entre 0 (vitesse nulle) et 1 (pleine vitesse).

12. M53 Contrôle de la coupure de vitesse

  • M53 P1 - Autorise le bouton de coupure de vitesse. Le paramètre P1 est optionnel. Autoriser la coupure de vitesse permet d’interrompre les mouvements par le biais d’une coupure de vitesse. Dans LinuxCNC, la HAL pin motion.feed-hold est utilisée pour cette fonctionnalité. Une valeur de 1 provoque un arrêt des mouvements quand M53 est actif.

  • M53 P0 - Inhibe le bouton de coupure de vitesse. L'état de motion.feed-hold est sans effet sur la vitesse quand M53 est inhibé.

13. M61 Correction du numéro de l’outil courant

  • M61 Q- - Corrige le numéro de l’outil courant, en mode MDI ou après un changement manuel d’outil dans la fenêtre de données manuelles. Au démarrage de LinuxCNC avec un outil dans la broche, il est possible ainsi d’ajuster le numéro de l’outil courant sans faire de changement d’outil.

C’est une erreur si:

  • Q- n’est pas égal où supérieur à 0

14. M62 à M65 Contrôle de bits de sortie numérique

  • M62 P- - Active un bit de sortie numérique en synchronisme avec un mouvement.

  • M63 P- - Désactive un bit de sortie numérique en synchronisme avec un mouvement.

  • M64 P- - Active immédiatement un bit de sortie numérique.

  • M65 P- - Désactive immédiatement un bit de sortie numérique.

Le mot P- spécifie le numéro du bit de sortie numérique. Le mot P doit être compris entre 0 et une valeur par défaut de 3. Si nécessaire, le nombre des entrées/sorties peut être augmenté en utilisant le paramètre num_dio lors du chargement du contrôleur de mouvement. Voir le manuel de l’intégrateur et section "LinuxCNC et HAL", pour plus d’informations.

Les commandes M62 et M63 seront mises en file d’attente. Toute nouvelle commande, destinée à un bit de sortie écrasera l’ancien réglage de ce bit. Plusieurs bits peuvent changer d'état simultanément par l’envoi de plusieurs commandes M62/M63.

Les nouveaux changements d'état des bits de sortie spécifiés, seront effectifs au début du prochain mouvement commandé. S’il n’y a pas de commande de mouvement ultérieur, les changements en attente n’auront pas lieu. Il est préférable de toujours programmer un G-code de mouvement (G0, G1, etc) juste après les M62/63.

M64 et M65 produisent leur effet immédiatement après être reçus par le contrôleur de mouvement. Ils ne sont pas synchronisés avec un mouvement.

Note
M62 à M66 ne seront opérationnels que si les pins _motion.digital-out-nn appropriées sont connectées aux sorties dans le fichier HAL.

15. M66 Contrôle d’entrée numérique et analogique

M66 P- | E- <L-> <Q->
  • P- - Spécifie le numéro d’un bit d’entrée numérique entre 0 et 3.

  • E- - Spécifie le numéro d’un bit d’entrée analogique entre 0 et 3.

  • L- - Spécifie le mode d’attente.

    • Mode 0: IMMEDIATE - pas d’attente, retour immédiat, la valeur courante de l’entrée est stockée dans le paramètre #5399

    • Mode 1: RISE attente d’un front montant sur l’entrée.

    • Mode 2: FALL attente d’un front descendant sur l’entrée.

    • Mode 3: HIGH attente d’un état logique HAUT sur l’entrée.

    • Mode 4: LOW attente d’un état logique BAS sur l’entrée.

  • Q- - Spécifie le timeout pour l’attente, en secondes. Si le timeout est dépassé, l’attente est interrompue et la variable #5399 positionnée à -1.

  • Le mode 0 est le seul autorisé pour une entrée analogique.

Exemple de ligne avec M66
M66 P0 L3 Q5 (attend jusqu'à 5 secondes la montée de l'entrée numérique 0)
  • M66 attend un nouvel événement sur une entrée ou la fin de l’exécution du programme, jusqu'à ce que l'événement sélectionné (ou le timeout programmé) ne survienne. C’est également une erreur de programmer M66 avec les deux mots, un mot P- et un mot E- (ce qui reviendrait à sélectionner à la fois une entrée analogique et une numérique).

Si nécessaire, le nombre des entrées/sorties peut être augmenté en utilisant les paramètres num_dio ou num_aio lors du chargement du contrôleur de mouvement. Voir le Manuel de l’intégrateur pour plus d’informations, section des configurations, paragraphes "LinuxCNC et HAL".

Note
M66 ne sera opérationnel que si les pins motion.digital-in-nn ou motion.analog-in-nn appropriées sont connectées aux entrées dans le fichier HAL.

16. M67 Contrôle de sortie analogique

M67 E- Q-
  • M67 - Contrôle une sortie analogique synchronisée avec un mouvement.

  • E- - Spécifie le numéro de la sortie, doit être compris entre 0 et 3.

  • Q- - Spécifie la valeur à appliquer sur la sortie.

Les changements de valeur spécifiés, seront effectifs au début du prochain mouvement commandé. S’il n’y a pas de commande de mouvement ultérieur, les changements en attente n’auront pas lieu. Il est préférable de toujours programmer un G-code de mouvement (G0, G1, etc) juste après les M67. M67 fonctionne comme M62 à M63.

Le nombre d’entrées/sorties peut être augmenté en utilisant le paramètre num_aio au chargement du contrôleur de mouvement. Voir les chapitres "LinuxCNC et HAL" dans la section configuration du Manuel de l’intégrateur pour plus d’informations sur le contrôleur de mouvement.

Note
M67 ne sera opérationnel que si les pins motion.analog-out-nn appropriées sont connectées aux sorties dans le fichier HAL.

17. M68 Contrôle de sortie analogique directe

M68 E- Q-
  • M68 - Contrôle directement une sortie analogique.

  • E- - Spécifie le numéro de la sortie, doit être compris entre 0 et 3.

  • Q- - Spécifie la valeur à appliquer sur la sortie.

M68 produit son effet immédiatement après être reçu par le contrôleur de mouvement. Il n’est pas synchronisé avec un mouvement. M68 fonctionne comme M64 à M65.

Le nombre d’entrées/sorties peut être augmenté en utilisant le paramètre num_aio au chargement du contrôleur de mouvement. Voir le chapitre "LinuxCNC et HAL" dans le Manuel de l’intégrateur pour plus d’informations sur le contrôleur de mouvement.

Note
M68 ne sera opérationnel que si les pins motion.analog-out-nn appropriées sont connectées aux sorties dans le fichier HAL.

18. M100 à M199 Commandes définies par l’utilisateur

M1-- <P- Q->
  • M1-- - Un entier compris entre 100 et 199.

  • P- - Un nombre passé comme premier argument au programme externe.

  • Q- - Un nombre passé comme second argument au programme externe.

Le programme externe, nommé M100 à M199, (avec un M majuscule et aucune extension) qui doit se trouver dans le répertoire pointé par la variable [DISPLAY] PROGRAM_PREFIX du fichier ini, sera exécuté avec les valeurs P- et Q- comme étant ses deux arguments. L’exécution du fichier G-code courant passera en pause jusqu'à ce que le programme invoqué soit terminé. Tout fichier exécutable valide peut être utilisé. Le fichier doit se trouver dans le chemin spécifié dans le fichier ini de configuration. Voir la section sur le fichier de configuration dans le manuel de l’intégrateur.

Après la création d’un nouveau programme M1nn, l’interface graphique doit être redémarrée pour que le nouveau programme soit pris en compte, autrement une erreur m code inconnu surviendra.

Attention
Ne pas utiliser un traitement de texte pour créer ou éditer ces fichiers. Un traitement de texte ajoute des caractères invisibles qui causent des problèmes et empêchent les scripts bash ou Python de fonctionner. Pour ces raisons, utiliser un éditeur de texte tel que Gedit dans Ubuntu ou le Notepad++ dans un autre OS.

Le message d’erreur M-code inconnu signifie que:

  • La commande utilisateur spécifiée n’existe pas.

  • Le fichier n’a pas été rendu exécutable.

  • Le nom du fichier comporte une extension.

  • Le nom du fichier ne suis pas le format suivant: M1nn où nn = 00 à 99.

  • Le nom de fichier utilise un m minuscule.

Exemple d’utilisation, dans un programme G-code, on doit ouvrir et fermer un mandrin automatique via une broche du port parallèle, on appellera respectivement M101 pour ouvrir le mandrin et M102 pour le fermer. Les deux scripts bash correspondants, appelés M101 et M102 seront créés avant le lancement de LinuxCNC puis rendus exécutables, par exemple par un clic droit puis propriétés → permissions → Exécution. S’assurer que cette broche du port parallèle n’est pas déjà utilisée dans un fichier de HAL.

Exemple de fichier pour M101
#!/bin/bash
# ce fichier met la broche 14 du port à 1 pour ouvrir le mandrin automatique
halcmd setp parport.0.pin-14-out True
exit 0
Exemple de fichier pour M102
#!/bin/bash
# ce fichier met la broche 14 du port à 0 pour fermer le mandrin automatique
halcmd setp parport.0.pin-14-out False
exit 0

Pour passer des variables à un fichier M1nn, utiliser les mots facultatifs P et Q de cette façon:

M100 P123.456 Q321.654
Exemple pour M100
#!/bin/bash
tension=$1
vitesse=$2
halcmd setp thc.voltage $tension
halcmd setp thc.feedrate $vitesse
exit 0

Pour ouvrir un message graphique et passer en pause jusqu'à ce que la fenêtre du message soit fermée, utiliser un programme comme Eye of Gnome pour afficher le fichier graphique. Quand la fenêtre sera fermée, le programme reprendra.

Exemple pour M110, affichage d’un graphique avec passage en pause
#!/bin/bash
eog /home/robert/linuxcnc/nc_files/message.png
exit 0

Pour afficher un message graphique en continuant le traitement du fichier G-code, ajouter un caractère esperluette à la commande.

Exemple pour M110, affichage d’un graphique sans passer en pause
#!/bin/bash
eog /home/robert/linuxcnc/nc_files/message.png &
exit 0