Calculer temps non nul d'un signal

mimi09jn Messages postés 49 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 12 juillet 2013 - 9 mai 2013 à 16:20
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 13 mai 2013 à 22:55
Bonjour à tous,

Je travaille avec Excel2007 et VBA.
Je récupère à travers le port série un signal (en utilisant MSCOMM). Ce signal est nul au début, puis il devient non nul et finit par revenir à zéro.
Je veux calculer le temps pendant lequel le signal est non nul.
Quelqu’un pourrait m'aider SVP? Je bloque et je peux pas avancer sans ce faire
Merci d'avance..

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 mai 2013 à 16:34
Bonjour,
montre donc le code (tel qu'écrit) écrit pour relever ces signaux !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
9 mai 2013 à 17:20
Bonjour,

Si tu regardes l'aide sur Timer, ça pourrait te donner une idée


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
mimi09jn Messages postés 49 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 12 juillet 2013
9 mai 2013 à 17:40
voilà ma fonction qui récupère les données du port COM:

Public Sub COM_dataReceiving()
Dim timeout As Date

Dim recLen As Integer
Dim inputByte As Integer
Dim i As Integer



MyData = Worksheets("SerialPort").MSComm1.Input
If MyData <> "" Then
recLen = Len(MyData)
'Display each byte

For i = 1 To recLen
inputByte = Asc(Mid(MyData, i, 1))
If inputByte = 0 Then
'No character in this position

ElseIf inputByte <> 48 Then
'start counting time

Else
'Non-printable character

End If
Next
End If
DoEvents

MyData = ""
Worksheets("SerialPort").MSComm1.PortOpen = False

End Sub

Oui j'ai pensé à un timer mais je n'ai pas trouvé incrémenter un timer pour qu'il compte le temps avec VBA
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 mai 2013 à 19:23
Le plus simple (et peut-être le plus juste, finalement) serait :
- d'utiliser deux compteurs : un cpt1 pour chaque signal reçu et un cpt2 pour les seuls signaux "valides"
- de relever l'heure du début de la comm et celle de fin et d'en déduire la durée totale D (utilisation de DateDiff)
- d'en déduire la durée moyenne (DM=D/cpt1) d'un signal et de multiplier cette durées moyenne par le nombre cpt2
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mimi09jn Messages postés 49 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 12 juillet 2013
10 mai 2013 à 10:20
Merci pour les idées ucfoutu
Reste de les implémenter..
Je me souhaite bonne chance..
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 mai 2013 à 22:23
Reste de les implémenter..

Oui. et je veux croire que ce n'est pas une chose aussi basique qui te gênera !(deux compteurs, deux relevés et un calcul arithmétique des plus simples)
Au fait : tu n'as même pas besoin de relever les heures de début et de fin puis d'utiliser Datediff. La fonction Timer (pas le contrôle Timer) sera bien plus pratique pour déterminer la durée totale en secondes.




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
mimi09jn Messages postés 49 Date d'inscription mardi 21 février 2012 Statut Membre Dernière intervention 12 juillet 2013
13 mai 2013 à 16:49
OK je vois, mais là mon problème c'est que j'ai besoin d'une fonction (timer) qui me permet de calculer le temps écoulé qui est en unité de millisecondes (ça dépasse pas la seconde)
EXEMPLE: le temps ON c'est 180 ms, j'ai besoin de récupérer cette valeur, alors qu'avec la fonction TIMEVALUE("00:00:01") que je comptais utiliser pour incrémenter mon timer, elle prend au minimum une seconde.
Alors moi j'ai besoin d'un timer dont la résolution est 1ms pour qu'il puisse calculer un temps qui ne dépasse pas une seconde.
Quelqu'un pourrait avoir une idée pour ça?
Merci d'avance..
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
13 mai 2013 à 22:55
Tu pourrais utiliser le contrôle Timer de VB qui fonctionne aux millisecondes. Ou encore les APIs.

Regarde Ici

Tu trouveras un contrôle et aussi un exemple de code avec les APIs

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous