cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 2 déc. 2005 à 21:12
Si tu met ton point d'arret, sur la ligne 'call HandleInput(...)', et
que tu n'ais pas la même chose dans InBuff et dans .Input, cela ne me
dérange pas et c'est même plutot bon signe. Cela veut simplement dire
que tu as récupéré (dans InBuff) les données recues sur le port série
(dans .Input) au moment de ...... la récupération justement.
Il faut savoir que à partir du moment ou tu récupère les données de
.Input, elles sont écrite dans ta variable ET EFFACER de .Input, donc,
sur un point d'arret, tu ne pourras jamais avoir la même chose des 2
cotés, normalement MSComm1.Input devrait etre vide.
Mais alors pourquoi .Input n'est pas vide ?
Tout simplement parce que la reception n'était pas fini au moment ou tu
as récupéré tes données. L'évènement comEvReceive est déclenché dès
reception du 1er caractère, mais les temps de traitement font que entre
le déclenchement de l'évènement et le moment ou tu lis les données, tu
as eu le temps de recevoir 2-3 caractères supplémentaires mais pas tout
ce que tu attendais. Dans Inbuff tu n'as qu'une partie de ta chaine, le
reste t'attend encore dans le .Input.
A toi de faire une boucle pour tout lire, ou d'attendre d'avoir tout
reçu avant de venir lire en une fois, c'est à toi de voir en fonction
de tes besoins
<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,
nous serions assez bête pour ne pas le comprendre malgré tout.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 3 déc. 2005 à 11:16
pour te donner un exemple c'est un peu délicat car je ne connais pas ton appli.
tu as plusieurs possibilités, en voici deux par exemple
soit tu connais à l'avance le nombre de caractère que tu doit recevoir,
dans ce cas tu attends que tous les caractères soient arrivés avant de
les lires:
do
doevents
loop while MSComm1.InputBufferCount< nbCharAttendu
InBuff=MSComm1.Input
soit la chaine que tu recois et terminer par un caractère spécifique que tu ne peut pas retrouver au milieu de la chaine :
MSComm1.InputLen=1
do
char_lu=MSComm1.Input
InBuff=Inbuff & char_lu
doevents
loop while char_lu <> caractere_de_fin
ce sont 2 pistes parmis des quantités d'autre, c'est à toi de voir en
fonction de ton appli et des données que tu dois recevoir. Fais une
recherche sur le sources de ce site, il doit surrement y avoir quantité
de codes dans lequels tu trouvera des idées.
PS : Le code que je te donne ci-dessus doit etre sérieusement amélioré,
avec des tests des protections, etc... car utilisé tel quel tu peux
très vite te retrouver avec des boucles infinies, par exemple si pour
une raison ou une autre tu ne recois jamais le caractère de fin, tu
resteras indéfiniment dans la boucle du second exemple.
<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,
nous serions assez bête pour ne pas le comprendre malgré tout.
Vous n’avez pas trouvé la réponse que vous recherchez ?
killua84
Messages postés1Date d'inscriptionvendredi 28 juillet 2006StatutMembreDernière intervention26 septembre 2006 26 sept. 2006 à 09:08
Now I want use input sign seng from modem to COM port by 8 bit. Then save it in array. End then delay it in the chart about digram type sign from COM send to.
Help me!
Thank ve ry much!