BOUCLE DANS MACRO
2 participants
Page 1 sur 2
Page 1 sur 2 • 1, 2
BOUCLE DANS MACRO
Bonjour à Tous
voila le problème je veux faire une macro pour un bouton avec Machscreen pour réaliser une rainure ( bien sur il existe la Macro Brian Baker mais je voudrait faire le mienne) , jusqu'à la ça va Visu GetOEMDRO ok pas de problème
je sais appeler des sous programmes avec M98 et retour avec M99 et utiliser les variables #13 =Z
#13=[#13-0.15] valeur de z à chaque passe -0.15
ça OK
mais je ne peux mettre ces instructions dans une macro en VB Cypress
j essaie une boucle Do loop while avec la condition mais la je bloque complètement depuis trois jours
' Macro voila le bébé
Sub Main()
'Préparation
DoOEMButton (169) 'efface le programme precedant dans Mach3
Ltr = GetOEMDRO (1600) ' Longueur_totale_reglet valeur absolue Longueur_totale
Lar = GetOEMDRO (1590) ' largeur_rainure valeur absolue largeur_totale_reglet
Lon = GetOEMDRO (1610) 'Longueur_Rainure
Pr = GetOEMDRO (1620) 'Profondeur_rainure
Eor = GetOEMDRO (1630) 'Extremité_OrigineE1
Eop = GetOEMDRO (1640) 'Extremité_Opose E2
Eb = GetOEMDRO (1650) 'Ebavurage_Bord
rem Outils
Bv = GetOEMDRO (1660) 'Vitesse_broche
Tn = GetOEMDRO (824) 'Fraise_n°
Df = GetOEMDRO (43) 'Diametre_Fraise
Rf = Df /2 'RayonFraise = Diametre_Fraise /2
Lf = GetOEMDRO (32) 'Long_fraise_H = GetOEMDRO (24)
rem Avance
Ae = GetOEMDRO (1690) ' Avance_ebauche
Ap = GetOEMDRO (1700) ' Avance_plonge
Av = GetOEMDRO (1710) 'Avance_ebavurage
rem Passe
Pe = GetOEMDRO (1730) ' Passe_ebauche
Pp = GetOEMDRO (1740) ' Passe_plonge
Pv = GetOEMDRO (1750) ' Passe_ebavurage
rem Hauteur
Hra = GetOEMDRO (1760) 'Hauteur_rapide deplacement degagementrapide
Hre = GetOEMDRO (1770) ' Hauteur_retrait debourrage
Ha = GetOEMDRO (1780) ' Hauteur_avance passage en G1
If Df >= lar Then ' If Diametre_Fraise >= lr Then
Code"(MSG,Diametre outils trop grand)"
Exit Sub
End If
If Ae <= 0 Then 'Avance_ebauche <= 0 Then
Code"(MSG,Erreur d Avance Ebauche)"
Exit Sub
End If
If Pr >= 0 Then 'Profondeur_Rainure >= 0
Code"(MSG,la Pronfondeur Rainure doit etre négative)"
Exit Sub
End If
If Pe = 0 Then ' If Passe_ebauche = 0 Then
Code"(MSG,la Passe ne doit pas etre à Zero)"
Exit Sub
End If
' If Ltr <> ((Lon)+( Eor+ Eop)) Then ' If Extremité_Origine = Extremité_Opose
'Code"(MSG,verifier les dimensions reglet)"
'Exit Sub
'End If
OpenTeachFile "KokoReglet.tap"
Code "G0 G49 G40 G17 G80 G50 G90 " '
Code "M6 T" & Tn 'Code "M6 T" & Fraise_n°
Code "G0 Z"& Hra 'Hauteur_rapide deplacement degagementrapide
'Code "G0 X"& XO & "Y"& YO ' va au zero dans l axe
Code "G54"
' ( ****** PASSES POCKET ***** )
Code "S"& Bv ' ( vitesse broche 19000 tr/mn )
Code "F"& Ae ' ( avance ebauche m/mn )
Code "M3 " ' demarre la broche
' calculs
Ya = Eor + Rf ' Ya = Extremité_Origine + (RayonFraise
Yb = ((Ya)+(Lon- Df )) '((Ya)+(Longueur_Rainure - Diametre_Fraise ))
Xd = Lar/2 ' largeur_rainure/2 Xstart
Xg = 0 - Xd ' inversion signe + en - de la valeur Xend
K = GetOEMDRO (802)
Do ' fait*********************début boucle LE PROBLEME EST LA **********************************
K =Pr-Pe
Code "G0 X0 Y0 Z20"
Code "G0 Z" & Hra '
Code "G1 Z0.5 " ' ( approche Z à 0.2)
Code "G1 Y" & Ya '( #7 position Y1 )
Code "F" & Ap '( Avance_plonge #2 Z descente )
Code "G1 Z" & K 'Passe ébauche
Code "F" & Ae 'Avance ébauche
Code "G1 Y" & Yb ' ( position Yhaut )
Code "G1 X" & Xd '( déplacement droite X+ )
Code "G1 Y" & Ya ' '( position Y1bas )
Code "G1 X" & Xg ' ( déplacement gauche X- )
Code "G1 Y" & Yb ' ( position Yhaut )
Code "G1 X" & 0 ' ( déplacement VA AU CENTRE X0 )
Code"G0 Z" & Hra ' ( DEGAGEMENT OUTILS REMONTE DE 5mm )
Loop While K = Pr ' condition Loop While Passe_ebauche Profondeur_Rainure
' ********************************JUSQU'A LA fin de boucle *********************************
CODE "G0 Z" & Hra
Code"M5 M9"
Code"M30"
CloseTeachFile
Call LoadStandardLayout() '*****************ici je voudrait ouvrir la page 11 que j ai fais sur machscreen*********************
Call LoadTeachFile()
End Sub
Main
Par Avance merci pour votre aide et
merci au forum qui m 'éduque mais vaste tache
voila le problème je veux faire une macro pour un bouton avec Machscreen pour réaliser une rainure ( bien sur il existe la Macro Brian Baker mais je voudrait faire le mienne) , jusqu'à la ça va Visu GetOEMDRO ok pas de problème
je sais appeler des sous programmes avec M98 et retour avec M99 et utiliser les variables #13 =Z
#13=[#13-0.15] valeur de z à chaque passe -0.15
ça OK
mais je ne peux mettre ces instructions dans une macro en VB Cypress
j essaie une boucle Do loop while avec la condition mais la je bloque complètement depuis trois jours
' Macro voila le bébé
Sub Main()
'Préparation
DoOEMButton (169) 'efface le programme precedant dans Mach3
Ltr = GetOEMDRO (1600) ' Longueur_totale_reglet valeur absolue Longueur_totale
Lar = GetOEMDRO (1590) ' largeur_rainure valeur absolue largeur_totale_reglet
Lon = GetOEMDRO (1610) 'Longueur_Rainure
Pr = GetOEMDRO (1620) 'Profondeur_rainure
Eor = GetOEMDRO (1630) 'Extremité_OrigineE1
Eop = GetOEMDRO (1640) 'Extremité_Opose E2
Eb = GetOEMDRO (1650) 'Ebavurage_Bord
rem Outils
Bv = GetOEMDRO (1660) 'Vitesse_broche
Tn = GetOEMDRO (824) 'Fraise_n°
Df = GetOEMDRO (43) 'Diametre_Fraise
Rf = Df /2 'RayonFraise = Diametre_Fraise /2
Lf = GetOEMDRO (32) 'Long_fraise_H = GetOEMDRO (24)
rem Avance
Ae = GetOEMDRO (1690) ' Avance_ebauche
Ap = GetOEMDRO (1700) ' Avance_plonge
Av = GetOEMDRO (1710) 'Avance_ebavurage
rem Passe
Pe = GetOEMDRO (1730) ' Passe_ebauche
Pp = GetOEMDRO (1740) ' Passe_plonge
Pv = GetOEMDRO (1750) ' Passe_ebavurage
rem Hauteur
Hra = GetOEMDRO (1760) 'Hauteur_rapide deplacement degagementrapide
Hre = GetOEMDRO (1770) ' Hauteur_retrait debourrage
Ha = GetOEMDRO (1780) ' Hauteur_avance passage en G1
If Df >= lar Then ' If Diametre_Fraise >= lr Then
Code"(MSG,Diametre outils trop grand)"
Exit Sub
End If
If Ae <= 0 Then 'Avance_ebauche <= 0 Then
Code"(MSG,Erreur d Avance Ebauche)"
Exit Sub
End If
If Pr >= 0 Then 'Profondeur_Rainure >= 0
Code"(MSG,la Pronfondeur Rainure doit etre négative)"
Exit Sub
End If
If Pe = 0 Then ' If Passe_ebauche = 0 Then
Code"(MSG,la Passe ne doit pas etre à Zero)"
Exit Sub
End If
' If Ltr <> ((Lon)+( Eor+ Eop)) Then ' If Extremité_Origine = Extremité_Opose
'Code"(MSG,verifier les dimensions reglet)"
'Exit Sub
'End If
OpenTeachFile "KokoReglet.tap"
Code "G0 G49 G40 G17 G80 G50 G90 " '
Code "M6 T" & Tn 'Code "M6 T" & Fraise_n°
Code "G0 Z"& Hra 'Hauteur_rapide deplacement degagementrapide
'Code "G0 X"& XO & "Y"& YO ' va au zero dans l axe
Code "G54"
' ( ****** PASSES POCKET ***** )
Code "S"& Bv ' ( vitesse broche 19000 tr/mn )
Code "F"& Ae ' ( avance ebauche m/mn )
Code "M3 " ' demarre la broche
' calculs
Ya = Eor + Rf ' Ya = Extremité_Origine + (RayonFraise
Yb = ((Ya)+(Lon- Df )) '((Ya)+(Longueur_Rainure - Diametre_Fraise ))
Xd = Lar/2 ' largeur_rainure/2 Xstart
Xg = 0 - Xd ' inversion signe + en - de la valeur Xend
K = GetOEMDRO (802)
Do ' fait*********************début boucle LE PROBLEME EST LA **********************************
K =Pr-Pe
Code "G0 X0 Y0 Z20"
Code "G0 Z" & Hra '
Code "G1 Z0.5 " ' ( approche Z à 0.2)
Code "G1 Y" & Ya '( #7 position Y1 )
Code "F" & Ap '( Avance_plonge #2 Z descente )
Code "G1 Z" & K 'Passe ébauche
Code "F" & Ae 'Avance ébauche
Code "G1 Y" & Yb ' ( position Yhaut )
Code "G1 X" & Xd '( déplacement droite X+ )
Code "G1 Y" & Ya ' '( position Y1bas )
Code "G1 X" & Xg ' ( déplacement gauche X- )
Code "G1 Y" & Yb ' ( position Yhaut )
Code "G1 X" & 0 ' ( déplacement VA AU CENTRE X0 )
Code"G0 Z" & Hra ' ( DEGAGEMENT OUTILS REMONTE DE 5mm )
Loop While K = Pr ' condition Loop While Passe_ebauche Profondeur_Rainure
' ********************************JUSQU'A LA fin de boucle *********************************
CODE "G0 Z" & Hra
Code"M5 M9"
Code"M30"
CloseTeachFile
Call LoadStandardLayout() '*****************ici je voudrait ouvrir la page 11 que j ai fais sur machscreen*********************
Call LoadTeachFile()
End Sub
Main
Par Avance merci pour votre aide et
merci au forum qui m 'éduque mais vaste tache
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: BOUCLE DANS MACRO
Salut
pour appeler la page 11 (écran)
setpage(11)
LoadStandardLayout()
sleep(1000) 'pour laisser le temps à l'affichage de se mettre en place
SetPage
Sub SetPage(PageNum As Integer)
This function switches the current display page to the one specified by PageNum.
Arguments:
PageNum is the Integer number of the display page to switch to.
pour ça je ne comprends pas vraiment ; tu n'arrive pas à écrire #13=[#13-0.15] dans le Gcode via le VB ?
++
David
pour appeler la page 11 (écran)
setpage(11)
LoadStandardLayout()
sleep(1000) 'pour laisser le temps à l'affichage de se mettre en place
SetPage
Sub SetPage(PageNum As Integer)
This function switches the current display page to the one specified by PageNum.
Arguments:
PageNum is the Integer number of the display page to switch to.
#13=[#13-0.15] valeur de z à chaque passe -0.15
ça OK
mais je ne peux mettre ces instructions dans une macro en VB Cypress
pour ça je ne comprends pas vraiment ; tu n'arrive pas à écrire #13=[#13-0.15] dans le Gcode via le VB ?
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: BOUCLE DANS MACRO
PS, les écrans de 1 à 10 peuvent être accédés directement par DoOEMButton()
DoOEMButton( 8 ) affichera l'écran n°8
malheureusement ça ne fonctionne pas au delà de 10 apparemment.
++
David
DoOEMButton( 8 ) affichera l'écran n°8
malheureusement ça ne fonctionne pas au delà de 10 apparemment.
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: BOUCLE DANS MACRO
Bonjour Monsieur David
comme d habitude vous avez trouvé la solution pour afficher la page 11
Ca Marche
SetPage(11)
LoadStandardLayout()
Sleep (1000)
Call LoadTeachFile() ' appel le fichier de la rainure
End Sub
Main
un très grand Merci pour votre aide précieuse
je vais essayé de bidouiller cette Boucle qui me fait la première passe en rectangle à Pe=-1mm ou autre selon le Visu
si je fais Z=Z-Pe à chaque passe cela devrait descendre de -Pe
et bien non ça ne marche pas
Do ' debut boucle
Z=Z-Pe
Code "G0 X0 Y0 Z20"
Code "G0 Z" & Hra ' outils en haut déplacement rapide
Code "G1 Z0.5 " ' approche Z à 0.5
Code "G1 Y" & Ya ' approche en Ya bas position pour plonger
Code "F" & Ap 'Avance_plonger descente
Code "G1 Z" & Pe ' 1ere Passe_plonge descente à Z-Pe
Code "F" & Ae 'Avance_ebauche
Code "G1 Y" & Yb ' va à la position Yb en haut
Code "G1 X" & Xd ' déplacement à droite en X+
Code "G1 Y" & Ya ' retourne position en Ya en bas
Code "G1 X" & Xg ' déplacement à gauche en X-
Code "G1 Y" & Yb ' va position en Yb en haut )
Code "G1 X" & 0 ' déplacement en X=0 AU CENTRE X0 )
Code"G0 Z" & Hra ' degagement de l outils déplacement rapide
Loop While Pe = Pr ' condition Loop While Passe_ebauche = Profondeur_Rainure
en tous cas merci pour votre aide
comme d habitude vous avez trouvé la solution pour afficher la page 11
Ca Marche
SetPage(11)
LoadStandardLayout()
Sleep (1000)
Call LoadTeachFile() ' appel le fichier de la rainure
End Sub
Main
un très grand Merci pour votre aide précieuse
je vais essayé de bidouiller cette Boucle qui me fait la première passe en rectangle à Pe=-1mm ou autre selon le Visu
si je fais Z=Z-Pe à chaque passe cela devrait descendre de -Pe
et bien non ça ne marche pas
Do ' debut boucle
Z=Z-Pe
Code "G0 X0 Y0 Z20"
Code "G0 Z" & Hra ' outils en haut déplacement rapide
Code "G1 Z0.5 " ' approche Z à 0.5
Code "G1 Y" & Ya ' approche en Ya bas position pour plonger
Code "F" & Ap 'Avance_plonger descente
Code "G1 Z" & Pe ' 1ere Passe_plonge descente à Z-Pe
Code "F" & Ae 'Avance_ebauche
Code "G1 Y" & Yb ' va à la position Yb en haut
Code "G1 X" & Xd ' déplacement à droite en X+
Code "G1 Y" & Ya ' retourne position en Ya en bas
Code "G1 X" & Xg ' déplacement à gauche en X-
Code "G1 Y" & Yb ' va position en Yb en haut )
Code "G1 X" & 0 ' déplacement en X=0 AU CENTRE X0 )
Code"G0 Z" & Hra ' degagement de l outils déplacement rapide
Loop While Pe = Pr ' condition Loop While Passe_ebauche = Profondeur_Rainure
en tous cas merci pour votre aide
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: BOUCLE DANS MACRO
Salut,
Z=Z-Pe .... Ok, la variable Z est réduite de la valeur de Pe à chaque passe ... sauf que tu n'utilise la variable Z nul part dans ton code ; il y a la lettre Z écrite telle quelle, mais pas de variable Z.
Code "G1 Z" & Pe ' 1ere Passe_plonge descente à Z-Pe
ici tu ne descend pas de Z-Pe mais de Pe.
si Pe vaut -1, alors Code "G1 Z" & Pe est remplacé par G1 Z-1 car toute la partie entre les "" est écrite telle-quelle (Donc G1 Z), le & est une concaténation de chaine (ajout de caractères à une chaine existante), et c'est Pe ta variable (qui n'est donc pas entre des "" car ce n'est pas une chaine de caractères mais une valeur numérique), qui est convertie en texte et ajoutée à la suite du texte.
PS: quand tu met un bout de code, met moi aussi les valeurs des variables que je ne peux pas connaitre car elles sont sur tes visus
++
David
Z=Z-Pe .... Ok, la variable Z est réduite de la valeur de Pe à chaque passe ... sauf que tu n'utilise la variable Z nul part dans ton code ; il y a la lettre Z écrite telle quelle, mais pas de variable Z.
Code "G1 Z" & Pe ' 1ere Passe_plonge descente à Z-Pe
ici tu ne descend pas de Z-Pe mais de Pe.
si Pe vaut -1, alors Code "G1 Z" & Pe est remplacé par G1 Z-1 car toute la partie entre les "" est écrite telle-quelle (Donc G1 Z), le & est une concaténation de chaine (ajout de caractères à une chaine existante), et c'est Pe ta variable (qui n'est donc pas entre des "" car ce n'est pas une chaine de caractères mais une valeur numérique), qui est convertie en texte et ajoutée à la suite du texte.
PS: quand tu met un bout de code, met moi aussi les valeurs des variables que je ne peux pas connaitre car elles sont sur tes visus
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: BOUCLE DANS MACRO
Monsieur David
j ai changé le code pour que la boucle s exécute
j ai essayé Code"M98 P2 L3" avec Code " O0002"
pour la routine cela fait 5 boucles au lieu de 3 puis message d erreur parlant de looping
donc j ai repris les instructions Do et Loop While avec les condition mais cela ne boucle pas
j ai modifié la variable Z en Pe=Pr-Pe profondeur passe= profondeur Totale- profondeur passe
mais comme la boucle ne tourne pas je ne sais pas si cela marche
Do ' fait*** début boucle
Pe=Pr-Pe
Code "G0 X0 Y0 Z20"
Code "G0 Z" & Hra '
Code "G1 Z0.5 " 'approche Z à 0.2
Code "G1 Y" & Ya ' position Y1
Code "F" & Ap '( Avance_plonge Z descente
Code "G1 Z" & Pe 'Passe ébauche
Code "F" & Ae 'Avance ébauche
Code "G1 Y" & Yb ' position Yhaut
Code "G1 X" & Xd ' déplacement droite X+
Code "G1 Y" & Ya ' position Y1bas
Code "G1 X" & Xg ' déplacement gauche X-
Code "G1 Y" & Yb ' position Yhaut
Code "G1 X" & 0 ' déplacement VA AU CENTRE X0
Code"G0 Z" & Hra ' DEGAGEMENT OUTILS REMONTE DE 15mm
Loop While Pe = Pr ' condition de Loop While Passe ébauche = Profondeur Rainure
je suis coincé par la boucle
j ai lu dans la doc Vb Cypress qu il y a une sombre histoire de condition a réalisées avant ou après l 'exécution de la boucle mais je ne suis pas informaticien
en tous cas merci pour votre aide
j ai changé le code pour que la boucle s exécute
j ai essayé Code"M98 P2 L3" avec Code " O0002"
pour la routine cela fait 5 boucles au lieu de 3 puis message d erreur parlant de looping
donc j ai repris les instructions Do et Loop While avec les condition mais cela ne boucle pas
j ai modifié la variable Z en Pe=Pr-Pe profondeur passe= profondeur Totale- profondeur passe
mais comme la boucle ne tourne pas je ne sais pas si cela marche
Do ' fait*** début boucle
Pe=Pr-Pe
Code "G0 X0 Y0 Z20"
Code "G0 Z" & Hra '
Code "G1 Z0.5 " 'approche Z à 0.2
Code "G1 Y" & Ya ' position Y1
Code "F" & Ap '( Avance_plonge Z descente
Code "G1 Z" & Pe 'Passe ébauche
Code "F" & Ae 'Avance ébauche
Code "G1 Y" & Yb ' position Yhaut
Code "G1 X" & Xd ' déplacement droite X+
Code "G1 Y" & Ya ' position Y1bas
Code "G1 X" & Xg ' déplacement gauche X-
Code "G1 Y" & Yb ' position Yhaut
Code "G1 X" & 0 ' déplacement VA AU CENTRE X0
Code"G0 Z" & Hra ' DEGAGEMENT OUTILS REMONTE DE 15mm
Loop While Pe = Pr ' condition de Loop While Passe ébauche = Profondeur Rainure
je suis coincé par la boucle
j ai lu dans la doc Vb Cypress qu il y a une sombre histoire de condition a réalisées avant ou après l 'exécution de la boucle mais je ne suis pas informaticien
en tous cas merci pour votre aide
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: BOUCLE DANS MACRO
et sur l'autre boucle du message précédant
K =Pr-Pe
supposons K = 0 (surface pièce lors du lancement du programme)
dans le début de tes tests, je vois que Pr doit être négatif, et que Pe est positif, donc si on part sur une profondeur rainure de -5 et une passe de 1 alors
K = -5-1 > soit -6 pas bon ...
au passage suivant, Pr et Pe on toujours la même valeur, donc le résultat fait toujours -6
il te faut une variable qui conserve la position en cours ... et ne pas te planter avec les + et les -
ce qu'il te faut, c'est retrancher Pe de la valeur de K, mais en plus, il faut que tu récupère la valeur de la DRO 802 (Z) à chaque boucle pour avoir sa valeur remise à jour.
Voila un code qui fonctionne (j'en ai un peu chié à cause d'erreur d'arrondis, par exemple avec une position à -3.9999 pour -4 ... résultat ça me faisais une passe de plus de 0.0001 ....
j'utilise la balise "code" pour conserver les indentations dans les boucles et test, sinon c'est illisible car le forum supprime les espaces en début de ligne ..
++
David
K =Pr-Pe
supposons K = 0 (surface pièce lors du lancement du programme)
dans le début de tes tests, je vois que Pr doit être négatif, et que Pe est positif, donc si on part sur une profondeur rainure de -5 et une passe de 1 alors
K = -5-1 > soit -6 pas bon ...
au passage suivant, Pr et Pe on toujours la même valeur, donc le résultat fait toujours -6
il te faut une variable qui conserve la position en cours ... et ne pas te planter avec les + et les -
ce qu'il te faut, c'est retrancher Pe de la valeur de K, mais en plus, il faut que tu récupère la valeur de la DRO 802 (Z) à chaque boucle pour avoir sa valeur remise à jour.
Voila un code qui fonctionne (j'en ai un peu chié à cause d'erreur d'arrondis, par exemple avec une position à -3.9999 pour -4 ... résultat ça me faisais une passe de plus de 0.0001 ....
- Code:
Zdepart = 0 'Z de départ de l'usinage ici surface pièce = 0
Pr = 4 'profondeur rainure (positive)
Pe = 2 'incrément de passe
Ztarget = Round(Zdepart - Pr,2) 'position maxi en Z fond de rainure arrondi à 2 décimal pour éviter les bugs
K = Round(Zdepart,2)' position courante
Code "F500" 'vitesse d'usinage
Code "G0 Z" & Zdepart + 0.2 'approche du Z en rapide à 0.2mm au dessus du Z de départ
While ismoving() 'attendre que le mouvement soit fini, sinon le VB va continuer sans attendre le Gcode
sleep(100)
Wend
Do
K = Round(K-Pe,2) 'niveau d'usinage suivant
If K > Ztarget Then 'on est au dessus de la prof maxi
Code "G1 Z" & K 'on descend à la prof d'usinage
Call rainure() 'appel du sous programme rainure
GoTo suite 'on relance la boucle
End If
If K <= Ztarget Then 'on dépasse la prof maxi ou on y est déjà, donc dernière passe.
K = Ztarget
Code "G1 Z" & K 'on descend à la prof d'usinage
Call rainure() 'appel du sous programme rainure
Exit Do 'fin de la boucle
End If
suite:
Loop
MsgBox("Fin")
Sub rainure()
'juste pour tester, avance le X de 10mm
Code "G1 X" & GetOEMDro(800)+10
While ismoving() 'attendre que le mouvement soit fini, sinon le VB va continuer sans attendre le Gcode
sleep(100)
Wend
End Sub
j'utilise la balise "code" pour conserver les indentations dans les boucles et test, sinon c'est illisible car le forum supprime les espaces en début de ligne ..
++
David
Dernière édition par dh42 le Mar 24 Nov 2020 - 18:43, édité 2 fois
_________________
Traduction Française de CamBam et de sa documentation.
Re: BOUCLE DANS MACRO
La partie usinage de la rainure en elle même et dans la Sub
Il faut aussi pense à gérer le cas ou la profondeur de rainure n'est pas un multiple de l'incrément de passe afin de faire une passe de complment pour finir à la bonne profondeur.
j'ai utilisé des valeurs positives pour la profondeur de rainure et pour l'incrément de passe ; c'est plus logique car ici on ne parle pas en coordonnées mais on donne une longueur.
Je ne sais pas si tu l'a déjà, mai sil te faudra une visu pour y mettre la valeur de la position de départ de la rainure (= surface pièce dans CB) ici Zdepart qui correspond à une coord absolue ; Ztarget est la position absolue du fond de la rainure, calculée à partir de Zdepart - prof rainure.
Si il y a des trucs que tu ne pige pas, n'hésite pas à demander.
++
David
Il faut aussi pense à gérer le cas ou la profondeur de rainure n'est pas un multiple de l'incrément de passe afin de faire une passe de complment pour finir à la bonne profondeur.
j'ai utilisé des valeurs positives pour la profondeur de rainure et pour l'incrément de passe ; c'est plus logique car ici on ne parle pas en coordonnées mais on donne une longueur.
Je ne sais pas si tu l'a déjà, mai sil te faudra une visu pour y mettre la valeur de la position de départ de la rainure (= surface pièce dans CB) ici Zdepart qui correspond à une coord absolue ; Ztarget est la position absolue du fond de la rainure, calculée à partir de Zdepart - prof rainure.
Si il y a des trucs que tu ne pige pas, n'hésite pas à demander.
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: BOUCLE DANS MACRO
un énorme merci pour le temps passé je suis débloqué et demain je vais adapter tous ça à l écran 11
merci encore
merci encore
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: BOUCLE DANS MACRO
Bonjour M David
J ai des trucs que ne pige pas
1er truc
Pr= profondeur rainure
Pe= valeur de passe incrément
Zdepart = zéro au dessus du brut G54 Z0 visu (1820) valeur absolue
Zdepart =ABS(GetOEMDRO(1820))
Ztarget = profondeur rainure à atteindre Ztarget = Round(Zdepart - Pr,2)
Ztarget =ABS(GetOEMDRO(1620)) valeur absolue
donc pour moi mais je dois me tromper Pr = Ztarget c' est la même valeur je peux remplacer Pr par ZDépart en écrivant ABS(GetOEMDRO(1820)) ???
2eme Truc
je dois insérer mon parcours avec K à la place de Pe en dessous de
Sub Rainure()
3eme truc
quand j inserts sous votre dernier End Sub et je déplace le End Sub après
Call LoadTeachFile()
Code"M30"
CloseTeachFile
SetPage(11)
LoadStandardLayout()
Sleep (1000)
Call LoadTeachFile()
End Sub
l écran mach bascule entre deux page et une page grise
et il n y a pas de Main dans la Macro ??? ni au début ni à la fin de la macro
je ne suis pas bloque je fais des tas d essais
et merci encore mais je suis un peu confus de vous prendre du temps
J ai des trucs que ne pige pas
1er truc
Pr= profondeur rainure
Pe= valeur de passe incrément
Zdepart = zéro au dessus du brut G54 Z0 visu (1820) valeur absolue
Zdepart =ABS(GetOEMDRO(1820))
Ztarget = profondeur rainure à atteindre Ztarget = Round(Zdepart - Pr,2)
Ztarget =ABS(GetOEMDRO(1620)) valeur absolue
donc pour moi mais je dois me tromper Pr = Ztarget c' est la même valeur je peux remplacer Pr par ZDépart en écrivant ABS(GetOEMDRO(1820)) ???
2eme Truc
je dois insérer mon parcours avec K à la place de Pe en dessous de
Sub Rainure()
3eme truc
quand j inserts sous votre dernier End Sub et je déplace le End Sub après
Call LoadTeachFile()
Code"M30"
CloseTeachFile
SetPage(11)
LoadStandardLayout()
Sleep (1000)
Call LoadTeachFile()
End Sub
l écran mach bascule entre deux page et une page grise
et il n y a pas de Main dans la Macro ??? ni au début ni à la fin de la macro
je ne suis pas bloque je fais des tas d essais
et merci encore mais je suis un peu confus de vous prendre du temps
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: BOUCLE DANS MACRO
Salut,
Non, Pr c'est la profondeur de la rainure en positif (c'est donc une profondeur, pas une coordonnée absolue), Ztarget c'est la coordonnée absolueà atteindre.
Ztarget = Zdepart - Pr
ex: Pr = 5mm
Zdepart = 15 (= surface pièce)
Ztarget = 15-5 = 10 ... c'est la coordonnée d'arrivée en fond de rainure.
ex: Pr = 5mm
Zdepart = 0 (= surface pièce)
Ztarget = 0-5 = -5 ..coordonnée d'arrivée en fond de rainure.
Le VB script de Mach3 n'est pas trop regardant, mais oui, il devrait y être si on fait les choses bien ...
Je ne comprends pas trop le reste de ta demande (2 et 3) ... merci de mettre le code complet et si possible en balise "code", que ce soit plus lisible ..
Pour te simplifier la vie, tu pourrais aussi faire ta page "spécial" sur une page inutilisée < à 10, ce qui te permettrais d'utiliser un DoOEMButton (n° d'écran) pour afficher l'écran, c'est plus simple et il n'y a pas de délais d'affichage comme avec Setpage() Loadlayout()
++
David
donc pour moi mais je dois me tromper Pr = Ztarget c' est la même valeur je peux remplacer Pr par ZDépart en écrivant ABS(GetOEMDRO(1820)) ???
Non, Pr c'est la profondeur de la rainure en positif (c'est donc une profondeur, pas une coordonnée absolue), Ztarget c'est la coordonnée absolueà atteindre.
Ztarget = Zdepart - Pr
ex: Pr = 5mm
Zdepart = 15 (= surface pièce)
Ztarget = 15-5 = 10 ... c'est la coordonnée d'arrivée en fond de rainure.
ex: Pr = 5mm
Zdepart = 0 (= surface pièce)
Ztarget = 0-5 = -5 ..coordonnée d'arrivée en fond de rainure.
et il n y a pas de Main dans la Macro ??? ni au début ni à la fin de la macro
Le VB script de Mach3 n'est pas trop regardant, mais oui, il devrait y être si on fait les choses bien ...
Je ne comprends pas trop le reste de ta demande (2 et 3) ... merci de mettre le code complet et si possible en balise "code", que ce soit plus lisible ..
Pour te simplifier la vie, tu pourrais aussi faire ta page "spécial" sur une page inutilisée < à 10, ce qui te permettrais d'utiliser un DoOEMButton (n° d'écran) pour afficher l'écran, c'est plus simple et il n'y a pas de délais d'affichage comme avec Setpage() Loadlayout()
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: BOUCLE DANS MACRO
Bonjour Monsieur David
je suis toujours au fond du trou la macro fait un tour puis s arrête et z reste en surface
voici le code et et les écrans je mets le bitmap dans le message suivant
merci encore
je suis toujours au fond du trou la macro fait un tour puis s arrête et z reste en surface
voici le code et et les écrans je mets le bitmap dans le message suivant
merci encore
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: BOUCLE DANS MACRO
les écrans sont trop lourd pour le forum je suis désolé
à bientôt et merci encore pour votre aide
à bientôt et merci encore pour votre aide
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: BOUCLE DANS MACRO
Salut,
C'est la logique de fonctionnement qui ne vas pas ; la Sub rainure() ne dois faire QUE l'usinage d'un niveau et donc elle est appelée à chaque niveau.
Le fait que tu ai mis:
CODE "G0 Z" & Hra
Code"M5 M9"
Code"M30"
CloseTeachFile
SetPage(11)
LoadStandardLayout()
Sleep (1000)
Call LoadTeachFile()
dans la sub rainure fait que tout ce code sera appelé à chaque niveau d'usinage, ce qui n'est pas le but .. et en plus comme il y a un M30, donc fin programme, ton programme s’arrêtera à la fin de la 1iere passe.
donc il faut que la sub rainure() ne contienne que le code pour faire un niveau d'usinage ; tout le reste n'a rien à y faire et doit être éxécuté une fois que tous les niveaux d’usinage sont fait, donc il devrait être à la sortie de la boucle Do Loop ( à la place de msgbox("fin") )
++
David
C'est la logique de fonctionnement qui ne vas pas ; la Sub rainure() ne dois faire QUE l'usinage d'un niveau et donc elle est appelée à chaque niveau.
Le fait que tu ai mis:
CODE "G0 Z" & Hra
Code"M5 M9"
Code"M30"
CloseTeachFile
SetPage(11)
LoadStandardLayout()
Sleep (1000)
Call LoadTeachFile()
dans la sub rainure fait que tout ce code sera appelé à chaque niveau d'usinage, ce qui n'est pas le but .. et en plus comme il y a un M30, donc fin programme, ton programme s’arrêtera à la fin de la 1iere passe.
donc il faut que la sub rainure() ne contienne que le code pour faire un niveau d'usinage ; tout le reste n'a rien à y faire et doit être éxécuté une fois que tous les niveaux d’usinage sont fait, donc il devrait être à la sortie de la boucle Do Loop ( à la place de msgbox("fin") )
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: BOUCLE DANS MACRO
Bonjour à Tous et en particulier à M David
à qui je prend tous son temps Merci pour votre aide
1° j avance un peu
la boucle tourne et génère le Gcode
par contre il faut des valeurs négatives pour la profondeur rainure Pr et la valeur des passes ???
et aussi j'additionnes des Valeurs machines avec des valeur relatives et ça marche ????
Zdepart= Round (ZO + GetOEMDRO (1580),2) ' ZO = G53 Z machine et la DRO 1580 valeur relative ???
2) j aimerai aussi insérer les valeurs des DRO G54 dans la work offset table avec une ligne de code comme ont fait pour les longueur d outils ????
3) Quand la Profondeur totale rainure Pr diviser par la valeur passe Pe ne tombe pas juste est ce que ces lignes
If K <= Ztarget Then 'on dépasse la prof maxi ou on y est déjà, donc dernière passe.
K = Ztarget ' ne sont pas la solution la valeur de Z= K s ajustant à la valeur Ztarget ?????
en tous merci pour votre aide
à qui je prend tous son temps Merci pour votre aide
1° j avance un peu
la boucle tourne et génère le Gcode
par contre il faut des valeurs négatives pour la profondeur rainure Pr et la valeur des passes ???
et aussi j'additionnes des Valeurs machines avec des valeur relatives et ça marche ????
Zdepart= Round (ZO + GetOEMDRO (1580),2) ' ZO = G53 Z machine et la DRO 1580 valeur relative ???
2) j aimerai aussi insérer les valeurs des DRO G54 dans la work offset table avec une ligne de code comme ont fait pour les longueur d outils ????
3) Quand la Profondeur totale rainure Pr diviser par la valeur passe Pe ne tombe pas juste est ce que ces lignes
If K <= Ztarget Then 'on dépasse la prof maxi ou on y est déjà, donc dernière passe.
K = Ztarget ' ne sont pas la solution la valeur de Z= K s ajustant à la valeur Ztarget ?????
en tous merci pour votre aide
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: BOUCLE DANS MACRO
Salut,
Non, dans mon code elles sont positives ; comme je t'ai dis sur un autre message, ces 2 valeurs représentent des distances, et une distance c'est toujours positif.
Désolé, je ne comprends pas, mais on ne mélange pas des coordonnées pièce et des coordonnées machine, d'ailleurs la DRO 1580 est cencé contenir la position Z de départ (l'équivalent de "surface pièce" dans Cambam, donc position de départ en Z de l'usinage), donc ce n'est pas une coord machine mais une coord pièce. Je ne vois pas ou tu prends le Z0 (pas de visu 1810 sur l'UI que j'ai). Logiquement il n'y a aucune raison d'utiliser les coordonnées machine pour ce genre de travail, c'est tout en coord pièce.
pour les DRO ; code OEM46 pour la visu qui indique le décalage en cours (1 = G54, 2 = G55, etc) ; OEM 46, 47, 48 pour XYZ du décalage en cours. par contre je ne sais pas comment on met une valeur dans la offset table ; pas trouvé d'instruction pour ça.
If K <= Ztarget ... Ztarget c'est la COORDONNEE d'arrivé en Z, donc au cours de la boucle, à chaque tour on ajoute la prof de passe à la coord courante, si le résultat est plus bas que Ztarget (ou =), alors on met K (coordonné de travail pour le niveau d'usinage à faire) à la coordonnée correspondant à la prof maxi d'usinage.
ex: increment de passe = 2 ; profondeur rainure = 5
Zdepart = 0 (surface de départ de l'usinage en coord pièce)
Ztarget = Zdepart - profondeur rainure > donc 0-5 = -5 (coord pièce)
à chaque boucle Do/Loop on calcule K, qui sera la coord pièce ou se fera le niveau d'usinage (la position courante en coord pièce)
K = K - incrément de passe ; au premier passage de la boucle K vaut 0 > K = 0 - 2 > K = -2
on teste si K est inférieur à Ztarget dans ce cas, K vaut -2 et Ztarget -5, donc on n'est pas en dessous de la limite de profondeur et donc on fait la passe à -2
2ieme passage de la boucle K vaut tj -2 ; donc K = -2 - 2 (la pos courante - l'incrément de passe) > résultat -4 ... on n'est toujours pas à la prof maxi, donc on fait une passe à -4
3ieme passage, K vaut -4 > K = -4 - 2 > K = -6
cette fois ci on dépasse car -6 est inférieur à -5 ; dans ce cas, on met K à la valeur de Ztarget, soit -5, on fait la dernière passe et on sort de la boucle (exit Do)
ça marche aussi si K est déjà = à -5 ... on lui met aussi la valeur de Ztarget, autrement dit, il reste à -5
++
David
par contre il faut des valeurs négatives pour la profondeur rainure Pr et la valeur des passes ???
Non, dans mon code elles sont positives ; comme je t'ai dis sur un autre message, ces 2 valeurs représentent des distances, et une distance c'est toujours positif.
et aussi j'additionnes des Valeurs machines avec des valeur relatives et ça marche ????
Zdepart= Round (ZO + GetOEMDRO (1580),2) ' ZO = G53 Z machine et la DRO 1580 valeur relative ???
Désolé, je ne comprends pas, mais on ne mélange pas des coordonnées pièce et des coordonnées machine, d'ailleurs la DRO 1580 est cencé contenir la position Z de départ (l'équivalent de "surface pièce" dans Cambam, donc position de départ en Z de l'usinage), donc ce n'est pas une coord machine mais une coord pièce. Je ne vois pas ou tu prends le Z0 (pas de visu 1810 sur l'UI que j'ai). Logiquement il n'y a aucune raison d'utiliser les coordonnées machine pour ce genre de travail, c'est tout en coord pièce.
2) j aimerai aussi insérer les valeurs des DRO G54 dans la work offset table avec une ligne de code comme ont fait pour les longueur d outils ????
pour les DRO ; code OEM46 pour la visu qui indique le décalage en cours (1 = G54, 2 = G55, etc) ; OEM 46, 47, 48 pour XYZ du décalage en cours. par contre je ne sais pas comment on met une valeur dans la offset table ; pas trouvé d'instruction pour ça.
3) Quand la Profondeur totale rainure Pr diviser par la valeur passe Pe ne tombe pas juste est ce que ces lignes
If K <= Ztarget Then 'on dépasse la prof maxi ou on y est déjà, donc dernière passe.
K = Ztarget ' ne sont pas la solution la valeur de Z= K s ajustant à la valeur Ztarget ?????
If K <= Ztarget ... Ztarget c'est la COORDONNEE d'arrivé en Z, donc au cours de la boucle, à chaque tour on ajoute la prof de passe à la coord courante, si le résultat est plus bas que Ztarget (ou =), alors on met K (coordonné de travail pour le niveau d'usinage à faire) à la coordonnée correspondant à la prof maxi d'usinage.
ex: increment de passe = 2 ; profondeur rainure = 5
Zdepart = 0 (surface de départ de l'usinage en coord pièce)
Ztarget = Zdepart - profondeur rainure > donc 0-5 = -5 (coord pièce)
à chaque boucle Do/Loop on calcule K, qui sera la coord pièce ou se fera le niveau d'usinage (la position courante en coord pièce)
K = K - incrément de passe ; au premier passage de la boucle K vaut 0 > K = 0 - 2 > K = -2
on teste si K est inférieur à Ztarget dans ce cas, K vaut -2 et Ztarget -5, donc on n'est pas en dessous de la limite de profondeur et donc on fait la passe à -2
2ieme passage de la boucle K vaut tj -2 ; donc K = -2 - 2 (la pos courante - l'incrément de passe) > résultat -4 ... on n'est toujours pas à la prof maxi, donc on fait une passe à -4
3ieme passage, K vaut -4 > K = -4 - 2 > K = -6
cette fois ci on dépasse car -6 est inférieur à -5 ; dans ce cas, on met K à la valeur de Ztarget, soit -5, on fait la dernière passe et on sort de la boucle (exit Do)
ça marche aussi si K est déjà = à -5 ... on lui met aussi la valeur de Ztarget, autrement dit, il reste à -5
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: BOUCLE DANS MACRO
Bonsoir M David
merci beaucoup pour votre aide
grâce à votre aide je peux ecrire les valeurs que je veux dans work offset table
pour écrire dans G54 les valeurs variables XO,YO,ZO
SetOEMDRO (47, XO ) 'écrit la valeur XO pour work offset table valeur x
SetOEMDRO (48, YO ) 'écrit la valeur YO pour work offset table valeur x
SetOEMDRO (48, ZO ) 'écrit la valeur ZO pour work offset table valeur x
DoOEMButton (33) ' enregistre les valeur pour G54
je pense que pour G55, 56,57 ,58 ce doit etre les autre boutons de la page offset j ai pas vérifier ils ont tous le même numéro (33) je pense à une erreur dans le screen
je continue grâce à vous
merci beaucoup pour votre aide
grâce à votre aide je peux ecrire les valeurs que je veux dans work offset table
pour écrire dans G54 les valeurs variables XO,YO,ZO
SetOEMDRO (47, XO ) 'écrit la valeur XO pour work offset table valeur x
SetOEMDRO (48, YO ) 'écrit la valeur YO pour work offset table valeur x
SetOEMDRO (48, ZO ) 'écrit la valeur ZO pour work offset table valeur x
DoOEMButton (33) ' enregistre les valeur pour G54
je pense que pour G55, 56,57 ,58 ce doit etre les autre boutons de la page offset j ai pas vérifier ils ont tous le même numéro (33) je pense à une erreur dans le screen
je continue grâce à vous
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: BOUCLE DANS MACRO
Salut,
Non, le bouton OEM 33, c'est "lancer Gcode" et dans le code pour le bouton G55, il y a simplement G55, donc je suppose que si tu fais un: code("G55") ça doit le faire.
Ok, c'est marrant mais ça ne fonctionne pas si je tente d'écrire ces valeurs à la main directement dans l'interface (en éditant la DRO)
++
David
je pense que pour G55, 56,57 ,58 ce doit etre les autre boutons de la page offset j ai pas vérifier ils ont tous le même numéro (33) je pense à une erreur dans le screen
Non, le bouton OEM 33, c'est "lancer Gcode" et dans le code pour le bouton G55, il y a simplement G55, donc je suppose que si tu fais un: code("G55") ça doit le faire.
SetOEMDRO (47, XO ) 'écrit la valeur XO pour work offset table valeur x
Ok, c'est marrant mais ça ne fonctionne pas si je tente d'écrire ces valeurs à la main directement dans l'interface (en éditant la DRO)
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: BOUCLE DANS MACRO
bonjour à tous et à Mr David
il faut absolument pour la profondeur rainure et la valeur des passes des valeur négative
par contre elle ne tient pas compte de la partie G54 du screen
( ca fonctionne avec la petite flèche jaune éditeur scripter VB) ???????
il faut rentrer le g54 à la main ?????
je comprend pas j ai mis des Sleep(1000 jusqu'à 1500) pareil ça ne fonctionne pas
j utilise la Version R3.043.062de mach3 ? je suis à la maison ps de machine pour référencer pendant les tests
par contre j ai une nouvelle carte XHC MK6 ET pour remplacer la trois axes
donc il me reste l ébavurage et le g54 à faire fonctionner
en tous cas merci pour votre aide
- Code:
Rem Dimensions
DoOEMButton (169) 'efface le programme precedant dans Mach3
REM DIMENSIONS PIECE
Ltr = GetOEMDRO (1600) ' 100 mm Longueur totale reglette
Lar = GetOEMDRO (1590) ' 10 mm largeur totale reglette
Lon = GetOEMDRO (1610) ' 90 mm Longueur Rainure
Pr = GetOEMDRO (1620) ' -8 mm Profondeur Rainure
Eor = GetOEMDRO (1630) ' 5 mm Extremité coté Origine E1 Ystart
Eop = GetOEMDRO (1640) ' 5 mm Extremité coté Oposé E2 Yend
Rem OUTILS
Bv = GetOEMDRO (1660) ' 15000 trmn Vitesse broche
Tn = GetOEMDRO (824) 'Fraise_n°6
Df = GetOEMDRO (43) '6mm Diametre_Fraise
Rf = Df / 2 '3mm RayonFraise = Diametre_Fraise /2
Lf = GetOEMDRO (32) '50mm Longueur fraise_H ou = GetOEMDRO (24) standart
Rem Avances
Ae = GetOEMDRO (1690) '1500mm/mn Avance ebauche
Ap = GetOEMDRO (1700) ' 800mm/mn Avance en plongée
Av = GetOEMDRO (1710) '1000mm/mn Avance ebavurage
Rem Passes
Pe = GetOEMDRO (1730) '-2mm Passe_ebauche
Pv = GetOEMDRO (1750) ' 0.3mm Passe_ebavurage
Rem Hauteurs
Hra = GetOEMDRO (1760) '12mm Hauteur z deplacement degagement rapide securité G0
Hre = GetOEMDRO (1770) ' 5mm Hauteur_retrait z debourrage
Ha = GetOEMDRO (1780) '10mm Hauteur_avance z passage en G1
Eb = GetOEMDRO (1650) ' 0.3 mm hauteur ebavurage Hauteur Ebavurage bords
Rem G54 offset
Xx = GetOEMDRO (1800) '600mmbord rainure valeur coordonnée machine G53
Yy = GetOEMDRO (1810) '600mm debut brut barre valeur coordonnée machine G53
Zz = GetOEMDRO (1830) '-50mm audessus du brut dans l axe YO valeur coordonnée machine G53
SetOEMDRO(47,Xx) 'ecrit la valeur Xx pour work offset table valeur X
SetOEMDRO (48,Yy) 'ecrit la valeur Yy pour work offset table valeur Y
SetOEMDRO (49,Zz) 'ecrit la valeur Zz pour work offset table valeur Z
Sleep(1000)
DoOEMButton (33) ' lance g54
DoOEMButton (11) ' affiche l ecran 11
Sleep(500)
B= Round(GetOEMDro(802),2) 'position de Z dans visu
Zdepart= Round(GetOEMDRO (1580),2) '- 100mm (Z=0) contact au dessus de la piece valeur coordonnée machine G53
S= Zdepart+0.5 'hauteur approche piece +0.5mm
DoOEMButton (1007) ' affiche l ecran 11
DoButton ( ' zero visu X
DoButton (9) ' zero visu Y
DoButton (10) ' zero visu Z
Rem conditions (plus tard)
Sleep(1300)
OpenTeachFile "KAreglet.tap"
Code " G49 G40 G90 " ' G49 G90G17 G50
Code " G21"
Code " M6 T" & Tn 'Code "M6 T" & Fraise_n°
Code " G54"
Code " G0 Z " & S 'Hra va à Z degagement rapide G0z+15mm
Ya= Eor+ Rf ' point Ya entree de la fraise en bas de la piece = extremite + rayon fraise
Yb= (Ya)+ (Lon -Rf) ' point Yb sortie fraise en haut = Ya + longueur rainure - rayon fraise
Xdd= Lar/2 'decalage du point X à droite probleme soft limite
Xd= Xdd-Rf ' point droit en X largeur rainure
Xg= 0-Xd 'point gauche en X inversion du signe + en moins de Xd
Xc= 0 ' point centre equivalent à XO axe piece
Ztarget = (Round( Zdepart + Pr,2)) 'position maxi en Z fond de rainure arrondi à 2 décimal pour éviter les bugs
K = Round(Zdepart,2) '*** position courante
While ismoving() 'attendre que le mouvement soit fini, sinon le VB va continuer sans attendre le Gcode
Sleep(100)
Wend
Do
B= Round (GetOEMDro(802),2) ' valeur de Z memorisation de Z
C= Round(( B + Pe ),2) 'valeur Z + passe ebauche
K =Round(( K + C),2)'niveau d'usinage suivant
If K > Ztarget Then 'on est au dessus de la prof maxi
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & K 'on descend à la prof d'usinage
Call rainure() 'appel du sous programme rainure
GoTo suite 'on relance la boucle
End If
If K <= Ztarget Then 'on dépasse la prof maxi ou on y est déjà, donc dernière passe.
K = Ztarget
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & C 'K on descend à la prof d'usinage
' MsgBox("Fin boucle")
Call rainure() 'appel du sous programme rainure
Exit Do 'fin de la boucle
End If
suite: 'le goto arrive ici pour relancer la boucle
Loop
Code "G0 Z " & Hra ' va à Z degagement rapide G0z+15mm
Code"M5 M9"
Code"M30"
CloseTeachFile
Call LoadTeachFile()
'MsgBox("Fin")
Sub rainure()
' Code "G54"& "X" & Xx &"Y"&Yy &"Z"& Zz
'Code " G54"
Code "G0 Z" & Hre 'remonte rapide l outils debourrage
Code "G0 Y" & Ya &"X"& Xc ' va audessus du point de descente Ya = Extremité_Origine + RayonFraise
'Code "G1 Z" & S ' approche dessus piece +0.5
Code "F"& Ap ' rallentie avance plonge
Code "Z" & K 'descent à la 1ere valeur de K = Zdepart- Pe
Code "F" & Ae ' accelere l avance ebauche
Code "Y" & Yb 'remonte en YB
Code "X" & Xd 'va à droite +5mm
Code "Y" & Ya ' redescent en à l entrée
Code "X" & Xg 'va à gauche -5mm
Code "Y" & Yb 'remonte en YB
Code "X" & Xd 'va à droite +5mm
Code "X" & Xc 'va à droite +0mm dans l axe
Code "Y" & Ya ' redescent en à l entrée
Code "G0 Z" & Hre 'remonte rapide l outils debourrage
While ismoving() 'attendre que le mouvement soit fini, sinon le VB va continuer sans attendre le Gcode
Sleep(100)
Wend
End Sub
il faut absolument pour la profondeur rainure et la valeur des passes des valeur négative
par contre elle ne tient pas compte de la partie G54 du screen
( ca fonctionne avec la petite flèche jaune éditeur scripter VB) ???????
il faut rentrer le g54 à la main ?????
je comprend pas j ai mis des Sleep(1000 jusqu'à 1500) pareil ça ne fonctionne pas
j utilise la Version R3.043.062de mach3 ? je suis à la maison ps de machine pour référencer pendant les tests
par contre j ai une nouvelle carte XHC MK6 ET pour remplacer la trois axes
donc il me reste l ébavurage et le g54 à faire fonctionner
en tous cas merci pour votre aide
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: BOUCLE DANS MACRO
Salut,
Pour le G54, je ne sais pas, par contre, les Sleep() (et les Ismoving() ) ne servent que si le Gcode est envoyé à la volé à la machine par le programme VB afin que le VB attende que le GCode soit exécute par la CN ; par contre quand tu utilise le mode apprentissage, ça n’exécute pas le Gcode directement, mais ça se contente de l'écrire dans un fichier, donc les Sleep et IsMoving n'ont pas d'utilité.
en fait, j'avoue que je ne comprends pas vraiment ce que tu veux faire avec ces valeurs assignées au G54 pour ma part si je met des valeurs dans tes cases origine G54 et que j’appuie sur le bouton "Fixture 1 - G54" il ne se passe rien que j'ai ou non exécuté le code.. ni au niveau des visu, ni dans la table des "fixtures" .. la valeur lue dans la DRO 1800 (ton "origine G54 X") n'est pas copiée dans la dro 47 de la page "offset", tout comme si je tente d'entrer directement une valeur dans cette dro 47 ..
en principe le G54, ne sert qu'à sélectionner un décalage existant dans la liste des fixtures, pas à inscrire une valeur de décalage. La valeur du décalage s’inscrit d'elle même au moment ou tu fais la RàZ des axes.
Si le but est de positionner le point 0 du G54 par rapport au G53 (coord machine) ; disons avec le 0,0 du G54 à 10,20 en coord machine, alors le principe est:
- déplacer les axes à 10,20 en coord machine > G0 G53 X10 Y20
- sélectionner l'offset G54 > G54
- définir le point 0 temporaire pour l'offset courant > G92 X0 Y0 (ne produit aucun déplacement, = RàZ des visu)
attention la mise à 0 de l'offset courant par un G92 n'est pas strictement identique à une RàZ en cliquant les boutons de RàZ sur l'UI ; dans le cas du G92, c'est un 0 temporaire, qui dure jusqu'à ce qu'il soit modifié ou annulé (G92.1) ou que le Gcode rencontre un M30 (fin programme) ; à la fin du programme, les valeurs qui se trouvaient dans les visu XYZ seront restaurées à leur valeur avant G92.
bien sûr on peut faire l'inverse, si on est déjà au 0,0 machine (G53) au lieu d'aller à 10,20 en coord machine, puis de mettre à 0, on peut entrer directement le décalage, qui cette fois sera négatif, puis se déplacer après au 0,0 du G54.
si on est déjà au 0 machine
- sélectionner le G54 > G54
- mettre les visu XY à -10,-20 > G92 X-10 Y-20
- aller à 0,0 en G54 > G0 X0 Y0
++
David
je comprend pas j ai mis des Sleep(1000 jusqu'à 1500) pareil ça ne fonctionne pas
Pour le G54, je ne sais pas, par contre, les Sleep() (et les Ismoving() ) ne servent que si le Gcode est envoyé à la volé à la machine par le programme VB afin que le VB attende que le GCode soit exécute par la CN ; par contre quand tu utilise le mode apprentissage, ça n’exécute pas le Gcode directement, mais ça se contente de l'écrire dans un fichier, donc les Sleep et IsMoving n'ont pas d'utilité.
en fait, j'avoue que je ne comprends pas vraiment ce que tu veux faire avec ces valeurs assignées au G54 pour ma part si je met des valeurs dans tes cases origine G54 et que j’appuie sur le bouton "Fixture 1 - G54" il ne se passe rien que j'ai ou non exécuté le code.. ni au niveau des visu, ni dans la table des "fixtures" .. la valeur lue dans la DRO 1800 (ton "origine G54 X") n'est pas copiée dans la dro 47 de la page "offset", tout comme si je tente d'entrer directement une valeur dans cette dro 47 ..
en principe le G54, ne sert qu'à sélectionner un décalage existant dans la liste des fixtures, pas à inscrire une valeur de décalage. La valeur du décalage s’inscrit d'elle même au moment ou tu fais la RàZ des axes.
Si le but est de positionner le point 0 du G54 par rapport au G53 (coord machine) ; disons avec le 0,0 du G54 à 10,20 en coord machine, alors le principe est:
- déplacer les axes à 10,20 en coord machine > G0 G53 X10 Y20
- sélectionner l'offset G54 > G54
- définir le point 0 temporaire pour l'offset courant > G92 X0 Y0 (ne produit aucun déplacement, = RàZ des visu)
attention la mise à 0 de l'offset courant par un G92 n'est pas strictement identique à une RàZ en cliquant les boutons de RàZ sur l'UI ; dans le cas du G92, c'est un 0 temporaire, qui dure jusqu'à ce qu'il soit modifié ou annulé (G92.1) ou que le Gcode rencontre un M30 (fin programme) ; à la fin du programme, les valeurs qui se trouvaient dans les visu XYZ seront restaurées à leur valeur avant G92.
bien sûr on peut faire l'inverse, si on est déjà au 0,0 machine (G53) au lieu d'aller à 10,20 en coord machine, puis de mettre à 0, on peut entrer directement le décalage, qui cette fois sera négatif, puis se déplacer après au 0,0 du G54.
si on est déjà au 0 machine
- sélectionner le G54 > G54
- mettre les visu XY à -10,-20 > G92 X-10 Y-20
- aller à 0,0 en G54 > G0 X0 Y0
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: BOUCLE DANS MACRO
bonjour à Tous et à M David
donc voila le but de la macro
avant tous référencement
ensuite on va sur l écran (12) de la pièce mon pseudo wizard
la on rentre les paramètres dimensions fraise avances passes G54 vitesse etc.....
on sert la pièce dans l étau avec une butée et une cale (G54)
on appuie sur le bouton de l'écran (12) qui génère et charge le Gcode dans Mach3
on démarre Mach3 qui déroule le Gcode et fabrique la pièce
donc le g54 est important
si on ne peut écrire dans les cases de la work offset table par l intermédiaire du VB bouton
es ce que je peux faire déplacer la Spindle par des g53 à la position du G54 voulue ??? (je pense que oui)
en remontant la spindle en Z en premier pour aller à G54 puis Xx ET Yy et descendre àZc et mettre les visus à zero
DoButton ( ' zero visu X
DoButton (9) ' zero visu Y
DoButton (10) ' zero visu Z
la cote Zdépart de l'écran (12)
est donc une cote relative Zdepart = 0mm (je pense que oui de même que mes cote de retrait qui sont en relatif
un dernier problème que 'ai rencontré
les codes OEM ( OEMDRO (Xxx)
et les codes standards comment on les ecrits ????? visu bouton led ( machscreen nous donne les valeurs)
visus de Z= OEMDRO (802) en standard la valeur et (2) ????
excuser la longueur de mon verbiage
mais un très très grand merci pour votre aide
donc voila le but de la macro
- Code:
Rem Dimensions
DoOEMButton (169) 'efface le programme precedant dans Mach3
REM DIMENSIONS PIECE
Ltr = GetOEMDRO (1600) ' 100 mm Longueur totale reglette
Lar = GetOEMDRO (1590) ' 10 mm largeur totale reglette
Lon = GetOEMDRO (1610) ' 90 mm Longueur Rainure
Pr = GetOEMDRO (1620) ' -8 mm Profondeur Rainure
Eor = GetOEMDRO (1630) ' 5 mm Extremité coté Origine E1 Ystart
Eop = GetOEMDRO (1640) ' 5 mm Extremité coté Oposé E2 Yend
Rem OUTILS
Bv = GetOEMDRO (1660) ' 15000 trmn Vitesse broche
Tn = GetOEMDRO (824) 'Fraise_n°6
Df = GetOEMDRO (43) '6mm Diametre_Fraise
Rf = Df / 2 '3mm RayonFraise = Diametre_Fraise /2
Lf = GetOEMDRO (32) '50mm Longueur fraise_H ou = GetOEMDRO (24) standart
Rem Avances
Ae = GetOEMDRO (1690) '1500mm/mn Avance ebauche
Ap = GetOEMDRO (1700) ' 800mm/mn Avance en plongée
Av = GetOEMDRO (1710) '1000mm/mn Avance ebavurage
Rem Passes
Pe = GetOEMDRO (1730) '-2mm Passe_ebauche
Pv = GetOEMDRO (1750) ' 0.3mm Passe_ebavurage
Rem Hauteurs
Hra = GetOEMDRO (1760) '12mm Hauteur z deplacement degagement rapide securité G0
Hre = GetOEMDRO (1770) ' 5mm Hauteur_retrait z debourrage
Ha = GetOEMDRO (1780) '10mm Hauteur_avance z passage en G1
Eb = GetOEMDRO (1650) ' 0.3 mm hauteur ebavurage Hauteur Ebavurage bords
Rem G54 offset
SetOEMDRO(47,0)
SetOEMDRO(48,0)
SetOEMDRO(49,0)
Sleep(500)
Xx = GetOEMDRO (1800) '600mmbord rainure valeur coordonnée machine G53
Yy = GetOEMDRO (1810) '600mm debut brut barre valeur coordonnée machine G53
Zz = GetOEMDRO (1830) '-50mm audessus du brut dans l axe YO valeur coordonnée machine G53
SetOEMDRO(47,Xx) 'ecrit la valeur Xx pour work offset table valeur X
SetOEMDRO (48,Yy) 'ecrit la valeur Yy pour work offset table valeur Y
SetOEMDRO (49,Zz) 'ecrit la valeur Zz pour work offset table valeur Z
Sleep(500)
Zo=-10
Code "G53 Z" & Zo
Code "G0G53"& "X" & Xx &"Y"&Yy &"Z"& Zz
DoButton ( ' zero visu X
DoButton (9) ' zero visu Y
DoButton (10) ' zero visu Z
DoOEMButton (33) ' lance g54
DoOEMButton (11) ' affiche l ecran 11
Sleep(500)
B= Round(GetOEMDro(802),2) 'position de Z dans visu
Zdepart= Round(GetOEMDRO (1580),2) '- 100mm (Z=0) contact au dessus de la piece valeur coordonnée machine G53
S= Zdepart+0.5 'hauteur approche piece +0.5mm
Rem conditions (plus tard)
Sleep(500)
OpenTeachFile "KAreglet.tap"
Code " G49 G40 G90 " ' G49 G90G17 G50
Code " G21"
Code " M6 T" & Tn 'Code "M6 T" & Fraise_n°
Code " G54"
Code " G0 Z " & S 'Hra va à Z degagement rapide G0z+15mm
Ya= Eor+ Rf ' point Ya entree de la fraise en bas de la piece = extremite + rayon fraise
Yb= (Ya)+ (Lon -Rf) ' point Yb sortie fraise en haut = Ya + longueur rainure - rayon fraise
Xdd= Lar/2 'decalage du point X à droite probleme soft limite
Xd= Xdd-Rf ' point droit en X largeur rainure
Xg= 0-Xd 'point gauche en X inversion du signe + en moins de Xd
Xc= 0 ' point centre equivalent à XO axe piece
Ztarget = (Round( Zdepart + Pr,2)) 'position maxi en Z fond de rainure arrondi à 2 décimal pour éviter les bugs
K = Round(Zdepart,2) '*** position courante
While ismoving() 'attendre que le mouvement soit fini, sinon le VB va continuer sans attendre le Gcode
Sleep(100)
Wend
Do
B= Round (GetOEMDro(802),2) ' valeur de Z memorisation de Z
C= Round(( B + Pe ),2) 'valeur Z + passe ebauche
K =Round(( K + C),2)'niveau d'usinage suivant
If K > Ztarget Then 'on est au dessus de la prof maxi
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & K 'on descend à la prof d'usinage
Call rainure() 'appel du sous programme rainure
GoTo suite 'on relance la boucle
End If
If K <= Ztarget Then 'on dépasse la prof maxi ou on y est déjà, donc dernière passe.
K = Ztarget
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & C 'K on descend à la prof d'usinage
' MsgBox("Fin boucle")
Call rainure() 'appel du sous programme rainure
Exit Do 'fin de la boucle
End If
suite: 'le goto arrive ici pour relancer la boucle
Loop
Code "G0 Z " & Hra ' va à Z degagement rapide G0z+15mm
Code"M5 M9"
Code"M30"
CloseTeachFile
Call LoadTeachFile()
'MsgBox("Fin")
Sub rainure()
' Code "G54"& "X" & Xx &"Y"&Yy &"Z"& Zz
'Code " G54"
Code "G0 Z" & Hre 'remonte rapide l outils debourrage
Code "G0 Y" & Ya &"X"& Xc ' va audessus du point de descente Ya = Extremité_Origine + RayonFraise
'Code "G1 Z" & S ' approche dessus piece +0.5
Code "F"& Ap ' rallentie avance plonge
Code "Z" & K 'descent à la 1ere valeur de K = Zdepart- Pe
Code "F" & Ae ' accelere l avance ebauche
Code "Y" & Yb 'remonte en YB
Code "X" & Xd 'va à droite +5mm
Code "Y" & Ya ' redescent en à l entrée
Code "X" & Xg 'va à gauche -5mm
Code "Y" & Yb 'remonte en YB
Code "X" & Xd 'va à droite +5mm
Code "X" & Xc 'va à droite +0mm dans l axe
Code "Y" & Ya ' redescent en à l entrée
Code "G0 Z" & Hre 'remonte rapide l outils debourrage
While ismoving() 'attendre que le mouvement soit fini, sinon le VB va continuer sans attendre le Gcode
Sleep(100)
Wend
End Sub
avant tous référencement
ensuite on va sur l écran (12) de la pièce mon pseudo wizard
la on rentre les paramètres dimensions fraise avances passes G54 vitesse etc.....
on sert la pièce dans l étau avec une butée et une cale (G54)
on appuie sur le bouton de l'écran (12) qui génère et charge le Gcode dans Mach3
on démarre Mach3 qui déroule le Gcode et fabrique la pièce
donc le g54 est important
si on ne peut écrire dans les cases de la work offset table par l intermédiaire du VB bouton
es ce que je peux faire déplacer la Spindle par des g53 à la position du G54 voulue ??? (je pense que oui)
en remontant la spindle en Z en premier pour aller à G54 puis Xx ET Yy et descendre àZc et mettre les visus à zero
DoButton ( ' zero visu X
DoButton (9) ' zero visu Y
DoButton (10) ' zero visu Z
la cote Zdépart de l'écran (12)
est donc une cote relative Zdepart = 0mm (je pense que oui de même que mes cote de retrait qui sont en relatif
un dernier problème que 'ai rencontré
les codes OEM ( OEMDRO (Xxx)
et les codes standards comment on les ecrits ????? visu bouton led ( machscreen nous donne les valeurs)
visus de Z= OEMDRO (802) en standard la valeur et (2) ????
excuser la longueur de mon verbiage
mais un très très grand merci pour votre aide
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: BOUCLE DANS MACRO
Salut,
Oui, mais ça ne fonctionne qu'en direct depuis le VB, tu ne peux pas mettre des DoButtons() dans le GCode lui même .... à moins de faire une macro (code M) qui sera appelée par le Gcode et qui contiendra les DoButtons() (même principe que les autres codes M)
Il vaut mieux éviter d’utiliser les codes standards, il sont la juste pour compatibilité avec les (très) vielles versions de Mach3.
Sinon, au lieu de GetOEMDRO() ou SetOEMDRO() pour les codes OEM, c'est GetDRO() et SetDRO() pour les codes standards.
++
David
en remontant la spindle en Z en premier pour aller à G54 puis Xx ET Yy et descendre àZc et mettre les visus à zero
DoButton (8 )' zero visu X
DoButton (9) ' zero visu Y
DoButton (10) ' zero visu Z
Oui, mais ça ne fonctionne qu'en direct depuis le VB, tu ne peux pas mettre des DoButtons() dans le GCode lui même .... à moins de faire une macro (code M) qui sera appelée par le Gcode et qui contiendra les DoButtons() (même principe que les autres codes M)
et les codes standards comment on les ecrits ?????
Il vaut mieux éviter d’utiliser les codes standards, il sont la juste pour compatibilité avec les (très) vielles versions de Mach3.
Sinon, au lieu de GetOEMDRO() ou SetOEMDRO() pour les codes OEM, c'est GetDRO() et SetDRO() pour les codes standards.
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: BOUCLE DANS MACRO
Bonjour à M David et à vous Tous
Bon à part ça excuser moi je coince encore avec la deuxième boucle le deuxième loop me fait syntaxe error ?????
mais sur mes ecran Mach3 j ai plein de code standard ( je les change avec machscreen ?????? Version R3.043.062 de mach3
Il vaut mieux éviter d’utiliser les codes standards, il sont la juste pour compatibilité avec les (très) vielles versions de Mach3.
Sinon, au lieu de GetOEMDRO() ou SetOEMDRO() pour les codes OEM, c'est GetDRO() et SetDRO() pour les codes standards.
Bon à part ça excuser moi je coince encore avec la deuxième boucle le deuxième loop me fait syntaxe error ?????
- Code:
Rem Dimensions
DoOEMButton (169) 'efface le programme précédant dans Mach3
REM DIMENSIONS PIECE
Ltr = GetOEMDRO (1600) ' 100 mm Longueur totale reglette
Lar = GetOEMDRO (1590) ' 10 mm largeur totale reglette
Lon = GetOEMDRO (1610) ' 90 mm Longueur Rainure
Pr = GetOEMDRO (1620) ' -8 mm Profondeur Rainure
Eor = GetOEMDRO (1630) ' 5 mm Extremité coté Origine E1 Ystart
Eop = GetOEMDRO (1640) ' 5 mm Extremité coté Oposé E2 Yend
Rem OUTILS
Bv = GetOEMDRO (1660) ' 15000 trmn Vitesse broche
Tn = GetOEMDRO (824) 'Fraise_n°6
Df = GetOEMDRO (43) '6mm Diametre_Fraise
Rf = Df / 2 '3mm RayonFraise = Diametre_Fraise /2
Lf = GetOEMDRO (32) '50mm Longueur fraise_H ou = GetOEMDRO (24) standart
Rem Avances
Ae = GetOEMDRO (1690) '1500mm/mn Avance ebauche
Ap = GetOEMDRO (1700) ' 800mm/mn Avance en plongée
Av = GetOEMDRO (1710) '1000mm/mn Avance ebavurage
Rem Passes
Pe = GetOEMDRO (1730) '-2mm Passe_ebauche
Pv = GetOEMDRO (1750) ' 0.3mm Passe_ebavurage
Rem Hauteurs
Hra = GetOEMDRO (1760) '12mm Hauteur z deplacement degagement rapide securité G0
Hre = GetOEMDRO (1770) ' 5mm Hauteur_retrait z debourrage
Ha = GetOEMDRO (1780) '10mm Hauteur_avance z passage en G1
'ZVtarget = GetOEMDRO (1650) ' -1.5 mm hauteur ebavurage Hauteur Ebavurage bords
Rem G54 offset
SetOEMDRO(47,0)
SetOEMDRO(48,0)
SetOEMDRO(49,0)
Sleep(500)
Xx = GetOEMDRO (1800) '600mmbord rainure valeur coordonnée machine G53
Yy = GetOEMDRO (1810) '600mm debut brut barre valeur coordonnée machine G53
Zz = GetOEMDRO (1830) '-50mm audessus du brut dans l axe YO valeur coordonnée machine G53
SetOEMDRO(47,Xx) 'ecrit la valeur Xx pour work offset table valeur X
SetOEMDRO (48,Yy) 'ecrit la valeur Yy pour work offset table valeur Y
SetOEMDRO (49,Zz) 'ecrit la valeur Zz pour work offset table valeur Z
Sleep(300)
Zo=-10
Code "G53 Z" & Zo
Code "G0G53"& "X" & Xx &"Y"&Yy &"Z"& Zz
DoOEMButton (1007)
DoButton ( ' zero visu X
DoButton (9) ' zero visu Y
DoButton (10) ' zero visu Z
DoOEMButton (33) ' lance g54
DoOEMButton (11) ' affiche l ecran 11
Sleep(500)
B= Round(GetOEMDro(802),2) 'position de Z dans visu
Zdepart= Round(GetOEMDRO (1580),2) '- 100mm (Z=0) contact au dessus de la piece valeur coordonnée machine G53
S= Zdepart+0.5 'hauteur approche piece +0.5mm
Rem conditions (plus tard)
Sleep(500)
OpenTeachFile "KAreglet.tap"
Code " G49 G40 G90 " ' G49 G90G17 G50
Code " G21"
Code " M6 T" & Tn 'Code "M6 T" & Fraise_n°
Code " G54"
Code " G0 Z " & S 'Hra va à Z degagement rapide G0z+15mm
Ya= Eor+ Rf ' point Ya entree de la fraise en bas de la piece = extremite + rayon fraise
Yb= (Ya)+ (Lon -Rf) ' point Yb sortie fraise en haut = Ya + longueur rainure - rayon fraise
Xdd= Lar/2 'decalage du point X à droite probleme soft limite
Xd= Xdd-Rf ' point droit en X largeur rainure
Xg= 0-Xd 'point gauche en X inversion du signe + en moins de Xd
Xc= 0 ' point centre equivalent à XO axe piece
Ztarget = (Round( Zdepart + Pr,2)) 'position maxi en Z fond de rainure arrondi à 2 décimal pour éviter les bugs
K = Round(Zdepart,2) '*** position courante
While ismoving() 'attendre que le mouvement soit fini, sinon le VB va continuer sans attendre le Gcode
Sleep(100)
Wend
Do
B= Round (GetOEMDro(802),2) ' valeur de Z memorisation de Z
C= Round(( B + Pe ),2) 'valeur Z + passe ebauche
K =Round(( K + C),2)'niveau d'usinage suivant
If K > Ztarget Then 'on est au dessus de la prof maxi
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & K 'on descend à la prof d'usinage
Call rainure() 'appel du sous programme rainure
GoTo suite 'on relance la boucle
End If
If K <= Ztarget Then 'on dépasse la prof maxi ou on y est déjà, donc dernière passe.
K = Ztarget
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & C 'K on descend à la prof d'usinage
' MsgBox("Fin boucle")
Call rainure() 'appel du sous programme rainure
Exit Do 'fin de la boucle
End If
suite: 'le goto arrive ici pour relancer la boucle
Loop
Call ebavurage() 'appel du sous programme rainure
Code "G0 Z " & Hra ' va à Z degagement rapide G0z+15mm
Code"M5 M9"
Code"M30"
CloseTeachFile
Call LoadTeachFile()
'MsgBox("Fin")
Sub rainure()
Code "G0 Z" & Hre 'remonte rapide l outils debourrage
Code "G0 Y" & Ya &"X"& Xc ' va audessus du point de descente Ya = Extremité_Origine + RayonFraise
'Code "G1 Z" & S ' approche dessus piece +0.5
Code "F"& Ap ' rallentie avance plonge
Code "Z" & K 'descent à la 1ere valeur de K = Zdepart- Pe
Code "F" & Ae ' accelere l avance ebauche
Code "Y" & Yb 'remonte en YB
Code "X" & Xd 'va à droite +5mm
Code "Y" & Ya ' redescent en à l entrée
Code "X" & Xg 'va à gauche -5mm
Code "Y" & Yb 'remonte en YB
Code "X" & Xd 'va à droite +5mm
Code "X" & Xc 'va à droite +0mm dans l axe
Code "Y" & Ya ' redescent en à l entrée
Code "G0 Z" & Hre 'remonte rapide l outils debourrage
While ismoving() 'attendre que le mouvement soit fini, sinon le VB va continuer sans attendre le Gcode
Sleep(100)
Wend
End Sub
Sub ebavurage ()
'MsgBox("Ebavurage debut -0.5mm")
Ye=Ya-Eor ' debut ebavurage en Y
Yf=Yb+Eop ' fin ebavurage en Y
Xde=Xd+1 'va à droite rainure +1 mm+5mm =6mm
Xge=Xg-1 'va à gauche -1mm -5mm =-6mm
Zdepart= Round(GetOEMDRO (1580),2) ' meme cote de depart que la rainure
V= Round((Zdepart+Pv),2)
ZVtarget = (Round(GetOEMDRO (1650),2)) 'position maxi ebavurage en Z
Do
B= Round (GetOEMDro(802),2) ' valeur de Z memorisation de position Z
D= Round(( B + Pv ),2) 'valeur Z + passe ebavurage
V =Round(( V + D),2) 'niveau d'ebavurage suivant
If V> ZVtarget Then 'on est au dessus de la prof maxi
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & V 'on descend à la prof d'ebavurage
If V <= ZVtarget Then 'on dépasse la prof maxi ou on y est déjà, donc dernière passe. V = ZVtarget
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & C 'K on descend à la prof d'usinage
End If
Exit Do 'fin de la boucle
Loop '***** c'est la le problème ****************** ???????
Code "G0 Z" & Hre 'remonte rapide l outils debourrage
Code "G0 Y" & Ye &"X"& Xc ' va audessus du point de descente Ya = Extremité_Origine + RayonFraise
'Code "G1 Z" & S ' approche dessus piece +0.5
Code "F"& Ap ' rallentie avance plonge
Code "Z" & V 'descent à la 1ere valeur de V= Zdepart- Pv
Code "F" & Ae ' accelere l avance ebauche
Code "Y" & Yf 'remonte en YB
Code "X" & Xde 'va à droite +5mm
Code "Y" & Ye ' redescent en à l entrée
Code "X" & Xge 'va à gauche -5mm
Code "Y" & Yf 'remonte en YB
Code "X" & Xde 'va à droite +5mm
Code "X" & Xc 'va à droite +0mm dans l axe
Code "Y" & Ye ' redescend en à l entrée
Code "G0 Z" & Hre 'remonte rapide l outils débourrage
End Sub
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Re: BOUCLE DANS MACRO
Salut
DoButton (Cool ' zero visu X
manque la parenthèse fermante après Cool
---------------
Do
B= Round (GetOEMDro(802),2) ' valeur de Z memorisation de position Z
D= Round(( B + Pv ),2) 'valeur Z + passe ebavurage
V =Round(( V + D),2) 'niveau d'ebavurage suivant
If V> ZVtarget Then 'on est au dessus de la prof maxi
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & V 'on descend à la prof d'ebavurage
End If
If V <= ZVtarget Then 'on dépasse la prof maxi ou on y est déjà, donc dernière passe. V = ZVtarget
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & C 'K on descend à la prof d'usinage
End If
Exit Do 'fin de la boucle
Loop '***** c'est la le problème ****************** ???????
-----------
Manque le End If en orange
++
David
DoButton (Cool ' zero visu X
manque la parenthèse fermante après Cool
---------------
Do
B= Round (GetOEMDro(802),2) ' valeur de Z memorisation de position Z
D= Round(( B + Pv ),2) 'valeur Z + passe ebavurage
V =Round(( V + D),2) 'niveau d'ebavurage suivant
If V> ZVtarget Then 'on est au dessus de la prof maxi
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & V 'on descend à la prof d'ebavurage
End If
If V <= ZVtarget Then 'on dépasse la prof maxi ou on y est déjà, donc dernière passe. V = ZVtarget
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & C 'K on descend à la prof d'usinage
End If
Exit Do 'fin de la boucle
Loop '***** c'est la le problème ****************** ???????
-----------
Manque le End If en orange
++
David
_________________
Traduction Française de CamBam et de sa documentation.
Re: BOUCLE DANS MACRO
Bonjour M Dh42 et à Tous
j y suis presque à part la boucle ebavurage qui fait un tour et quitte la Macro
Par contre moi je tourne en rond
le probleme provient surement du END SUB à la du SUB ebavurage qui envoi à la sortie du programme
(Mais je n ai pas d exemple de programme VBcypress avec deux boucles dedans pour voir comment on fait)
PS***** il y a un Probleme avec l emoticone cool qui vient ce mettre tous seul sur DoButton ( bug???****
dans le programme il y en pas ????
j y suis presque à part la boucle ebavurage qui fait un tour et quitte la Macro
Par contre moi je tourne en rond
le probleme provient surement du END SUB à la du SUB ebavurage qui envoi à la sortie du programme
(Mais je n ai pas d exemple de programme VBcypress avec deux boucles dedans pour voir comment on fait)
PS***** il y a un Probleme avec l emoticone cool qui vient ce mettre tous seul sur DoButton ( bug???****
dans le programme il y en pas ????
- Code:
Rem Dimensions
DoOEMButton (169) 'efface le programme précédant dans Mach3
REM DIMENSIONS PIECE
Ltr = GetOEMDRO (1600) ' 100 mm Longueur totale reglette
Lar = GetOEMDRO (1590) ' 10 mm largeur totale reglette
Lon = GetOEMDRO (1610) ' 90 mm Longueur Rainure
Pr = GetOEMDRO (1620) ' -8 mm Profondeur Rainure
Eor = GetOEMDRO (1630) ' 5 mm Extremité coté Origine E1 Ystart
Eop = GetOEMDRO (1640) ' 5 mm Extremité coté Oposé E2 Yend
Rem OUTILS
Bv = GetOEMDRO (1660) ' 15000 trmn Vitesse broche
Tn = GetOEMDRO (824) 'Fraise_n°6
Df = GetOEMDRO (43) '6mm Diametre_Fraise
Rf = Df / 2 '3mm RayonFraise = Diametre_Fraise /2
Lf = GetOEMDRO (32) '50mm Longueur fraise_H ou = GetOEMDRO (24) standart
Rem Avances
Ae = GetOEMDRO (1690) '1500mm/mn Avance ebauche
Ap = GetOEMDRO (1700) ' 800mm/mn Avance en plongée
Av = GetOEMDRO (1710) '1000mm/mn Avance ebavurage
Rem Passes
Pe = GetOEMDRO (1730) '-2mm Passe_ebauche
Pv = GetOEMDRO (1750) ' 0.3mm Passe_ebavurage
Rem Hauteurs
Hra = GetOEMDRO (1760) '12mm Hauteur z deplacement degagement rapide securité G0
Hre = GetOEMDRO (1770) ' 5mm Hauteur_retrait z debourrage
Ha = GetOEMDRO (1780) '10mm Hauteur_avance z passage en G1
'ZVtarget = GetOEMDRO (1650) ' -1.5 mm hauteur ebavurage Hauteur Ebavurage bords
Rem G54 offset
SetOEMDRO(47,0)
SetOEMDRO(48,0)
SetOEMDRO(49,0)
Sleep(500)
Xx = GetOEMDRO (1800) '600mmbord rainure valeur coordonnée machine G53
Yy = GetOEMDRO (1810) '600mm debut brut barre valeur coordonnée machine G53
Zz = GetOEMDRO (1830) '-50mm audessus du brut dans l axe YO valeur coordonnée machine G53
SetOEMDRO(47,Xx) 'ecrit la valeur Xx pour work offset table valeur X
SetOEMDRO (48,Yy) 'ecrit la valeur Yy pour work offset table valeur Y
SetOEMDRO (49,Zz) 'ecrit la valeur Zz pour work offset table valeur Z
Sleep(300)
Zo=-10
Code "G53 Z" & Zo
Code "G0G53"& "X" & Xx &"Y"&Yy &"Z"& Zz
' DoOEMButton (1007)
DoButton ( ' zero visu X
DoButton (9) ' zero visu Y
DoButton (10) ' zero visu Z
DoOEMButton (33) ' lance g54
DoOEMButton (11) ' affiche l ecran 11
Sleep(500)
B= Round(GetOEMDro(802),2) 'position de Z dans visu
Zdepart= Round(GetOEMDRO (1580),2) '- 100mm (Z=0) contact au dessus de la piece valeur coordonnée machine G53
S= Zdepart+0.5 'hauteur approche piece +0.5mm
Rem conditions (plus tard)
Sleep(500)
OpenTeachFile "KAreglet.tap"
Code " G49 G40 G90 " ' G49 G90G17 G50
Code " G21"
Code " M6 T" & Tn 'Code "M6 T" & Fraise_n°
Code " G54"
Code " G0 Z " & S 'Hra va à Z degagement rapide G0z+15mm
Ya= Eor+ Rf ' point Ya entree de la fraise en bas de la piece = extremite + rayon fraise
Yb= (Ya)+ (Lon -Rf) ' point Yb sortie fraise en haut = Ya + longueur rainure - rayon fraise
Xdd= Lar/2 'decalage du point X à droite probleme soft limite
Xd= Xdd-Rf ' point droit en X largeur rainure
Xg= 0-Xd 'point gauche en X inversion du signe + en moins de Xd
Xc= 0 ' point centre equivalent à XO axe piece
Ztarget = (Round( Zdepart + Pr,2)) 'position maxi en Z fond de rainure arrondi à 2 décimal pour éviter les bugs
K = Round(Zdepart,2) '*** position courante
While ismoving() 'attendre que le mouvement soit fini, sinon le VB va continuer sans attendre le Gcode
Sleep(100)
Wend
Do
B= Round (GetOEMDro(802),2) ' valeur de Z memorisation de Z
C= Round(( B + Pe ),2) 'valeur Z + passe ebauche
K =Round(( K + C),2)'niveau d'usinage suivant
If K > Ztarget Then 'on est au dessus de la prof maxi
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & K 'on descend à la prof d'usinage
Call rainure() 'appel du sous programme rainure
GoTo suite 'on relance la boucle
End If
If K <= Ztarget Then 'on dépasse la prof maxi ou on y est déjà, donc dernière passe.
K = Ztarget
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & C 'K on descend à la prof d'usinage
' MsgBox("Fin boucle")
Call rainure() 'appel du sous programme rainure
Exit Do 'fin de la boucle
End If
suite: 'le goto arrive ici pour relancer la boucle
Loop
Call ebavurage() 'appel du sous programme rainure
Code "G0 Z " & Hra ' va à Z degagement rapide G0z+15mm
Code"M5 M9"
Code"M30"
CloseTeachFile
Call LoadTeachFile()
'MsgBox("Fin")
Sub rainure()
Code "G0 Z" & Hre 'remonte rapide l outils debourrage
Code "G0 Y" & Ya &"X"& Xc ' va audessus du point de descente Ya = Extremité_Origine + RayonFraise
'Code "G1 Z" & S ' approche dessus piece +0.5
Code "F"& Ap ' rallentie avance plonge
Code "Z" & K 'descent à la 1ere valeur de K = Zdepart- Pe
Code "F" & Ae ' accelere l avance ebauche
Code "Y" & Yb 'remonte en YB
Code "X" & Xd 'va à droite +5mm
Code "Y" & Ya ' redescent en à l entrée
Code "X" & Xg 'va à gauche -5mm
Code "Y" & Yb 'remonte en YB
Code "X" & Xd 'va à droite +5mm
Code "X" & Xc 'va à droite +0mm dans l axe
Code "Y" & Ya ' redescent en à l entrée
Code "G0 Z" & Hre 'remonte rapide l outils debourrage
While ismoving() 'attendre que le mouvement soit fini, sinon le VB va continuer sans attendre le Gcode
Sleep(100)
Wend
End Sub
Sub ebavurage ()
'MsgBox("Ebavurage debut -0.5mm")
Ye=Ya-Eor ' debut ebavurage en Y
Yf=Yb+Eop ' fin ebavurage en Y
Xde=Xd+1 'va à droite rainure +1 mm+5mm =6mm
Xge=Xg-1 'va à gauche -1mm -5mm =-6mm
Zdepart= Round(GetOEMDRO (1580),2) ' meme cote de depart que la rainure
V= Round((Zdepart+Pv),2)
ZVtarget = (Round(GetOEMDRO (1650),2)) 'position maxi ebavurage en Z
Do
B= Round (GetOEMDro(802),2) ' valeur de Z memorisation de position Z
D= Round(( B + Pv ),2) 'valeur Z + passe ebavurage
V =Round(( V + D),2) 'niveau d'ebavurage suivant
If V> ZVtarget Then 'on est au dessus de la prof maxi
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & V 'on descend à la prof d'ebavurage
End If
If V <= ZVtarget Then 'on dépasse la prof maxi ou on y est déjà, donc dernière passe. V = ZVtarget
Code "F"& Ap '** rallentie avance pour la descente
Code "G1 Z" & C 'K on descend à la prof d'usinage
End If
Exit Do 'fin de la boucle
Loop '
Code "G0 Z" & Hre 'remonte rapide l outils debourrage
Code "G0 Y" & Ye &"X"& Xc ' va audessus du point de descente Ya = Extremité_Origine + RayonFraise
'Code "G1 Z" & S ' approche dessus piece +0.5
Code "F"& Ap ' rallentie avance plonge
Code "Z" & V 'descent à la 1ere valeur de V= Zdepart- Pv
Code "F" & Ae ' accelere l avance ebauche
Code "Y" & Yf 'remonte en YB
Code "X" & Xde 'va à droite +5mm
Code "Y" & Ye ' redescent en à l entrée
Code "X" & Xge 'va à gauche -5mm
Code "Y" & Yf 'remonte en YB
Code "X" & Xde 'va à droite +5mm
Code "X" & Xc 'va à droite +0mm dans l axe
Code "Y" & Ye ' redescend en à l entrée
Code "G0 Z" & Hre 'remonte rapide l outils débourrage
End Sub '**************** je pense que le probleme est là************
WF- très actif
- Messages : 281
Points : 398
Date d'inscription : 17/09/2018
Age : 72
Localisation : Bondy
Page 1 sur 2 • 1, 2
Sujets similaires
» Double G31 dans macro, fonctionnement a 50%
» Appeler une Macro stocke dans un wizard
» Boucle et tests
» sortir d'une boucle
» lancer macro
» Appeler une Macro stocke dans un wizard
» Boucle et tests
» sortir d'une boucle
» lancer macro
Page 1 sur 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum