Box Box


Box Box
Box Box
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 variableType de variableFonction
#0Variable locale toujours à 0Cette variable est toujours zéro. Aucune valeur ne peut être attribuée à cette variable.
#1 à #33Variables localesLes 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 communesLes 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èmeLes 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.
FonctionFormatRemarques
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érateurSignification
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 blocAppel 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çaisEn 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
Box Box

CSS Valide !