recherche code oembutton

  • Auteur de la discussion v tec
  • Date de début
D

dh42

Compagnon
Salut,

Alors pour le timer, il semble indépendant des réglages de Mach (millisec ou sec) ; pour moi j'ai bien le message "temps dépassé" qui s'affiche dans la ligne de status après environ 10 secondes comme demandé, et si je regarde les sorties, la n°2 s'active bien sur le panneau de contrôle (attention, il faut aussi qu'elle soit définie sur active dans les réglages port&pins, sinon il ne se passe rien)

Une chtite vidéo. (note je simule l'input 1 via une touche d'émulation)

http://screencast.com/t/lnbnlRzgM

++
David
 
Dernière édition par un modérateur:
V

v tec

Compagnon
voila ma video

http://www.phykidis.fr/adrien/capture-1.avi


c est mach3fr



mon pote avait utiliser ca pour le temps dans sa macro:

Private Sub CommandButton1_Click()
Dim bInputOk As Boolean
Dim bQuitLoop As Boolean
Dim totalTime As Integer

bQuitLoop = False
bInputOk = False
totalTime = 0

While bQuitLoop = False
bInputOk = Not IsActive(input2)
If bInputOk = True Then
bQuitLoop = True
End If
If totalTime > 2500 Then
bQuitLoop = True
End If
sleep(100)
totalTime = totalTime + 100
Wend

If bInputOk = False Then
message "probleme: rouleaux non pris par le préhenseur"
ActivateSignal (output1)
code "m1"
Exit Sub
End If
DeActivateSignal (output1)
message "tout les rouleaux sont bien levés"
End Sub




ca marche, mais j arrive pas a l integrer dans la tienne, tj des error script compiler
 
Dernière édition par un modérateur:
D

dh42

Compagnon
Re

Je n'arrive pas à lire ta vidéo, ça me plante tous les lecteurs que j'ai essayé :sad:

++
David
 
V

v tec

Compagnon
avec windows media player impec


je vais mettre sur youtube
 
D

dh42

Compagnon
Ok, donc d'après ce que je vois sur la vidéo, ça fonctionne, mais la tempo est dans les choux ; 37 secondes réelles avant d'avoir le message "temps dépassé" pour 1 demandée !!

Je ne comprends pas le pourquoi ; ça ne peux pas être une confusion secondes/microsecondes, ça ne correspond pas du tout ... mystère ..

pour tester, à tout hasard, essais d'enlever le Sleep(500) pour voir si ça influe sur le temps ; dès fois que ça bloque le compteur de temps à chaque passage dans la boucle.

++
David
 
D

dh42

Compagnon
Re

en plus des fonctions Set et GetTimer() spécifiques à Mach3, il y a aussi une propriété Timer() dans le VB qui retourne une valeur en s écoulées depuis minuit (elle ne se met pas à zéro ; tu dois comparer 2 valeurs pour connaitre le temps écoulé.)

exemple de code

Dim t1 As Double
t1 = Timer() 'stocke la valeur du timer dans la variable t1

sleep(1250) 'attends 1250 millisec

MsgBox(Timer()-t1) 'affiche la durée écoulée -> temps actuel - temps stocké dans t1

Plus d'infos ici
http://msdn.microsoft.com/fr-fr/library/t94fw4e9%28v=vs.90%29.aspx

++
David
 
Dernière édition par un modérateur:
V

v tec

Compagnon
si j enleve le sleep 500, j appui 2/3 fois sur input 1 et les sortie sont activé, car je dois appuyé un peu trop longtemp


sinon, tu sais quoi, on va virer le code m1, etc..., on va simplement faire le comptage
 
V

v tec

Compagnon
c est bon ca marche: merci

Sub Main()
Dim nbmax_input As Long 'nb total d'entrée à compter avant déclenchment
Dim duree_maxi As integer 'nb de secondes maxi avant echec
Dim nbinput As Long 'nb d'entrées comptées
Dim Ok As Boolean 'a true si tout s'est bien passé
Dim t1 As Double

'initialisation
nbmax_input = 4
duree_maxi = 20
nbinput = 0
Ok = false
t1=Timer()

message "" 'efface les messages


Do While (timer()-t1) < duree_maxi 'boucler tant que le temps n'est pas dépassé

If IsActive(input1) Then 'si entrée active, ajoute 1 au compteur
nbinput = nbinput + 1
sleep(500) 'évite un comptage multiple par rebond du contact (ou si reste trop longtemps enfoncé)
End If

If nbinput = nbmax_input Then 'nb d'entrée attendues atteint
Ok = true
ActivateSignal (output3)
ActivateSignal (output4)
Exit Do 'sort de la boucle
End If

sleep(100)


Loop

'affichage.
If Ok = false Then
code "M1"
ActivateSignal (output1)
message "temps dépassé"

