Utilisation d'une FIFO pour stocker des données recu sur un port série et les tr

Résolu
cs_norber59480 Messages postés 37 Date d'inscription mercredi 11 janvier 2006 Statut Membre Dernière intervention 19 juin 2008 - 28 avril 2008 à 17:17
cs_norber59480 Messages postés 37 Date d'inscription mercredi 11 janvier 2006 Statut Membre Dernière intervention 19 juin 2008 - 2 mai 2008 à 16:21
Bonjour à tous.

   Je vous expose mon probléme : 
Je dois récupérer des trames sur le port série et effectuer differentes actions en fonction de la données récuperer.
Les données arrive sur le port série par paquets de trames. Il sera donc impossible de traiter les données en direct.
On m'a suggerer d'utiliser une FIFO.
Je connais bien le principe mais le probleme, c'est que je ne sait pas du tout comment réaliser cette FIFO. Les infos trouvées sur ce site ne m'ont pas aidé. Je ne comprend pas bien la structure des programmes qui sont réalisés.
Si quelqu'un pouvait venir a mon secour ca serait sympa...

5 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
29 avril 2008 à 20:39
Ben c'est justement le principe des piles, listes, et autres buffers dans les solutoins que l'on t'a donné.

Tu as du coté une tache qui remplie le buffer, déclenchée par l'évènement de reception sur le port.

Tu as de l'autre coté, le reste de ton programme qui vient de temps en temps voir si des données sont arrvées, les lit et les traites.

C'est du traitement parallèle si on regarde de loin, car dans la réalité, l'évènement reception va interrompre ce que tu es en train de faire pour venir remplir le buffer, puis te rendre la main pour que tu continue ton boulot.

Macroscopiquement, c'est du traitement parallèle car les 2 taches sont totalement indépendantes

L'idéal serait évidemment de faire du multithreading en mettant la reception dans un thread à part, mais c'est tout simplement impossible en VB6.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
3
cs_norber59480 Messages postés 37 Date d'inscription mercredi 11 janvier 2006 Statut Membre Dernière intervention 19 juin 2008
2 mai 2008 à 16:21
MErci beaucoup pour votre aide!!!!
J'ai résolu mon probleme meme si je pense qu'au final c'était pas utile d'utilisé une FIFO car, l'analyse est assez rapide pour traiter les donner directement (le débit est seulement de 9600Kbit/s). Cependant cela me permet d'avoir une sécurité quand à la reception des donner et donc dans l'analyse ce qui doit me permettre de rater aucune trame.
3
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
28 avril 2008 à 18:43
Google est ton ami !!
ici par ecxemple : http://faq.vb.free.fr/index.php?question=159
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
28 avril 2008 à 19:45
Solution du buffer à double index très utilisé en communication série. (le lien donné au post précédent en est une implémentation plus générale)

Le principe :
- un tableau de caractère suffisament grand
- un index de lecture servant de pointeur sur le tableau
- un index d'écriture servant de pointeur sur le tableau

Le fonctionnement :
- sur l'évènement reception du port série et à l'aide du pointeur écriture, tu remplie le tableau caractère par caractère. Si l'index arrive à la fin du tableau, il continue au début du tableau, et ainsi en boucle.

Indépendemment, et avec l'index de lecture, tu lis les caractères qui restent à lire dans le tableau, un à un et éventuellement tu reconstruit une chaine si tu as besoin. Si l'index arrive à la fin du tableau, il continue au début

Si les 2 index sont différents, c'est que des caractères sont à lire. Eventuellement tu peux faire une fonction pour cela. Pense au fait que un des 2 index a pu repartir au début du tableau.

Cela fonctionne très bien, est relativement, et travaille surtout de mainière asynchrone comme le port. Les fonctions de lecture et d'écriture sont totalement indépendante l'une de l'autre.

Pour ce qui est de la taille du tableau, trop n'est pas necessaire, trop peu est risqué. Si tu reçois tes données de façon régulière sous forme de trame, la taille du tableau ne devrait pas etre inférieure à 10 trames complètes.

Perso je ne descends jamais en dessous de 8192 caractères. La pluspart du temps ça me laisse bien plus de marge que necessaire.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_norber59480 Messages postés 37 Date d'inscription mercredi 11 janvier 2006 Statut Membre Dernière intervention 19 juin 2008
29 avril 2008 à 09:30
Merci pour vos réponses....
Cependant google doit pas ete mon amis parce que les site que j'ai trouver à ce sujet et particulierement le tien, ne repondait pas a mes questions....
J'ai une autre questions qui est lié. Est ce que je peux lire le port serie en continue, et traiter les trames en parralléle? Ou bien je doit créer une interruption de la lecture pour traiter les trames?!
0
Rejoignez-nous