From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discussions au sujet de NI LabVIEW

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

Est ce que je vais saturer la mémoire du PC dans cet example de VI ?

Résolu !
Accéder à la solution

Bonjour a tous et merci d'avance pour votre aide.

Mon problème parait bête mais je n'en suis pas sure donc je pose la question et si par la même occasion je peux comprendre le fonctionnement !!

J'ai un Vi qui va acquerir des data de 2 sources différente et les afficher dans un même graph déroulant et je dois également faire un affichage d'histogramme de chaque source.

Je me suis fait un petit VI qui simule l'acquisition de ces données mais j'ai un doute sur la saturation possible de la mémoire au bout de "x" valeurs acquise??

En faite je ne sais pas si dans la manière dont j'ai écrit le "vi" la mémoire se libère ou pas?? 

 

L'autre chose que j'aimerais faire c'est pouvoir mettre un compteur et également avoir la moyenne glissante sur "X" dernière mesure

Vous trouverez ci-joint en LV2013 le Vi en question

 

Merci à tous pour votre aide

0 Compliments
Message 1 sur 9
3 020 Visites

Hello,

 

Réponses courtes :

Non, la mémoire n'augmentera pas après 1024 valeurs (la longueur d'historique actuelle de ton graphe), les données les plus anciennes seront effacées.

Pour les moyennes glissantes, tu as des VIs pour ca (Mean Pt by Pt), ou des exemples plus construits sur le site de NI, une recherche devrait te conduire vers une poignée de solutions

 

--Eric

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

0 Compliments
Message 2 sur 9
2 984 Visites

Bonjour Eric

Merci pour ta réponse, effectivement

j'ai trouvé le vi qui permet de faire des moyennes glissantes.

Donc si je comprend bien je n'ai pas à me faire de soucis, le programme peux acquerir des data non stop ?

En faite la ou j'ai un peu du mal à comprendre, c'est que j'accumule des valeurs dans un tableau avec le registre à décalage mais je ne sais pas quand est ce que la mémoire ce libère ??

 

En tous cas merci pour ton aide.

 

0 Compliments
Message 3 sur 9
2 974 Visites

Je vais contredire Eric, il y a en effet une possibilité de saturer la mémoire du PC dans cet example à cause des tableaux qui sont utilisé pour calculer la moyenne et l'histogramme et des fonctions Isert Into Array qui ne cessent d'ajouter des éléments aux tableaux. La boucle interne s'arrête lorsque le compteur mod 20 = 0 mais cela n'arrête pas la boucle externe car on n'a pas appuyé sur stop. On continu donc à ajouter des valeurs aux tableaux et à accroitre leur taille lors de chaque nouvelle itération de la boucle externe.

 

Bien sur il faudra appuyer bien des fois sur le bouton Entrée pour saturer la mémoire du PC mais la possibilité existe. Idéalement les tableaux devraient avoir un taille fixe (par example 1024 éléments) et seraient utilisé comme buffer circulaires.

 

Ben64

Message 4 sur 9
2 969 Visites

Bonjour Ben64,

Merci pour ta réponse, justement s'était sur ce point que j'avais un doute.

Comment je pourrais faire pour ne pas saturé cette mémoire?

Car à terme le programme devra acquerir en continu et j'aimerais avoir ce type d'indicateur dedans.

 

Merci pour les réponses

0 Compliments
Message 5 sur 9
2 966 Visites

Je suis complètement passé à côté des Insert, désolé 😞

Ca m'apprendra à répondre en ne regardant que la moitié du code -_-

 

Comme dit Ben, buffers circulaires !

 

Note: n'imbrique jamais 2 boucles while, ca signifie qu'il y a un problème dans ton design de code. Ici, ton while interne a tout d'une boucle for. Tu peux aussi jeter un oeil aux machines à états (dans les projets-template ou sur le site de NI) pour ton application finale.

 

--Eric

 

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

Message 6 sur 9
2 949 Visites

Bonjour Eric,

Merci pour ton retour. Et les conseil, je vais modifié la boucle while interne.

Mais j'avoue que j'ai un peu du mal à comprendre l'histoire du buffer circulaire.

Un petit example serait le bienvenue pour que je puisse comprendre et également apprendre comment ca marche.

 

Merci de ton aide

 

 

0 Compliments
Message 7 sur 9
2 918 Visites
Solution
Accepté par l'auteur du sujet Sentenza

@Eric, j'avoue ne pas l'avoir remarqué immédiatement, la fonction Insert ressemble beaucoup à Replace Subset.

 

@Sentenza, Un buffer circulaire n'est qu'un tableau de taille prédéterminée dont on remplace les éléments au lieu de toujours ajouter des éléments. Voici un exemple simplifié. J'ai utilisé 1024 car c'est la taille par défaut de l'historique des graphes déroulant.

buffer circulaire.png

Ben64

Message 8 sur 9
2 904 Visites
Solution
Accepté par l'auteur du sujet Sentenza

Bonjour Ben64,

Merci pour ton example.

Je comprend un peu mieux. je pense que cela apporte réponse à mon problème.

 

Merci encore à vous 2 pour les explications

0 Compliments
Message 9 sur 9
2 886 Visites