le 12-12-2016 04:51 AM
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.
le 12-12-2016 07:00 AM
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
12-12-2016 07:34 AM - modifié 12-12-2016 07:37 AM
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
le 12-12-2016 07:54 AM
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.
le 12-12-2016 08:06 AM
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...
le 12-12-2016 09:09 AM
le 12-12-2016 09:41 AM
J'ai fait comme ca
le 12-12-2016 10:38 AM
le 12-12-2016 10:42 AM
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?
le 12-13-2016 04:00 AM
Tiens, essaye cela, et dit moi si cela correspond à ton besoin.
Cdt,
Michael