Discussions au sujet de NI LabVIEW

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

Abandon de boucle cadencée

Résolu !
Accéder à la solution

Bonjour,

 

J'ai trouvé un vi dans les exemples > Boucles et Structures > Abandon de boucle cadencée.

 

Je souhaiterais savoir comment faire pour que la boucle s'arrete soit en cliquant sur le bouton "Abandonner la boucle cadendée" de la face-avant comme c'est prévu dans l'exemple, soit lorsque la boucle a fait 3 itérations par exemple.

 

De plus, je n'arrive pas à comprendre à quoi correspond dans la boucle cadencée, la partie à gauche "Raison du réveil" 

A quoi cela sert?

Comment le modifier?

 

Merci d'avance pour votre aide.

 

 

0 Compliments
Message 1 sur 32
3 714 Visites

Bonjour,

En fait le champ "raison du réveil" t'indique la condition qui a généré le lancement de l'itération de la boucle.
Plusieurs cas sont possible :

- Abandon généré par la requête du même nom

- Timeout : Temps d'attente dépassé

- Erreur rencontré sur l'horloge de synchro

- Fréquence de travail normal

 

Ce champ va donc te servir par exemple, lorsque du génère un abandon de ta boucle cadencée, tu ne veux pas forcément que son code s'exécute à ce moment là, il te suffit donc de mettre un case, dans lequel tu gères l'arrêt de ta boucle par abandon.


Ce champs est en lecture "seule", tu ne peux pas le piloter directement, c''est tes actions sur la boucle qui vont déterminé son état (vitesse de synchro, cpu de synchro, abandon, timeout,....).

 

J'espère que ces explications te permettent de mieux cerner son utilisation.


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
0 Compliments
Message 2 sur 32
3 711 Visites

Merci pour ta réponse mais je ne comprends pas mieux.

 

Oui le champ de la face avant "raison du reveil" m'indique la condition qui a arreté la boucle.

Ce que je ne comprends pas c'est dans le diagramme, le cadre bleu a gauche "raison du reveil" dans la boucle cadencée.

Comment l'éditer? Comment est il "relié" à la structure évenement ?

 

Désolé mais c'est pas facile à comprendre...

0 Compliments
Message 3 sur 32
3 701 Visites

En fait, la nuance dans l'abandon des boucles cadencées, est que tu n'arrêtes pas la boucle comme un "STOP" du vi, ce n'est pas une sortie réelle de la boucle.


Cela correspond à deux étapes, un trigger sur ta boucle cadencée pour la sortir du sommeil (Attente de l'horloge), et la sortie de la boucle comme sur un changement d'état du terminal. Et donc ta raison du réveil va changer par rapport à l'évènement qui déclence cette itération (trig horloge, ou event user).

 

Donc l'aspect qui est compliqué, c'est de se dire que tu abandonnes la boucle, mais que la sortie se faire à l'itération I+1.

“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 32
3 696 Visites

Merci encore mais je ne comprends toujours pas.

C'est plus des questions pratiques que je me pose que la compréhension complète du code.

Peux tu répondre à cela :

Comment l'éditer?

Comment est il "relié" à la structure évenement ?

 

Merci

 

0 Compliments
Message 5 sur 32
3 683 Visites
Ben c'est ce que j'essaye de faire depuis tout à l'heure, mais faut croire que j'y arrive pas 😄

Je laisse passer un peu de temps pour permettre à quelqu'un d'autre d'apporter une autre explication 🙂 et si y a pas je trouve comment te faire un petit Vi d'exemple
“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 6 sur 32
3 680 Visites

Oui je sais bien Michael et je t'en remercie mais j'arrive pas à comprendre le lien entre la boucle cadencée et la structure évenement, mise à part que les 2 sont reliés en entrée par le champ "Example Time loop"

 

0 Compliments
Message 7 sur 32
3 679 Visites

Ces deux liens pourraient peut être aider à ta compréhension

http://zone.ni.com/reference/fr-XX/help/371361N-0114/lvconcepts/abs_time_timed_structs/

http://zone.ni.com/reference/fr-XX/help/371361N-0114/lvconcepts/aborting_timed_structs/

http://zone.ni.com/reference/fr-XX/help/371361N-0114/lvconcepts/con_config_adv_timed_seq_set/

“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 8 sur 32
3 665 Visites

Merci pour les liens.

Je vais prendre un exemple cela sera peut etre plus facile:

 

Je réalise une acquisition d'un inclino en continu par visa, les données renvoyées sont stockées dans un buffer.

Toutes les x secondes, je récupère les 10 dernières lignes de ce buffer, je calcule les angles correspondants, fais la moyenne et l'affiche dans un graph.

 

J'arrive à faire cela avec une boucle for pour le traitement toutes les x secondes. C'est pas très propre mais cela fonctionne bien. cf vi inclino boucle for

Mon problème, c'est que si x secondes à attendre est important, lorsque je quitte l'acquisition, mon programme attend les x secondes avant de se fermer.

J'ai donc modifié cette boucle for par une boucle while et une machine d'état (3 états: Traitement des 10 dernières lignes du buffer pour faire la moyenne/ temporisation/ arret). Je peux donc arreter ma boucle while avant la fin de la temporisation cf inclino boucle while tempo

Sauf que les données du buffer ne sont plus lues... J'ai toujours en entrée de ma boucle while un buffer vide et je ne peux pas calculer mon angle. Je ne comprends pas pourquoi.

 

Comment faire pour avoir le comportement du vi avec la boucle for mais que je puisse stopper la temporisation ?

C'est pour cela que je regardais l'exemple "abandon de boucle cadencée" mais je ne comprends toujours pas l'exemple donné...

 

Pouvez-vous m'aider?

Merci

 

 

 

0 Compliments
Message 9 sur 32
3 644 Visites

J'ai pas encore regardé ton code, mais en regardant la capture "nclino boucle while tempo.png", je peux déjà te dire le problème pour ta boucle de traitement.


Comme tu as mis l'initialisation "Traitement" dans la boucle while principale, tu réinitialises toujours ta boucle "while" secondaire à cette valeur à chaque itération.


Pour que ton "init" fonctionne correctement, tu dois la réalisé à  l'extérieure de ta boucle principale avec un registre à décalage supplémentaire.

“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 10 sur 32
3 630 Visites