Création d'une fonction de calcul

crashray
Apprenti
4 Octobre 2013
62
  • Auteur de la discussion
  • #1
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.
Code:
%1027
...
(Calcul des coordonnees Y)
(Y Section X=L10X)
L101=-(((14-15.1+4*6)/3.95)+30.475)
L102=-(((14-13+4*5.75)/3.95)+30.475)
L103=-(((14-6.7+4*0)/3.95)+30.475)
L104=-(((14-5.1+4*-8.3)/3.95)+30.475)
L105=-(((14-3.6+4*-19.1)/3.95)+30.475)
L106=-(((14-2.6+4*-23.5)/3.95)+30.475)
L107=-(((14-1.1+4*-32.5)/3.95)+30.475)
L108=-(((14-0+4*-32.5)/3.95)+30.475)
(Calcul des coordonnees Z)
(Z Section X=LX)
L1=4*((14-15.1+4*6)/3.95)+99-4*15.1
L2=4*((14-13+4*5.75)/3.95)+99-4*13
L3=4*((14-6.7+4*0)/3.95)+99-4*6.7
L4=4*((14-5.1+4*-8.3)/3.95)+99-4*5.1
L5=4*((14-3.6+4*-19.1)/3.95)+99-4*3.6
L6=4*((14-2.6+4*-23.5)/3.95)+99-4*2.6
L7=4*((14-1.1+4*-32.5)/3.95)+99-4*1.1
L8=4*((14-0+4*-32.5)/3.95)+99-4*0

N10 M54 (avec magnetisation)
N20 M6 T5 D5
N30 G52 G0 Z0
N40 G0 X-100 Y64
N50 M3 S180
N60 G1 F290 ZL1
N70 G41 X-100 YL101
N80 M12 (SOUFFLAGE)
N90 M50 (MARCHE CONVOYEUR 1)
N90 G1 X0 YL101 ZL1 (S1)
N100 G1 X204.5 YL102 ZL2 (S2)
N110 G1 X961 YL103 ZL3 (S3)
N120 G1 X1700 YL104 ZL4 (S4)
N130 G1 X2420 YL105 ZL5 (S5)
N140 G1 X2900 YL106 ZL6 (S6)
N150 G1 X3620 YL107 ZL7 (S7)
N160 G1 X4000 YL108 ZL8 (S8)
N170 G0 X-5280 Y58.186
N180 G40
N190 G0 G52 Z0
N200 M5
N210 M13 (ARRET SOUFFLAGE)
N220 M51 (ARRET CONVOYEUR)
N230 M2
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
 
BFR
Nouveau
3 Décembre 2008
39
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.
 
crashray
Apprenti
4 Octobre 2013
62
  • Auteur de la discussion
  • #4
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 ?
 
BFR
Nouveau
3 Décembre 2008
39
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
Compagnon
27 Octobre 2008
12 860
F-69400 villefranche sur saone
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
 
crashray
Apprenti
4 Octobre 2013
62
  • Auteur de la discussion
  • #7
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
 
crashray
Apprenti
4 Octobre 2013
62
  • Auteur de la discussion
  • #9
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...
 
BFR
Nouveau
3 Décembre 2008
39
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
 
crashray
Apprenti
4 Octobre 2013
62
[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...
 
crashray
Apprenti
4 Octobre 2013
62
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
Compagnon
19 Juin 2008
1 302
Genas (69)
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:
 
La dernière réponse à ce sujet date de plus de 6 mois

Dernières discussions

Haut