CNCYRON

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

CNAppelRetourNumérotationRépétitionNote
Fanuc 0i / 30iM98 P__M99O1000–O9999M98 P__L__ (L = nb répétitions)P = numéro programme. L optionnel (défaut = 1).
Siemens 840D SLCALL "NOM_PROG"RET (ou M17)Nom de fichier arbitraireCALL "NOM_PROG" P__ (P = nb répétitions)Sous-programme dans même répertoire ou chemin complet.
Heidenhain iTNC / TNC 640CALL LBL 10 REP5LBL 0Numé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
Codes G et MG54–G59 Décalages origine← Programmation CNC