/ docs / src / gcode / m-code_fr.txt
m-code_fr.txt
  1  :lang: fr
  2  :toc:
  3  
  4  = Les M-codes
  5  
  6  [[cha:M-codes]]
  7  
  8  :ini: {basebackend@docbook:'':ini}
  9  :hal: {basebackend@docbook:'':hal}
 10  :ngc: {basebackend@docbook:'':ngc}
 11  
 12  == Table des M-codes
 13  
 14  [width="60%", options="header", cols="2^,5<"]
 15  |========================================================
 16  | Code                                                 | Description
 17  |<<sec:M0-M1,M0 M1>>                                   | Pause dans le programme
 18  |<<sec:M2-M30,M2 M30>>                                 | Fin de programme
 19  |<<sec:M60,M60>>                                       | Pause pour déchargement pièce
 20  |<<sec:M3-M4-M5,M3 M4 M5>>                             | Contrôle de la broche
 21  |<<sec:M6-Appel-Outil,M6 Tn>>                          | Appel d'outil n=numéro d'outil
 22  |<<sec:M7-M8-M9,M7 M8 M9>>                             | Contrôle des arrosages
 23  |<<sec:M19,M19>>                                       | Orientation de la broche
 24  |<<sec:M48-M49,M48 M49>>                               | Contrôle des correcteurs de vitesse 
 25  |<<sec:M50-Controle-Correcteur-Vitesse-Travail,M50>>   | Contrôle du correcteur de vitesse travail
 26  |<<sec:M51-Controle-Correcteur-Vitesse-Broche,M51>>    | Contrôle du correcteur de vitesse de broche
 27  |<<sec:M52-Controle-Vitesse-Adaptative,M52>>           | Correcteur dynamique de vitesse d'avance
 28  |<<sec:M53-Controle-Coupure-Vitesse,M53>>              | Contrôle de la coupure de vitesse
 29  |<<sec:M61-Correction-Numero-Outil-Courant,M61>>       | Correction du numéro de l'outil courant
 30  |<<sec:M62-a-M65-Ctrl-Sortie-Numerique,M62 à M65>>     | Contrôle de sortie numérique
 31  |<<sec:M66-Ctrl-Entree-Numerique-Et-Analogique,M66>>   | Contrôle d'entrée numérique et analogique
 32  |<<sec:M67-Ctrl-Sortie-Analogique-Synchro,M67>>        | Contrôle sortie analogique synchronisée
 33  |<<sec:M68-Ctrl-Sortie-Analogique-Directe,M68>>        | Contrôle sortie analogique directe
 34  |<<sec:M70-Save-Modal-State,M70>>                      | Enregistre l'état modal
 35  |<<sec:M71-Invalidate-Stored-Modal-State,M71>>         | Invalide l'état modal enregistré
 36  |<<sec:M72-Restore-Modal-State,M72>>                   | Restaure l'état modal
 37  |<<sec:M73-Save-Autorestore-Modal-State,M73>>          | Enregistrement/auto-restauration de l'état modal
 38  |<<sec:M100-a-M199, M100 à M199 >>                     | M-codes définis par l'utilisateur
 39  |========================================================
 40  
 41  [[sec:M0-M1]]
 42  == M0, M1, pause dans le programme
 43  (((M0 Pause dans le programme)))
 44  (((M1 Pause optionnelle dans le programme)))
 45  
 46  * 'M0' - Effectue une pause temporaire dans le programme en cours
 47  (quelle que soit la position du bouton d'arrêt facultatif).
 48  LinuxCNC reste en mode automatique afin que le MDI ou
 49  d'autres actions manuelles ne puissent pas être activés. Presser le départ
 50  cycle après cette commande relance le programme à la ligne suivante.
 51  
 52  * 'M1' - Stoppe temporairement le programme en cours
 53  (mais seulement si le bouton d'arrêt optionnel est activé).
 54  LinuxCNC reste en mode automatique afin que le MDI ou
 55  d'autres actions manuelles ne puissent pas être activés. Presser le départ
 56  cycle après cette commande relance le programme à la ligne suivante.
 57  
 58  [NOTE]
 59  Il est permis de programmer 'M0' et 'M1' en mode données manuelles (MDI),
 60  mais l'effet ne sera probablement pas perceptible,
 61  puisque le comportement normal en mode MDI est
 62  de s'arrêter, de toute façon, à la fin de chaque ligne.
 63  
 64  [[sec:M2-M30]]
 65  == M2, M30, fin de programme
 66  (((M2 Fin de programme)))
 67  (((M30 Fin de programme avec déchargement pièce)))
 68  
 69  * 'M2' - Indique la fin du programme. Presser le départ cycle après cette
 70  commande relance le programme au début du fichier.
 71  
 72  * 'M30' - Décharge le porte-pièce du chargeur et termine le programme. Presser
 73  le départ cycle après cette commande relance le programme au début du fichier.
 74  
 75  Les deux commandes précédentes produisent les effets suivants:
 76  
 77   . Changement du mode automatique au mode MDI.
 78   . Les décalages d'axes sont mis aux valeurs par défaut (comme avec 'G54').
 79   . Le plan de travail actif devient XY (comme avec 'G17').
 80   . Le mode de déplacement devient absolu (comme avec 'G90').
 81   . La vitesse travail passe en unités par minute (comme avec 'G94').
 82   . Les correcteurs de vitesse sont activés (comme avec 'M48').
 83   . Les compensations d'outil sont désactivées (comme avec 'G40').
 84   . La broche est arrêtée (comme avec 'M5').
 85   . Le mode mouvement courant devient 'G1' (comme avec 'G1').
 86   . L'arrosage est arrêté (comme avec 'M9').
 87  
 88  [NOTE]
 89  Les lignes de code placées après un 'M2' ou un 'M30' ne sont pas exécutées.
 90  
 91  [[sec:M60]]
 92  == M60, pause pour déchargement pièce
 93  (((M60 Pause pour déchargement pièce)))
 94  
 95  * 'M60' - Procède au changement de porte-pièce avec le chargeur de pièces et
 96  effectue une pause dans le programme en cours (quel que soit le réglage
 97  du bouton d'arrêt facultatif). Presser ensuite le bouton de départ cycle pour
 98  relancer le programme à la ligne suivante.
 99  
100  [[sec:M3-M4-M5]]
101  == M3, M4, M5 Contrôle de la broche
102  (((M3 Broche en sens horaire)))
103  (((M4 Broche en sens anti-horaire)))
104  (((M5 Arrêt de broche)))
105  
106  * 'M3 Snnnnn' - Démarre la broche en sens horaire à la vitesse *nnnnn*.
107  * 'M4 Snnnnn' - Démarre la broche en sens anti-horaire à la vitesse *nnnnn*.
108  * 'M5' - Arrête la rotation de la broche.
109  
110  Il est permis d'utiliser 'M3' ou 'M4' si la vitesse de broche est à zéro.
111  Si cela est fait
112  (ou si le bouton du correcteur de vitesse est activé mais mis à zéro),
113  la broche ne tournera pas.
114  Si, plus tard la vitesse de broche est augmentée
115  (ou que le correcteur de vitesse est augmenté),
116  la broche va se mettre en rotation.
117  Il est permis d'utiliser 'M3' ou 'M4' quand la broche est déjà
118  en rotation ou d'utiliser 'M5' quand la broche est déjà arrêtée.
119  
120  [[sec:M6-Appel-Outil]]
121  == M6 Appel d'outil
122  (((M6 Appel d'outil)))
123  
124  === Changement d'outil manuel
125  
126  Si le composant de HAL, hal_manualtoolchange est chargé,
127  'M6' va arrêter la broche et inviter l'utilisateur à changer l'outil.
128  Pour plus d'informations sur hal_manualtoolchange voir
129  la section <<sec:Changement-D-Outil-Manuel, sur le changement manuel d'outil>>.
130  
131  === Changement d'outil
132  
133  Pour changer l'outil, actuellement dans la broche, par un autre,
134  nouvellement sélectionné en utilisant le mot T, voir la section
135  <<sec:T-Choix-Outil, sur le choix de l'outil>>, programmer 'M6'.
136  Un changement d'outil complet donnera:
137  
138  * La rotation de la broche est arrêtée.
139  * L'outil qui a été sélectionné (par le mot T sur la même ligne ou sur
140     n'importe quelle ligne après le changement d'outil précédent),
141     sera placé dans la broche.
142     Le mot *T* est un nombre entier indiquant le
143     numéro de poche d'outil dans le carrousel (non son index).
144  * Si l'outil sélectionné n'est pas déjà dans la broche avant le
145     changement d'outil, l'outil qui était dans la broche
146     (s'il y en avait un)
147     va être replacé dans son emplacement dans le chargeur.
148  * Les coordonnées des axes seront arrêtées dans les mêmes positions
149     absolues qu'elles avaient avant le changement d'outil (mais la broche
150     devra peut-être être réorientée).
151  * Aucune autre modification ne sera apportée. Par exemple, l'arrosage
152     continue à couler durant le changement d'outil à moins qu'il ne soit
153     arrêté par 'M9'.
154  
155  [WARNING]
156  La longueur d'outil n'est pas modifié par 'M6',
157  utilisez un 'G43' après le 'M6' pour changer la longueur d'outil.
158  
159  Le changement d'outil peut inclure des mouvements d'axes pendant son exécution.
160  Il est permis (mais pas utile) de programmer un changement d'outil avec
161  le même outil que celui qui est déjà dans la broche.
162  Il est permis également, si il n'y a pas d'outil dans le slot sélectionné,
163  dans ce cas, la broche sera vide après le changement d'outil.
164  Si le slot zéro a été le dernier sélectionné,
165  il n'y aura pas d'outil dans la broche après le changement.
166  
167  [[sec:M7-M8-M9]]
168  == M7, M8, M9 Contrôle de l'arrosage
169  (((M7 Arrosage gouttelettes)))
170  (((M8 Arrosage fluide)))
171  (((M9 Arrêt des arrosages)))
172  
173  * 'M7' - Active l'arrosage par gouttelettes.
174  * 'M8' - Active l'arrosage fluide.
175  * 'M9' - Arrête tous les arrosages.
176  
177  Il est toujours permis d'utiliser une de ces commandes,
178  que les arrosages soient arrêtés ou non.
179  
180  [[sec:M19]]
181  == M19 Orientation de la broche
182  (((M19 Orientation de la broche)))
183  
184  * 'M19 R- Q- [P-]'
185  
186  * 'R' - Position à atteindre à partir de 0, cette valeur doit être comprise entre
187  0 et 360 degrés.
188  
189  * 'Q' - Durée d'attente en secondes pour compléter l'orientation. Si
190  'spindle.N.is-oriented' n'est pas devenue vraie dans le temps imparti par Q,
191  une erreur de timeout se produira.
192  
193  * 'P' - Direction de rotation vers la position cible.
194  ** '0' - rotation pour petit mouvement angulaire (défaut)
195  ** '1' - rotation toujours en sens horaire (même direction qu'avec M3)
196  ** '2' - rotation toujours en sens anti-horaire (même direction qu'avec M4)
197  
198  
199  M19 est révoqué par M3,M4 ou M5.
200  
201  L'orientation de la broche nécessite un codeur de position avec index,
202  indiquant la position de la broche ainsi que sa direction de rotation.
203  
204  Paramètres de réglage de la section [RS274NGC].
205  
206  ORIENT_OFFSET = 0 à 360 (offset fixe en degrés, ajouté au mot R de M19)
207  
208  Broches de HAL
209  
210  * 'spindle.N.orient-angle' (sortie float)
211  Orientation souhaitée pour M19. Valeur du paramètre R de M19 plus la valeur du
212  paramètre d'ini [RS274NGC]ORIENT_OFFSET.
213  
214  M19 est une commande du groupe modal 7, comme M3, M4 et M5.
215  
216  * 'spindle.N.orient-mode' (sortie s32)
217  Mode de rotation de la broche souhaité. Reflète le mot P de M19, Défaut = 0
218  
219  * 'spindle.N.orient' (sortie bit)
220  Indique le début du cycle d'orientation de la broche. Positionné par M19.
221  Remis à zéro par M3,M4 ou M5.
222  Si 'spindle-orient-fault' n'est pas à zéro alors que 'spindle-orient' est vraie
223  la commande M19 échoue avec un message d'erreur.
224  
225  * 'spindle.N.is-oriented' (entrée bit)
226  Pin de confirmation de l'orientation de la broche. Termine le cycle
227  d'orientation. Si 'spindle-orient' est vraie quand 'spindle-is-oriented' est
228  activée, la pin 'spindle-orient' est mise à zéro et la pin 'spindle-locked'
229  est activée. La pin 'spindle-brake' est également activée.
230  
231  * 'spindle.N.orient-fault' (entrée s32)
232  Entrée de code d'erreur pour le cycle d'orientation. Toute valeur, autre que
233  zéro, provoquera l'abandon du cycle d'orientation.
234  
235  * 'spindle.N.locked' (sortie bit)
236  Pin indiquant que le cycle de rotation est terminé. Désactivée par M3,M4 ou M5.
237  
238  
239  [[sec:M48-M49]]
240  == M48, M49 Contrôle des correcteurs de vitesse
241  (((M48, M49 Autoriser/Inhiber les correcteurs de vitesse)))
242  
243  * 'M48' - Autorise les curseurs de corrections de
244  vitesses de broche et celui de vitesse d'avance travail.
245  * 'M49' - Inhibe les deux curseurs.
246  
247  Il est permis d'autoriser ou d'inhiber ces curseurs quand
248  ils sont déjà autorisés ou inhibés. Ils peuvent aussi être activés
249  individuellement en utilisant les commandes 'M50' et 'M51', voir ci-dessous.
250  
251  [[sec:M50-Controle-Correcteur-Vitesse-Travail]]
252  == M50 Contrôle du correcteur de vitesse travail
253  (((M50 Contrôle du correcteur de vitesse travail)))
254  
255  * 'M50 <P1>' - Autorise le curseur de correction de vitesse d'avance travail. Le
256  paramètre 'P1' est optionnel.
257  * 'M50 P0' - Inhibe le curseur de correction d'avance travail.
258  
259  Quand il est inhibé, le curseur de correction de
260  vitesse n'a plus aucune influence et les mouvements seront exécutés à la
261  vitesse d'avance travail programmée. (à moins que ne soit actif un
262  correcteur de vitesse adaptative).
263  
264  [[sec:M51-Controle-Correcteur-Vitesse-Broche]]
265  == M51 Contrôle du correcteur de vitesse broche
266  (((M51 Contrôle du correcteur de vitesse broche)))
267  
268  * 'M51 <P1>' - Autorise le curseur de correction de vitesse de la broche. Le
269  paramètre 'P1' est optionnel.
270  * 'M51 P0' - Inhibe le curseur de correction de vitesse de broche.
271  
272  Quand il est inhibé, le curseur de correction de vitesse de broche
273  n'a plus aucune influence, et la broche tournera à la vitesse programmée,
274  en utilisant le mot 'S' comme décrit dans la section <<sec:S-Broche, sur le
275  réglage de la vitesse de broche>>.
276  
277  [[sec:M52-Controle-Vitesse-Adaptative]]
278  == M52 Contrôle de vitesse adaptative
279  (((M52 Contrôle vitesse adaptative)))
280  
281  * 'M52 P1' - Utilise une vitesse adaptative. Le paramètre 'P1' est optionnel.
282  * 'M52 P0' - Cesse l'utilisation d'une vitesse adaptative.
283  
284  Quand la vitesse adaptative est utilisée, certaines valeurs externes sont
285  utilisées avec les correcteurs de vitesse de l'interface utilisateur et
286  les vitesses programmées pour obtenir la vitesse travail.
287  Dans LinuxCNC, la HAL pin 'motion.adaptive-feed' est utilisée dans ce but.
288  Les valeurs de 'motion.adaptive-feed' doivent être dans comprises
289  entre -1 (pleine vitesse arrière) et 1 (pleine vitesse). Une valeur du nulle
290  correspond à l'arrêt du mouvement.
291  [NOTE]
292  L'utilisation de vitess adaptative négative (destinée notamment aux
293  machines à plasma et à électroérosion) est une nouveauté et n'a pas
294  encore été testée de manière approfondie sur des machines réelles.
295  
296  [[sec:M53-Controle-Coupure-Vitesse]]
297  == M53 Contrôle de la coupure de vitesse
298  (((M53 Contrôle coupure vitesse)))
299  
300  * 'M53 P1' - Autorise le bouton de coupure de vitesse. Le paramètre 'P1' est
301  optionnel. Autoriser la coupure de vitesse permet d'interrompre les mouvements
302  par le biais d'une coupure de vitesse. Dans LinuxCNC, la HAL pin
303  'motion.feed-hold' est utilisée pour cette fonctionnalité. Une valeur
304  de 1 provoque un arrêt des mouvements quand 'M53' est actif.
305  * 'M53 P0' - Inhibe le bouton de coupure de vitesse. L'état de
306  'motion.feed-hold' est sans effet sur la vitesse quand 'M53' est inhibé.
307  
308  [[sec:M61-Correction-Numero-Outil-Courant]]
309  == M61 Correction du numéro de l'outil courant
310  (((M61 Correction du numéro de l'outil courant)))
311  
312  * 'M61 Q ' - Corrige le numéro de l'outil courant, en mode MDI ou après un
313  changement manuel d'outil dans la fenêtre de données manuelles. Au démarrage
314  de LinuxCNC avec un outil dans la broche, il est possible ainsi d'ajuster le
315  numéro de l'outil courant sans faire de changement d'outil.
316  
317  C'est une erreur si:
318  
319  * Q n'est pas égal où supérieur à 0
320  
321  [[sec:M62-a-M65-Ctrl-Sortie-Numerique]]
322  == M62 à M65 Contrôle de bits de sortie numérique
323  (((M62 Contrôle un bit de sortie numérique)))
324  
325  * 'M62 P' - Active un bit de sortie numérique en synchronisme avec
326  un mouvement.
327  * 'M63 P' - Désactive un bit de sortie numérique en synchronisme avec
328  un mouvement.
329  * 'M64 P' - Active immédiatement un bit de sortie numérique.
330  * 'M65 P' - Désactive immédiatement un bit de sortie numérique.
331  
332  Le mot 'P' spécifie le numéro du bit de sortie numérique. Le mot P doit
333  être compris entre 0 et une valeur par défaut de 3. Si nécessaire, le
334  nombre des entrées/sorties peut être augmenté en utilisant
335  le paramètre 'num_dio' lors du chargement du contrôleur de mouvement.
336  Voir le manuel de l'intégrateur et section "LinuxCNC et HAL", 
337  pour plus d'informations.
338  
339  Les commandes 'M62' et 'M63' seront mises en file d'attente.
340  Toute nouvelle commande, destinée à un bit de sortie écrasera l'ancien
341  réglage de ce bit. Plusieurs bits peuvent changer d'état
342  simultanément par l'envoi de plusieurs commandes M62/M63.
343  
344  Les nouveaux changements d'état des bits de sortie spécifiés, seront
345  effectifs au début du prochain mouvement commandé. S'il n'y a pas de
346  commande de mouvement ultérieur, les changements en attente
347  n'auront pas lieu. Il est préférable de toujours programmer un
348  G-code de mouvement (G0, G1, etc) juste après les M62/63.
349  
350  'M64' et 'M65' produisent leur effet immédiatement après être reçus par le
351  contrôleur de mouvement. Ils ne sont pas synchronisés avec un mouvement.
352  
353  [NOTE]
354  M62 à M66 ne seront opérationnels que si les pins 'motion.digital-out-nn'
355  appropriées sont connectées aux sorties dans le fichier HAL.
356  
357  [[sec:M66-Ctrl-Entree-Numerique-Et-Analogique]]
358  == M66 Contrôle d'entrée numérique et analogique
359  (((M66 Contrôle d'entrée numerique et analogique)))
360  
361  ----
362  M66 P- | E- <L-> <Q->
363  ----
364  * 'P' - Spécifie le numéro d'un bit d'entrée numérique entre 0 et 3.
365  * 'E' - Spécifie le numéro d'un bit d'entrée analogique entre 0 et 3.
366  * 'L' - Spécifie le mode d'attente.
367  ** Mode 0: 'IMMEDIATE' - pas d'attente, retour immédiat, la valeur courante de
368  l'entrée est stockée dans le paramètre #5399
369  ** Mode 1: 'RISE'  attente d'un front montant sur l'entrée.
370  ** Mode 2: 'FALL'  attente d'un front descendant sur l'entrée.
371  ** Mode 3: 'HIGH'  attente d'un état logique HAUT sur l'entrée.
372  ** Mode 4: 'LOW'   attente d'un état logique BAS sur l'entrée.
373  * 'Q' - Spécifie le timeout pour l'attente, en secondes. Si le timeout est
374  dépassé, l'attente est interrompue et la variable #5399 positionnée à -1.
375  * Le mode '0' est le seul autorisé pour une entrée analogique.
376  
377  .Exemple de ligne avec M66
378  ----
379  M66 P0 L3 Q5 (attend jusqu'à 5 secondes la montée de l'entrée numérique 0)
380  ----
381  
382  * 'M66' attend un nouvel événement sur une entrée ou la fin de l'exécution
383  du programme, jusqu'à ce que l'événement sélectionné (ou le timeout
384  programmé) ne survienne.
385  C'est également une erreur de programmer 'M66' avec les deux
386  mots, un mot P- et un mot E- (ce qui reviendrait à sélectionner à la fois une
387  entrée analogique et une numérique).
388  
389  Si nécessaire, le nombre des entrées/sorties peut être augmenté en
390  utilisant les paramètres 'num_dio' ou 'num_aio' lors du chargement du
391  contrôleur de mouvement. Voir le Manuel de l'intégrateur pour
392  plus d'informations, section des configurations, paragraphes "LinuxCNC et HAL".
393  
394  [NOTE]
395  M66 ne sera opérationnel que si les pins motion.digital-in-nn ou
396  motion.analog-in-nn appropriées sont connectées aux entrées dans le fichier HAL.
397  
398  [[sec:M67-Ctrl-Sortie-Analogique-Synchro]]
399  == M67 Contrôle de sortie analogique
400  (((M67 Contrôle de sortie analogique synchronisée avec un mouvement)))
401  
402  ----
403  M67 E- Q-
404  ----
405  * 'M67' - Contrôle une sortie analogique synchronisée avec un mouvement.
406  * 'E' - Spécifie le numéro de la sortie, doit être compris entre 0 et 3.
407  * 'Q' - Spécifie la valeur à appliquer sur la sortie.
408  
409  Les changements de valeur spécifiés, seront effectifs au début du
410  prochain mouvement commandé. S'il n'y a pas de commande de mouvement ultérieur,
411  les changements en attente n'auront pas lieu. Il est préférable de toujours
412  programmer un G-code de mouvement (G0, G1, etc) juste après les M67.
413  M67 fonctionne comme M62 à M63.
414  
415  Le nombre d'entrées/sorties peut être augmenté en utilisant le paramètre
416  'num_aio' au chargement du contrôleur de mouvement. Voir les chapitres
417  "LinuxCNC et HAL" dans la section configuration du Manuel de l'intégrateur
418  pour plus d'informations sur le contrôleur de mouvement.
419  
420  [NOTE]
421  M67 ne sera opérationnel que si les pins motion.analog-out-nn appropriées sont
422  connectées aux sorties dans le fichier HAL.
423  
424  [[sec:M68-Ctrl-Sortie-Analogique-Directe]]
425  == M68 Contrôle de sortie analogique directe
426  (((M68 Contrôle de Sortie analogique directe)))
427  
428  ----
429  M68 E- Q-
430  ----
431  * 'M68' - Contrôle directement une sortie analogique.
432  * 'E' - Spécifie le numéro de la sortie, doit être compris entre 0 et 3.
433  * 'Q' - Spécifie la valeur à appliquer sur la sortie. 
434  
435  M68 produit son effet immédiatement après être reçu par le
436  contrôleur de mouvement. Il n'est pas synchronisé avec un mouvement.
437  M68 fonctionne comme M64 à M65.
438  
439  Le nombre d'entrées/sorties peut être augmenté en utilisant
440  le paramètre 'num_aio' au chargement du contrôleur de mouvement. Voir le
441  chapitre "LinuxCNC et HAL" dans le Manuel de l'intégrateur pour plus
442  d'informations sur le contrôleur de mouvement.
443  
444  [NOTE]
445  M68 ne sera opérationnel que si les pins 'motion.analog-out-nn' appropriées sont
446  connectées aux sorties dans le fichier HAL.
447  
448  [[sec:M70-Save-Modal-State]]
449  == M70 Enregistrement de l'état modal
450  (((M70 Save Modal State)))
451  
452  Pour enregistrer explicitement l'état modal au niveau de l'appel courant,
453  programmer 'M70'. Une fois l'état modal enregistré avec 'M70', il peut être
454  restauré exactement dans le même état en exécutant un 'M72'.
455  
456  Une paire d'instructions 'M70' et 'M72' est typiquement utilisée pour protéger
457  un programme contre d'éventuels changements modaux pouvant se produire dans les
458  sous-programmes.
459  
460  [[saved_state_by_M70]]
461  Les états enregistrés sont les suivants:
462  
463  * unités machine courantes G20/G21 (po/mm)
464  * plan de travail courant (G17/G18/G19 G17.1,G18.1,G19.1)
465  * statut de la compensation de rayon d'outil (G40,G41,G42,G41.1,G42,1)
466  * mode de déplacement - relatif/absolu (G90/G91)
467  * mode de vitesse (G93/G94,G95)
468  * coordonnées système courantes (G54-G59.3)
469  * statut de la compensation de longueur d'outil (G43,G43.1,G49)
470  * options du plan de retrait (G98,G99)
471  * mode de contrôle de broche (G96-css ou G97-RPM)
472  * mode de déplacement en arc (G90.1, G91.1)
473  * mode diamètre/rayon des tours (G7,G8)
474  * mode de contrôle de trajectoire (G61, G61.1, G64)
475  * avance et vitesse broche courantes (valeurs 'F' et 'S')
476  * statut de la broche (M3,M4,M5) - on/off et direction
477  * statut de l'arrosage (M7) et (M8)
478  * réglages des correcteurs de vitesse broche (M51) et du correcteur de vitesse
479  travail (M50)
480  * réglage du contrôle de vitesse adaptative (M52)
481  * réglage du contrôle de la coupure de vitesse (M53)
482  
483  Noter qu'en particulier, les modes de mouvement (G1 etc) ne sont 'PAS' restaurés.
484  
485  'Le niveau de l'appel courant' signifie:
486  
487   * Exécution dans le programme principal. Il n'y a qu'un seul emplacement de
488  stockage pour l'état modal au niveau du programme principal; si plusieurs
489  instructions 'M70' sont exécutées tour à tour, seul l'état enregistré le plus
490  récent est restauré quand un 'M72' est exécuté.
491  
492   * Exécution dans un sous-programme G-code. L'état enregistré par 'M70'
493  dans un sous-programme se comporte exactement comme un paramètre nommé local -
494  on ne peut s'y référer qu'à l'intérieur du sous-programme en invoquant un 'M72',
495  à la sortie du sous-programme, le paramètre disparaît.
496  
497  Une invocation récursive d'un sous-programme introduit un nouveau niveau d'appel.
498  
499  [[sec:M71-Invalidate-Stored-Modal-State]]
500  == M71 Invalidation de l'état modal enregistré
501  (((M71 Invalidate Stored Modal State)))
502  
503  <<saved_state_by_M70,L'état modal enregistré par 'M70'>> ou par
504  <<sec:M73-Save-Autorestore-Modal-State, 'M73'>> au niveau de l'appel courant est
505  invalidé (ne peut plus être restauré nulle part).
506  
507  Un appel ultérieur à 'M72' sur le même niveau d'appel, échouera.
508  
509  Si il est exécuté dans un sous-programme qui protège l'état modal par un 'M73',
510  un 'return' ou 'endsub' ultérieur ne restaurera 'PAS' l'état modal.
511  
512  L'utilité de ce dispositif est douteuse. Il ne devrait pas être invoqué quand
513  il peut disparaître.
514  
515  [[sec:M72-Restore-Modal-State]]
516  == M72 Restauration de l'état modal
517  (((M72 Restore Modal State)))
518  
519  <<saved_state_by_M70,L'état modal enregistré par un 'M70'>> peut être
520  restauré en exécutant un 'M72'.
521  
522  La gestion de G20/G21 reçoit un traitement particulier car les avances sont
523  interprétées différemment selon G20/G21: si les unités de longueur (mm/po)
524  doivent être modifiées par une opération de restauration, 'M72' va restaurer le
525  mode distance en premier, puis ensuite tous les autres états, y compris les
526  avances pour être sure que les valeurs d'avance soient interprétées selon un
527  réglage d'unités correct.
528  
529  C'est une erreur d'exécuter 'M72' sans enregistrement précédent avec 'M70' à
530  ce niveau.
531  
532  L'exemple suivant montre l'enregistrement puis la restauration de l'état modal
533  autour de l'appel d'un sous-programme utilisant 'M70' et 'M72'. Noter que
534  le sous-programme 'imperialsub' n'est pas "au courant" des caractéristiques de
535  M7x et peut être utilisé non modifié:
536  
537  
538  [source,{ngc}]
539  ----
540  O<showstate> sub
541  (DEBUG, imperial=#<_imperial> absolute=#<_absolute> feed=#<_feed> rpm=#<_rpm>)
542  O<showstate> endsub
543  
544  O<imperialsub> sub
545  g20 (imperial)
546  g91 (relative mode)
547  F5 (low feed)
548  S300 (low rpm)
549  (debug, in subroutine, state now:)
550  o<showstate> call
551  O<imperialsub> endsub
552  
553  ; programme principal
554  g21 (metric)
555  g90 (absolute)
556  f200 (fast speed)
557  S2500 (high rpm)
558  
559  (debug, in main, state now:)
560  o<showstate> call
561  
562  M70 (save caller state in at global level)
563  O<imperialsub> call
564  M72 (explicitely restore state)
565  
566  (debug, back in main, state now:)
567  o<showstate> call
568  m2
569  ----
570  
571  [[sec:M73-Save-Autorestore-Modal-State]]
572  == M73 Enregistrement et auto-restauration de l'état modal
573  (((M73 Save and Autorestore Modal State)))
574  
575  
576  Pour enregistrer l'état modal à l'intérieur d'un sous-programme et restaurer cet
577  état lors d'un 'endsub' ou autre 'return', programmer 'M73'.
578  
579  En cas d'abandon d'un programme en cours d'exécution dans un sous-programme
580  traitant un 'M73', l'état ne sera *PAS* restauré.
581  
582  En outre, la fin normale ('M2') d'un programme principal contenant un 'M73' ne 
583  restaurera *pas* l'état.
584  
585  L'utilisation suggérée consiste à placer au début d'un sous-programme, un O-code
586  de sous-programme comme dans l'exemple ci-dessous. En utilisant 'M73', cette
587  manière valide le design des sous-programmes qui doivent modifier l'état modal
588  mais qui protège le programme appelant contre tout changement inopiné de
589  l'état modal. Noter l'usage de <<sec:Parametres-Nommes, paramètres nommés>> dans
590  le sous-programme 'showstate'.
591  
592  [source,{ngc}]
593  ----
594  O<showstate> sub
595  (DEBUG, imperial=#<_imperial> absolute=#<_absolute> feed=#<_feed> rpm=#<_rpm>)
596  O<showstate> endsub
597  
598  O<imperialsub> sub
599  M73 (save caller state in current call context, restore on return or endsub)
600  g20 (imperial)
601  g91 (relative mode)
602  F5 (low feed)
603  S300 (low rpm)
604  (debug, in subroutine, state now:)
605  o<showstate> call
606  
607  ; note - M72 n'est pas utilisé ici - le endsub suivant ou un
608  ; 'return' explicite restaurera l'état de l'appelant
609  O<imperialsub> endsub
610  
611  ; programme principal
612  g21 (metric)
613  g90 (absolute)
614  f200 (fast speed)
615  S2500 (high rpm)
616  (debug, in main, state now:)
617  o<showstate> call
618  o<imperialsub> call
619  (debug, back in main, state now:)
620  o<showstate> call
621  m2
622  ----
623  
624  
625  == Restauration sélective de l'état modal par le test de paramètres prédéfinis[[sec:Selectively-restoring-modal-state]]
626  
627  Exécuter un 'M72' ou au retour d'un sous-programme contenant un 'M73_ pour
628  restaurer <<saved_state_by_M70,*tout* l'état modal enregistré>>.
629  
630  Si seulement certains aspects de l'état modal doivent être préservés, une
631  alternative consiste a utiliser les <<sec:Predefined-Named-Parameters,paramètres nommés prédéfinis>>, paramètres locaux et états conditionnels. L'idée est de rappeler
632  les modes à restaurer au début du sous-programme et de restaurer ceux-ci avant
633  de quitter. Voici un exemple, basé sur le programme
634  'nc_files/tool-length-probe.ngc':
635  
636  
637  [source,{ngc}]
638  ----
639  O<measure> sub   (measure reference tool)
640  ;
641  #<absolute> = #<_absolute>  (remember in local variable if G90 was set)
642  ;
643  g30 (above switch)
644  g38.2 z0 f15 (measure)
645  g91 g0z.2 (off the switch)
646  #1000=#5063 (save reference tool length)
647  (print,reference length is #1000)
648  ;
649  O<restore_abs> if [#<absolute>]
650      g90 (restore G90 only if it was set on entry:)
651  O<restore_abs> endif
652  ;
653  O<measure> endsub
654  
655  ----
656  
657  
658  [[sec:M100-a-M199]]
659  == M100 à M199 Commandes définies par l'utilisateur
660  (((M100 à M199 M-codes définis par l'utilisateur)))
661  (((M-codes définis par l'utilisateur M100-M199)))
662  
663  ----
664  M1-- <P- Q->
665  ----
666  
667  * 'M1 --' - Un entier compris entre 100 et 199.
668  * 'P' - Un nombre passé comme premier argument au programme externe.
669  * 'Q' - Un nombre passé comme second argument au programme externe.
670  
671  Le programme externe, nommé 'M100' à 'M199', (avec un 'M' majuscule et aucune
672  extension) qui doit se trouver dans le répertoire pointé par la variable
673  '[DISPLAY] PROGRAM_PREFIX' du fichier ini, sera exécuté avec les valeurs
674  'P-' et 'Q-' comme étant ses deux arguments. L'exécution du fichier G-code
675  courant passera en pause jusqu'à ce que le programme invoqué soit terminé.
676  Tout fichier exécutable valide peut être utilisé. Le fichier doit se trouver
677  dans le chemin spécifié dans le fichier ini de configuration. Voir la section
678  sur le fichier de configuration dans le manuel de l'intégrateur.
679  
680  Après la création d'un nouveau programme M1nn, l'interface graphique doit être
681  redémarrée pour que le nouveau programme soit pris en compte, autrement une
682  erreur 'M-code inconnu' surviendra.
683  
684  [WARNING]
685  Ne pas utiliser un traitement de texte pour créer ou éditer ces fichiers.
686  Un traitement de texte ajoute des caractères invisibles qui causent des problèmes
687  et empêchent les scripts bash ou Python de fonctionner. Pour ces raisons,
688  utiliser un éditeur de texte tel que 'Gedit' dans Ubuntu ou le Notepad++ dans un
689  autre OS.
690  
691  Le message d'erreur 'M-code inconnu' signifie que:
692  
693  * La commande utilisateur spécifiée n'existe pas.
694  * Le fichier n'a pas été rendu exécutable.
695  * Le nom du fichier comporte une extension.
696  * Le nom du fichier ne suis pas le format suivant: M1nn où nn = 00 à 99.
697  * Le nom de fichier utilise un 'm' minuscule.
698  
699  Exemple d'utilisation, dans un programme G-code, on doit ouvrir et fermer un
700  mandrin automatique via une broche du port parallèle, on appellera
701  respectivement M101 pour ouvrir le mandrin et M102 pour le fermer. Les
702  deux scripts bash correspondants, appelés M101 et M102 seront créés avant
703  le lancement de LinuxCNC puis rendus exécutables, par exemple par un clic
704  droit puis 'propriétés → permissions → Exécution'. S'assurer que cette
705  broche du port parallèle n'est pas déjà utilisée dans un fichier de HAL.
706  
707  .Exemple de fichier pour M101 
708  ----
709  #!/bin/bash
710  # ce fichier met la broche 14 du port à 1 pour ouvrir le mandrin automatique
711  halcmd setp parport.0.pin-14-out True
712  exit 0
713  ----
714  
715  .Exemple de fichier pour M102
716  ----
717  #!/bin/bash
718  # ce fichier met la broche 14 du port à 0 pour fermer le mandrin automatique
719  halcmd setp parport.0.pin-14-out False
720  exit 0
721  ----
722  
723  Pour passer des variables à un fichier M1nn, utiliser les mots facultatifs
724  P et Q de cette façon:
725  
726  ----
727  M100 P123.456 Q321.654
728  ----
729  
730  .Exemple pour M100
731  ----
732  #!/bin/bash
733  tension=$1
734  vitesse=$2
735  halcmd setp thc.voltage $tension
736  halcmd setp thc.feedrate $vitesse
737  exit 0
738  ----
739  
740  Pour ouvrir un message graphique et passer en pause jusqu'à ce que la fenêtre
741  du message soit fermée, utiliser un programme comme 'Eye of Gnome' pour
742  afficher le fichier graphique. Quand la fenêtre sera fermée, le programme
743  reprendra.
744  
745  .Exemple pour M110, affichage d'un graphique avec passage en pause
746  ----
747  #!/bin/bash
748  eog /home/robert/linuxcnc/nc_files/message.png
749  exit 0
750  ----
751  
752  Pour afficher un message graphique en continuant le traitement du fichier
753  G-code, ajouter un caractère esperluette à la commande.
754  
755  .Exemple pour M110, affichage d'un graphique sans passer en pause
756  ----
757  #!/bin/bash
758  eog /home/robert/linuxcnc/nc_files/message.png &
759  exit 0
760  ----
761  
762  // vim: set syntax=asciidoc: