rapido6
Messages postés28Date d'inscriptiondimanche 1 janvier 2006StatutMembreDernière intervention20 août 2015
-
13 juil. 2009 à 10:22
rapido6
Messages postés28Date d'inscriptiondimanche 1 janvier 2006StatutMembreDernière intervention20 août 2015
-
13 juil. 2009 à 13:41
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.
A voir également:
Buffer a l'aide d'un fichier texte (oscillo a memoire) ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 juil. 2009 à 11:23
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)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 juil. 2009 à 12:33
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)
rapido6
Messages postés28Date d'inscriptiondimanche 1 janvier 2006StatutMembreDernière intervention20 août 2015 13 juil. 2009 à 11:44
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)