Discussions au sujet de NI LabVIEW

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

Acquisition dans un tableau 3D

Résolu !
Accéder à la solution

Bonjour,

 

je fais de l'acquisition de données sur plusieurs appareils éléctrique et je voudrai "stocker" mes données dans un tableau 3D pour avoir un programme générique.

Chaque "page" de mon tableau 3D représente l'acquisition de donnée d'un apareil. L'acquisition se fait par cycle, je m'explique, a t0 le premier appareil est lancé je récupére les données de l'acquisition (en format d'un tableau 2D de double) dans la page 0 de mon tableau 3D puis a t1 le second apareil démare je concaténe donc les données corespondant à l'acquisition de l'appareil 1 (en format de tableau 2D) dans la page 0 de mon tableau 3D et je stocke les données correspondants à l'acquisition de l'apareil 2 (en format de tableau 2D) a la première ligne de la page 1 de mon tableau 3D. Lorsque le cycle de l'apareil 1 se finit, j'enrengistre dans un fichier toute la page 0 de mon tableau 3D puis je vide la page 0 de mon tableau 3D et j'atend le prochain cycle de l'appareil 1 en continuant l'acquisisition de l 'appareil 2... Je travaille sur Labview 2012.

J'ai essayé les fonction "insérer dans tableau", "remplacer une portion", les registres à décalage.... Mais je bloque toujour, pouvez-vous m'aider svp? Merci.

 

Cordialement,

TTP38.

0 Compliments
Message 1 sur 8
4 631 Visites

Bonjour,

 

Comme dit précedemment, fourni nous ton VI (en LV2011 de préférence), ainsi nous pourrons t'indiquer la source d'erreur potentiel, et te proposer un correctif, et un avis général sur ton code.

 

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 8
4 628 Visites

Bonjour M. Michael C,

 

Voici un example de ce que je voudrai faire, j'espére avoir été assez précis dans ma description. Je vous remercie de l'atention que vous porté à mon problème.

Cordialement,

TTP38.

0 Compliments
Message 3 sur 8
4 624 Visites

Bonjour,

 

L'architecture de votre exemple ne convient pas du tout.


Corriger déjà ce point là avant de vouloir aller plus loin.

 

Votre "logique" de programmation implique d'utiliser une structure de type producteur/consommateur.

 

Le producteur est votre boucle avec la communication DAQ qui va venir "produire des données".

Le consommateur est votre boucle de sauvegarde qui va venir "consommer" la pile de données pour l'enregistrer dans votre tableau 3D.


Refaite déjà l'architecture de votre programme à partir du modèle de conception production/consommateur de NI, et ensuite nous réglerons votre soucis de tableau 3D, car il nous faut cette base saine pour avancer.

 

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 4 sur 8
4 622 Visites

Je vous remercie du conseil. J'ai implémenté la structure producteur/consomateur dans mon programme.

 

J'ai ensuite modifié mon programme pour l'acquisition et le stockage dans un tableau 3D...

 

Je récapitule ma problèmatique, je voudrais faire l'acquisition de la tension globale et la tension de la résistance d'appareils éléctrique ( on va prendre 3 appareils). Les appareils fonctionnent par cycle, le départ des cycles sont séquencé via un module numérique. Les cycle des appareils sont lancés à différents temps.

L'acquisition des données est effectuée par un module anlogique qui les regroupent dans un tableau 2D. Les données de chaque appareils sont répartit dans les colones de ce tableau 2D, par exemple pour une mesure de la tension global et de la résistance de chaque appareil:
•La tension global de l'appareil 1 est dans la colone 0 et mesure la tension de la résitance de l'appareil 1 est dans la colone 1.
•La tension global de l'appareil 2 est dans la colone 2 et mesure la tension de la résitance de l'appareil 2 est dans la colone 3.
•La tension global de l'appareil 3 est dans la colone 4 et mesure la tension de la résitance de l'appareil 3 est dans la colone 5. 

 

Lors de chaque acquisitions, je traite ce tabeau 2D afin de les stocker dans un tableau 3D dont chaque "pages" corespondent au numéro d'appareil et la collone 0 correspond à la tension globale de l'appareil et la collone 1 correspond à la tension de la résistance de l'appareil. 

Je voudrai que lorque le module numérique lance le cycle de l'appareil 1, je commence à remplir la page 0 de mon tableau 3D, puis lorsque le module nulérique lance le cycle de l'appareil 2, je comence à remplir la page 1 de mon tableau 3D, ect. Et lorque le cycle de l'appareil 1 est fini, je sauvegarde dans un fichier les données de la page 0 (tout en continuant d'acquérir les données des cycles des autre appareils en cours) et je réinitialise la page 0...

Voici ci-joint un exemple... 

 

Je vous remercie de votre aide.

Cordialement,

TTP38.

 

0 Compliments
Message 5 sur 8
4 615 Visites
Solution
Accepté par l'auteur du sujet TTP38

J'ai clarifier un peu ton VI.


Dès que tu le peux, il faut à tout prix éviter les variables locales qui sont en contradiction complète avec la philosophie du "flux de données".


Fais un test, et dit moi ce que cela donne.

Si cela ne marche pas. Fourni moi un exemple de valeur des 3 tableaux (acquisition, donnée, stockage).


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
Message 6 sur 8
4 589 Visites

Bonjour M. Michael.C,

 

J'ai testé votre VI, il manquait seulement l'initialisation du tableau en entré de "remplacer une portion d'un tableau" afin qu'il puisse à chaque fois remplir le "tableau 3D traitement de donnée" de 2 collonnes (tension globale et tension résistance) et 5 lignes (nombre d'échantillons par voies), et j'ai rajouter en entré de "insérer dans un tableau" la constante 0 dans "ligne" afin qu"il puisse concatener les données à la suite des lignes et non  insérer le "tableau 3D traitement de donné" page après page dans le "tableau 3D de stockage".

Je vous remercie de vos conseils, pour les variables locales je pense être obliger de les utilisés, en effet le "tableau 3D de stockage " permet de stocker les données du cycle des appareils, lorsque qu'un cycle d'un appareil  est terminé, je vais devoir extraire une les donnée du cycle de la page correspondante au tableau, les sauvegarder dans un fichier puis de suprimer les lignes du "tableaux 3D de stockage" qui comporte ces données (il ne suprimera pas les lignes si ils contiennent également les données de cycle des autre appareils non terminée).

Je ne sais pas si c'est la meilleur façon mais cela me semble la plus adéquate pour un programme générique.

 

Merci de votre aide.

cordialement,

TTP38.

0 Compliments
Message 7 sur 8
4 583 Visites

Personnellement, et par expérience, je conseillerais plutot d'enregistrer les informations dans un fichier au fil de l'eau, plutôt que de faire cet étape dans un second temps.


EN effet, nous ne sommes jamais à l'abri d'un arrêt brutal du programme quelque soit la raison (bug driver, bug windaube, bug...), et cet méthode a l 'avantage d'éviter la perte de la totalité de l'essai.


Après il faut que cela soit en adéquation avec le temps d'essai : pour un essai de 5 minutes, pas besoin, pour un essai de 10h : quasiment incontournable.

Cela a aussi l'intérêt de limiter l'impact sur les buffers mémoire. En effet, dès que l'information est sauvegarder en "dur"; plus besoin de la conserver en mémoire volatile.

 

 

Bonne journée,

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
Message 8 sur 8
4 579 Visites