Contrôle 3D avec Mach3

Aller en bas

Contrôle 3D avec Mach3 Empty Contrôle 3D avec Mach3

Message  Zarkann le Dim 17 Mai 2015 - 11:01

Bonjour à tous

Je crée  un autre sujet ici de façon a ne pas trop polluer le sujet sur la numérisation 3D Wink


Il s’agit d'un projet d'écran de contrôle 3D sous Mach3

J'ai donc créé un nouvel écran avec MachScreenV1.53

Dans cette interface je vais développer la partie programmation car en français sur internet on ne trouve presque rien (a part le travail de David Very Happy que je remercie au passages pour ces précieux conseils) et j’espère que cette expérience servira a ceux pour qui l'anglais donne des boutons  cheers  study

Tout d’abord, je vous présente 2 écrans de contrôle en images, afin que l'on puisse les détailler

L'écran "programme Run"
Contrôle 3D avec Mach3 Mach3-11

Dans L'écran "Prog Run" vous pourrez voir des modifications que j'avais faite progressivement en fonctions des besoins et en partant de l'interface en français de David

Comme par exemple l'ajout de boutons et leds préprogrammés dans MachScreen
Contrôle 3D avec Mach3 Miniru10
En encore de visus appeler "dro"
Ici des visus permettant de voir la distance restant à parcourir (à gauche) ou encore
les décalages en G52 que j'utilise fréquemment (à droite)

Contrôle 3D avec Mach3 Miniru11

Une petite Vidéo qui montre comment faire pour les manips simple sous machScreen


Dans la deuxième partie du poste je vais vous parler de créer soi même des "dro" des boutons avec de la programmation associé

L'écran "Contrôle 3D" qui pour l'instant ne comprend que la partie prise d'origines avec un palpeur 3D :
Contrôle 3D avec Mach3 Mach3-10


Contrôle 3D avec Mach3 Palpag10
La programmation des deux boutons de palpage en X, en sachant que c'est quasiment la même chose pour le Y

Code du bouton du X en positif
Code:
Sub Main
Rem palpeur OPXpl
If GetOEMLED(825)<>0 Then 'tester si contact pas déja actif
 Code"(Le palpeur est déja actif)"
Else

 Code "g4 p1000"                          'pause
 RSonde = GetUserDRO(1102)         'Rayon palpeur
 Vavance_cour= GetOEMDRO(818) 'Enregistrer vitesse d'avance en cours
 Vpalp=GetUserDRO (1101)             'vitesse de palpage
 If Vpalp = 0 Then
 Vpalp = 20
 End If
 Code "F"&Vpalp 'définir vitesse de palpage
 '---------------------------------------------------------------------
 
 SetUserLed(1501,0) ' Led(1500)et (L1501)
 SetUserLed(1500,0)
 
 XNew=GetOEMDRO(800)+150 'Déplacement en X+ de mm en dessus de la pos courante  .
 
 Code "G31 X"&XNew 'Lancer le palpage
 
 While IsMoving() 'Attendre une détection
 Sleep(10)
 Wend
 
 XNew= GetVar(2000) 'Lire la valeur du point de contact
 
 Code "G0 X"&XNew 'Revenir si dépassement
 
 While IsMoving() 'Attendre une détection
 Sleep(10) 'Empècheur de tourner en rond
 Wend
 
 Call SetOEMDRO(800,-RSonde) 'Position Palpeur dans la visu X
 Code "G4 P1000" 'Pause pour mise à jour affichage
 
 Code "G0 G53 Z-1" 'Remonter à Z-1 en G53
 Code"(L'axe X a été mis à Zéro)" 'Message
 
 Code "F"&Vavance_cour 'Remettre l'avance initiale
 
 SetUserLED(1501,1) 'Allumer la Led (L1501)
 
 While IsMoving() 'Attendre une détection
 Sleep(10)
 Wend
End If

End Sub


Code du bouton du X en Négatif:
Code:
Sub Main
Rem palpeur OPXm
If GetOEMLED(825)<>0 Then 'tester si contact pas déja actif
 Code"(Le palpeur est déja actif)"
Else

 Code "g4 p1000" 'pause
 RSonde = GetUserDRO(1102) 'Rayon palpeur
 Vavance_cour= GetOEMDRO(818) 'Enregistrer vitesse d'avance en cours
 Vpalp=GetUserDRO (1101) 'vitesse de palpage
 
 If Vpalp = 0 Then     'tester la valeur d'avance
 Vpalp = 20 'si valeur=0 prendre la valeur 20
 End If 'fin de test
 
 Code "F"&Vpalp 'définir vitesse de palpage
 '-----------------------------------------------------------------------------
 
 SetUserLED(1501,0) ' Led(1500)et (1501)
 SetUserLed(1500,0)

 XNew=GetOEMDRO(800)-150 'Deplacement en X- 150 mm en dessous de la pos courante
 
 Code "G31 X"&XNew 'lancer le palpage
 
 While IsMoving() 'attendre une détection
 Sleep(10)
 Wend
 
 XNew= GetVar(2000) 'lire la valeur du point de contact
 
 Code "G0 X"&XNew 'Revenir si dépassement
 
 While IsMoving() 'Attendre une détection
 Sleep(10)
 Wend
 
 Call SetOEMDRO(800,RSonde) 'Position de la sonde dans la visu X
 Code "G4 P1000" 'pause pour mise à jour affichage
 
 Code "G0 G53 Z-1" 'Remonter en G53 à Z-1
 Code"(L'axe Z a été mis à Zéro)" 'Message
 
 Code "F"&Vavance_cour 'remettre l'avance initiale
 
 SetUserLED(1500,1) 'Allumer la Led (L1500)
 While IsMoving() 'attendre une détection
 Sleep(10)
 Wend
End If

End Sub

La vidéo de démonstration :


Ensuite le bouton de prise d'origine dans un cylindre:
Contrôle 3D avec Mach3 Palp-c10

La programmation du bouton:
Code:
Sub Main
Rem palpeur OPXcercle
If GetOEMLED(825)<>0 Then 'tester si contact pas déja actif
 Code"(Le palpeur est déja actif)"
Else

 Code "g4 p250" 'pause
 Rpalp = GetUserDRO(1102) ' Dro 1102 = rayon du palpeur
 Vavance_cour= GetOEMDRO(818) 'vitesse d'avance en cours
 Vpalp=GetUserDRO (1101) 'vitesse de palpage
 If Vpalp = 0 Then
 Vpalp = 20
 End If
 Code "F"&Vpalp 'définir vitesse de palpage
 
 
 SetUserLED(1500,0)  'Raz Led
 SetUserLED(1501,0)
 SetUserLED(1502,0)
 SetUserLED(1503,0)
 '---------------------------------------------
 'Raz OPX
 Call SetOEMDRO(800,0)
 Code "g4 p250"
 
 '-----------------------------------------------------------------------------------------------
 'Palpage en X+
 '------------------------------------------------------------------------------------------------
 CylDiam=GetUserDro(1103) 'Enregist. valeur du diam de l'alésage
 MsgBox("Diam Alésage "&CylDiam) 'Message avec validation
 
 
 AcPos=GetOEMDRO(800) 'enregist.point actuel en X (actuel position)
 
 
 XpNew=GetOEMDRO(800)+CylDiam'Bouger en X+ de la variable CYDiam depuis le point actuel.
 
 Code "G31 X"&XpNew 'lancer le palpage
 While IsMoving() 'attendre une détection
 Sleep(10)
 Wend
 Code "g4 p1000"
 
 LgpalXp=GetVar(2000) 'Lecture de la position de palpage en X+
 
 
 DistpalpXp=LgpalXp-AcPos'Distance palpage (variable de calcul)
 
 
 Code "G0 X"&AcPos 'Retour position de depart
 
 While IsMoving() ' Attendre fin du mouvement
 Sleep(10)
 Wend
 
 SetUserLED(1501,1) 'Allumer la Led 1501
 
 '--------------------------------------------------------------------------------------------
 'Palpage en X-
 '--------------------------------------------------------------------------------------------
 
 XmNew=GetOEMDRO(800)-CylDiam 'distance palpage en X-
 
 Code "G31 X"&XmNew 'lancer le palpage
 While IsMoving() 'attendre une détection
 Sleep(10)
 Wend
 Code "g4 p1000"

 Lgpalpxm=GetVar(2000)    'Lecture de la position de palpageen X-
 

 Positif=Lgpalpxm*2 'Variable de calcul pour passage en valeur positive
 
 DistpalpXm=Lgpalpxm-Positif   'Distance palpage en variable de calcul
 

 Code "G0 X"&AcPos 'retour pos depart
 While IsMoving() ' attendre fin du mouvement
 Sleep(10)
 Wend
 

 DistotX=DistpalpXp+DistpalpXm 'calcul de la distance total en X+ et X-
 
 PosCentrX=DistotX/2 'Calcul de la position central en X
 

 PPcx=LgpalXp-PosCentrX 'calcul du déplacement ver l'OP
 Code "G0 X"&PPcx 'Déplacement sur l'Origine Programme OP en Y
 
 While IsMoving() ' attendre fin du mouvement
 Sleep(100)
 Wend
 Code "g4 p250"
 Call SetOEMDRO(800,0) 'remise à 0 de la Dro en X
 Code "g4 p250"
 While IsMoving() ' attendre fin du mouvement
 Sleep(100)
 Wend

 Code"(L'axe X a été mis à Zéro)"
 Code "g4 p1000"
 SetUserLED(1500,1)

 
 '----------------------------------------------------------------
 
 'Palpage en Y+
 
 '----------------------------------------------------------------
 
 While IsMoving() ' attendre fin du mouvement
 Sleep(100)
 Wend

 'Raz OPY
 Call SetOEMDRO(801,0)
 Code "g4 p250"
 
 While IsMoving() ' attendre fin du mouvement
 Sleep(100)
 Wend

 
 '-----------------------------------------------------
                    'Palpage en Y+
 
 CylDiam=GetUserDro(1103)'Enregist. valeur du diam de l'alésage
 
 AcPosY=GetOEMDRO(801) 'enregist.point actuel en Y (actuel position)
 

 YpNew=GetOEMDRO(801)+CylDiam'Bouger en Y+ de la variable CYDiam depuis le point actuel.
 

 Code "G31 Y"&YpNew 'lancer le palpage
 
 While IsMoving() 'attendre une détection
 Sleep(10)
 Wend
 Code "g4 p250"
 
 LgpalYp=GetVar(2001) 'Lecture de la position de palpage en Y+
 
 
 DistpalpYp=LgpalYp-AcPosY 'Distance palpage (variable de calcul)
 
 
 Code "G0 Y"&AcPosY 'retour pos depart en Y
 While IsMoving() ' Attendre fin du mouvement
 Sleep(10)
 Wend
 
 SetUserLED(1503,1)  'Allumer la Led 1503
