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: