Discussions au sujet de NI LabVIEW

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

stop multi_while

Résolu !
Accéder à la solution

Un d'entre vous aurait-il une critique / objection / conseil / commentaire

 

sur cette façon de stopper plusieurs While en //.

 

Les structures Event me permettent de temporiser ET de stopper chaque boucle

 

Existe-t-il une contre-indication quelconque à utiliser plusieurs binômes While_Event ayant un event en commun ?

 

(Je pense qu'il n'y a pas de problème, mais je n'en suis pas certain à 100%)

 

 

SR1.png

0 Compliments
Message 1 sur 31
4 949 Visites

Salut Pierre

 

Et pourquoi pas comme ça ?

 

Sans titre.png

0 Compliments
Message 2 sur 31
4 944 Visites

pardon j'ai oublié le vi qui vas bien avec...

0 Compliments
Message 3 sur 31
4 939 Visites

 

et comme ceci ...  Smiley tirant la langue   Smiley heureux

 

 

SR1.png

 

pas de vi pour moi (na) Smiley surpris   .. "obtain notifier", "send notification" et "wait on Notification" (palette synchronisation)

 

Message 4 sur 31
4 938 Visites

Mauvais joueur ! Smiley très heureux il est pas plus simple mon exemple !

 

Sinon sympas je ne connaissais pas...

 

a+

Message 5 sur 31
4 931 Visites

ton code est bon ...

 

on le retrouve même sur une page de national Instruments ...

 

alors, si NI s'en sert dans un de ses exemples ... que dire de plus ? Smiley indifférent

 

 

il y a bien la variante "variables locales" ... mais certains aiment moins.

 

il y a une part de feeling et de "sensibilité" propre à chacun dans tout ça  Smiley heureux

 

 

SR1.png

Message 6 sur 31
4 928 Visites

mais ...

 

revenons à ma question de départ, car une éventuelle réponse m'intéresse :

 

Existe-t-il une contre-indication quelconque à utiliser plusieurs binômes While_Event ayant un event en commun ?

 

(voir image 1er message)

 

(Je pense qu'il n'y a pas de problème, mais je n'en suis pas certain à 100%)

0 Compliments
Message 7 sur 31
4 927 Visites

 

Voici deux « observations» à l’utilisation de ce code.

 

 

1 .Si tu déclenches un événement qui prend un certain temps dans l’une des structures événement.

 

Il faudra alors que la structure ai finit son événement avant quel prenne en compte une action du bouton stop.

 

Il est à noter qu'elle enregistre « la demande d’événement stop en mémoire » même si elle est occupée à autre chose, elle l’exécutera cette demande dans un second temps…

 

 

2. Cette deuxième observation d'écoule de la première, l'exécution des événements se feront les un après les autres mais jamais simultanément.

 

 

0 Compliments
Message 8 sur 31
4 921 Visites
Solution
Accepté par ouadji

Hello,

 

Chaque structure événement gère sa propre file d'attente d'événements, les boucles vont donc déclencher et s'exécuter en même temps dans leur thread respectif.

La raison pour laquelle on évite ce genre de code n'est pas l'aspect fonctionnel mais le caractère complexe et non-élégant. En plus, ce code ne fonctionnera pas pour les booléens en armement. De même d'ailleurs pour les variables locales et noeuds de propriété...Note, les noeuds de propriété sont beaucoup plus lents (quelques dizaines de fois plus lents) que les variables ou le flux de données

 

Bon, et sinon, comment on fait un joli code alors ?

Pas de réponse magique, cela dépend du code dans les boucles. Si on dispose de fonctions de synchronisation (file d'attente, notificateurs, sémaphores...), on peut gérer intelligemment le cluster d'erreur. La bonne vieille FGV est plus que recommandable la plupart du temps. Nos copines mal-aimées les occurrences. Que d'options 🙂

Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.

Message 9 sur 31
4 916 Visites

@Eric

 

Merci Eric pour ton intervention.

 

Une FGV pour stopper plusieurs Boucles ?

"set" dans la boucle "main" et "get" dans les boucles "slave" ... c'est ce à quoi tu penses ?

Tu me confirmes que, pour toi, c'est la meilleure solution ... disons ... passe partout,générique ?

 

N'aimes-tu pas la solution de la "notification" ? (pure)

Je ne parle pas du cas où l'on a déjà une notification dans le code ...

et où on se sert de la gestion d'erreur dans les "wait on notification" par absence de référence.

Je parle d'une vraie notification dédiée au stop.

 

Je n'aime pas trop ces façons basées sur la gestion de l'erreur ... un a priori, probablement.

Pour moi, la ligne d'erreur n'est pas "là" pour ça.

C'est une cabriolle qui fonctionne, mais cela reste pour moi une cabriolle.

 

Et stopper avec une Occurrence ? Pourquoi ne les aime-t-on pas ?

NI lui-même recommande de les utiliser le moins possibles ? pourquoi ? une fonction appelée à disparaître peut-être ?

"National Instruments encourages you to use the Notifier operations functions in place of occurrences for most operations"

 

Je n'aime pas trop non plus la solution du Noeud de Propriété, ni de la Variable Locale.

Pourquoi ? l'une comme l'autre brise le concept du flux de données.

Oui, je sais, "ça fonctionne" ... mais ça perturbe ma façon de penser.

 

Quant au système avec structure event, elle a 2 avantages :

on peut se passer d'un wait(ms) ... avec la notification aussi.

on peut interrompre la temporisation de la boucle. L'arrêt est immédiat.

 

Personnellement j'ai un petit faible pour la notification ... quoique ta "fgv" me fait réfléchir.

Pour une fgv, je n'ai pas cette impression de rupture de flux ... et pourtant, si on veut ergoter ...

Pour moi il n'y a pas de rupture de flux au "set" ... la rupture de flux se trouve au "get".

 

beaucoup de remarques/questions ... mais le sujet est sensible Smiley heureux

Ton avis sur tout ceci m'intéresse bien évidemment.

 

Merci.

 

 

 

0 Compliments
Message 10 sur 31
4 913 Visites