Temps entre 2 signaux en millisecondes sous Visual basic 6.0
Résolu
LouisAlexis
Messages postés
23
Date d'inscription
Statut
Membre
Dernière intervention
-
LouisAlexis Messages postés 23 Date d'inscription Statut Membre Dernière intervention -
LouisAlexis Messages postés 23 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'effectue actuellement un programme qui compte le nombre de tours d'une roue à l'aide d'un capteur de position, et je souhaite savoir le temps que met la roue pour faire 1 tour, sachant que cette roue la est sensée monter à environ 13000 tour par minutes (Débit de fil passant dans la roue : 200m/min sachant que la roue fait 3 cm de diamètre).
j'ai écris un programme en parallèle qui, lorsque j'appuie sur une commande, cela enregistre un temps, puis sur une autre commande pour enregistrer cet autre temps, puis je faisais une soustraction pour avoir la durée entre les deux signaux. sauf qu'il se trouve que je n'ai pas trouvé le moyen afin d'avoir des unités plus précises afin de pouvoir compter ce nombre de tour.
J'ai par la suite voulu rentrer un code de ce genre sur mon programme principal, mais le problème est qu'il est écrit dans le timer, et que du coup lorsque je met T1=Time, l'heure change en continue.
Je souhaiterai donc savoir s'il y a un autre endroit où placer ce programme et un moyen d'avoir une unité plus faible.
Le programme que j'ai écris actuellement est le suivant:
Dans l'attente d'une aide de votre part, je vous souhaite une excellente fin de journée.
j'effectue actuellement un programme qui compte le nombre de tours d'une roue à l'aide d'un capteur de position, et je souhaite savoir le temps que met la roue pour faire 1 tour, sachant que cette roue la est sensée monter à environ 13000 tour par minutes (Débit de fil passant dans la roue : 200m/min sachant que la roue fait 3 cm de diamètre).
j'ai écris un programme en parallèle qui, lorsque j'appuie sur une commande, cela enregistre un temps, puis sur une autre commande pour enregistrer cet autre temps, puis je faisais une soustraction pour avoir la durée entre les deux signaux. sauf qu'il se trouve que je n'ai pas trouvé le moyen afin d'avoir des unités plus précises afin de pouvoir compter ce nombre de tour.
Private Sub Command1_Click() Dim T1 As Date T1 = Time Label1.Caption = T1 End Sub Private Sub Command2_Click() Dim T2 As Date T2 = Time Label2.Caption = T2 End Sub Private Sub Command3_Click() Dim TF As Date Dim T1 As Date Dim T2 As Date T2 = Label2.Caption T1 = Label1.Caption TF = CDate(T2 - T1) Label.Caption = TF Label3.Caption = CDate(TF) * 60 / ((2 * 0.015 * 3.14)) End Sub
J'ai par la suite voulu rentrer un code de ce genre sur mon programme principal, mais le problème est qu'il est écrit dans le timer, et que du coup lorsque je met T1=Time, l'heure change en continue.
Je souhaiterai donc savoir s'il y a un autre endroit où placer ce programme et un moyen d'avoir une unité plus faible.
Le programme que j'ai écris actuellement est le suivant:
'form: recuperer_signal Public Sub Timer1_Timer() Dim err As ErrorCode Dim portData As Byte Dim i As Integer, PCV As Long err = Success 'recherche de la tension disponible sur les différents ports i = 0 While (i + startPort) < InstantDiCtrl1.Features.PortCount And i < portCountShow portData = 0 err = InstantDiCtrl1.ReadPort(i + startPort, portData) If err <> Success Then Timer1.Enabled = False HandleError (err) Exit Sub End If PortNum.Item(i).Caption = Str(startPort) PortHex.Item(i).Caption = Format(Hex(portData), "00") i = i + 1 Wend If PortHex(0) <> "FF" Then Form1.Show 'ouvre la 2eme form pour compter ElseIf PortHex(0) = "FF" Then 'récupération de la dernière valeur de form1 recuperer_signal.Longueur_finale.Caption = Form1.longueur_fil.Caption 'ecriture excel With wsExcel PCV = .Range("A" & Rows.Count).End(xlUp).Row + 1 .Range("A" & PCV) = Longueur_finale.Caption End With Unload Form1 'on referme la form 1 pour la réinitialiser. End If 'j'ai voulu connaitre la durée à partir de ce moment la Dim T1 As Date Dim T2 As Date Dim TT As Date Dim vitesse As Long If PortHex(1) = "FF" Then T1 = Time End If signal1.Caption = T1 If PortHex(1) <> "FF" Then T2 = Time signal2.Caption = T2 End If TT = CDate(T2 - T1) tempsentredeuxsignaux.Caption = TT vitesse = CDate(TT) * 60 / ((0.015) * 2 * (3.14)) m_min.Caption = vitesse End Sub
Dans l'attente d'une aide de votre part, je vous souhaite une excellente fin de journée.
A voir également:
- Temps entre 2 signaux en millisecondes sous Visual basic 6.0
- Visual basic - Télécharger - Langages
- Supercopier 2 - Télécharger - Gestion de fichiers
- Renommer plusieurs fichiers en même temps - Guide
- Microsoft 365 basic - Accueil - Microsoft Office
- Visual c++ 2019 - Guide
1 réponse
Bonjour,
pour le 100eme de seconde si PC assez puissant et pas trop occupe, le 1000eme de seconde peut-etre un peu optimiste:
Pour votre sub routine
definissez les variables en Double, Timer au lieu de Time et de toutes facon vous aurez dans la prise de temps l'echantillonnage de votre Timer et le temps de reponse de la carte d'acquisition
A+
pour le 100eme de seconde si PC assez puissant et pas trop occupe, le 1000eme de seconde peut-etre un peu optimiste:
Private Sub Command1_Click() Dim T1 As Double T1 = Timer Label1.Caption = T1 End Sub Private Sub Command2_Click() Dim T2 As Double T2 = Timer Label2.Caption = T2 End Sub Private Sub Command3_Click() Dim TF As Double Dim T1 As Double Dim T2 As Double T2 = Label2.Caption T1 = Label1.Caption TF = T2 - T1 Label3.Caption = TF * 60 / ((2 * 0.015 * 3.14)) End Sub
Pour votre sub routine
Public Sub Timer1_Timer()
definissez les variables en Double, Timer au lieu de Time et de toutes facon vous aurez dans la prise de temps l'echantillonnage de votre Timer et le temps de reponse de la carte d'acquisition
A+
merci de votre réponse.
j'ai réussis à récupérer de votre manière, mais il se trouve que cela ne marchait pas justement pour le programme avec le timer.
je suis donc en ce moment en train d'essayer de récupérer ce temps la avec le "gettickcount". Je vous tiens au courant si jamais le programme que j'ai écris fonctionne correctement.
A+
Ok, mais vous aurez un affichage en miliseconde mais pas de temps a la miliseconde
J'ai donc essayé de le mettre dans le mais dans celui ci, il récupère le temps lorsque l'on a "FF" mais celui ci change en continue (il ne sauvegarde pas le temps à un instant "t") et ce temps ci passe donc à 0 lorsque l'on a "7F". y-a t'il une ligne de code pour sauvegarder la valeur en ms des que le signal passe à FF, et change uniquement lorsque l'on revient à "FF"? ce n'est peut être pas une condition avec if qu'il aurait fallu que je mette.
Merci de votre aide.
il faut delarer la variable timestart en variable public tout en haut de votre fenetre de code de la form
Cela n'a pas changé grand chose aux résultats obtenus.
Je vous mets le code de la form complet si jamais cela peut vous aider, pendant ce temps je cherche aussi à trouver une solution.