Temps entre 2 signaux en millisecondes sous Visual basic 6.0

Résolu/Fermé
LouisAlexis Messages postés 23 Date d'inscription lundi 18 mai 2015 Statut Membre Dernière intervention 17 juin 2015 - 15 juin 2015 à 15:16
LouisAlexis Messages postés 23 Date d'inscription lundi 18 mai 2015 Statut Membre Dernière intervention 17 juin 2015 - 17 juin 2015 à 10:42
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.
A voir également:

1 réponse

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 16/06/2015 à 09:43
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
LouisAlexis Messages postés 23 Date d'inscription lundi 18 mai 2015 Statut Membre Dernière intervention 17 juin 2015
16 juin 2015 à 10:14
Bonjour,
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.
Private Sub tempsatrouver()
 
    Dim vitesse As Long
    Dim timestart As Long
    Dim timefinich As Long
      If PortHex(1) = "FF" Then
    timestart = GetTickCount()
    premier.Caption = timestart
    
      End If
    
      If PortHex(1) = "7F" Then
     timefinich = GetTickCount()
    deuxieme.Caption = timefinich
     
      End If
      Label4.Caption = CStr(timefinich - timestart)
          
      tempsentredeuxsignaux.Caption = Label4.Caption
     '   vitesse = 60000 * 2 * 3.14 * 1.5 / CDbl(Label4.Caption)
        m_min.Caption = vitesse
End Sub

A+
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > LouisAlexis Messages postés 23 Date d'inscription lundi 18 mai 2015 Statut Membre Dernière intervention 17 juin 2015
16 juin 2015 à 10:22
Re,

Ok, mais vous aurez un affichage en miliseconde mais pas de temps a la miliseconde
0
LouisAlexis Messages postés 23 Date d'inscription lundi 18 mai 2015 Statut Membre Dernière intervention 17 juin 2015
16 juin 2015 à 10:28
Ce programme ne marche donc pas. En effet, lorsque je le laisse dans le
private sub tempsatrouver()
il ne récupère aucun des temps.
J'ai donc essayé de le mettre dans le
Public Sub Timer1_Timer()
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.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > LouisAlexis Messages postés 23 Date d'inscription lundi 18 mai 2015 Statut Membre Dernière intervention 17 juin 2015
Modifié par f894009 le 16/06/2015 à 10:34
Re,
il faut delarer la variable timestart en variable public tout en haut de votre fenetre de code de la form
0
LouisAlexis Messages postés 23 Date d'inscription lundi 18 mai 2015 Statut Membre Dernière intervention 17 juin 2015
16 juin 2015 à 11:12
re,
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.
Option Explicit

Private Const startPort As Integer = 0
Private Const portCountShow As Integer = 4

Private Declare Function GetTickCount Lib "kernel32" () As Long
'Déclaration des variables
'Public timestart As Long
'Public timefinich As Long
Dim appExcel As Excel.Application 'Application Excel
Dim wbexcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel

Private Sub HandleError(ByVal err As ErrorCode)
    Dim utility As BDaqUtility
    Dim errorMessage As String
    Dim res As ErrorCode

    Set utility = New BDaqUtility
    If err <> Success Then
        MsgBox "Sorry ! Some errors happened, the error code is: " & errorMessage, , "StaticDI"
    End If
End Sub

Private Sub Form_Load()
    ' le matériel choisis par défaut est "demo device", l'utilisateur peut en choisir
    ' un autre en fonction de ses besoins
    If Not InstantDiCtrl1.Initialized Then
        MsgBox "Please select a device with DAQNavi wizard!", , "StaticDI"
        End
    End If

    
    Dim devNum As Long
    Dim devDesc As String
    Dim devMode As AccessMode
    Dim modIndex As Long
    InstantDiCtrl1.getSelectedDevice devNum, devDesc, devMode, modIndex

    
    'Permettre au timer de lire les ports DI
    Timer1.Enabled = True
    'Ouverture de l'application
    Set appExcel = CreateObject("Excel.application")
    'Ouverture d'un fichier Excel
    Set wbexcel = appExcel.Workbooks.Open("C:\Users\la.quere\Documents\programmation peut etre finale\nombre de tours.xlsx")
    'wsExcel correspond à la première feuille du fichier
    Set wsExcel = wbexcel.ActiveSheet
    appExcel.Visible = True
    
          
End Sub
'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
 ' Dim vitesse As Long
  '  Dim timestart As Long
   'Dim timefinich As Long
    'If PortHex(1) = "FF" Then
   'timestart = GetTickCount()
   'premier.Caption = timestart
    
    '  End If
    
    '  If PortHex(1) = "7F" Then
   ' timefinich = GetTickCount()
    'deuxieme.Caption = timefinich
     
     ' End If
     ' Label4.Caption = CStr(timefinich - timestart)
          
      'tempsentredeuxsignaux.Caption = Label4.Caption
       ' vitesse = 60000 * 2 * 3.14 * 1.5 / CDbl(Label4.Caption)
        'm_min.Caption = vitesse
    
End Sub

'Private Sub tempsatrouver()




 
 '   Dim vitesse As Long
  '  Dim timestart As Long
   ' Dim timefinich As Long
    ' If PortHex(1) = "FF" Then
   'timestart = GetTickCount()
   'premier.Caption = timestart
   ' End If
    
  ' If PortHex(1) = "7F" Then
   'timefinich = GetTickCount()
   'deuxieme.Caption = timefinich
     
    'End If
   'Label4.Caption = CStr(timefinich - timestart)
          
   'tempsentredeuxsignaux.Caption = Label4.Caption
  '    vitesse = 60000 * 2 * 3.14 * 1.5 / CDbl(Label4.Caption)
 '   m_min.Caption = vitesse
'End Sub


0