Macros Fanuc — variables et structures de contrôle
Les macros Fanuc (Custom Macro B) permettent la programmation paramétrique : boucles, conditions, calculs trigonométriques, lecture des positions machine. Indispensable pour les sous-programmes génériques, les palettiseurs et les cycles de mesure — sur Fanuc 0i / 16i / 30i.
PROGRAMMATION — MACROS FANUC CUSTOM MACRO B
#500–#999 persistent après coupure d'alimentation. Un compteur en #500 non remis à zéro repart de la valeur du cycle précédent — faux comptage et cotes décalées sans alarme. #100–#199 ne se réinitialisent qu'à la mise sous tension, pas entre les pièces. Action : initialiser explicitement toute variable #100-#999 en début de programme si elle doit repartir de zéro (
#500 = 0). Ne jamais assumer qu'une variable #500-#999 est à zéro au démarrage machine. Pour les arguments paramétriques : G65 (récursivité 4 niveaux, arguments A-Z → #1-#26) — pas M98 qui ne passe rien.Types de variables Fanuc
| Plage | Type | Description | Exemple |
|---|---|---|---|
| #1 – #33 | Variables locales | Locales à l'appel de macro (G65). Réinitialisées à chaque appel. #1-#26 correspondent aux arguments A-Z de G65. | #1 = 25.0 ; Argument A du G65 |
| #100 – #199 | Variables communes (groupe 1) | Persistantes pendant toute la session. Partagées entre tous les programmes en mémoire. Remises à zéro à la mise sous tension. | #100 = 0 ; Compteur pièces |
| #500 – #999 | Variables communes (groupe 2) | Persistantes même après coupure d'alimentation (stockées en mémoire non volatile). Idéales pour les paramètres machine permanents. | #500 = 1.5 ; Usure correcteur permanent |
| #1000 + | Variables système (read-only) | Variables machine : #1000 = DIO entrées, #2001+ = correcteurs outils (longueur), #3001 = horloge, #5001-#5005 = positions axes. | #5001 = [position X courante] |
Opérateurs et fonctions mathématiques
| Syntaxe | Opération | Exemple |
|---|---|---|
| #var = valeur | Affectation | #100 = 10.5 |
| #var = #var1 + #var2 | Addition | #100 = #100 + 1 |
| #var = #var1 - #var2 | Soustraction | #1 = #1 - 0.5 |
| #var = #var1 * #var2 | Multiplication | #2 = #1 * 3.14159 |
| #var = #var1 / #var2 | Division | #3 = #1 / #2 |
| SIN[#var] | Sinus (degrés) | #4 = SIN[45] ; → 0.707 |
| COS[#var] | Cosinus (degrés) | #4 = COS[60] ; → 0.5 |
| SQRT[#var] | Racine carrée | #4 = SQRT[2] ; → 1.414 |
| ABS[#var] | Valeur absolue | #4 = ABS[-5.2] ; → 5.2 |
| ROUND[#var] | Arrondi | #4 = ROUND[3.7] ; → 4 |
| FIX[#var] | Partie entière (floor) | #4 = FIX[3.9] ; → 3 |
Structures de contrôle — IF/GOTO et WHILE/DO/END
| Structure | Syntaxe | Description |
|---|---|---|
| IF / GOTO — saut conditionnel | IF [condition] GOTO N___ | Si la condition est vraie, saute au bloc N. Sinon, continue au bloc suivant. Opérateurs : EQ (=), NE (≠), GT (>), GE (≥), LT (<), LE (≤). |
| WHILE / DO / END — boucle | WHILE [condition] DO n / … / END n | Boucle tant que la condition est vraie. n = 1, 2 ou 3 (niveau d'imbrication). Maximum 3 niveaux de WHILE imbriqués. |
Exemple IF / GOTO — saut conditionnel
#100 = 0 N10 IF [#100 GE 10] GOTO N99 ; Sauter si #100 ≥ 10 #100 = #100 + 1 ; Incrémenter G01 X[#100 * 5] F200 ; Déplacement variable GOTO N10 ; Boucle N99 G00 Z100. ; Fin
Exemple WHILE / DO / END — boucle structurée
#1 = 1 ; Compteur WHILE [#1 LE 5] DO 1 ; Répéter 5 fois G91 G01 Z-2. F150 ; Descente 2mm G04 P500 ; Pause 0.5s #1 = #1 + 1 ; Incrémenter END 1 ; Fin boucle G90 G00 Z100.
Appel macro G65 — correspondance arguments / variables
G65 P9001 A25. B10. R5. F200. ; Appel O9001 avec arguments ; Dans O9001 : #1 = 25. (A), #2 = 10. (B), #18 = 5. (R), #9 = 200. (F)
| Arg. | Var. | Arg. | Var. |
|---|---|---|---|
| A | #1 | I | #4 |
| B | #2 | J | #5 |
| C | #3 | K | #6 |
| D | #7 | L | (répétitions) |
| E | #8 | M | #13 |
| F | #9 | Q | #17 |
| H | #11 | R | #18 |
| X | #24 | Y | #25 |
| Z | #26 | S | #19 |
Pièges atelier et conseils terrain
DANGER
Variables #500-#999 persistent après coupure — initialiser explicitement
#500-#999 sont stockées en mémoire non volatile et persistent après coupure d'alimentation. Un compteur en #500 non remis à zéro repart de la valeur du cycle précédent — faux comptage et cotes décalées sans alarme. Toujours initialiser explicitement (
#500 = 0) en début de programme.ATTENTION
G65 vs M98 — passage d'arguments
M98 P__ = appel sous-programme simple, aucun argument transmis. G65 P__ = appel macro avec arguments (A=, B=, X=, Y=, Z=…) mappés sur #1-#26 dans la macro. G65 permet aussi la récursivité (4 niveaux). Utiliser G65 quand le sous-programme doit recevoir des paramètres variables.
INFO
WHILE/DO/END vs IF/GOTO — préférer WHILE pour lisibilité
WHILE/DO/END = boucle structurée, plus lisible, moins sujet aux erreurs. IF/GOTO = saut flexible (sauts complexes, sorties anticipées). Sur vieilles CNC (0M/6M), seul IF/GOTO disponible. Sur Fanuc modernes (0i/30i), préférer WHILE pour les boucles simples.
INFO
#5001-#5005 lecture position WCS / #5021-#5025 lecture MCS
Variables système read-only : #5001=X WCS · #5002=Y WCS · #5003=Z WCS (repère pièce G54-G59). #5021=X MCS · #5022=Y MCS · #5023=Z MCS (machine, indépendant décalages). Exemple :
IF [#5003 GT -100] GOTO N10 — continue si Z au-dessus de -100.ATTENTION
WHILE imbrication max 3 niveaux — G65 récursivité 4 niveaux
WHILE/DO/END supporte max 3 niveaux d'imbrication (DO 1 / DO 2 / DO 3). G65 appel macro supporte 4 niveaux de récursivité. Au-delà : alarme Fanuc P/S 005. Limiter pour la lisibilité du programme.
DANGER
Lettres G / L / N / O / P réservées — non utilisables comme arguments G65
Les lettres G, L, N, O, P ne peuvent pas être utilisées comme arguments G65 (réservées au CN pour codes G, répétitions, numéros de bloc, numéros de programme et paramètres internes). L = nombre de répétitions de la macro (L1 à L9999, optionnel — défaut = 1). Utiliser A-F, H, I-K, M, Q, R, S, X, Y, Z pour passer des paramètres.
📄 OUTIL ATELIER — PDF À IMPRIMER
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
Aller plus loin — calculateurs et ressources
Sous-programmes CNC — M98 / M99/programmation-cnc/g-code/sous-programmes/M98 P__ + M99 retour, comparaison Fanuc/Siemens/Heidenhain, imbrication.G31 — Cycle palpeur/programmation-cnc/g-code/cycles-palpeur/G31 + variables système #5021-#5025 → macros de palpage automatique.Décalages d'origine G54-G59/programmation-cnc/g-code/decalages-origine/Variables système #5221-#5324 — écriture programmable des décalages.Codes G et M — référence/programmation-cnc/g-code/codes-g-m/Liste complète Fanuc/Siemens avec modalité et famille.Cycles fixes de perçage/programmation-cnc/g-code/cycles-percage/G81-G85 + macros pattern polaire avec G68 incrémental + WHILE.Côtes hors tolérances/problemes-usinage/cotes-hors-tolerances/Compteur #500 non remis à zéro = cotes décalées sans alarme.