Lire 2 ports serie simultanement

gmelapet Messages postés 8 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 27 avril 2011 - 1 avril 2007 à 00:06
gmelapet Messages postés 8 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 27 avril 2011 - 1 avril 2007 à 09:52
Bonjour

Je souhaite lire 2 messages arrivant toutes les 2 secondes de facon asynchrone et sur 2 ports series respectivement.
J'ai realise le gros du programme de reception mais j'ai des soucis pour lire mes messages.
J'ai utilise la commande Rtshold mais j en suis pas satisfait ou alors je me debrouille mal.

Quelqu un peut-il m aider svp? Sachant que je ne veux pas etre bloque dans une boucle pendant l'attente de mes messages.

Merci bcp d'avance

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 avril 2007 à 01:33
Salut
"Attendre sur une boucle", pas la peine.
Les réceptions du composant MSComm32 se déclenchent seules, dès qu'il y a quelque chose dans le buffer (évènements OnComm voir l'aide).
A mon avis, tu as largement le temps de traiter tes signaux entre deux émissions de tes ports COM

Donc, pour ton projet, tu n'as qu'à installer deux composants MSComm sur ta forme, les configurer chacun sur un port et gérer le traitement des données au fur et à mesure qu'elles arrivent.

Si tu veux interrompre le flux de données, deux solutions :
- Par cablage : En cablant les connexions RTS, CTS ... entre les deux machines, tu peux interrompre le flux avec la méthode RtsHold
   Tu trouveras les cablages adéquat sur des sites spécialisés)
- Par soft : En utilisant le protocole de transmission Xon/Xoff, il te suffit d'envoyer un Xoff sur la ligne pour que l'émetteur s'arrête et attende le Xon pour redémarrer.
Les codes à utiliser pour les Xon/Xoff :
Plusieurs variantes existent : Essaye ces couples de valeurs pour voir laquelle réagit correctement sur tes émetteurs :
   Chr$(11) et Chr$(13) = mode ASCII (le plus courant)
   Chr$(101) et Chr$(103) = mode ScanCode
   Chr$(17) et Chr$(19) = Microsoft

En fait, ne demande l'arrêt de l'envoi des données (Xoff) que lorsque ton buffer de réception devient trop rempli, sinon, laisse le buffer jouer son rôle.
En effet, le buffer a besoin de la carte mère pour faire transiter les données du port COM à la mémoire, donc, si ta machine a une surcharge temporaire, le buffer se remplira sans provoquer d'évènement OnComm.
Ce n'est pas grave, tu recevras les messages les uns derrière les autres en une seule fois lors du prochainb OnComm, il te suffira de les isoler les uns des autres et de les traiter dans l'ordre pour rattraper le retard.
Si la situation (de surcharge) dure trop longtemps, le buffer risque d'arriver à saturation. Là, il faudra envoyer un Xoff pour éviter de perdre des données, à charge de l'émetteur de les bufferiser de son côté ou d'attendre.
Pour détecter la taille du buffer, installe un Timer qui toutne toutes les secondes, et va interroger le MSComm.InBufferCount
Voir aussi la lecture ou l'écriture de la taille de ce buffer avec MSComm.InBufferSize

Petite blagounette avant de partir :
Pourquoi la RS232 porte ce n°, 232 ?
Parcequ'il y a 232 façons de cabler, il n'y en a qu'une qui marche

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

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
gmelapet Messages postés 8 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 27 avril 2011
1 avril 2007 à 09:52
merci beaucoup pour cette reponse claire et detaillee.


Et en plus tres rapide !
0
Rejoignez-nous