Sous-programmes CNC — M98, M99
Les sous-programmes permettent de factoriser des séquences répétitives dans un programme CNC. Un appel M98 exécute le sous-programme puis revient au bloc suivant via M99. Syntaxe Fanuc, Siemens 840D et Heidenhain.
Syntaxe de base — Fanuc
; ----- Programme principal ----- O0100 N10 G21 G17 G40 G49 G80 N20 G90 G54 N30 T01 M06 N40 M03 S2000 M08 N50 G00 X10. Y10. N60 M98 P0200 ; Appel sous-programme O0200 (1 fois) N70 G00 X60. Y10. N80 M98 P0200 ; Même sous-programme, autre position N90 G00 X110. Y60. N100 M98 P0200 L3 ; Appel 3 fois consécutives N110 M30 ; Fin programme principal ; ----- Sous-programme ----- O0200 N10 G91 ; Mode incrémental dans le sous-prog N20 G01 Z-10. F200 N30 X30. N40 G00 Z15. N50 G90 ; Retour mode absolu N60 M99 ; Retour au programme principal
Note : M98 Pnnnn — les 4 derniers chiffres de P = numéro du sous-programme (Onnnn). M98 P20200 = appel O0200 × 2 fois (L implicite = premier(s) chiffre(s)).
Comparaison — Fanuc / Siemens / Heidenhain
| CN | Appel | Retour | Numérotation | Répétition | Note |
|---|---|---|---|---|---|
| Fanuc 0i / 30i | M98 P__ | M99 | O1000–O9999 | M98 P__L__ (L = nb répétitions) | P = numéro programme. L optionnel (défaut = 1). |
| Siemens 840D SL | CALL "NOM_PROG" | RET (ou M17) | Nom de fichier arbitraire | CALL "NOM_PROG" P__ (P = nb répétitions) | Sous-programme dans même répertoire ou chemin complet. |
| Heidenhain iTNC / TNC 640 | CALL LBL 10 REP5 | LBL 0 | Numéro de label (LBL) | REP n (n = nb répétitions) | Label dans le même programme (pas de fichier séparé). |
Exemple avancé — grille de trous avec G52
; Perçage Ø8 sur grille 3×3 (pas 30 mm) O0300 ; Programme principal N10 G21 G17 G40 G49 G80 N20 G90 G54 N30 T01 M06 ; Foret Ø8 N40 G43 H01 N50 M03 S1800 M08 N60 G52 X0 Y0 ; Décalage local = 0 (rangée 1) N70 M98 P0310 ; Appel sous-prog rangée N80 G52 X0 Y30. ; Décalage +30Y (rangée 2) N90 M98 P0310 N100 G52 X0 Y60. ; Décalage +60Y (rangée 3) N110 M98 P0310 N120 G52 X0 Y0 ; Annulation décalage N130 G00 Z100. N140 M30 O0310 ; Sous-programme : 1 rangée de 3 trous N10 G83 Z-20. R2. Q5. F120 N20 X0 Y0 ; Trou 1 N30 X30. Y0 ; Trou 2 N40 X60. Y0 ; Trou 3 N50 G80 N60 M99
Cas d'utilisation recommandés
Motifs répétitifs (grilles de trous)
Percer/fraiser le même profil à plusieurs positions XY. Un seul sous-programme, appelé N fois avec décalage d'origine (G52/TRANS).
✓ Code × 10 plus court, modification en un seul endroit
Opérations multi-faces
Même usinage sur 4 ou 6 faces d'un cube. Le sous-programme contient les passes, le programme principal gère les rotations/décalages.
✓ Cohérence garantie entre toutes les faces
Bibliothèque d'opérations standard
Chanfrein, rayon, alésage, centrage — sous-programmes réutilisables entre différents programmes pièce.
✓ Standardisation atelier, moins d'erreurs
Sous-programme de mesure (palpeur)
Macro d'étalonnage ou de mesure en cours d'usinage, appelée au début de chaque opération ou chaque pièce.
✓ Mesure in-process automatisée
Équivalents Siemens 840D SL — CALL et L__
; ----- Programme principal Siemens 840D -----
PROG_PRINCIPAL
G17 G90 G54
T1 D1 M6
S2000 M3 M8
; Appel sous-programme avec répétition (P3 = 3 fois)
CALL "RANGEE_TROUS" P3 ; Appel avec 3 répétitions
; Alternative : syntaxe raccourcie
L100 P3 ; L100 = sous-programme numéroté
G0 Z100
M30
; ----- Sous-programme : RANGEE_TROUS -----
; (fichier séparé nommé "RANGEE_TROUS.SPF")
PROC RANGEE_TROUS
G81 Z=-20 RTP=2 RFP=0 DP=-18 F150
X0 Y0 ; Trou 1
X30 Y0 ; Trou 2
X60 Y0 ; Trou 3
G80
RET ; Retour programme principal (équiv. M99 Fanuc)
; M17 également accepté sur Siemens