[Résolu]Timer et minuit

turnoff

XLDnaute Nouveau
Bonjour
Je souhaite lire une valeur depuis un port série avec une fréquence d’échantillonnage de l’ordre de la seconde ou une fraction de seconde.
J'ai bien trouvé une procédure, mais la surveillance peut s'étaler sur plusieurs jours et l'utilisation de "timer" plante à 0 heure.
Connaissez vous une solution simple et pas trop longue ( devant 500ms)

upload_2018-3-13_15-22-57.png

Merci
 

turnoff

XLDnaute Nouveau
Merci de l'attention
j'aimerai bien, il s'agit de surveiller un four, toutes les valeurs ne sont pas enregistrées. On fait une moyenne avant de remplir une cellule. Mais pour éviter tout incident et surveiller les montées en température la fréquence d’échantillonnage est relativement faible
 

Dranreb

XLDnaute Barbatruc
Bonjour
Il y a l'API QueryPerformanceCounter qui ne se remet pas à 0 à minuit.
VB:
Private Declare Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
Private Declare Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
Il y a aussi la possibilité de définir un Timer Windows qui appelle une procédure à intervalles demandés.
VB:
Public Declare Function SetTimer Lib "user32.dll" _
   (ByVal HWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Rem. Sub MonTimer(ByVal hwnd As Long, ByVal uMsg As Integer, ByVal idEvent As Integer, ByVal dwTime As Long)
Public Declare Function KillTimer Lib "user32.dll" _
   (ByVal HWnd As Long, ByVal nIDEvent As Long) As Long
 

turnoff

XLDnaute Nouveau
Dranreb bonsoir:)
A la lecture de ton message, je me suis renseigné sur tes propositions. je n'ai sans doute pas tout compris.
Elles sont très performantes mais semblent dédiés à une mesure, très précise , d'un intervalle de temps entre 2 événements; mais ne les déclenchent pas. Comme le ferait une interruption.:(
D'ou une question de principe (je suis un novice) dans la boucle Do while, VB doit lui aussi échantillonner le "timer" pour faire la comparaison avec la valeur de sortie, puis repasser la main "DoEvents". Comme la résolution du Timer est de l'ordre du 1/100 de s, on pourrait en déduire que c'est l'ordre du temps de boucle de cette fonction.
Ce que tu me proposes ne permets pas de repasser la main à Windows "pas de Do events" le poste est gelé.
Merci de me désembrouiller...:confused:
Patienceo_O
 

Dranreb

XLDnaute Barbatruc
Si, SetTimer lance un dispositif Windows qui appelle périodiquement une procédure spécifiée par AddressOf TimerÉvèn
TimerÉvèn étant une procédure sur le modèle du commentaire Rem. Sub MonTimer etc.
VB:
SetTimer 0, 0, 40, AddressOf TimerÉvèn
…
Private Sub TimerÉvèn(ByVal HWnd As Long, ByVal uMsg As Integer, ByVal idEvent As Integer, ByVal dwTime As Long)
…
KillTimer 0, idEvent
Avec QueryPerformanceCounter c'est différent, ça s'utilise comme VBA.Timer, mais plus précis, et sans RàZ à minuit.
Ça donne un nombre de cycles élémentaires écoulés depuis le lancement de l'ordi. Afin d'en déduire une durée, QueryPerformanceFrequency donne le nombre de ces cycles par seconde. On peut mettre un DoEvent dans la boucle si on veut que ça fonctionne comme une tâche de fond.
 

turnoff

XLDnaute Nouveau
Merci job75 je m’essaie et te tiens informé...
Merci Danreb, mais je ne suis pas de niveau.
Ta solution semble élégante et correspond sans doute au mieux à ce que je recherche, je ne suis pas capable de la mettre en oeuvre
j'ai des scrupule à te demander si tu as un peu plus de temps à me consacrer. Avec un code que je pourrais insérer en lieu et place du code cité.
En le faisant "tourner" je pourrais peut être progresser. Je comprends aussi que ce soit pénible...
Merci encore...

PS: Belfort! Quand la brume est sur le Salbert c'est qu'il va pleuvoir, quand on ne le voit plus c'est qu'il pleut.
J'ai beaucoup aimer travailler ds cette ville.
 

Dranreb

XLDnaute Barbatruc
Pourrais-je avoir un classeur joint pour y mettre ce code ?
Pour la solution avec Timer Windows en tout cas, sinon le QueryPerformanceCounter est utilisé dans l'UFmVisu du classeur joint.
 

Pièces jointes

  • ListeAléat.xlsm
    130 KB · Affichages: 12
Dernière édition:

Statistiques des forums

Discussions
314 450
Messages
2 109 731
Membres
110 553
dernier inscrit
loic55