Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Wait(ms) dépassement

Résolu !
Accéder à la solution

Bonjour à tous,

 

J'ai lu dans un post, et également dans la doc LV, qu'il était risqué voir déconseillé

d'utiliser la fonction "Wait(ms)" pour mesurer une durée d'exécution.

S'il y a "dépassement", de (2^32)-1 à 0, la mesure est faussée.

 

Je ne suis certainement, ni le seul, ni le premier à avoir cherché une solution,

je propose la mienne ... si quelqu'un à trouvé autres choses, ou une autre approche,

cela m'intéresse.

 

Ceci dit, je pense que le compteur en question est remis à zero à chaque mise sous tension du PC,

il faut donc attendre un peu plus de 49 jours pour avoir un petit rique de dépassement.

voici ma solution:

 

aaaaaaaaaaaaa.png

0 Compliments
Message 1 sur 9
3 740 Visites

not+(+1) représente le complément à 2 (instruction "neg" en assembleur X86)

La fonction n'est pas proposée dans LV, je l'ai ajoutée.

 

2012-02-16_222425.jpg

0 Compliments
Message 2 sur 9
3 735 Visites
Solution
Accepté par l'auteur du sujet ouadji

Cette précaution est inutile !

Pour vous en convaincre, un petit exemple qui simule le débordement pour le type U8. Vous verrez que même au passage de 255 à 0, la différence est de 1. Autrement dit, la soustraction des entiers U8 0 - 255 = 1.

 

Débordement U8.png

Message 3 sur 9
3 726 Visites

C'est vrai que 49 jours dans la majorité des cas ça suffit largement.

 

Sinon, il y a un article dans la Base de Connaissance dans lequel NI conseille d'utiliser la fonction "Get Date/Time in Seconds" si la durée à mesurer est importante.

 

Cet autre article interessant explique la différence de résolution entre les deux fonctions

Yohann L.
0 Compliments
Message 4 sur 9
3 725 Visites

Bien vu JB, merci pour l'info.

Yohann L.
0 Compliments
Message 5 sur 9
3 715 Visites

Sinon il y'a ça :

 

higresolution.png

 

Cordialement,

Da Helmut
Voir le profil de Maxime M. sur LinkedIn - View Maxime M.'s profile on LinkedIn
Message 6 sur 9
3 711 Visites

 

JB ... rien avoir avec le passage de 255 à 0.

Mais bien de 4294967295 à 0.

Si vous prélevez le compteur à 4294967280, et que votre VI prend 17ms

votre mesure de temps sera fausse.

Quand aux 49 jours (2^32 ms), il suffit d'un équipement qui reste sous tension en permanence.

Et pour l'autre méthode (Helmut), perso je préfère une mesure directe en ms.

 

base de connaissance; "... restarting the computer can be used as a method to reset the tick count."

amusant comme méthode ... Smiley clignant de l'œil    si un process important est en cours.

ma solution évite cela.

0 Compliments
Message 7 sur 9
3 706 Visites

ouadji a écrit :

 

JB ... rien avoir avec le passage de 255 à 0.

Mais bien de 4294967295 à 0.

Si vous prélevez le compteur à 4294967280, et que votre VI prend 17ms

votre mesure de temps sera fausse.


J'ai fait un exemple avec un U8 pour éviter une boucle avec un grand nombre d'itérations (2^32) mais le principe est le même avec tous les types d'entiers (U16, U32, U64).

 

Ce que vous dites est faux !

En 17ms, le compteur de l'horloge aura passé de 4294967280 à 1. Faites donc la soustraction U32 1 - 4294967280 et vous serez probablement surpris par le résultat.

 

A-B U32.png

 

0 Compliments
Message 8 sur 9
3 698 Visites

désolé pour le "255 à 0" ... je n'avais pas compris l'analogie.

 

Et pour le reste ... vous avez raison, au temps pour moi.

C'est évident en plus.

 

(Je suis sans café depuis 3 jours, ça doit être ça Smiley clignant de l'œil )

0 Compliments
Message 9 sur 9
3 689 Visites