Buffer a l'aide d'un fichier texte (oscillo a memoire) ?

[Résolu]
Signaler
Messages postés
28
Date d'inscription
dimanche 1 janvier 2006
Statut
Membre
Dernière intervention
20 août 2015
-
Messages postés
28
Date d'inscription
dimanche 1 janvier 2006
Statut
Membre
Dernière intervention
20 août 2015
-
Bonjour a tous,
Je vais essayer d'expliquer ce que je veux faire le plus simplement possible !
Je dois realiser une sorte d'oscilloscope a memoire (en gros)
donc je recupere une ou plusieurs variables ou leurs valeurs varient de 0,00 a 10,00 dans le temps (carte analogique -> numerique)
Je veux stocker ces valeurs dans un fichier texte (ou autre ????) mais au bout d'un temps donné je commence a effacer les première données et je continue a enregistrer les nouvelles qui arrivent... tout ca pour eviter d'avoir un fichier de données énorme...
Pour vous quel est la meilleure solution ?
un fichier texte (je ne veux pas utiliser de base de données) ?
un tableau dynamique ?
A savoir que la frequence d'acquisition pourra etre au minimum 1ms et avec 5 ou 6 variables en meme temps

Avez vous des idées

Merci d'avance...

Steph.

4 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Salut
Ce que tu cherches à faire est une pile FIFO : First In, First Out
Voilà un mot clé pour tes recherches.
Le fichier texte n'est pas viable (*) puisque tu ne pourras pas supprimer les données de début de fichier, mais seulement en ajouter à la fin.
(*) pour une utilisation à cette vitesse de scrutation

Le tableau dynamique en mémoire est la solution la plus simple.
Il te suffit de créer 6 tableaux pour tes 6 variables, d'y déclarer un nombre d'éléments suffisant, par exemple, si tu dois mémoriser 30 secondes avec une données toutes les milliSecondes (*), tu le dimensionneras à 30.000.
(*) a supposer que VB6 sache scruter à cette vitesse
30.000 données de type Long ou Single par variable 30.000 x 4 120.000 octets par variable : C'est gros, mais acceptable en mémoire.
Si tu veux gagner en taille, diemnsionne en Integer = 2 octets et stocke tes valeurs de 0.00 à 10.00 avec un facteur 1000, exemple pour stocker 6.78, tu stockes 6780.

Pour gérer ce tableau rapidement, il n'est pas recommandé de jouer avec un décalage des valeurs, ça prendrait trop de temps (ou alors peut être avec l'API CopyMemory, mais sur les tableaux, on a souvent des surprises).
Il faut travailler avec un Index qui désignera la donnée du tableau la plus récente et faire évoluer cet index de 0 à 30.000.
Pour le traitement, tu partiras de Index vers la fin du tableau et, quand tu arriveras à la fin du tableau, les données suivantes iront de 0 à Index-1
Exemple avec un tableau de 6 valeurs; à chaque scrutation, la valeur à mémoriser s'incrémente :
   Index   Valeur
      1            1
      2            2
      3            3
      4            4
      5            5
      6            6

Quand la valeur suivante, 7, arrive, tu repasses l'index à 1, écrasant la plus vieille valeur.
   Index   Valeur
      1            7
      2            2
      3            3
      4            4
      5            5
      6            6

Tu vois le genre ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Oui, un tableau à 2 dimension, genre
   Dim monTableau(5, 30000) As Single
Bah ... pourquoi fichier texte ?
Oui, si tu veux mémoriser les données, avec la méthode Open + Append.
Si tu es sûr de ne pas toucher au type de variable (Integer, Single ... : la longueur des données est connue par avance), tu peux gérer le tableau en séquentiel, genre :
   Type typeLigne
      TimeStamp      As Long
      Donnée1         As Single
      Donnée2         As Single
      Donnée3         As Single
      Donnée4         As Single
      Donnée5         As Single
   End Type
   Dim maLigne As typeLigne
Dans TimeStamp, tu peux par exemple stocker un GetTickCount (API) qui représente le nombre de millisecondes écoulées depuis minuit.
Et dans ton fichier, tu enregistres et lis directement "maLigne" avec un truc du genre
   Open "C:\mon fichier" For Random Access Write As #1 Len=Len(maLigne)
et Get #1, NoEnregistrement, maLigne
ou Put

Tu n'as plus qu'à approfondir, les détails sont dans l'aide ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
28
Date d'inscription
dimanche 1 janvier 2006
Statut
Membre
Dernière intervention
20 août 2015

Ok merci beaucoup cette explication !
Je vois plus clair maintenant...

Je crois que je vais utiliser le tableau dynamique
un seul je pense ? car meme si j'ai plusieurs courbes elles seront toujours toutes synchro par rapport au temps !
Et pour finir, si j'ai bien compris, et si  je souhaite mémoriser ces données,  je transfère le tableau dans un fichier texte et comme cela je pourrais revoir la ou les courbes enregistrées...
 C'est bien ca ?

J'espère que ca va trop scintiller, car je dessine les courbes dans un PictureBox (lecture du tableau dynamique)

Merci encore...

Steph.
Messages postés
28
Date d'inscription
dimanche 1 janvier 2006
Statut
Membre
Dernière intervention
20 août 2015

Merci pour toutes ses infos, a moi maintenant de mettre en place...

Steph.