MSComm1.Input et InBuff ??????????????

Résolu
Pierre1271 Messages postés 3 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 3 décembre 2005 - 1 déc. 2005 à 17:22
killua84 Messages postés 1 Date d'inscription vendredi 28 juillet 2006 Statut Membre Dernière intervention 26 septembre 2006 - 26 sept. 2006 à 09:08
Bonjour, je communique avec un microcontrôleur PIC16F874 sur
le port série.

La ou ça marche pas, c'est avec MSComm1.Input et InBuff.

Je m'explique, quand je place un point d'arrêt sur la ligne Call
HandleInput(InBuff) et j'exécute le programme, la donné

dans InBuff et MSComm1.Input sont différente.



Exemple: en laissant le curseur de la sourie sur MSComm1.Input ça donne
"0,0,0,255,255,48,0" et InBuff ça donne "255,48"



Pourquoi MSComm1.Input ne se transfert pas complètement dans InBuff ??????




Private Sub Form_Load()

With MSComm1

.CommPort = 1

.Handshaking = 2 - comRTS

.RThreshold = 1

.RTSEnable = True

.Settings = "38400,n,8,1"

.SThreshold = 1

.PortOpen = True

.InputLen = 0

End With

End Sub



Private Sub MSComm1_OnComm()

Select Case MSComm1.CommEvent

Case comEvReceive

Dim InBuff As String

InBuff = MSComm1.Input

Call HandleInput(InBuff)

End Select

End Sub

Sub HandleInput(InBuff As String)

etc.....
A voir également:

5 réponses

Pierre1271 Messages postés 3 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 3 décembre 2005
3 déc. 2005 à 13:20
Ok , la première exemple est la bonne.


Indispensable votre site pour tous programmeurs de VB.


Merci Pierre1271 St-Félicien,Québec........
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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.
0
Pierre1271 Messages postés 3 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 3 décembre 2005
3 déc. 2005 à 00:36
Merci pour l'explication de MSComm1.Input et InBuff, c'est clair.

Pour la boucle avez-vous un exemple que je pourrais utilisé ?




Merci encore.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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.
0

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

Posez votre question
killua84 Messages postés 1 Date d'inscription vendredi 28 juillet 2006 Statut Membre Dernière intervention 26 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!
   
0
Rejoignez-nous