CNC Path Analyzer

Sous-programmes M98/M99 : écrire une forme répétée une fois et l'appeler plusieurs fois

Explique, avec un exemple, la structure d'appel d'un sous-programme par M98 et de retour par M99, le numéro P et le nombre de répétitions L, comment usiner la même rainure à plusieurs endroits avec un sous-programme incrémental, et les types d'erreurs d'appel.

Pourquoi utiliser des sous-programmes ?

Usiner la même rainure à cinq endroits, ou reprendre plusieurs fois le même contour en ne changeant que la profondeur, est courant. Copier-coller les mêmes blocs à chaque fois allonge le programme, et corriger une cote oblige à corriger les cinq endroits. En oublier un seul donne une pièce rebutée dont une des cinq rainures a une cote différente.

Un sous-programme isole la partie répétée dans un programme distinct, que le programme principal appelle au besoin. La forme n'est maintenue qu'à un seul endroit, et le programme principal n'a plus qu'à indiquer « où, et combien de fois ».

Appel et retour

InstructionSignificationExemple
M98 P_Appelle le programme de numéro P (numéro O)M98 P3100
L_ ou premiers chiffres de PNombre de répétitionsL3 → 3 fois
M99Retour à la ligne suivant le bloc d'appelDernière ligne de O3100
M99 P_Retour, mais vers le numéro de séquence indiquéUtilisé pour les branchements et les boucles

Exemple : trois rainures avec un sous-programme incrémental

Le sous-programme O3100 est écrit en incrémental G91. Depuis la position actuelle, il descend de 6 mm, usine une rainure de 30 mm en X, remonte de 6 mm et se décale de 10 mm en Y en revenant au X de départ. La position finale devient le départ de la répétition suivante : il suffit donc de répéter trois fois le même appel pour obtenir trois rainures espacées de 10 mm.

Appeler trois fois le sous-programme O3100 avec L3 pour usiner trois rainures espacées de 10 mm

O3007
T1 M6
G21 G90 G17 G94
G54
S3000 M03
G00 X0. Y0. Z5.
M98 P3100 L3
G90 G00 Z50.
M30
O3100
G91 G01 Z-6. F100
X30. F300
G00 Z6.
X-30. Y10.
M99
Appeler trois fois le sous-programme O3100 avec L3 pour usiner trois rainures espacées de 10 mm — XY trajectoireXY
Le bleu clair en pointillés indique l’avance rapide G00; l’orange continu indique le déplacement de coupe. Les arcs sont des courbes statiques calculées.

La figure ci-dessus est le résultat de l’analyse de ce programme par CNC Path Analyzer (avance rapide 8 segments, coupe linéaire 6 segments).

Règles du programme principal

  • Rétablir le mode : le sous-programme se termine en G91 ; il faut donc reprogrammer G90 dans le programme principal juste après le retour. C'est le rôle du G90 G00 Z50. de l'exemple. Écrire seulement Z50. sans G90 est interprété comme « 50 mm au-dessus de la position actuelle » et non « hauteur 50 ». Ici, le mouvement va vers le haut et ne pose guère de problème, mais dans le bloc d'approche de l'outil suivant il pourrait provoquer une collision.
  • Position de départ : un sous-programme incrémental donne des résultats différents selon la position au moment de l'appel. Programmez clairement la position de départ en coordonnées absolues juste avant l'appel.
  • État des corrections et des cycles : appeler avec une correction de rayon d'outil ou un cycle fixe actif peut faire interpréter les déplacements du sous-programme de façon inattendue. Mettez consciemment de l'ordre dans l'état modal avant et après l'appel.
  • Place de M30 : si le sous-programme est dans le même fichier, placez-le après le M30 du programme principal. Celui-ci se terminant à M30, le sous-programme ne sera pas exécuté par erreur.

Nombre de répétitions et calcul du temps de cycle

Un passage du sous-programme coupe Z 6 mm (F100) et X 30 mm (F300) : 3.6 secondes et 6 secondes, soit 9.6 secondes par passage et environ 29 secondes de coupe pure pour trois. Passer à L5 ne demande qu'un caractère dans le programme principal et donne cinq rainures et environ 48 secondes de coupe. Cela montre qu'une structure répétitive simplifie à la fois les modifications du programme et l'estimation des temps. La méthode de calcul est détaillée dans Calcul du temps d'usinage.

Types d'erreurs d'appel

Dans l'outil, des programmes appelés situés dans des fichiers séparés peuvent être chargés avec le programme principal ; le numéro P est relié au numéro O à l'intérieur du fichier, et non au nom du fichier.

ErreurCauseAffichage dans CNC Path Analyzer
Programme appelé introuvableAucun programme dont le numéro O correspond à PLa ligne d'appel et le numéro introuvable
Numéro O en doubleDeux programmes ou plus avec le même numéroAvertissement indiquant qu'il est impossible de choisir lequel utiliser
M99 manquantLe sous-programme ne se termine pas et enchaîne sur le programme suivantAvertissement de retour manquant
Appels sans finDes programmes s'appellent mutuellement, ou un programme s'appelle lui-mêmeCalcul interrompu pour récursion ou dépassement de limite d'exécution

Questions fréquentes

Un sous-programme peut-il appeler un autre sous-programme ?
Oui. On parle d'imbrication ; le nombre de niveaux admis (en général quatre ou plus) dépend de la commande. Plus l'imbrication est profonde, plus l'état modal est difficile à suivre ; nous conseillons de ne pas dépasser deux niveaux.
En quoi M98 diffère-t-il d'un appel de macro G65 ?
G65 est un appel de macro qui transmet des arguments (A, B, C…) sous forme de variables. On l'utilise pour appeler une même forme avec d'autres cotes, alors que M98 répète la même opération sans arguments.

Étapes suivantes

Vérifier la trajectoire dans CNC Path Analyzer