Discussions au sujet des autres produits NI

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

ne pas ecrire dans un tableau

Bonjour,

 

Je créer un tableau un indexant la sortie d'une boucle while.

Je voudrais que suivant une condition, il ne prenne pas en compte la valeur.

 

Par exemple, dans le fichier ci-joint, je voudrais un tableau avec comme résultats 1 2 4 5.

Comment puis-je faire?

 

Merci de votre aide

0 Compliments
Message 1 sur 7
5 765 Visites

Bonjour,

 

Il faut utiliser la foction construire un tableau dans le cas faux de ta structure condition, et utiliser un registre à décalage.

 

Cordialement.

0 Compliments
Message 2 sur 7
5 761 Visites

Bonjour il existe une fonction OpenG « conditional auto-indexing tunnel » ; le but est de conserver l’ensemble des éléments d’un tableau « Array In » pour lequel le tableau des « Element to keep » est à true.

L’idée est alors de faire, dans la boucle, le tableau des données et le tableau des booléens « A garder ». Par auto-indexation il suffit  de câbler les mesures sur la boucle et de câbler le « A gadrer » sur la boucle également.

Puis d’utiliser la fonction qui réalise le tableau des éléments à conserver.

autoindexing.PNG

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW |
LabVIEW Architect (CLA) & TestStand Developper (CTD) | LabVIEW Champion
MESULOG | NERYS

Message 3 sur 7
5 751 Visites

Bonjour,

 

Je déterre ce topic car je rencontre aujourd'hui à peu près le même problème...

Je suis en train de créer un logiciel d'acquisition via un capteur de force et un capteur de déplacement, avec comme objectif d'enregistrer les données dans un fichier périodiquement uniquement, genre tous les x cycles par exemple.

J'ai tenté de faire une condition sur un nombre de cyccles périodiques...A priori, pour la condition vrai, je pense voir ce qu'il faut faire...Par contre, j'ai un gros doute sur la condition fausse sachant que normalement, si je suis ma logique : si le nombre de cycles est égale à x fois périodes, les données sont écrits dans le tableau et, si ce n'est pas le cas il ne se passe rien.

 

Pouvez-vous m'apporter votre aide sur ce sujet ?

Je joints à mon explication une copie écran du code de ma condition

 

Merci d'avance

Tout télécharger
0 Compliments
Message 4 sur 7
5 533 Visites

Bonjour,

 

Votre VI en l'etat ne peut pas fonctionner car vous effacez l'intégralité du tableau à chaque fois que la condition est fausse.

 

Il y a une fonction de LabVIEW 2012 qui réalise ce que vous désirez automatiquement: Vous pouvez définit le tunnel de sortie du'une boucle comme étant "auto indexing" ou "concatenating". Dans votre cas, vous souhaitez indexer un tableau á une dimension en sortie en insérant à la suite des valeurs d'un autre tableau à une dimension. Le Tunnel de sortie doit donc être "concatenating" (Clic droit sur le tunel de sortie -> Tunnel mode -> Concatenating).

 

Vous pouvez de plus y ajouter une condition (Clic droit sur le tunel de sortie -> Tunnel mode -> Conditional). Cela fera que la valeur de sortie ne sera écrite que lorsque la condition est TRUE. De manière simplifiée, la  boucle devrait ressembler à la suivante:

 

snippet 4.png

 

Par ailleurs, je me permet de commenter votre code car quelques aspects me dérangent:

 

* La fonction Build Array à l'intèrieur d'une boucle while couplée à un registre de décalage pour construire un tableau de valeir est une catastrophe, tant du point de vue de l'utilisation mémoire que du point de vue des performances: Vous allouez de cette manière un bloc supplèmentaire à chaque itéoucle for ration, perdant ainsi du temps d'execution et augmentant les risques de violation mémoire. La méthode mentionnée dans l'exemple ci-dessus est plus performante car les blocs mémoires ne sont pas réalloués à chaque itération mais X itérations à l'avance. Le resque de violation mémoire persiste cependant. Avez-vous la possibilité de savoir à l'avance le nombre d'itérations que la boucle devra effectuer? Si oui, utiliser la méthode sus-mentionnée avec une boucle for ammenerait les meilleurs résultats.

* Avez-vous vraiment besoin de toutes ces variables?

 

Cordialement

 

______________
Florian Abry
Inside Sales Engineer, NI Germany
0 Compliments
Message 5 sur 7
5 525 Visites

Bonjour,

 

Tout d'abord merci pour votre réponse.

Je pense avoir compris votre méthode..Par contre, le problème c'est que je travaille sur Labview 2009 et je n'ai pas trouvé cette fonction.

Et pour les variables, je vous avoue que vous n'êtes pas la première personne à me faire la réflexion...Malheureusement, je ne connais pas d'autres méthodes pour accéder aux variables présentes dans mon VI

 

Je suis en tout cas à l'écoute de toutes suggestions

 

Merci

0 Compliments
Message 6 sur 7
5 510 Visites

Et pour le nombre d'itérations de la boucle : comme cette boucle travaille en parallèle avec une autre boucle qui commande plusieurs vérins, cela me semble difficile de connaître avant le nombre d'itérations

0 Compliments
Message 7 sur 7
5 507 Visites