CNCYRON
PROGRAMMATION8 min de lecture

Sous-programmes et programmation paramétrique CNC Fanuc

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 couvre les concepts fondamentaux avec des exemples complets.

Concepts clés

Sous-programme simple (M98/M99)

Factorisation d'une séquence répétée dans un programme dédié. Appelé avec M98 P[numéro], retourné avec M99.

M98 P[numéro_sous_prog] L[nombre_répétitions]

M98 P1000 L4 → appelle O1000 quatre fois

Variables locales #1–#33

Variables transmises à un sous-programme via les adresses A–Z dans l'appel. #1=A, #2=B, #3=C… #24=X, #25=Y, #26=Z.

G65 P[sous-prog] [adresse=valeur…]

G65 P9010 X25. Y15. Z-5. → #24=25, #25=15, #26=-5

Variables communes #100–#149

Variables persistantes entre programmes (jusqu'à la mise hors tension selon config). Idéal pour compteurs, décalages cumulatifs.

#100 = [expression]

#100 = #100 + 10. → incrémente de 10 à chaque appel

Structures de contrôle

Branchement conditionnel IF/GOTO et boucle DO/WHILE pour les séquences répétées avec condition d'arrêt.

IF [condition] GOTO N[num] | DO m; … END m

IF [#100 GT 100] GOTO 99 → sortie si > 100

Exemples complets

Réseau de trous sur cercle — sous-programme + variables

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

G65 transmet les paramètres — #1=A (Xc), #2=B (Yc), #3=C (rayon), #7=D (nb trous). WHILE/DO crée la boucle.

Poche rectangulaire paramétrique — M98/M99

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

#100–#104 définissent la poche. Le WHILE découpe en passes de ap=3 mm jusqu'à la profondeur finale.

📖 Voir aussi : Macros Fanuc — variables et automatisation · Cycles G73/G74/G75 tournage

← Blog CNC