Discussions au sujet de NI LabVIEW

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

Boucle while et port série en simultané

Bonjour à tous,

 

Je suis formateur pour une entreprise de machinisme agricole et nous avons développé un outil de mesure de patinage avec un NI-DAQ et Labview. L'outil a été développé par des étudiants dans une version basique. Aujourd'hui je voudrais exploiter les possibilités de Labview pour intégrer une mesure d'effort de traction en parallèle de la mesure de patinage.

Les 2 éléments fonctionnent séparément dans 2 applications différentes.

J'ai intégré les 2 VI dans un seul et même VI mais je n'arrive pas à lire la boucle du port série. Vous le trouverez en pièce jointe. Seul la boucle while fonctionne.

La boucle While s'arrête automatiquement au bout de 100 m et je voudrais également arrêter la boucle du port série après 100m. Le problème et que lors de l'exécution, la boucle du port série ne démarre pas.

Le port série et le NI-DAQ sont branchés sur 2 ports USB différents lors de l’exécution.

 

Est ce que quelque chose n'est pas correcte dans le VI ? Est ce qu'il faut créer une boucle autour des 2 autres ? Si oui, laquelle ?

 

Je suis novice sur Labview et je suis aujourd'hui bloqué. Je ne sais pas si les informations ci-dessus sont claires, si besoin, n'hésitez pas à me demander. Merci de l'attention que vous porterez à cette demande.

0 Compliments
Message 1 sur 8
3 135 Visites

Bonjour Geoffrey,

 

Vous avez câblé la "moyenne" du patinage à la boucle de communication série. Comme LabVIEW fonctionne en flux de données, la boucle série ne démarrera que quand la boucle "patinage" s'arrêtera et lui donnera la "moyenne". Donc au mieux elles s'executeraient l'une après l'autre.

Mais ce n'est pas le cas car quand vous atteignez les 100m, la fonction "stop" est activée et arrête immédiatement le VI.

 

La fonction stop termine le VI sans ménagement, le programme s'arrête mais ce n'est pas propre. Je vous conseille de supprimer la fonction stop et de raccorder la condition des 100m au terminal de fin de boucle while (en bas à droite). Comme le bouton "arrêter l'application" est déjà raccordé à ce terminal de fin de boucle, ajoutez un "OU".

Maintenant, la boucle série devrait s'executer après la boucle patinage. Testez ça d'abord avant de passer à la suite

 

Ensuite, pour qu'elles fonctionnent en parallèle, il y a plusieurs solutions. Mais dans tous les cas, il faut supprimer le fil "moyenne" qui passe d'une boucle à l'autre.

- Soit Passer sur une architecture "producteur-consommateur" avec 2 producteurs (patinage et série) et 1 consommateur (enregistrement des données)

- OU Mettre les acquisitions du patinage et série dans une seule boucle while (simple)

- OU Faire deux enregistrements séparés. 1 pour le patinage, l'autre pour la série. (simple)

 

Suivant ce que vous voulez comme fichier de sortie il peut y avoir un peu de boulot. Notamment si le patinage et l'effort de traction sont liés et doivent se faire simultanément.

 

Yddet

0 Compliments
Message 2 sur 8
3 116 Visites

Bonjour,

 

Merci pour votre réponse.

J'ai appliqué votre méthode et réalisé 2 autres VI.

Lors d'un premier essai, Labview me renvoyait les valeurs du NI-DAQ et du port série. A la fin, l'ensemble a planté !

J'ai 2 nouveaux VI à vous soumettre sachant que la valeur de patinage (NI-DAQ) doit être en lien avec l'effort (Port Série). Normalement à une valeur de patinage correspond un effort. Tout cela nous donne une courbe d'adhérence sur 100 m.

 

Que pensez vous des 2 VI joints ? Est ce que l'un d'entre eux permettrait d'aboutir à un tableau EXCEL correct ?

 

Merci pour votre aide.

Tout télécharger
0 Compliments
Message 3 sur 8
3 106 Visites

La sortie du programme est plus propre Smiley heureux

La boucle while englobant l'ensemble n'est pas nécessaire.

 

Pour le plantage de fin, je ne sais pas ce qu'il s'est passé. Quel message d'erreur avez-vous eu ?

Le but des fonctions "réduire le nombre d'échantillons" est effectivement de réduire le nombre de valeurs ou est-ce une manière de faire une moyenne ?

Au total au bout de 100m, combien d'échantillons devriez vous récupèrer? Si ce n'est pas trop gros on peut laisser l'enregistrement des données à l'exterieur des boucles.

 