Else
message "ok, ça roule"
End If

End Sub
 
V

v tec

Compagnon
bon maintenant tente une bidouille en partant de cette macro:

axe_z=802
axe_y=801
axe_x=800

nouvelle_valeur=10

While IsMoving() 'répéter aussi longtemps qu'un des axes bouge

If IsActive(input1) Then 'si entrée 1 activée
DoButton(3) 'stop
setOEMdro(axe_z,nouvelle_valeur) 'mettre OEM dro à jour
Exit Sub
End If

Wend

End Sub



en l adaptant pour que si mes prehenseurs en descendant viennent en butée contre les rouleaux, il y aura un systeme de ressort/contact sur chaque tige), qui si pendant la descente de z, le contact est activé


ca ramene z en securité, et active la sortie 1 (alarme)
Sub main()

axe_z=802


While IsMoving() 'répéter aussi longtemps qu'un des axes bouge

If IsActive(input1) Then 'si entrée 1 activée
code"g00z400"
activatesignal(output1)
Exit Sub
End If

Wend

End Sub



en fait ilfaudrait que j appel cette macro a quel moment? au debut du programme? avant chaque deplacement de z?


bon ba apresl avoir testé rien ne se passe...
 
D

dh42

Compagnon
Salut,

J'ai de plus en plus de mal à comprendre sans avoir l'ensemble du programme ; je peux te donner des "bouts de code", mais après plus c'est difficile ...

en fait ilfaudrait que j appel cette macro a quel moment? au debut du programme? avant chaque deplacement de z?

avant chaque deplacement de z

la macro corrigée (et qui fonctionne chez moi)

