Sous-programmes et programmation paramétrique CNC — guide complet
Les sous-programmes (M98/M99) et les macros paramétriques (G65, variables #1-#149, WHILE/DO, IF/GOTO)transforment un programme CNC linéaire en code réutilisable et maintenable. Ce guide progresse des bases (appel simple M98) jusqu'aux macros paramétriques avancées (G65 + control flow), avec exemples Fanuc commentés et équivalents Siemens / Heidenhain.
SOUS-PROGRAMMES & MACROS — RÉFÉRENCE
IF [cond] GOTO N_, WHILE [cond] DO m / END m (jusqu'à 3 niveaux DO imbriqués). Imbrication M98 : 4 niveaux standard (8 sur Fanuc 30i récents) — au-delà alarme PS0124. Règle absolue : revenir en G90 avant M99 si le sous-programme passe en G91. Équivalents : Siemens L[n] ou CALL + paramètres R, Heidenhain CALL LBL [n] + Q-params Q1-Q399. Numérotation : éviter O8000-O9999 réservé constructeur Fanuc.1. Bases — appel simple M98/M99
M98 P[numéro] L[répétitions] appelle le sous-programme numéro P. L indique le nombre de répétitions (défaut = 1). M99 termine le sous-programme et retourne au programme appelant. Idéal pour factoriser une séquence répétée plusieurs fois (poche identique en différentes positions).
; Programme principal O0001 — appel simple M98/M99 G54 G90 G21 T01 M06 ; Fraise Ø10 G43 H01 Z50 M03 S3000 ; Usiner la poche A (coin bas gauche) G00 X10 Y10 M98 P1000 ; Appel sous-programme O1000 ; Translater et répéter la même poche en autre position G00 X60 Y10 M98 P1000 M30 ; Fin programme ; ----- Sous-programme O1000 ----- O1000 G91 ; Incrémental pour le sous-prog G01 Z-5 F200 ; Plonger 5 mm G01 X30 F500 G01 Y20 G01 X-30 G01 Y-20 G00 Z10 G90 ; Retour absolu OBLIGATOIRE M99 ; Retour au programme appelant
2. Imbrication — sous-programme dans sous-programme
Un sous-programme peut lui-même appeler un autre sous-programme. Fanuc autorise jusqu'à 4 niveaux (8 sur 30i récents). Au-delà, l'alarme PS0124 (nesting overflow) est déclenchée.
O0002 ; Programme principal M98 P2000 ; Appelle O2000 (niveau 1) M30 O2000 ; Niveau 1 M98 P3000 ; Appelle O3000 (niveau 2) M99 O3000 ; Niveau 2 G01 X10 F300 ; Opération réelle M99 ; Retour au niveau 1, puis niveau 0
3. Concepts intermédiaires — variables et control flow
| Concept | Syntaxe | Exemple |
|---|---|---|
| Sous-programme simple M98/M99 | M98 P[numéro] L[répétitions] | M98 P1000 L4 → appelle O1000 quatre fois |
| Variables locales #1-#33 via G65 | G65 P[sous-prog] [adresse=valeur…] | G65 P9010 X25. Y15. Z-5. → #24=25, #25=15, #26=-5 |
| Variables communes #100-#149 | #100 = [expression] | #100 = #100 + 10. → incrémente à chaque appel |
| Branchement IF/GOTO + boucle DO/WHILE | IF [cond] GOTO N[num] · DO m … END m | IF [#100 GT 100] GOTO 99 → sortie si > 100 |
4. Variables Fanuc — référence rapide
Le système de variables Fanuc se compose de 5 plages distinctes, avec des règles de portée et de persistance différentes. Connaître ces plages évite les conflits de partage et les pertes de données entre macros.
| Variable | Nom | Utilisation |
|---|---|---|
| #1-#26 | Arguments locaux A-Z | Transmis par G65 — valeurs passées lors de l'appel macro. Isolées par niveau d'imbrication. |
| #100-#149 | Variables locales (communes au programme) | Persistantes pendant la macro, partagées entre niveaux. Remises à zéro au reset selon config. |
| #500-#549 | Variables communes NVRAM | Persistantes entre macros et programmes — survivent au reset, sauvées en NVRAM. |
| #1000+ | Variables système | Données machine en lecture seule : position, override, numéro outil, palpeur. |
| #0 | Null / vide | Variable non initialisée — tester IF [#1 EQ #0] pour argument optionnel. |
5. Macros G65 paramétriques — exemples avancés
5.1. Réseau de trous sur cercle — G65 + variables paramétriques
G65 transmet les paramètres : #1=A (Xc), #2=B (Yc), #3=C (rayon), #7=D (nb trous). WHILE/DO crée la boucle. Macro générique réutilisable pour tout réseau circulaire.
O0700 (APPEL RÉSEAU TROUS) G54 G90 T0101 M6 G43 H1 Z50. G97 S1500 M3 M8 G0 X0. Y0. ; Appel macro G65 : centre (0,0), rayon 40, 6 trous, départ 0° G65 P9020 A0. B0. C40. D6. F0. G0 Z100. M5 M9 M30 O9020 (MACRO : TROUS SUR CERCLE) ; #1=A=X centre, #2=B=Y centre, #3=C=rayon, #7=D=nb trous, #9=F=angle départ #101 = #9 (angle courant) #102 = 360 / #7 (incrément angulaire) #103 = 0 (compteur) WHILE [#103 LT #7] DO 1 #24 = #1 + #3 * COS[#101] (X position) #25 = #2 + #3 * SIN[#101] (Y position) G0 X#24 Y#25 G81 Z-15. R2. F150. (cycle perçage) #101 = #101 + #102 (angle suivant) #103 = #103 + 1 (compteur) END 1 G80 M99
5.2. Poche rectangulaire paramétrique — M98/M99 + variables #100
#100-#104 définissent la poche. Le WHILE découpe en passes de ap=3 mm jusqu'à la profondeur finale. Pattern type pour ébauche multipasse paramétrée.
O0800 (PROGRAMME PRINCIPAL) G54 G90 T0202 M6 (FRAISE Ø10) G43 H2 Z50. G97 S3500 M3 M8 ; Variables : longueur, largeur, profondeur, ap par passe #100 = 60. (longueur X) #101 = 40. (largeur Y) #102 = -15. (profondeur Z finale) #103 = 3. (ap par passe) #104 = 0. (Z courant) G0 X-5. Y-5. Z5. WHILE [#104 GT #102] DO 1 #104 = #104 - #103 IF [#104 LT #102] THEN #104 = #102 G1 Z#104 F300. M98 P0801 (usinage contour poche) END 1 G0 Z50. M5 M9 M30 O0801 (SOUS-PROG CONTOUR POCHE) ; Contour poche 60×40, centre (0,0) G41 D2 G1 X-30. Y-20. F600. Y20. X30. Y-20. X-30. G40 G1 X-35. Y-25. M99
6. 3 règles à ne pas oublier
Pour aller plus loin — articles connexes
Mémo Atelier CNC — Paramètres de coupe par matière
Vc, fz, Ra pour 10 matières (acier, inox, alu, titane, Inconel...) + 7 formules essentielles + checklist 16 points. 2 pages, format A4, à imprimer et garder près de la machine.
Aucun spam. Désabonnement en 1 clic. Données utilisées uniquement pour l'envoi de ressources CNCYRON, conformément à notre politique de confidentialité.
Questions fréquentes
Sources et références
- ISO 6983-1:2009 — Format de programmation des commandes numériques (base M98/M99 et G-code).
- AFNOR NF E66-505 — Programmation des pièces sur machines à commande numérique.
- ASM Handbook Volume 16 — Machining (chapitre Numerical Control Programming) — théorie macros paramétriques et automatisation.
- Fanuc — Series 30i Operator's Manual : sous-programmes M98/M99, macros B (G65), variables #1-#999, control flow.
- Heidenhain — TNC 640 User's Manual : CYCL DEF, CALL LBL, Q-params (Q1-Q399).
- Siemens — SINUMERIK 840D Programming Manual Advanced : sous-programmes (L, CALL, EXTCALL), paramètres R, cycles utilisateur.
- Haas Automation — Macro Programming Manual : variables #100-#699, M97 sous-programme local.