J'ai du mal à comprendre ce que ce qui est enregistré à la fin... Pouvez-vous joindre votre programme en version 2011 ? (fichier>enregistrer pour une version précédente>2011)

 

Il faudra ensuite synchroniser les 2 acquisitions. Malheureusment je ne connais pas le fonctionnement des fonctions VISA

Yddet

0 Compliments
Message 4 sur 8
3 099 Visites

Bonjour,

 

Merci pour votre réponse.

Je vais réessayer aujourd'hui avec 2 PC différents, peut être un manque de mémoire !

La fonction réduire le nombre d'échantillons permet en effet de faire une moyenne et de lisser les erreurs d'acquisition dues aux mouvements inopinés de nos capteurs.

Il nous faut a peu près 1 min 30 pour faire les 100 m et il me faudrait une cinquantaine de point. Un point, enregistré dans le fichier EXCEL est un taux de patinage (NI-DAQ) en fonction de l'effort (port série).

 

Vous trouverez le programme 2011 en pièce jointe.

 

Comment pouvons nous faire pour synchroniser les 2 acquisitions ?

 

Merci pour votre réponse.

0 Compliments
Message 5 sur 8
3 078 Visites

Bonjour,

Si il y a un manque de mémoire pour 1 minute 30 d'acquisition c'est qu'il y a un problème autre part Smiley clignant de l'œil

 

Vous n'avez pas besoin d'une acquisition très rapide, ça facilite la synchronisation.

Quels sont vos paramètres d'acquisition (dans l'assistant DAQ)?

 

Voilà comment je partirais pour le patinage : while patinage ->mode d'aquisition continu -> filtre -> moyenne -> mise à l'échelle -> sortie while (avec indexation des valeurs)->enregistrement.

 

Pour l'effort, je ne connais pas VISA mais je j'ajouterais une boucle for qui englobe la lecture. Le nombre d'itérations serait égal au nombre d'échantillons configuré dans l'assitant DAQ. Enfin, je cadencerais la boucle for avec une fonction "attendre un multiple de ms" égale à 1/fréquence d'acquisition. Ce qui donnerait : while effort->commande->entrée boucle for->lecture-> sortie boucle for (avec indexation des valeurs)-> (filtre?) -> moyenne -> sortie while (avec indexation)->enregistrement

 

J'aurais bien fait un exemple mais je ne peux pas ouvrir votre programme qui est en LV2015. J'espère malgré tout que j'ai compris comme fonctionne votre programme et que je ne réponds pas à côté de la plaque Smiley très heureux

Yddet 

 

0 Compliments
Message 6 sur 8
3 070 Visites

Bonjour,

Je vous joins les différentes configuration ainsi que la nouvelle version du VI suite à vos indications.

J'ai essayer le VI sans boucle. l'application m'affiche le taux de patinage et l'effort mais il y a 2 petites choses :

- l'acquisition des données d'effort ne s'arrête pas au bout de 100m. Ce n'est pas un gros problème.

- Il ne se crée pas de fichier EXCEL avec les valeurs de patinage et d'effort.

Comment faire pour résoudre le 2nd problème ?

 

J'ai essayé de vous faire une version 2011 mais elle n'est pas passée à cause de la création du fichier EXCEL. J'ai pris la première version précédente qui ne posait pas de problème à l'enregistrement. Est ce que cela fonctionne ?

 

Encore merci pour votre support.

 

 

0 Compliments
Message 7 sur 8
3 061 Visites

Après avoir atteint les 100m et appuyé sur le bouton "arrêt" le fichier excel n'est pas créé ?

 

La fonction "attendre un multiple de ms" est en millisecondes, il faut donc mettre en entrée "2" pour obtenir du 50Hz. j'avais peur de ne pas être assez clair pour la boucle for mais c'est bon

 

Pour indexer les valeurs de patinage et d'effort, il faut cliquer droit sur le terminal qui se crée en bordure des boucles while (comme c'est déjà fait pour la boucle for). De cette manière, à chaque itération de boucle, les valeurs sont ajoutées dans un tableau. A la sortie de la boucle, c'est le tableau avec toutes les valeurs qui est transmi pour l'enregistrement.

 

Un snippet vaut mieux qu'un long discours. En simplifié voici comment je ferais :

 capture.png

Je remplace les fonctions "assistant DAQ" et "reduire le nombre d'échantillons"

Pour la tâche, il faut la créer sous MAX avec les paramètres que vous avez déjà.

Je ne sais pas si vous avez réellement besoin d'un filtre, le moyennage peut suffire, vous me direz. 

A vous d'incorporer vos conditions et initialisation de tâche VISA.

Bon week end,

Yddet

0 Compliments
Message 8 sur 8
3 049 Visites