Discussions au sujet de NI LabVIEW

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

Récupération de données d'un sous-VI

Salut Pimpon,

 

bonne réception

a+

 

Ce vi permet de lancer un sous-vi de façon indépendante en dans collecter les données en temps réel.

Le vi principal peut agir en même temps que l'exécution de son sous-vi

L'arrêt du sous-vi peut être ordonné à partir du vi principal à tout moment.

Le vi principale peut être arrêté tandis que le sous-vi continu de s'exécuter. 

 

En attachement une version NI 2009. Plus haut dans le sujet une version NI 2012.

Et une autre variante et disponoble plus haut également dans le sujet, NI 2012 et 13 réalisé par Ouajdi, les propriétés techniques sont quelques peu diffèrentes...

0 Compliments
Message 21 sur 25
1 020 Visites

pour cb28 :

 

ta tempo de 50ms dans ta boucle While est inutile.

en l'absence d'Evénements, le cadencement de ta boucle While est réalisé par le time_out de ta structure Event.

La stucture Event "attend" un Event pendant 180ms (dans ton cas)

Si elle n'en reçoit pas (après 180ms) elle déclenche l'Event Time_out, et ensuite elle boucle à son entrée via la While.

Ta tempo de 50ms via un Wait(ms) s'exécute "en même temps" que cette attente de 180ms.

Cette tempo est donc un processus en // qui sera totalement occulté par les 180ms de la structure.

 

Je me permets de faire cette remarque, car placer comme tu l'as fait un wait(ms),

montre que tu ne comprends probablement pas parfaitement le fonctionnement d'une structure Event.

Et ça ... ça me chagrine Smiley heureux

 

0 Compliments
Message 22 sur 25
1 011 Visites

Salut Ouadji,

 

Si je comprends parfaitement cette histoire de temps, l'exécution obligatoire du time out de la boucle événement rythme le cadencement de la while... J'ai pris pas contre des bonnes ou mauvaises habitudes, de temporiser par défauts mes boucles sans trop réfléchir.

 

Merci pour la remarque, je ferai plus attention au prochain tour.......de boucle !

 

a+

0 Compliments
Message 23 sur 25
1 009 Visites

Je reprends un rien "les bases".

 

Une Structure Event attend un Event (événement)

Chaque Event est traité par un sous-diagram  (désolé si je mélange mots anglais et français)

 

Elle peut attendre indéfiniment. Dans ce cas on place "-1" sur le terminal event_timeout.

"-1" est la valeur par défaut quand tu ne places aucune valeur.

Si la structure Event est programmée pour attendre indéfiniment, le sous-dagram timeout devient inutile, tu peux le supprimer.

 

ou, elle peut attendre un certain temps.

Dans ce cas tu places le temps d'attente maximum souhaité sur le terminal event_timeout.

Si la Structure est programmée pour attendre un temps fini, le sous-diagram timeout est obligatoire.

Une Structure Event avec un temps fini et qui n'a pas de sous-diagram timeout ... est VI broken.

 

Que se passe-t-il quand on place un temps d'attente fini ?

 

Dans ce cas, la Structure Event attend un Event (elle ne sait faire que ça)

Mais ... si elle n'a pas reçu d'Event dans le temps fini imposé ... elle cesse d'attendre et auto-exécute le sous-diagram timeout.

Une fois le code contenu dans le sous-diagram timeout exécuté ... le flux de données sort de la Structure ... et c'est terminé.

 

sauf que ...

 

notre structure Event est dans une boucle While. (une structure Event sans boucle While a peu ou pas de sens)

Le flux se retrouve donc à nouveau en entrée de notre Structure Event ... et le cycle recommence.

 

Comment stopper le cycle ?

 

Un des sous-diagram doit envoyer une "info stop" à la boucle While sur son terminal loop_condition.

 

les choses pratiques, dans ton cas :

 

tu as 180ms sur le terminal event_timeout.

En l'absence d'event la structure va donc d'elle même réaliser une tempo cyclique de 180ms.

Si un Event se présente, cette tempo (attente de la structure) sera interrompue.

 

La récupération de ta donnée se fera donc pil-poil toutes les 180ms ... sauf si un Event se présente,

dans ce cas, tu feras une récuparation en plus ... disons de "façon asynchrone" par rapport au cycle régulier des 180ms.

 

Si on veut être puriste,

Ce n'est pas <l'exécution obligatoire du time out> qui va cadencer ta boucle,

mais plus simplement <le temps d'attente avant l'exécution de ce time out>

 

Petite remarque à propos de wait(ms):

 

wait(ms) permet de créer une tempo ... mais il n'est pas possible d'interrompre cette tempo en cours d'exécution.

Si tu réalises cette tempo en utilisant une structure Event et cette propriété du timeout ...

avec en plus dans cette structure Event un sous-diagram-event ... programmé sur un bouton_change,

ou pourquoi pas sur un user_event ... tu as un wait(ms) que tu peux interrompre comme tu veux.

 

ci-joint un petit VI pour te montrer que ta structure event avec "temps_fini" suffit à temporiser ta while.

 

SR1.png

 

Tout ceci étant dit,

OUI, il faut toujours mettre une tempo dans une boucle (mais ici, tu en as déjà une)

 

 

Message 24 sur 25
1 004 Visites

Smiley très heureux sympas le ptit rappel, merci

0 Compliments
Message 25 sur 25
995 Visites