Discussions au sujet de NI LabVIEW

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

plusieurs instances d'un vi incluant Wait (ms) et affichage secondes

Résolu !
Accéder à la solution

Bonjour  cher lecteur,

Imaginons un vi chargé de lancer plusieurs instances d'un même sous-vi à des instants aléatoires. Ce sous-vi qui possède plusieurs instances est un vi dont la seule fonction est celle d'un chronomètre (terme à prendre dans le sens d'une horloge) , c'est à dire qu'il affiche les secondes qui s'écoulent depuis le lancement de cette instance. Le format d'affichage est HH:mm:ss. C'est tout: Pas de résolution sous la seconde. Il n'indique pas l'heure mais bien le temps passé depuis le lancement de l'instance.

 

>>>Ce que j'observe : Mon problème c'est que, quelques soient les dates en lesquelles les instances sont lancées, les affichages de la durée pour chacune de ces instances sont simultanés ! Les afficheurs battent la seconde de manière synchrone et ça ne correspond pas à la réalité ! Ce résultat laisse croire que les instances ont été lancées avec des retards les unes par rapport aux autres qui seraient systématiquement des multiples de la seconde. Ce qui est bien-sûr faux. Pour être concret si la deuxième instance du sous-vi est lancée 4,5s après que soit lancée la première instance , alors les affichages seront en phase avec un retard de 4 secondes ou 5 secondes (ça c'est normal) je ne sais plus mais en tout cas leur affichage sont en phase, c'est à dire retardés d'un multiple de la seconde (ça ce n'est PAS normal). Pour le dire encore d'une autre façon : les 4 afficheurs sont raffraichis en même temps. Bien-sûr qu'ils n'affichent pas la même valeur mais ils battent la seconde aux mêmes dates.

 

>>>Ce que je veux observer : Si la seconde instance du sous-vi est lancée 4,5s après que soit lancée la première instance , alors les affichages seront retardés d'une demi-seconde et non pas en phase.

 

J'ai bien sélectionné la propriéte "synchroniser l'affichage" pour chacun des indicateurs pour que chaque afficheur soit bien raffraîchi dès qu'il reçoit la valeur numérique. (sans , c'est à dire par défaut, ça ne marche pas non plus).

J'ai bien sélectionné "réentrant à mémoire pré-allouée" dans la propriété d'execution du sous-vi.

Mais je crois que c'est davantage une histoire de système d'exécution.

Le cpu possède 4 coeurs avec HyperThreading. (4c/8t). Comment faire pour rendre chacune de ses instances parfaitement asynchrones ? En fait je mesure combien je ne comprends rien à cette organisation des threads , des systèmes d'exécution et des moyens de gérer la parallélisation. Donc si vous avez de la littérature Labview à me conseiller je suis preneur. J'ai consulté l'aide de LV sur les systèmes d'exécution mais je n'ai pas progressé dans mon ignorance. Il faudra quand même que j'aille voir les exemples sur les ré-entrants...

 

Voici le lanceur:

lanceur.png

————————————————————————————————————————

 

Voici le sous-vi:

 

chronos.png

 

 

0 Compliments
Message 1 sur 4
2 947 Visites
Solution
Accepté par l'auteur du sujet champagne

Bonjour,

Pour moi le problème vient de ton sous-vi.
Le fait d'utiliser la fonction "attendre un multiple de ms" implique la synchronisation de toutes tes instances sur ton horloge processeur.


Si tu veux constater le phénomène de glissement, il faut que tu utilise la fonction "attendre(ms)".

http://digital.ni.com/public.nsf/allkb/53D27DACCE4855CE86257FB2007922F9

 

 

Pour voir ton phénomène, agrandir le temps d'attente, et tu constateras que la 1er itération de ta boucle va prendre une valeur différente de xxx ms afin de se synchroniser sur ton horloge système.

Cdt,

Michael

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
Message 2 sur 4
2 937 Visites

Ah merci Michael C. !!

Mais quel abruti je suis ! En plus je l'utilise jamais ce «wait multiple» mais d'habitude toujours le «wait» c'est d'ailleurs pour ça que l'appelais comme ça dans le titre du sujet. Et là ,énorme faute d'attention !

Merci mille fois ! Effectivement ça marche mieux comme ça !

Smiley heureux

0 Compliments
Message 3 sur 4
2 929 Visites

Pas de souci, ça arrive à tout le monde..
Quand on a le nez dans le code, il est toujours difficile de prendre du recul 🙂

 

Et cette fonction est très puissante pour réaliser une synchronisation entre plusieurs instances de manière simplifié sans partir dans des structures cadencés et autre système de synchronisation (rendez vous, sémaphore, ....).

 

Bonne journée et bon courage pour la suite.

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
0 Compliments
Message 4 sur 4
2 896 Visites