Programmation paramètrée
Les premières questions que l'on se pose lorsqu'on évoque la programmation paramètrée c'est :
- Qu'est ce que c'est ?
- A quoi ça sert ?
- Comment on l'utilise ?
Pour répondre à ces questions, je vais essayer d'être le plus simple et le plus clair possible.
Tout d'abord, la programmation paramètrée est une programmation normale, mais où l'on fait intervenir des variables qui ont la possibilité de changer en cours de programme (seulement si on
le désir, hein
).
Comment les variables ou paramètres sont gérés dans la machine ?
En fait, c'est un simple tableau à une entrée qui porte un numéro en ligne commençant par #, et la valeur attribuée à cette variable.
N° de variable | Type de variable | Fonction |
#0 | Variable locale toujours à 0 | Cette variable est toujours zéro. Aucune valeur ne peut être attribuée à cette variable. |
#1 à #33 | Variables locales | Les variables locales peuvent uniquement être utilisés dans une macro pour conserver des données comme les résultats d’opérations. Lors de la mise hors tension, les variables locales sont réinitialisées. Lorsqu’une macro est appelée, des lettres sont attribuées aux variables locales. |
#100 – #149 (#199) #500 – #531 (#999) | Variables communes | Les variables communes peuvent être réparties entre différents programmes macro. Lors de la mise hors tension, les variables #100 à #149 sont réinitialisées. Les variables #500 à #531 conservent les données même lors de la mise hors tension. En option, les variables #150 à #199 et #532 à #999 sont également disponibles. |
#1000_ | Variables système | Les variables du système sont utilisées pour lire et écrire une variété d’articles de données CN comme la position actuelle et les valeurs de compensation d’outil. |
Par exemple, si on a l'intention d'utiliser le même sous programme pour une ébauche et une finition et que l'on doit mettre le correcteur
de rayon avec la prise de correction (c'est le cas pour les FANUC 0M) on pourrait très bien paramètrer le correcteur !
Exemple :
Programme pricipal
|
...
...
T1 M6 (OUTIL NUMERO 1)
#100=1 (DEFINITION DE LA VARIABLE AVEC VALEUR = 1)
M98 P1234 F300 (APPEL DU SOUS PROGRAMME)
...
...
T2 M6 (OUTIL NUMERO 2)
#100=2 (DEFINITION DE LA VARIABLE AVEC VALEUR = 2)
M98 P1234 F450 (APPEL DU SOUS PROGRAMME)
...
...
|
Sous programme
|
O1234 (SOUS PROGRAMME DE CONTOURNAGE)
G1 Z-5.
G41 X-2. Y0 D#100 (UTILISATION DE VARIABLE POUR LE CORRECTEUR DE RAYON)
X50. (La première fois, appel du correcteur D1)
Y-50. (La deuxième fois, appel du correcteur D2)
X0
Y2.
G40 X-10.
G0 Z10.
M99
|
Opérations arithmétiques
Les opérations figurant dans le tableau ci-dessous peuvent porter sur des variables. L'expression à droite du signe '=' peut contenir
des constantes et/ou des variables combinées par une fonction ou un opérateur.
Les parenthèses, chez FANUC, sont réservées pour les commentaires. Lors de l'utilisation de fonctions complexes dans l'expression de droite, il conviendra d'utiliser les crochets ouvert/
fermé '[' ']' à la place.
Exemple : pour écrire que le contenu de la variable numéro 100 est égale au contenu de la variable numéro 500 divisée par le contenu de la variable numéro 502 à laquelle il faut rajouter 1, on écrira :
#100 = #500 / [ #502 + 1 ]
Les variables #i, #j et #k dans une expression sont à remplacer par un numéro de variable valide.
Les variables #j et #k peuvent être remplacées par une constante.
Fonction | Format | Remarques |
Définition | #i = #j | | |
Addition Soustraction Multiplication Division | #i = #j + #k #i = #j - #k #i = #j * #k #i = #j / #k
| Pensez à la priorité des opérateurs : multiplication, division, addition et soustraction |
Sinus Arc sinus Cosinus Arc cosinus Tangente Arc tangente | #i = SIN[#j] #i = ASIN[#j / #k] #i = COS[#j] #i = ACOS[#j / #k] #i = TAN[#j] #i = ATAN[#j / #k]
| Un angle est spécifié en degré décimal. Un angle de 90°30'15" est représenté comme 90.504166667° |
Racine carré Valeur absolue Arrondi au plus près Arrondi inférieur Arrondi supérieur Logarithme naturel Fonction exponentielle | #i = SQRT[#j] #i = ABSOLU[#j] #i = ROUND[#j] #i = FIX[#j] #i = FUP[#j] #i = LN[#j] #i = EXP[#j]
| | |
Opérations logiques
Les opérations logiques servent surtout à faire des tests pour des branchements conditionnels, pour l'affectaction d'une valeur à
une variable ou pour des répétitions.
Les différentes opérations logiques :
Opérateur | Signification |
EQ | Egal à |
NE | Différent de |
GT | Suppérieur à |
GE | Supérieur ou égal à |
LT | Inférieur à |
LE | Inférieur ou égal à |
Affectation :
IF[#1GT12]THEN#1=12
Si la valeur de la variable #1 est plus grande que 12, alors la valeur de la variable #1 est égale à 12; sinon, la variable garde sa valeur.
Branchement conditionnel :
IF[#2EQ5]GOTO20
Si la valeur de la variable #2 est égale à 5, alors je vais à la ligne N20; sinon je continue à la ligne en dessous.
Répétition : instruction WHILE
Lorsque l'on veut répéter une séquence d'usinage plusieurs fois, on a notre disposition plusieurs méthodes. La première est celle citée
plus haut (le branchement conditionnel).
La deuxième est l'instruction WHILE.
WHILE[#1LT10]DO1
...
...
#1=#1+1
END1
Une chose important dans ce type de boucle, c'est qu'il faut toujours faire évoluer une variable utilisée dans le test : ici #1
Cette boucle signifie : Tant que la valeur de la variable #1 est plus petite que 10 alors on fait jusqu'à END1.
Lorsque le test devient faut, on saute après le END1 pour continuer le programme.
Il est possible d'imbriquer jusqu'à trois boucle WHILE.
Prenons un exemple concret et faisons les programmes :
Travail à éffectuer : | Surfaçage d'une plaque AU4G de 300mm de long par 250mm de large. |
Matériel à disposition : |
- Un CU avec armoire FANUC

- Le matériel en adéquation pour le bridage (mors crampons)
- Fraise à surfacer Ø63 avec 5 plaquettes
|
Réalisation d'un programme standard : (on considère l'origine en haut à gauche)
O0001(SURFACAGE)
N10 M6 T1(APPEL FRAISE SURFACER)
N20 G0 G90 G54 X-40 Y-20 M3 S2500
N30 G43 H1 Z5 M8
N40 G1 Z0 F1875(0.15/DENT)
N50 X340
N60 Y-70(RECOUVREMENT 50MM)
N70 X-40
N80 Y-120
N90 X340
N100 Y-170
N110 X-40
N120 Y-220
N130 X340
N140 G0 Z5 M9
N150 G53 Y0 Z0
N160 M30
Si nous devons faire plusieurs passes sur Z (par exemple une ébauche et une finition), soit nous recopions les lignes N40 à N130 après la ligne N140 (ceci, sans oublier
de repositionner la fraise à X-40 Y-20) soit nous mettons les lignes N50 à N140 dans un sous programme que nous appelerons après la mise en position et la descente.
Recopie de bloc | Appel de sous programme |
O0001(SURFACAGE)
N10 M6 T1(APPEL FRAISE SURFACER)
N20 G0 G90 G54 X-40 Y-20 M3 S2500
N30 G43 H1 Z5 M8
N40 G1 Z0.5 F1875(0.15/DENT)
N50 X340
N60 Y-70(RECOUVREMENT 50MM)
N70 X-40
N80 Y-120
N90 X340
N100 Y-170
N110 X-40
N120 Y-220
N130 X340
N140 G0 Z10
N150 X-40 Y-20
N160 G1 Z0 F1875
N170 X340
N180 Y-70(RECOUVREMENT 50MM)
N190 X-40
N200 Y-120
N210 X340
N220 Y-170
N230 X-40
N240 Y-220
N250 X340
N260 G0 Z10 M9
N270 G53 Y0 Z0
N280 M30
|
O0001(SURFACAGE)
N10 M6 T1(APPEL FRAISE SURFACER)
N20 G0 G90 G54 X-40 Y-20 M3 S2500
N30 G43 H1 Z5 M8
N40 G1 Z0.5 F1875(0.15/DENT)
N50 M98 P2
N60 X-40 Y-20
N70 G1 Z0 F1875
N80 M98 P2
N90 G53 Y0 Z0 M9
N100 M30
O0002(SOUS PROGRAMME)
N10 X340
N20 Y-70(RECOUVREMENT 50MM)
N30 X-40
N40 Y-120
N50 X340
N60 Y-170
N70 X-40
N80 Y-220
N90 X340
N100 G0 Z10
N110 M99
|
Maintenant, plusieurs petits problèmes se posent à nous :
Si il faut faire plus que 2 passes en Z ? Réponse : soit recopie des blocs, soit encore des appels de sous programme.
Si la pièce change de dimention ? Réponse : retoucher les blocs en conséquence (plus facile avec le sous programme).
Maintenant, entrons dans le vif du sujet : écrire un programme paramétré !
De quoi avons nous besoin ?
- de la longueur de pièce (qui peut changée)
- de la largeur (qui peut changée aussi)
- de l'épaisseur de matière à enlever (en partant du principe que le zéro pièce est toujours sur le dessus)
Pour enlever toute la matière, nous aurons donc besoin de deux boucles :
- une boucle pour surfacer toute la pièce.
- une boucle pour les passes en profondeur.
On écrit le code de cette façon :
En français | En langage FANUC |
Numero de programme
Appel de l'outil
Positionnement
Longueur = 300
Largeur = 250
Epaisseur = 3
Appel correcteur de longueur et positionnement Z
TANT QUE Epaisseur plus grand que 0 faire
Epaisseur = Epaisseur - 2.5
Si Epaisseur plus petit que 0 alors Epaisseur = 0
Position_Y = -20
Déplacement_X = Longueur + 40 + 40
Aller à X-40 Y-20 en rapide
Descendre à Z Epaisseur
TANT QUE Position_Y est plus petit que (Largeur - 30)
Aller à Y Position_Y en absolu
Position_Y = Position_Y - 50
Faire un deplacement relatif en X de Déplacement_X
Inverser le sens de Déplacement_X
FIN TANT QUE Position_Y
Remonter en Z à Epaisseur + 2
FIN TANT QUE Epaisseur
Retour origine Y Z
Fin programme
|
O0001(SURFACAGE PARAMETRE)
N10 T1 M6(FRAISE A SURFACER D63)
N20 G0 G90 G54 X-40 Y-20 M3 S2500
N30 #500=300
N40 #501=250
N50 #502=3
N60 G43 H1 Z[#502+2] M8
N70 WHILE[#502 GT 0]DO1
N80 #502=#502-2.5
N90 IF[#502 LT 0] THEN #502=0
N100 #100=-20
N110 #101=#500+40+40
N120 G0 G90 X-40 Y-20
N130 G1 Z#502 F1875
N140 WHILE[#100 LT [#501-30]]DO2
N150 G90 Y#100
N160 #100=#100-50
N170 G91 X#101
N180 #101=-#101
N190 END2
N200 G0 G90 Z[#502+2]
N210 END1
N220 G0 G53 Y0 Z0 M9
N230 M30
|
Attention aux imbrications, je les aient repérées en couleur
Conclusion :
Le programme ainsi écrit comporte pratiquement autant de lignes de code que le fait de l'écrire de façon "standard". Pour une pièce plus petite,
il serait même légerement plus grand. Le gros avantage, c'est qu'en changeant 3 variables, il est possible de surfacer n'importe quelle pièce
de n'importe quelle dimention et de n'importe quelle surépaisseur !
On peut y apporter quelques améliorations (un programme paramétré n'est jamais totalement optimisé) comme le transformer en macro client et appelé par la fonction
G65 (G65 U300 V250 W3 F1875).
Mais là, je vous laisse cogiter. Si quelqu'un était intérressé mais n'y parvenait pas, il y a toujours ma boite aux lettres pour ça