gmelapet
Messages postés8Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention27 avril 2011
-
1 avril 2007 à 00:06
gmelapet
Messages postés8Date d'inscriptionlundi 27 octobre 2003StatutMembreDernière intervention27 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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)