'--------------------------------------------------------------------------------------
 'Palpage en Y-
'--------------------------------------------------------------------------------------
 YmNew=GetOEMDRO(801)-CylDiam 'Enregist. valeur du diam de l'alésage
 
 Code "G31 Y"&YmNew 'lancer le palpage
 While IsMoving() 'attendre une détection
 Sleep(10)
 Wend
 Code "g4 p250"
 
 LgpalpYm=GetVar(2001)    'Lecture de la position de palpage en Y-
 'Code "(LgpalpYm position de palpage en x-)"
 'MsgBox(LgpalpYm)
 
 PositifY=LgpalpYm*2 'Variable de calcul pour passage en valeur positive
 
 DistpalpYm=LgpalpYm-PositifY 'Distance palpage en variable de calcul
 
 
 Code "G0 Y"&AcPosY 'retour point depart en Y

 While IsMoving() ' attendre fin du mouvement
 Sleep(10)
 Wend

 DistotY=DistpalpYp+DistpalpYm 'calcul de la distance total de palpage Y+et Y-
 

 PosCentrY=DistotY/2 'Calcul de la position central en Y
 

 PPcY=LgpalYp-PosCentrY 'calcul du déplacement ver l'OP
 
 Code "G0 G53 Z-1"
 Code "G0 Y"&PPcY 'Déplacement sur l'Origine Programme OP en Y

 While IsMoving() ' attendre fin du mouvement
 Sleep(100)
 Wend

 Code "g4 p250"
 Call SetOEMDRO(801,0) 'Remise à 0 de la Dro Y
 
 While IsMoving() ' attendre fin du mouvement
 Sleep(100)
 Wend

 Code "g4 p250"
 
 SetUserLED(1502,1) 'Allumer la Led 1502
 
 Code"(L'axe Y a été mis à Zéro)"
 Code "g4 p250"

 Code "M0"
 
 Code "F"&Vavance_cour 'remettre l'avance initiale
 
End If
 
End Sub


Et la Vidéo de démonstration:


Je vous remet ici la première vidéo que j'avais fait pendant le développement
car sur la vidéo ci-dessus je montre presque que l'écran alors que dans celle-ci on voie se qui se passe sur la pièce.


Voila j'espère que cela pourra vous servir dans vos traveaux de programmation en VBScript pour Mach3

La suite du programme sera de créer une interface de mesure ainsi qu'un système de calibrage des axes par palpage.

@++ Eric

_________________
Cordialement         .::Zarkann::.  .::Administrateur et Fondateur MB::.


Contrôle 3D avec Mach3 Miniba10
Zarkann
Zarkann
Admin
Admin

Messages : 2034
Points : 3609
Date d'inscription : 06/12/2008
Age : 51
Localisation : St Sylvestre (87)

http://if-design.e-monsite.com/

Revenir en haut Aller en bas

Contrôle 3D avec Mach3 Empty Peux-tu partager ?

Message  Brossden le Mer 16 Oct 2019 - 10:08

Bonjour Zarkann
Je suis nouveau dans le domaine de la programmation sur Mach3, ton sujet et à 100% ce que je cherche à faire mais n'étant pas très performant dans le codage aurais tu la gentillesse de partager ce développement soit ici soit sur mon email
Je t'en serais vraiment très reconnaissant et je pense que je pourrais ainsi commencer à pouvoir faire des projets comme celui-ci mais plus simple évidement !
brossden
Brossden
Brossden
petit nouveau
petit nouveau

Messages : 1
Points : 1
Date d'inscription : 02/01/2016
Age : 65
Localisation : Irigny (69540)

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum