Box

Box
Accueil Inscription NEWS(7) Statistiques
Box Box
Box

Box

3.1 - Les macros clients


L'appel de sous-programmes est très utile lorsque l'on doit répéter un usinage particulier. Ce sous-programme peut être appelé plusieurs fois (dans le cadre d'un coutour à executer en plusieurs passes en profondeur : on l'écrira en absolu) ou à plusieurs endroits de la pièce (dans le cas d'un alésage en contournage : on l'écrira en relatif).

L'inconvenient de ce principe, c'est que les dimentions de la forme sont définies "en dur". C'est à dire que, dans le cas de l'alésage, on à inscrit le diamètre en milimètres. Donc ce sous-programme ne sera utilisable que pour un seul diamètre.

Pour palier à ce problème, FANUC a mis à notre disposition les macros client.

Qu'est ce que les macros client ?
Les macros client sont, en fait, des sous-programmes qui accèptent des arguments à l'appel (appelés adresse). Ces sous-programmes pourront éffectuer des opérations arithmétiques et logiques avec les variables reçues lors de l'appel. Ils facilitent la création de programmes spéciaux pour un travail particulier.

Comme un petit dessin vaut mieux qu'un long discourt, voici un petit exemple pratique :
Soit à réaliser les alésages en contournage du plan ci-dessous (dans de la tôle de 1 millimètre dépaisseur pour le cas qui nous interesse)

En programmation normaleAvec macro client
  O0001(PROG. PRINCIPAL)
  ...
  T1 M6(APPEL OUTIL)
  G0 G90 G54 X50. Y30. M3 S1000 D1
  G43 H1 Z2. M8
  M98 P2(SOUS PROG. POUR D24)
  X50. Y70.
  M98 P3(SOUS PROG. POUR D40)
  X100. Y70.
  M98 P2(D24)
  X100. Y30.
  M98 P3(D40)
  X150. Y30
  M98 P2(D24)
  X150. Y70.
  M98 P3(D40)
  G0 G53 Z0 M9
  M30
  
  O0002(SOUS PROG. D24)
  G1 Z-1.5 F200
  G41 G91 X12.
  G3 I-12.
  G1 G40 X-12.
  G0 G90 Z2.
  M99
 
  O0003(SOUS PROG. D40)
  G1 Z-1.5 F200
  G41 G91 X20.
  G3 I-20.
  G1 G40 X-20.
  G0 G90 Z2.
  M99
  
  O0001(PROG. PRINCIPAL)
  ...
  T1 M6(APPEL OUTIL)
  G0 G90 G54 X20. Y20 M3 S1000 D1
  G43 H1 Z2. M8
  G65 P2 X50. Y30. Z-1.5 D24(SOUS PROG. POUR D24)
  G65 P2 X50. Y70. Z-1.5 D40(SOUS PROG. POUR D40)
  G65 P2 X100. Y70. Z-1.5 D40
  G65 P2 X100. Y30. Z-1.5 D24
  G65 P2 X150. Y30  Z-1.5 D40
  G65 P2 X150. Y70. Z-1.5 D24
  G0 G53 Z0 M9
  M30
  
  O0002(SOUS PROG. D24)
  G0 X#24 Y#25
  #1=#7/2(RAYON PLUTOT QUE DIAMETRE)
  G1 Z#26 F200
  G41 G91 X#1
  G3 I-#1
  G1 G40 X-#1
  G0 G90 Z2.
  M99
  

Alors, ces quelques lignes demandent quand même quelques explications :
Je ne parlerais pas du programme "normal", je pense qu'il n'y a pas de soucis là-dessus.

La fonction préparatoire G65 est un appel de sous-programme qui accepte des arguments. L'adresse P est obligatoire et correspond au numéro du sous-programme à appeler.
Les autres adresses (X, Y, Z, D, ...) sont des lettres autorisées et affectées à des numéros de variables. Lors de l'appel, toutes les variables sont mises à zéro, sauf celles présentes en argument.

