Discussions au sujet de NI LabVIEW

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

appel dynamique sous-VI (avis)

Résolu !
Accéder à la solution
Highlighted

Luc Desruelle a écrit :

Juste une remarque je pense qu'il faut mettre un registre à décalage sur la gestion d'erreur de la boucle For car si une erreur arrive en entrée après 1000 boucles elle sera perdue.


Je ne pense pas, il n'y a que si la boucle n'executait aucune iteration que la valeur serait perdue, mais dans le cas présent ce n'est pas possible puisque le nombre d'itérations est fixé à 1000, la ligne d'erreur va véhiculer 1000 fois la valeur d'erreur présente initialement sur le connecteur d'entrée de la boucle.


tu as raison. Et dans cet exemple il n'y a pas besion; mes excuses Smiley clignant de l'œil. J'ai fait une remarque sans assez vérifier.

 

Mais sur le principe pour argumenter ma remarque il faut le faire:

> si la boucle FOR ne s'éxecute pas : l'erreur est perdue

> si une erreur est réalisée dans la boucle FOR sans registre à décalage elle est perdue (sauf si à la dernière intération mais si à la 2éme sur 1000)

FOR.png

Et c'est pourquoi il faut câbler l'erreur sur un registre à décalage dans un boucle FOR

Par ailleurs Helmut; qui avait raison comme toujours; semble d'accord sur ce principe

Comme j'ai écrit une bêtise alors un conseil : s'il peut avoir une erreur dans une boucle For il peut être intéressant de câbler "Conditional Terminal" donc arrêt sur erreur

 

FOR2.png

 


A ce sujet je permet de rajouter un cas très spécifique ou le fait de ne pas avoir de registre à décalage peut occasionner des bugs à se tirer les cheveux. Qu'arrive-t-il si la boucle ne tourne pas ? Vous perdez l'erreur.

Maintenant imaginez le code suivant :

SRAndFL.png

 

  1. Que se passe-t-il si l'on exécute le code avec le selecteur à F ?
  2. Que se passe-t-il si l'on exécute le code avec le selecteur à T ?
  3. Que diriez-vous d'ajouter un Shift register sur la référence du fichier ?

Cordialement

Olivier JOURDAN

Wovalab | Certified LabVIEW Architect | DQMH Trusted Advisor |
Message 21 sur 34
603 Visites
Highlighted
A ce sujet je permet de rajouter un cas très spécifique ou le fait de ne pas avoir de registre à décalage peut occasionner des bugs à se tirer les cheveux. Qu'arrive-t-il si la boucle ne tourne pas ? Vous perdez l'erreur.

Maintenant imaginez le code suivant :

SRAndFL.png

 

  1. Que se passe-t-il si l'on exécute le code avec le selecteur à F ?
  2. Que se passe-t-il si l'on exécute le code avec le selecteur à T ?
  3. Que diriez-vous d'ajouter un Shift register sur la référence du fichier ?

Cordialement


Très bon exemple tiré de la pratique ! Il y a quelques années, je m'étais fait prendre au piège avec cet exemple même.

Après avoir tout d'abord ajouté une vérification pour traiter le cas particulier d'un tableau vide, j'avais réalisé qu'un registre à décalage pour la référence du VI permettait d'éviter cette précaution.

A première vue un registre à décalage pour une donnée restant constante peut surprendre et il faut peut-être s'être brûlé les doigts pour bien en saisir la nécessité !

Message 22 sur 34
588 Visites
Highlighted

Helmut O'Brian a écrit :

Il y'a également le VI "Asynchronous VI Call" (voir pièce jointe) qui semble plus adapté, mais qui n'existe que depuis LabVIEW 2011.


 

Bonjour Maxime,

 

Cette nouveauté de LV2011 m'avait échappée et je viens de modifier le code de mon application actuelle pour remplacer la méthode Run VI. Comme dit plus loin par yledieu, la possibilité de définir les paramètres d'entrée du VI par son connecteur est un avantage non négligeable.

 

Merci donc pour cette information... qui a trouvée une mise en pratique instantanée dans mon code.

 

Message 23 sur 34
579 Visites
Highlighted

Très intéressant tous vos VIs et commentaires.

 

Curieux cette particularité du shift registre associé à une boucle For.

Particularité qu'il est impossible de mettre en évidence avec une boucle While,

puisqu'une boucle While s'éxecute toujours au moins une fois.

 

Dans le snippet ci-dessous, "A" ne s'allume pas, "B" s'allume.

Je dit "curieux" car un shift registre "transmet" en principe de la sortie vers l'entrée.

Mais ici, dans le cas de la Led "B", avec N=0, le shift registre semble transmettre

de l'entrée vers la sortie. Ce qui est certain, c'est que si le shift registre n'est pas là,

l'info "true" n'arrive pas à la Led (N=0). Donc, à part passer "en sens inverse" dans

notre shift registre ... je ne vois ancun autre chemin envisageable.

Donc ... je prends note, mais curieux !

 

H_5_4.png

0 Compliments
Message 24 sur 34
572 Visites
Highlighted

interessant ,

 

il semblerait que même si la boucle ne s'execute pas l'init du shift est quand même faite

et qu'en le shift renvoie la derniere valeur connue soit celle de l'init

mais bon a la limite ce n'est pas preoccupant puisque ce qui est present en sortie est un copie de l'entrée

donc pas de mauvaise surprise

 

ce qui me semble troublant c'est que A ne s'allume pas , sans doute parceque le tunnel renvoie la valeur par defaut en l'occurence false!

 

Cdt

 

Tinnitus

CLAD / Labview 2011, Win Xp
------------------------------------------------------
Mission d'une semaine- à plusieurs mois laissez moi un MP...
RP et Midi-pyrénées .Km+++ si possibilité de télétravail

Kudos always accepted / Les petits clicks jaunes sont toujours appréciés
Don't forget to valid a good answer / pensez à valider une réponse correcte
0 Compliments
Message 25 sur 34
567 Visites
Highlighted

"ce n'est pas preoccupant puisque ce qui est present en sortie est un copie de l'entrée"

 

De quel couple entrée/sortie parlez-vous ?

Le couple entrée/sortie du VI (rouge), ou le couple entrée sortie du Shift Registre (bleu) ?

 

autrement dit,

 

Quand vous dites "...ce qui est présent en sortie est une copie de l'entrée"... vous parlez du VI ou du Shift Registre ?

 

original3.png

 

0 Compliments
Message 26 sur 34
564 Visites
Highlighted

En tous les cas, le regsitre à décalage d'erreur peut etre parfois bien embettant dans une gestion par evenement car il bloque un peu le système.

Dans mon cas, j'ai fait une interface par évenement, celle ci se trouver bloquer par le fait qu'ne erreur (toutes bêtes j'avais oublié de donner une voie d'acquisition), rester tous le temps meme après avoir arreter mon programme et du coup, celle m'empechait de pouvoir la corriger directement dans le programme car mon registre à décalage garder en mémoire l'erreur.

Message 27 sur 34
560 Visites
Highlighted

Pour la petite histoire, le comportement des registres à décalage et des boucles For tournant "zéro fois" à changé entre LV6 et LV 7. Ceci à souvent occasionné des bugs lors de passage de code d'un LabVIEW à l'autre.

Ce qu'il faut retenir, à mon avis, c'est que depuis nous savons gérer 2 cas différents très simplement sans ajout execcif de code.

Soit je souhaite avoir en sortie la valeur par défaut --> pas de registre à décalage

Soit je souhaite avoir la valeur en entrée de la boucle For --> registre à décalage avec récupération de la valeur d'initialisation

 

Chaque peut trouver un intérêt dans des situations différentes.

Olivier JOURDAN

Wovalab | Certified LabVIEW Architect | DQMH Trusted Advisor |
Message 28 sur 34
547 Visites
Highlighted

Bonjour à tous,

 

désolé pour ce petit ergotage, je viens de l'assembleur, je suis comme ça Smiley heureux

 

Je remarque également que dans ce cas précis, shift registre et noeud de rétroaction ne sont pas équivalents.

 

Dans les cas "Led B" et "Led C", les Leds ne s'allument pas.

Ce qui me semblent tout à fait normal et logique (comme le pourraient-elles ?)

 

J'ai placé la Led "témoin" pour bien me prouver que rien ne s'exéxute dans la boucle

(juste pour moi, pas pour vous Messieurs Smiley clignant de l'œil)

 

Dans le cas "Led A" (Led s'allume), l'info <True> passe donc bien par le shift registre, à l'envers du sens conventionnel.

Un shift registre étant conventionnellement de x vers y, et non y vers x. (x et y sur le snippet)

 

Je vois donc cela comme un comportement propre au couple <boucle For/N=0 + shift regsistre>. (N=0, implicite ou explicite)

Cela devrait à mon sens être documenté comme tel dans la doc LV.

Peut-être également confirmer la portabilité pour les versions futures (cf la remarque de Olivier Jourdan)

 

 

H_5_4.png

 

 

 

 

 

 

0 Compliments
Message 29 sur 34
527 Visites
Highlighted

ouadji a écrit :

 

Dans le cas "Led A" (Led s'allume), l'info <True> passe donc bien par le shift registre, à l'envers du sens conventionnel.

Un shift registre étant conventionnellement de x vers y, et non y vers x. (x et y sur le snippet)

 


Il y a, à mon avis, contre-sens (sans jeu de mot) sur ton interprétation. Si tu retouve Vrai sur ta Led A, c'est parcque tu as initialiser ton registre à décalage avant l'exécution de ta boucle FOR. Ta boucle FOR ne tournant pas elle te renvoie la valeur du registre à décalage --> valeur par défaut si non initialisée ou valeur de l'initailisation. Pour t'en convaincre jette un oeil à ce code :

SRnonInitilized.png

 


ouadji a écrit :

 

Je remarque également que dans ce cas précis, shift registre et noeud de rétroaction ne sont pas équivalents.

  



Le noeud de rétroaction (que je n'utilise jamais 😞 ) fonctionne différement, mais cela se "voit". En effet tu peux l'initialiser sur la gauche de ta boucle, mais la sortie est complétemnt indépendante du noeud de rétroaction (a contrario du shift register) et renvoie donc la valeur par défaut puisque la boucle ne sait pas initialisée.

 


ouadji a écrit :

 

Peut-être également confirmer la portabilité pour les versions futures (cf la remarque de Olivier Jourdan)

 


Il me semble que ce genre de modification de comportement est listé dans la release note accompagment chaque version. Cependant, il est délicat de juger correctement de la portée réel de l'ensemble des information contnue dans ce genre de document.

Dans tout les cas cela démontre que la changement de version de LV n'est jamais quelque que chose d'anodin 😉

Olivier JOURDAN

Wovalab | Certified LabVIEW Architect | DQMH Trusted Advisor |
Message 30 sur 34
518 Visites