Temps entre 2 signaux en millisecondes sous Visual basic 6.0 [Résolu/Fermé]

Signaler
Messages postés
23
Date d'inscription
lundi 18 mai 2015
Statut
Membre
Dernière intervention
17 juin 2015
-
Messages postés
23
Date d'inscription
lundi 18 mai 2015
Statut
Membre
Dernière intervention
17 juin 2015
-
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.

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.

1 réponse

Messages postés
15519
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
16 janvier 2021
1 432
Bonjour,

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+
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
23
Date d'inscription
lundi 18 mai 2015
Statut
Membre
Dernière intervention
17 juin 2015

Re,
Il est à 100ms, trop élevé du coup, et je viens de refaire tout mes calculs, et c'est finalement tout les 2,25ms que je suis sensé recevoir un signal, ne serait-ce pas trop faible?
Messages postés
15519
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
16 janvier 2021
1 432 >
Messages postés
23
Date d'inscription
lundi 18 mai 2015
Statut
Membre
Dernière intervention
17 juin 2015

Re,
ne serait-ce pas trop faible? Faites l'essai timer1 a 2.
Il est vrai qu'un PC n'est pas un API(automate programmable). Par contre vous pouvez lancer ou installer votre exe en tant que service Windows, de ce fait il a plus de ressource CPU qu'un exe normal. Donc vous pourriez faire des essais pour voir jusque ou vous pouvez descendre le Timer1

deux liens a visiter:
http://www.remylarrieu.com/fr/creer-un-service-avec-un-executable/
http://www.alexwinner.com/tips/104-applscriptentantqueservice.html
Messages postés
23
Date d'inscription
lundi 18 mai 2015
Statut
Membre
Dernière intervention
17 juin 2015

Re,
Je viens de faire les tests, et du coup je ne descend pas à moins de 30ms.
Du coup je vais juste compter la durée d'acquisition et diviser par le nombre de signaux, ce sera plus simple à faire et ce sera sur que je possèderai les bonnes valeurs.
Merci pour votre aide.
Messages postés
15519
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
16 janvier 2021
1 432 >
Messages postés
23
Date d'inscription
lundi 18 mai 2015
Statut
Membre
Dernière intervention
17 juin 2015

Re,

C'est ce que je pensai vous proposer, car vous pourrez faire des stats avec le nombre de tours theoriques et ceux que vous aurez comptes sur un echantillon de dix durees d'acquisition comme ca vous verrez si votre "system" de controle est capable ou pas
Messages postés
23
Date d'inscription
lundi 18 mai 2015
Statut
Membre
Dernière intervention
17 juin 2015

En effet, mais il aurait été préférable d'avoir la vitesse affichée en temps réelle et non pas la moyenne d'une durée, car le but était de vérifier, à l'aide d'un appareil auxiliaire, si la vitesse de rotation était la même que celle indiquée par l'appareil.
Je me contenterai donc de la moyenne sur plusieurs échantillons.
Merci de m'avoir apporté vos connaissances, je viens de débuter la programmation et l'aide apportée par ce forum m'apporte beaucoup de savoir.