Voilà le tableau des adresses de type I tel que donné dans le manuel de programmation :


Les adresses X, Y, Z et D sont reçues par la macro client comme variables #24, #25, #26 et #7.
Dans la macro client, on peut utiliser ces variables de la façon qu'il nous convient. Je suggérerais simplement d'utiliser, si possible, les adresses correspondantes à l'utilisation que l'on veut en faire : par exemple X pour une position en X ...
Dans la macro client, j'utilise une variable #1 qui reçoit le résultat d'une opération arithmétique simple : le résultat de la division de la variable #7 par 2. La variable #7 est, en fait, l'argument D lors de l'appel. Comme je passe en argument le diamètre à usiner, je dois calculer le rayon pour pouvoir l'utiliser dans la macro. Il est évident que, si je veux utiliser #1 pour recevoir un résultat, il ne faut pas avoir à utiliser l'adresse A comme argument dans l'appel.

Lors de l'appel, si on omet les adresses X et Y, la macro fonctionne et le diamètre sera réalisé avec les coordonnées 0,0 comme centre.
Si l'adresse Z est omise, la macro fonctionne toujours mais l'alésage sera réalisé à Z0.
Par contre, si l'adresse D est omise, une erreur sera produite car on ne peut pas réaliser un cercle de rayon 0.
Pour palier à ce problème, on utilise les opérations logiques pour tester les valeurs des arguments important.

Test sur le diamétre : IF[#7EQ0]GOTO1000
Il faut lire : SI la variable #7 est égale à 0 alors aller à la ligne N1000.
Et il faudra modifier la macro de cette façon :

  O0002(SOUS PROG. D24)
  IF[#7EQ0]GOTO1000
  G0 X#24 Y#25
  #1=#7/2(RAYON PLUTOT QUE DIAMETRE)
  G1 Z#26 F200
  G41 G91 X#1
  G3 I-#1
  G1 G40 X-#1
  G0 G90 Z2.
  N1000 M99

Exemple de macro client :


Perçage de trous sur un diamètre.
Programme principalMacro client
O0001
...
T5 M6 (FORET D5)
G0 G90 G54 X25 Y0 M3 S2000(JE ME POSITIONNE N'IMPORTE OU)
G43 H5 Z20. M8
G81 Z-15 F300 K0 (K0=NE PAS EXECUTER LE CYCLE)
(ATTENDRE UNE POSITION)
G65 P2 X18. Y15. D50. K5 A12.
(P2       =NUMERO DE LA MACRO)
(X18. Y15.=POSITION CENTRE CERCLE)
(D50.     =DIAMETRE DU CERCLE)
(K5       =NOMBRE DE TROUS)
(A12.     =ANGLE DE DEPART DU PREMIER TROU)
G80 Z50.
...
M30
O0002(TROUS SUR UN DIAMETRE)
IF[#6EQ0]GOTO1000(SI K OMIS)
IF[#7EQ0]GOTO1000(SI D OMIS)
#2=#7/2(RAYON)
#3=360/#6(ANGLE ENTRE TROUS)
#4=#6(NOMBRE DE BOUCLE)
#5=#1(ANGLE DEPART)
WHILE[#4GT0]DO1
#21=#24+[#2*COS[#5]](POSITION X)
#22=#25+[#2*SIN[#5]](POSITION Y)
X#21 Y#22(ALLER A LA POSITION CALCULEE)
#5=#5+#3(INCREMENTATION DE ANGLE)
#4=#4-1(DECREMENTATION DE NBR TROU)
END1
N1000M99
Cette macro est utilisable telle quelle. Il est possible d'y apporter des améliorations, notament sur les omissions en prévenant l'utilisateur sur l'erreur commise.
Il est aussi possible d'intégrer un paramètre pour forcer un angle entre les trous (six trous tous les dix degrés)...
Box Box

CSS Valide !