Discussions au sujet de NI LabVIEW

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

Abandon de boucle cadencée

Résolu !
Accéder à la solution

J'effectue maintenant l'initialisation "traitement" à l'extérieur de ma boucle comme tu le sugères sauf que cela ne change rien.

Mon graph est vide.

0 Compliments
Message 11 sur 32
1 277 Visites

Je suis désolé, j'ai pas encore le temps de voir correctement ton code.
Juste un autre point, sans rapport avec ton souci actuel, je te conseille de vider le buffer de lecture de temps en temps.


Dans ton cas, tu te contentes de lire les 10 dernières valeurs, sans te soucier de la mémoire qui va se remplir inexorablement.
Une fois que tu as récupéré ces valeurs, pourquoi ne pas vider ta pile de data, pour travailler à mémoire quasi-constante.


Bon courage.

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 12 sur 32
1 264 Visites

Oui je me suis posé la question de savoir s'il fallait vider le buffer de temps en temps mais je pensais poser cette question plus tard... Puisque tu en parles, peux tu m'expliquer quel mode utiliser? car je ne comprends pas les termes.
16 0x10 Vide et détruit le contenu du buffer de réception (identique à 64).
32 0x20 Vide et détruit le contenu du buffer de transmission en écrivant toutes les données bufférisées sur le périphérique.
64 0x40 Vide et détruit le contenu du buffer de réception (n'effectue pas d'E/S sur le périphérique).
128 0x80 Vide et détruit le contenu du buffer de transmission (n'effectue pas d'E/S sur le périphérique).

 

Le buffer de réception correspond au buffer que je vois dans la face avant? De quel péripherique ils parlent?

Merci

0 Compliments
Message 13 sur 32
1 258 Visites

Alors, attention là, on mélange deux nuances.

 

Ta commande "flush buffer" permet de vider ta "conduite" VISA, c'est à dire toutes les commandes en transit dans ton cable au niveau driver (Réception : ce qui vient de ton produit / Transmission : ce qui va vers ton produit).


A savoir que du moment, que tu réalises une fonction "Read" les données sont retirées de ce buffer, donc, la seule raison qu'il fait que ce buffer se remplit, et que ta lecture (Read) serait plus lente que la vitesse de transmission de ton produit.


Par contre, dans mon cas, je parle du registre à décalage de ta boucle while. On peut aussi appeler cela un buffer, puisque part définition, il s'agit d'une mémoire tampon/volatile qui disparait à l'arrêt de ton programme. Et c'est là que se trouve le danger dans ton cas, une fois les données de ton registre à décalage traité, il te faut les supprimer de la mémoire tampon, sous peine d'avoir une erreur et un arrêt de ton programme au bout d'un certain temps de travail.

“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 14 sur 32
1 251 Visites

Ok merci pour la nuance. Il me faut donc vider le "buffer" de ma boucle while.

J'ai essayé d'écrire une chaine vide lorsque le traitement des 10 dernières lignes a été effectué mais il ne se vide pas...

0 Compliments
Message 15 sur 32
1 249 Visites
Il faut que ton fil de texte passe dans ta structure condition.
Et quand tu fais le traitement, tu repars sur une chaîne vide.
“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 16 sur 32
1 240 Visites
0 Compliments
Message 17 sur 32
1 239 Visites
Pour le coup c'est trop extrème là 😄
En l'état, tu pars du principe qu'à chaque moment où tu génères une lecture, tu as reçus 10 mesures ou plus.
Est ce vraiment le cas ?

De plus, l'inconvénient d'une méthode aussi arbitraire, fait que tu peux perdre des bouts de trame.
Exemple: la moitié de ta trame arrive à ta première itération, tu prends tes 10 mesures, et tu supprimes ton buffer. L'itération d'après tu vas avoir la moitié restante de la trame précédente, et faute d'une trame complète, ca va générer des erreurs dans ta soft.
“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 18 sur 32
1 230 Visites

L'acquisition est très rapide. Le temps entre chaque ligne du buffer correspond à 20 ms.

Je pars donc du principe que j'ai au minimum 10 lignes (sauf au début de mon acquisition ou le buffer est presque vide et j'obtiens des NAN dans mon calcul mais c'est pas très grave.)

Je souhaiterais efectivement ne pas perdre des bouts de trames...

Comment faire cela?

 

0 Compliments
Message 19 sur 32
1 229 Visites

Tiens, essaye cela, et dit moi si cela correspond à ton  besoin.


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 20 sur 32
1 216 Visites