gefil63
Messages postés9Date d'inscriptionmardi 3 octobre 2006StatutMembreDernière intervention 1 novembre 2006
-
3 oct. 2006 à 22:06
JMJ000
Messages postés5Date d'inscriptiondimanche 17 juillet 2005StatutMembreDernière intervention 7 octobre 2006
-
7 oct. 2006 à 08:36
Bonjour à tous
je travaille en VB6 mon pB est le suivant:
Je recupere un flux sur le port Com1 de mon PC grace aux qque lignes suivantes:
Private Sub Form_Load()
Form1.Caption = "App2"
With MSComm1
.CommPort = 1 :
.Handshaking = 0
.RThreshold = 1
.RTSEnable = True
.Settings = "19200,n,8,2"
.SThreshold = 1
.PortOpen = True
End With
Text1.Text = "text"
End Sub
Private Sub MSComm1_OnComm()
Dim tampon As String
Select Case MSComm1.CommEvent
Case comEvReceive
tampon = MSComm1.Input
Call Traitement(tampon) 'traitement données
End Select
End Sub
Sub Traitement(tampon As string)
'cette procédure sert à traiter l’information reçue dans le tampon
Text1.SelStart = Len(Text1.Text)
Text1.SelText = tampon 'ici, on affiche le résultat dans un champ de texte(textbox)
'Voila ce qui s'affiche dans la texbox : "CODICE LETTO ->113141246111118<-" parfais quoi
Print tampon
"""'CODICE
LETTO -
>1131412
46111118
<-""""
" Voila ce qui s'affiche avec le" Print tampon" ou dans un FICHIER avec Print #1
End Sub
EXPLICATIONS
'Voila ce qui s'affiche dans la texbox : "CODICE LETTO ->113141246111118<-" Parfait Quoi!
" Voila ce qui s'affiche avec le" Print tampon" ou dans un fichier avec Print #1
'CODICE
LETTO -
>1131412
46111118
<-
ce qui m'interresse c'est la valeur numerique UNIQUEMENT
Ca me prend la Tête j'ai tout essayé :
il y a seulement un Chr$(13), "Saut Ligne" et un Chr$(10), "Retour Ligne au debut et a la fin de la trame .... Donc je pige pas pourquoi ça fait cela..... des sauts lignes qui existe pas vraiment mais qui m'empechent de traiter la trame
le travail sur la trame devient impossible ... rien ne fonctionne avec un tableau(i) pour recup chaque ligne(par exemple) puis concatener les 2 valeures numeriques ne fonctionnne pas car les 5 lignes de 8 caracteres sont vues comme 1 seule ligne....
idem pour les commande Instr, trim, split , mid , etc.....
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 3 oct. 2006 à 22:28
le problème vient tout simplement de ta reception.
LA fonction Print rajoute un cr et lf à chaque ligne imprimée (à chaque appel).
Le problème est que tu traite la reception dès que tu as l'évènement qu'uncaractère est reçu, et tu traite cequi a été reçu.
Mais l'évènement est généré dès le premier caractère reçu (et avec les temps d'exécutions d'autres caractères sont reçus avant que tu commence le traitement), mais ta trame complète n'a pas été reçue. Ce qui fait que tu traite des bouts de trames.
Quelques solutions :
Si la trame que tu reçois a une longueur fixe, il faut indiquer au controle mscom de ne déclencher l'évènement que lorsque le nombre voulu de caractère à été reçu, lire la totalité et traiter tes données. Cela necessite au préalable de synchroniser la trame (1er caractère reçu = 1er caractère de la trame attendue)
Autre solution, stocker tous les caractères reçus (comme tu fais avec le textbox), recherche dans ce stock le dernier caractère de la trame, lorsque trouver, traiter les premiers caractères jusqu'à celui là et traiter. Après traitement, retirer la trame taritée du stock, et continuer le stock des trame suivantes.
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
JMJ000
Messages postés5Date d'inscriptiondimanche 17 juillet 2005StatutMembreDernière intervention 7 octobre 2006 3 oct. 2006 à 22:52
Tu peux aussi jeter un coup d'oeil à mon appli de com série entre un modem GSM et un PC, voir à http://mapage.noos.fr/SMScomPC/. C'est un programe que j'avais développé pour transformer le PC en mobile avec un archivage des SMS arrivés et envoyés dans une base access.
Le code est un peu brouillon mais les idées y sont.
gefil63
Messages postés9Date d'inscriptionmardi 3 octobre 2006StatutMembreDernière intervention 1 novembre 2006 4 oct. 2006 à 14:17
Rebonjour,
Merci Casy ! en effet tu as avais bien raison....
la fonction de VB6 qui srcute en permence le port com (MSComm1_OnComm())et qui evite de faire une boucle sur lui n'avait pas le temps de remplir son buffer ...
j'ai donc rajouté sur ton conseil, une boucle de remplissage (si on peut dire....) juste apres l'evenement données reçues....
Case comEvReceive
tampon = MSComm1.Input
Call Traitement(tampon)
qui devient :
Case comEvReceive
Do
DoEvents
tampon = tampon & MSComm1.Input
Loop Until InStr(tampon, "<")
Call Traitement(tampon)
CELA n'a pas suffit il à fallu que j'augmente le nb de caracteres attendus
.RThreshold = 32 (dans une doc ce parametre coresponds au nbre de fichiers attendus!)
With MSComm1
.CommPort = 1 :
.Handshaking = 0
.RThreshold = 32
.RTSEnable = True
.Settings = "19200,n,8,2"
.SThreshold = 1
.PortOpen = True
End With
Text1.Text = "text"
End Sub
Voila
Merci encore !
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 4 oct. 2006 à 14:50
".RThreshold = 32 (dans une doc ce parametre coresponds au nbre de fichiers attendus!)" ??????
de Threshold = Seuil et R= Receive soit Receive Threshold (Seuil de reception). Ou si tu préfères en bon français "Nbre de caractères à recevoir avant de déclencher l'évènement".
La même chose pour SThreshold (Seuil d'emission) ou Nbre minimum de caractères dans le buffer avant d'envoyer la sauce.
Pour le reste c'est ok (bien que perso, j'aime moyennement la boucle dans le code de l'évènement).
C'était l'idée que je donnais.
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #