1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.

Création d'une fonction de calcul

Discussion dans 'Num' créé par crashray, 26 Novembre 2013.

  1. crashray

    crashray Nouveau

    Messages:
    48
    Inscrit:
    4 Octobre 2013
    Création d'une fonction de calcul
    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
     
  2. BFR

    BFR Nouveau

    Messages:
    31
    Inscrit:
    3 Décembre 2008
    Création d'une fonction de calcul
    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.
     
  3. BFR

    BFR Nouveau

    Messages:
    31
    Inscrit:
    3 Décembre 2008
    Création d'une fonction de calcul
    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.
     
  4. crashray

    crashray Nouveau

    Messages:
    48
    Inscrit:
    4 Octobre 2013
    Création d'une fonction de calcul
    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 ?
     
  5. BFR

    BFR Nouveau

    Messages:
    31
    Inscrit:
    3 Décembre 2008
    Création d'une fonction de calcul
    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.
     
  6. Dodore

    Dodore Compagnon

    Messages:
    6 629
    Inscrit:
    27 Octobre 2008
    Localité:
    F-69400 villefranche sur saone
    Création d'une fonction de calcul
    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

    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
     
  7. crashray

    crashray Nouveau

    Messages:
    48
    Inscrit:
    4 Octobre 2013
    Création d'une fonction de calcul
    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
     
  8. Dodore

    Dodore Compagnon

    Messages:
    6 629
    Inscrit:
    27 Octobre 2008
    Localité:
    F-69400 villefranche sur saone
    Création d'une fonction de calcul
    Comme je le disais ,je ne connais pas cette façon de programmer, je ne peux donc pas t'aider
     
  9. crashray

    crashray Nouveau

    Messages:
    48
    Inscrit:
    4 Octobre 2013
    Création d'une fonction de calcul
    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...
     
  10. BFR

    BFR Nouveau

    Messages:
    31
    Inscrit:
    3 Décembre 2008
    Création d'une fonction de calcul
    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
     
  11. crashray

    crashray Nouveau

    Messages:
    48
    Inscrit:
    4 Octobre 2013
    Création d'une fonction de calcul
    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...
     
  12. JLuc69

    JLuc69 Compagnon

    Messages:
    1 155
    Inscrit:
    19 Juin 2008
    Localité:
    Genas (69)
    Création d'une fonction de calcul
    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
     
  13. crashray

    crashray Nouveau

    Messages:
    48
    Inscrit:
    4 Octobre 2013
    Création d'une fonction de calcul
    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 ?
     
  14. andre37

    andre37 Apprenti

    Messages:
    79
    Inscrit:
    17 Février 2013
  15. JLuc69

    JLuc69 Compagnon

    Messages:
    1 155
    Inscrit:
    19 Juin 2008
    Localité:
    Genas (69)
    Création d'une fonction de calcul
    Tu supprime juste les M2 :wink:
     
Chargement...

Partager cette page