Il faut stopper le mouvement avant de lancer le G0
il faut mettre le Sleep(100) pour que le CPU ne tourne pas exclusivement sur la boucle While/wend sans pouvoir faire autre chose ; ici je laisse 100ms au CPU pour traiter les autres taches.
le sleep(10) semble nécessaire avec la sortie 1 pour moi (sinon il ne s'active pas ), mais pas avec la 2 ou 3 ... peux être un question de tempo vu que chez moi c'est la broche sur la sortie 1.

++
David
 
V

v tec

Compagnon
ma question est:

le do button(3), c est le estop?


si oui, ca desactive la sortie 4 quand elle est activé


hors je voudrais juste stopé le mouvement et remonté en z de sécu


pour le programme le voila


(variable disponible, ne changer uniquement ces valeurs)
(hauteur rouleaux, mm)
#1=90
(marge de sécurité entre boudin et rouleaux, mm)
#2=10
(distance entre boudin et convoyeur)
#3=10
(temps gonflage préhenseur, mS)
#4=500
(temps dégonflage préhenseur, mS)
#5=500
(vitesse d approche entre boudin et rouleaux, mm/mn)
#6=1000
(debut du programme)
(etape 1: fermeture de la sortie du convoyeur+ verification)
m73
(etape 2: presenter boudin au dessus du premier rang)
g00z[#1+#2]
(etape 3: ouverture de l'entrée du convoyeur+verification)
m70
(etape 4: attendre que les rouleaux soit en place devant les capteurs)
m74
(etape 5: fermeture de l'entrée du convoyeur+verification)
m71
(etape 6: descente des boudins dans le premier etage)
g01z#1f#6
g00z#3
(etape 7: gonflage des préhenseurs)
m81
(etape 8: remontée du premier rang)
g04p#4
g00z[#1+#2]
(etape 9: verification que tout les rouleaux sont pris sinon pause)
m75
(etape 10: ouverture entrée convoyeur+verification)
m70
(etape 11: attendre que les rouleaux soit en place devants les capteur)
m74
(etape 12: fermeture entrée convoyeur+verification)
m71
(etape 13: dégonflage des préhenseurs)
m78
(etape 14: descente des préhenseurs dans le deuxième étage)
g04p#5
g00z#3
(etape 15: gonflage des préhenseurs)
m81
(etape 16: remontée des 2 étages)
g04p#4
g00z[#1+#2]
(etape 17: verification que tout les rouleaux sont pris sinon pause)
m75
(etape 18: ouverture entrée convoyeur+verification)
m70
(etape 19: attendre que les rouleaux soit en place devant les capteurs)
m74
(etape 20: fermeture de l'entrée du convoyeur+verification)
m71
(etape 21: degonflage des préhenseurs)
m78
(etape 22: dégagement des préhenseurs des 3 étages)
g04p#5
g00z[#1+#1+#1+#2]
(etape 23: ouverture entrée et sortie convoyeur+verification)
m85
(etape 24: compter le nombre de rouleaux a sortir)
m84
(etape 25: fermeture de la sortie du convoyeur+verification)
m73
(mise en boucle du programme)
m47
(fin de programme)
m30




et en fait a chaque descente de z, je veux, surveiller une entrée, c est un espèce de palpeur maison, chaque tige filté, est relié a 2piston de chaque coté, avec un ressort entre les deux, et qui coulisse dans un tube


comme ca, si le prehenseur, bloque sur un rlx, il active se palpeur, on remonte Z, et on active l alarme
 
V

v tec

Compagnon
bon ba j ai mis la sortie 4 (celle qui se desactive au stop), sur les prehenseurs



comme ça, si on active le stop, les prehenseurs se degonflent, et le z se met en sécurité
 
D

dh42

Compagnon
Salut,

Je ne comprends pas pourquoi les sorties réagissent différemment ; par exemple la sortie 1 ne s'active pas sans le sleep(100) juste avant ... mais ça marche immédiatement avec d'autres sorties (sans le sleep() ) ... mystère :?:

Je n'ai pas trouvé d'autre moyen pour stopper le mouvement en cours que le DoButton(3) (oui, c'est le bouton stop)

++
David
 
V

v tec

Compagnon
ba la je suis en train d essayer avec le dobutton(1), donc la pause


mais une fois en pause,comme lui donner un gcode manuel?



Sub main()

axe_z=802


While IsMoving() 'répéter aussi longtemps qu'un des axes bouge

If IsActive(input4) Then
DoButton(1)
code"g00z400"
Sleep(10)
activatesignal(output1)
Exit Sub

End If

sleep(100)

Wend

End Sub




en fait, le probleme du stop, mise a part qu il desactive la sortie 4 (donc j ai mis le prehenseur dessus), c est que l operateur ne sait plus ou il en est dans le programme, hors la pause conserve la position
 
V

v tec

Compagnon
j ai trouver ca:

DRO 54 GetDRO/SetDRO Safe Z DRO 54


mais je sais pas trop ce que on peut en faire?




par contre, je pensais a ca, je suis limité en entrée sur la carte, donc j ai mis une entrée comptage, qui ne sert que a la fin, quand on libere la serie de rlx, il referme le verin


et comme cet entrée ne sert que pour la fin, j ai mis mon palpeur dessus


donc il faut que je l interroge a un moment precis (pendant la descente de z), et pendant une durée precise, afin que ca n 'empiete pas sur la partie comptage


car en theorie si tout se passe bien, le palpeur ne doit jamais etre activé



je pourrais surement te faire une video bientot, j attend les verins
 
D

dh42

Compagnon
Par définition, la pause ne fait que mettre le Gcode en cours en attente, donc il n'est pas stoppé, il repartira dès que tu réactivera la pause.

c est que l operateur ne sait plus ou il en est dans le programme, hors la pause conserve la position

Je ne comprends pas ce que tu veux dire ; après un stop la machine s'arrête à la position en cours et garde les coordonnées, sauf si tu a activé la remontée au plan de sécurité pour le stop (safe Z), dans ce cas le Z remonte, mais tu peux le désactiver.

++
David
 
V

v tec

Compagnon
oui en effet, en fait je fesait l essai sur un tout petit bout de gcode, donc je me rendais pas compte, je pensais que en faisant stop, il remettait le gcode au debut




en tout cas, je te remercie david


donc on va utuliser le stop, avec la remonté en z de sécu
 
V

v tec

Compagnon
bon forcement, j ai tenté, j ai perdu

Sub main()
Dim t1 As Double
Dim duree_maxi As Integer 'nb de secondes maxi avant echec
duree_maxi = 5
t1=Timer()

axe_z=802

Do While (Timer()-t1) < duree_maxi 'boucler tant que le temps n'est pas dépassé
While IsMoving() 'répéter aussi longtemps qu'un des axes bouge

If IsActive(input4) Then

DoButton(3)
Sleep(10)
activatesignal(output1)
Exit Sub

End If
exit do

sleep(100)

Wend

End Sub

j ai voulu mettrela notion de durée de verification..
 
D

dh42

Compagnon
Je n'ai pas testé, mais il n'y a plus les erreurs de syntaxe, tu t'est mélangé les pinceaux avec les boucles

Do While .... Loop (boucle do/loop)
While ... wend (boucle while/wend)

Tu devrais utiliser l'indentation des boucles imbriquées pour t'y retrouver plus facilement dans la logique de la chose.
(et pour pouvoir conserver l'indentation sur le forum, tu dois mettre ton code avec la balise code (bouton à gauche du bouton citer de l'éditeur)

comme timer retourne un Double, il n'est pas "propre" en programmation de lui faire une opération avec un Integer ; j'ai donc aussi modifié le type de variable de duree_maxi. Attention, ce genre de choses passe en VB script, mais pas en VB et encore moins en C :wink:

++
david

 
V

v tec

Compagnon
en fait je viens de comprendre que le while ismoving, ne marche tant que l axe est en mouvement sans pause


si l axe s arrete naturellement, la macro s arrete d elle meme


donc pas besoin de limite de temps necessaire


bon ba je pense que je suis pas trop mal au niveau de mon programme pour faire mes essais
 
V

v tec

Compagnon
bon seul hic, c est que si j appel cette macro m87


je l appel avant chaque mouvement de z, et ca ne marche pas


car z, n est pas encore lancé je supose au moment ou je l appel


si je la met sur un boutton, pas de soucis
 
D

dh42

Compagnon
il faudrait, en début de macro, que tu test si l'axe est arrété et que ça boucle tant qu'il ne bouge pas.

du genre

Do While IsStopped()
sleep(100)
loop

et le reste du code sera exécuté dès que l'axe bougera

While IsMoving() 'répéter aussi longtemps qu'un des axes bouge

If IsActive(input4) Then

DoButton(3)
.............

......
 
V

v tec

Compagnon
Le probleme c est que le gcode passera pas une ligne tant que l autre est pas fini
Donc le z sera forcement a l arret

En fait il faudrait ecrire

G00z20 m87


Pour les lancer ensemble

Car
M87
G00z20

Ne marchera pas
 
D

dh42

Compagnon
Re

Ah oui :smt021 ...bon sang mais c'est bien sur ...

Pour l'instant j'ai 3 des 4 cores de mon cerveau qui sont en sommeil .... je vais allez faire dormir le 4ieme et je trouverais peut être la solution demain ... ou toi :wink:

Peut être explorer les Brain de Mach3 ... mais je ne connais pas trop (voir même pas du tout), pas sur que ça puisse servir ..

++
David
 
V

v tec

Compagnon
ba il faut raisonner comme un palpeur


puisque l axe z descend, des que ca touche, il s arrete,et remonte
 
D

dh42

Compagnon
Salut,

En fait le mieux serait déja de ne pas mélanger du Gcode et du Vb, et de faire tout le prog en VB, dans ce cas la, si tu met ta commande de mouvement sous la forme code(" G00z20") directement en VB, elle est lancé mais ça n'arrête pas l’exécution du script ... et donc ça marche.

Oui, si tu a des opérations que l'on peut assimiler au palpage, le plus simple c'est de mettre tous les contacts en // sur l'entrée probe de Mach3. Dans ce cas ça te permettra d'utiliser le G31, ce qui serait quand même plus simple (il gère l'arrêt auto au contact, et stocke les valeurs des visu dans une variable).

++
David
 
V

v tec

Compagnon
je reviens vers toi david des que j ai debarraser mon entrepot, car la c est le bordel, je te ferai une video
 
C

cubalu

Apprenti
Bonsoir,

J'ai lu en diagonale les message de ce post, il semble que parmi vous certain connaissent bien l'utilisation des script VB.

J'aimerais savoir où trouver le jeu de fonctions MACH3 avec leurs explication.

Un de vous peut-il me renseigner?

Merci
 
D

dh42

Compagnon
cubalu a dit:
Bonsoir,

J'ai lu en diagonale les message de ce post, il semble que parmi vous certain connaissent bien l'utilisation des script VB.

J'aimerais savoir où trouver le jeu de fonctions MACH3 avec leurs explication.

Un de vous peut-il me renseigner?

Merci

Salut,

La liste des fonctions spécifiques à Mach3
http://www.machsupport.com/wp-content/uploads/2013/02/Mach3_V3.x_Macro_Prog_Ref.pdf

le langage VB script
http://www.machsupport.com/wp-content/uploads/2013/02/VBScript_Commands.pdf

d'autres infos utiles
http://www.machsupport.com/Mach3Wiki/index.php?title=Main_Page

http://msdn.microsoft.com/en-us/library/t0aew7h6%28v=vs.84%29.aspx

++
David
 
Dernière édition par un modérateur:

Sujets similaires

P
Réponses
2
Affichages
233
pro-ms
P
N
Réponses
0
Affichages
480
nathan33240
N
V
Réponses
3
Affichages
1 040
vibram
V
C
Réponses
5
Affichages
624
christt4
C
V
Réponses
18
Affichages
1 163
V
laurenttanguy
Réponses
0
Affichages
472
laurenttanguy
laurenttanguy
lolo
Réponses
1
Affichages
847
lolo
lolo
Réponses
0
Affichages
401
lolo
G
Réponses
1
Affichages
1 323
Greg de Nîmes
G
Castor24
Réponses
10
Affichages
721
wika58
wika58
S
Réponses
11
Affichages
1 009
Contrariness
C
2
Réponses
27
Affichages
1 229
jean-jacques
J
fauxjetons
Réponses
36
Affichages
2 711
fauxjetons
fauxjetons
Haut