Création d'une fonction de calcul

  • Auteur de la discussion crashray
  • Date de début
C

crashray

Apprenti
Bonjour,
Je débute dans la programmation d'une NUM. Je fais un programme d'usinage qui se base sur des sections avec des coordonnées X/Y/Z pour le déplacement de la fraise.
La coordonnée X est obtenue directement par le plan d'usinage mais la position Y et Z sont obtenus par calcul à partir de 2 côtes que l'on a (A et B) sur les plans. Dans le programme suivant le A varie de {6,5.75,0,-8.3,-19.1,-23.5,-32.5,-32.5} et le B{15.1,13,6.7,5.1,3.6,2.6,1.1,0}. Le reste de la fonction est constante.
Je voudrais pouvoir "simplifier" le programme pour pouvoir reprendre le "corps" et changer juste les cotes d'entrée pour un autre usinage avec des cotes de section et A/B différente. Je sais pas trop si je peux utiliser des listes ou des matrices dans mes programmes.
Je vois 3 améliorations possibles :
1) Créer 2 fonctions : CoordY(A,B) et CoordZ(A,B) qui me sort les coordonnées en fonction des 2 cotes de la sections.
2) Utiliser des listes/matrices pour pouvoir faire un truc du genre
G1 ListeX(1) YCoordY(A(1),(B(1)) ZCoordZ(A(1),(B(1)) (S1)
G1 ListeX(2) YCoordY(A(2),(B(2)) ZCoordZ(A(2),(B(2)) (S1)
3) Créer une boucle qui détecte le nombre de section et qui fait un truc du genre :
G1 ListeX(k) YCoordY(A(k),(B(k)) ZCoordZ(A(k),(B(k)) (Sk)

Voilà je suis ouvert à toute idée.
Merci
 
B

BFR

Nouveau
Bonjour

Tu trouvera pour la création de tableau etc... dans le manuel de programmation complémentaire. Si joint un extrait non exhaustif...

VAR (TABLEAU DES AXES DES GORGES)
[AXE(5,LINE)]=45,25,0,0,0
=55,25,0,0,0,65,25,45,0,0
=75,25,50,0,0,85,25,55,0,0
=95,25,60,0,0,105,25,51,77,0
=115,25,55,85,0,125,25,58,91,0
=135,25,61,97,0,155,25,68,111,0
=165,25,71,117,0,175,25,75,125,0
=185,25,78,131,0,195,25,65,105,145
=205,25,70,115,160,225,25,75,125,175
=245,25,80,135,190,285,25,90,155,220
=295,25,93,161,229

ENDV

Cordialement

Franck B.
 
B

BFR

Nouveau
Rebonjour

Si c'est une NUM 1060 on ne peut pas utiliser les parenthèses dans les calculs L101=-(((14-15.1+4*6)/3.95)+30.475), elle ne servent que pour les commentaires.

Cordialement

Franck B.
 
C

crashray

Apprenti
BFR a dit:
Rebonjour

Si c'est une NUM 1060 on ne peut pas utiliser les parenthèses dans les calculs L101=-(((14-15.1+4*6)/3.95)+30.475), elle ne servent que pour les commentaires.

Cordialement

Franck B.
Merci pour vos deux réponses. J'ai imprimer le manuel de programmation complémentaire mais pas beaucoup d'exemple pour comprendre. Dans l'exemple, il ne faut pas mettre [AXE(5,11)] ? Il détecte le nombre de ligne ?

Concernant les parenthèses, comment on peut éviter ce problème ? Faire des étapes de calcul pour être sûr de la priorité des calculs ?
 
B

BFR

Nouveau
Rebonjour

Chez Num pas de parenthèses les calculs s’effectuent au fur et à mesure (perturbant au début) donc pas de priorité. Au vu de ce que tu à programmé je pense que ton niveau est un peu juste, mais de toute façon avec les exemples fournies ont y arrive.Je programme essentiellement en variable symbolique beaucoup plus de souplesse pour les programmes paramétrées. Pour des exemples de programmes me joindre en MP.

Cordialement

Franck B.
 
Dodore

Dodore

Compagnon
Bonjour
J’ai corrigé parce que je viens de feuilleter le manuel de programmation complémentaire que je ne connaissais pas
Pour quelle raison est ce que tu es obligé de faire une telle programmation?
Si tu es vraiment débutant, il me semble que tu débutes par le plus difficile

crashray a dit:
Merci pour vos deux réponses. J'ai imprimer le manuel de programmation complémentaire mais pas beaucoup d'exemple pour comprendre. Dans l'exemple, il ne faut pas mettre [AXE(5,11)] ? Il détecte le nombre de ligne ?

Concernant les parenthèses, comment on peut éviter ce problème ? Faire des étapes de calcul pour être sûr de la priorité des calculs ?

pour éviter les parenthèses il faut faire des calculs intermédiaires en utilisant les variables L
exemple
(( 25+3 )X ( 18-4 ) ):2
chez NUM on écrira
L1= 25+3
L2 =18-4
L3 =L1*L2
L4 =L3/2
je ne suis plus très sur du signe divisé /
tu as ici un exemple de programmation paramétrée
 
C

crashray

Apprenti
Si j'ai bien compris je peux faire à la place de ma formule :
L101=-(((14-15.1+4*6)/3.95)+30.475)
plutôt

VAR
[YS1]
[AS1]=6
[BS1]=15.1
ENDV
...
[YS1]=4*[AS1]+14-[BS1] [YS1]=-[YS1]/3.95-30.475


et après dans mon programme de déplacement :
G0 X0 Y[YS1] Z[ZS1]

Si oui après est-ce que je peux faire pour un usinage avec 8 profils :

VAR
[YS1] [YS2] [YS3] [YS4] [YS5] [YS6] [YS7] [YS8]
[AUSINAGE(8)]=6,5.75,0,-8.3,-19.1,-23.5,-32.5,-32.5
[BUSINAGE(8)]=15.1,13,6.7,5.1,3.6,2.6,1.1,0
ENDV
[YS1]=4*[AUSINAGE(1)]+14-[BUSINAGE(1)] [YS1]=-[YS1]/3.95-30.475
[YS2]=4*[AUSINAGE(2)]+14-[BUSINAGE(2)] [YS2]=-[YS2]/3.95-30.475
...

Comme ça pour un autre usinage, je change juste mes cotes de définition de section dans les tableaux et le reste du programme reste idem.

Merci
 
Dodore

Dodore

Compagnon
Comme je le disais ,je ne connais pas cette façon de programmer, je ne peux donc pas t'aider
 
C

crashray

Apprenti
J'avance doucement mon programme mais j'ai une :
Erreur 195 Saturation de la pile programme[/color]
A ce que j'ai compris, j'ai trop de variable :
6000%
VAR
[XSECTJP(8)]=0,204.5,961,1700,2420,2900,3620,9000
[XSECTTA(8)]
[PETITPAT(8)]=100,102.5,111.7,120.7,129.5,137.5,142,142
[DELARDY(8)]
[PLAN16(8)]=3,5.5,14.7,23.7,32.5,32.5,32.5,32.5
[YAXE]=-233,703
[N] [CALCUL1] [CALCUL2] [CALCUL3]
ENDV

Comment connaître son max de variable autorisé ? Et est-il possible de le changer ?
Edit :
Après moult test et recherche en fait c'est la virgule au lieu du point :
[YAXE]=-233 .[/color]703
Dur dur...
 
B

BFR

Nouveau
Bonsoir

Je me pose la question est tu sur que tu veut programmer en symbolique parce que c'est beaucoup plus pointu à programmer surtout si tu manque d'expérience.
pour ce qui est du max autorisé je ne suis jamais arrivé au bout. Je te joint un exemple qui pourra peut être t'aider. Ma démarche à l'origine pour programmer en symbolique est plutôt le curiosité.

Cordialement

Franck B.

6000%
VAR
[XSECTJP(8)]=0,204.5,961,1700,2420,2900,3620,9000
[XSECTTA(8)]--------------------------------------------------------------------------tu créer un tableau vide !
[PETITPAT(8)]=100,102.5,111.7,120.7,129.5,137.5,142,142
[DELARDY(8)]--------------------------------------------------------------------------tu créer un tableau vide !
[PLAN16(8)]=3,5.5,14.7,23.7,32.5,32.5,32.5,32.5
[YAXE]=-233,703
[N] [CALCUL1] [CALCUL2] [CALCUL3]
ENDV

Un exemple concret.

%999
(PROG. ALESAGE CYCLE DES MORS)
(MAJ-09/09-OP->)

VAR (PARAMETRES A MODIFIER)

[POST-OUT]=6
[COR-OUT]=21

[DIA-AL]=38.40
[DIA-SOR]=25
[LG-AL]=32.5

[HT-PAS]=2
[CH-ENTRE]=.2
[OPT-DEG]=1 (DEGAGEMENT=1 SINON 0)
[OPT-EB]=0 (EBAUCHE=1 SINON=0)

(DRESSAGE FACE)
[DIA-FACE]=50
[RAY-FACE]=1.2
[OPT-FACE]=0 (FACE=1 SINON=0)

(------------)
[VTR]=400
[Fn.EB]=.10
[Fn.FI]=.08

(---DIVERS---)
[DIA-DPR][JAUG-Z]=51000[RAY]=52000
[DBU-DEG][DIA-DEG][GARD]=1
ENDV

(ZONE DE CALCUL)
[DIA-DPR]=[CH-ENTRE]+[GARD]*2+[DIA-AL]
[DBU-DEG]=[LG-AL]-2
[DIA-DEG]=[DIA-AL]+.2
[JAUG-Z]=[JAUG-Z]+[COR-OUT]
[RAY]=[RAY]+[COR-OUT]
L100=[DIA-AL]+[RAY-FACE]+[RAY-FACE]

L199=E62000+E62001+E[JAUG-Z]/1000+100
N10 GG40 G52 X-100 ZL199 G97 S[VTR] M4
M6 T[POST-OUT] D[COR-OUT]
GX[DIA-SOR]
Z[GARD]
G79 [OPT-EB]=0 N20
G64 N20 N40 I-.1 K.1 P[HT-PAS] F[Fn.EB]
G1 X[DIA-SOR] Z-[LG-AL]
G1 X[DIA-SOR] Z[GARD]
G1 X[DIA-DPR] Z[GARD]
G80 G0 G40 X[DIA-DPR] Z[GARD]
N20 G1 G41 X[DIA-DPR] Z[GARD]
X[DIA-AL] Z-[CH-ENTRE] F[Fn.FI]
G79 [OPT-DEG]=0 N30
X[DIA-AL] Z-[DBU-DEG]
X[DIA-DEG]
N30 Z-[LG-AL]
N40 X[DIA-SOR]
GG40 Z-.1 EG50
G79 [OPT-FACE]=0 N50
GX[DIA-AL]
G1 X[DIA-FACE] F.08
Z1
GXL100 G59 X-.1
G1 G41 Z-.1 F.05
G2 X[DIA-AL] Z-[RAY-FACE] R[RAY-FACE]
G1 G91 X-.1 Z-1
X-1
N50 G90 G40 GZ100 M5
GG40 G52 X-100 ZL199
M2
 
C

crashray

Apprenti
[XSECTTA(8)]--------------------------------------------------------------------------tu créer un tableau vide !
En fait je les remplis après par calcul :
FOR [N]=1 TO 8 BY 1 DO
[XSECTTA(N)]=9000-[XSECTJP(N)]
ENDF

FOR [N]=1 TO 8 BY 1 DO
[DELARDY(N)]=[PETITPAT(N)]-75+14
ENDF

J'ai une petite question par contre dans les boucles FOR il faut mettre des N100 ?
FOR [N]=7 DOWNTO 1 BY -1 DO
N180 G1 X [XSECTTA(N)] Y [DELARDY(N)]
ENDF

Parce que dans le cas précédent, il fait plusieurs N180 et ça doit pas bien marcher...
 
JLuc69

JLuc69

Compagnon
Que veux tu obtenir comme forme à la fin ?
Je n'arrive pas trop à comprendre le but :oops:
Pourrais tu mettre un croquis de ta pièce avec les cotes qui changent et celles qui ne changent pas ?
Au moins pour que je comprenne la problématique :P
 
C

crashray

Apprenti
J'avance pas mal mon projet. Je voudrais maintenant enchaîne 3 usinages que j'ai fait avec 3 programmes différents.
Les programmes sont %1039 %1025 et %1026 et fonctionnent correctement.
J'ai essayé de faire un nouveau programme qui appellerait ces 3 programmes à la suite sans intervention de l'opérateur :
N10 G77 H1039
N20 G77 H1025
N30 G77 H1026
N40 M2

Le premier sous-programme se déroule normalement mais le deuxième ne se lance pas. Je pense que ça doit être le M2 à la fin du sous-programme %1039 qui arrête non seulement le sous-programme mais également le programme principal sans passer au sous-programme suivant.
Quels sont les solutions pour contourner ce problème ?
Je pensais faire un appel avec les blocs en enlevant le dernier bloc par exemple si :
%1039
N10 ..
..
N150 M2

Alors :
N10 G77 H1039 N10 N140
N20 G77 H1025 N10 N210
N30 G77 H1026 N10 N80
N40 M2

Est-ce que ça marche et y a t'il une solution plus simple ?
 
JLuc69

JLuc69

Compagnon
crashray a dit:
J'avance pas mal mon projet. Je voudrais maintenant enchaîne 3 usinages que j'ai fait avec 3 programmes différents.
Les programmes sont %1039 %1025 et %1026 et fonctionnent correctement.
J'ai essayé de faire un nouveau programme qui appellerait ces 3 programmes à la suite sans intervention de l'opérateur :
N10 G77 H1039
N20 G77 H1025
N30 G77 H1026
N40 M2

Le premier sous-programme se déroule normalement mais le deuxième ne se lance pas. Je pense que ça doit être le M2 à la fin du sous-programme %1039 qui arrête non seulement le sous-programme mais également le programme principal sans passer au sous-programme suivant.
Quels sont les solutions pour contourner ce problème ?
Je pensais faire un appel avec les blocs en enlevant le dernier bloc par exemple si :
%1039
N10 ..
..
N150 M2

Alors :
N10 G77 H1039 N10 N140
N20 G77 H1025 N10 N210
N30 G77 H1026 N10 N80
N40 M2

Est-ce que ça marche et y a t'il une solution plus simple ?
Tu supprime juste les M2 :wink:
 
C

crashray

Apprenti
JLuc69 a dit:
crashray a dit:
J'avance pas mal mon projet. Je voudrais maintenant enchaîne 3 usinages que j'ai fait avec 3 programmes différents.
Les programmes sont %1039 %1025 et %1026 et fonctionnent correctement.
J'ai essayé de faire un nouveau programme qui appellerait ces 3 programmes à la suite sans intervention de l'opérateur :
N10 G77 H1039
N20 G77 H1025
N30 G77 H1026
N40 M2

Le premier sous-programme se déroule normalement mais le deuxième ne se lance pas. Je pense que ça doit être le M2 à la fin du sous-programme %1039 qui arrête non seulement le sous-programme mais également le programme principal sans passer au sous-programme suivant.
Quels sont les solutions pour contourner ce problème ?
Je pensais faire un appel avec les blocs en enlevant le dernier bloc par exemple si :
%1039
N10 ..
..
N150 M2

Alors :
N10 G77 H1039 N10 N140
N20 G77 H1025 N10 N210
N30 G77 H1026 N10 N80
N40 M2

Est-ce que ça marche et y a t'il une solution plus simple ?
Tu supprime juste les M2 :wink:
Ouais mais j'aurai voulu que mes sous programme puisse se lancer indépendamment.
J'ai fait
N10 G77 H230 N10 N170
En m'arrêtant juste avant le M2 et ça marche
 
C

crashray

Apprenti
Bonjour,
J'essaye de faire un usinage d'un genre de chanfrein sur une poutre d'épaisseur 80mm. J'ai à prendre 35mm au maximum mais je ne peux faire des passes que de 5mm dû au vibration.
D'habitude j'utilise les décalages opérateurs G59 et les boucles G77 mais là ça fait 7 passes et je trouve l'écriture du programme pas très clair.
870904Sanstitre.jpg

Voilà le début de mon programme qui marche bien :
Je voudrais utiliser une boucle FOR plutôt, voilà ce que j'ai fait pour l'instant :
J'attends que la machine soit disponible pour tester ça. Existe t'il des logiciels pour tester ses programmes sur ordinateur ?
Hésitez pas à me donner des conseils sur ma façon de programmé. Autant que je prenne les bonnes habitudes dès le début.

Edit : Voilà l'erreur pour le moment
Erreur 140 bloc N50
Erreur de programmation en correction de rayon[/color]
C'est le G41 qui fonctionne pas. Mes correcteurs d'outils sont L=125 R=31.5. Une idée sur la raison de cette erreur ?
 

Sujets similaires

D
Réponses
1
Affichages
772
demdandeinfos
D
D
Réponses
1
Affichages
1 073
demdandeinfos
D
DA l'Auvergnat
Réponses
25
Affichages
6 005
DA l'Auvergnat
DA l'Auvergnat
01power
Réponses
3
Affichages
10 727
01power
01power
C
Réponses
8
Affichages
1 711
crashray
C
D
Réponses
9
Affichages
2 090
David80
D
taratata
Réponses
4
Affichages
2 472
taratata
taratata
C
Réponses
6
Affichages
1 900
JLuc69
JLuc69
C
Réponses
7
Affichages
1 517
JLuc69
JLuc69
Haut