babyboydu92
Messages postés9Date d'inscriptionmardi 18 octobre 2005StatutMembreDernière intervention12 août 2007
-
10 janv. 2006 à 18:53
KHALMO
Messages postés4Date d'inscriptionvendredi 27 février 2009StatutMembreDernière intervention27 mai 2009
-
27 mai 2009 à 02:26
Bonjour,
On sait tous que pour faire un retour chariot avec le logiciel "hyper teminal" via une liaison RS232, il suffit d'envoyer le chiffre "13".
Par contre sur VB6, lorsque j'envoie le chiffre "13" après mon message(dans une textbox) j'obtiens le résultat suivant :
"mon message"| Le retour chariot sur VB6 ne fonctionne donc pas comme sur hyper terminal ??
Pouvez vous m'aidez à atteindre le fonctionnement décrit ci-dessous :
Le message N°1 envoyé sur le port série s'affiche dans une texbox monoligne.
(--> jusque là tous va bien )
Ensuite Le message N°2 vient effacer le message N°1 et s'affiche donc dans la texbox monoligne à la place du message N°1.
J'espère avoir été assez clair...
Merci pour vos réponses.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 10 janv. 2006 à 19:56
Salut
Ce n'est pas la connexion RS qui pose problème, mais le composant dans lequel tu l'affiches.
Si c'est un TextBox, assure toi qu'il a bien la propriété Multiline à True.Ensuite, dans une TextBox, le retour à la ligne est un double caractère : 13 (Cr Carriage Return) puis 10 (Lf LineFeed) qui est une constante de vb nommée vbCrLf.
Mais si le TextBox est "monoligne", ce caractère | s'affichera, c'est sûr (dans ce cas, pourquoi l'envoyer ?).
Si tu n'en veut pas, supprime le avec
Text1.Text = Replace(laChaineReçue, vbCr, "")
ou
Text1.Text = Replace(laChaineReçue, vbCrLf, "")
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
babyboydu92
Messages postés9Date d'inscriptionmardi 18 octobre 2005StatutMembreDernière intervention12 août 2007 10 janv. 2006 à 20:32
Merci pour ta reponse,
J'ai mit une texbox monoligne volontairement car je souhaite que chaque nouveau message envoyer sur le port série soit afficher dans la texbox et efface le message précédent...
babyboydu92
Messages postés9Date d'inscriptionmardi 18 octobre 2005StatutMembreDernière intervention12 août 2007 10 janv. 2006 à 21:18
Ouai j'ai déjà essayer comme sa, mais dans ce cas, sa crée un défilement des messages dans la texbox. Autrement dit, les messages se suivent les uns les autres et défilent de droite à gauche dans la texbox...
Il y a peu être un paramètre de la textbox qui permet d'éviter celà ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 11 janv. 2006 à 10:05
Bonjour
je pense à un code comme :
if instr(ChaineReçue,vbcr)<>0 then
Effacer TextBox
Mettre le nouveau message
Tu peux voir pour un split si plusieurs messages peuvent arrivés en mme tmps.
Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 11 janv. 2006 à 17:23
Re
Non, ça ne vient pas du TextBox mais de la manière dont tu acquières les données de ton MSComm.
En fait, comme pour les Winsock, il est fort possible que tu récupères plusieurs messages à la suite car tu as mis trop de temps à les récupérer.
Dans ce cas, il te suffit de découper ce que tu reçois (en vérifiant s'il y a un Chr(13) au milieu du buffer) et de ne garder que le dernier pour l'afficher.
Comme le dit NHenry, tu peux utiliser Split (voir aide) pour dissocier les messages.
Si tu veux qu'on t'aide plus efficacement, il nous faut à tout prix ton code.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
babyboydu92
Messages postés9Date d'inscriptionmardi 18 octobre 2005StatutMembreDernière intervention12 août 2007 11 janv. 2006 à 18:49
Effectivement sa serai plus clair avec les codes !
je pense que le problème vient de ma façon de traiter les informations reçu sur le port série...( traitement tampon)
Ci- dessous les codes que me permettent de récupérer les trames provenant d'un microcontrôleur PIC, sur le port RS232 du PC et de l'afficher dans une texbox :
'configuration du port série
With MSComm1
.CommPort = 5
.Handshaking = 0
.RThreshold = 1
.RTSEnable = True
.Settings = "9600,n,8,1"
.SThreshold = 1
.PortOpen =
True
End With
'cette procédure sert à traiter linformation reçue dans le tampon
Text1.SelStart = Len(Text1.Text)
Text1.SelText = Chaine 'on affiche ici le résultat dans un champ de texte
Donc avec ce code, je reçois bien les "trames" envoyé par le PIC sur le port série.
Le seule problème est que lorsque le PIC envoi plusieurs trames d'affilé sur le port série RS232, ces dernières s'affiche les unes à la suite des autres dans la texbox . ( trame1trame2,trame3,trameN...)
Or il faut que chaque trame reçut s'affiche dans la texbox, en effaçent la trame précédente...
Comme je l'ai expliqué plus haut, avec le logiciel Hyper Terminale, lorsque le PIC envoi une trame + un retour chariot (13), sa fonctionne !
Par contre avec VB6, sa ne fonctionne pas
A noter que avec VB6, lorsque le PIC envoie une trame + retour chariot (13) + retour à la ligne(10), sa fonctionne mais dans ce cas, chaque trame reçu sur le port série s'affiche les unes en dessous des autres. ( donc s'est pas bon )
NHenry
Messages postés15112Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention13 avril 2024159 12 janv. 2006 à 08:01
Bonjour
Essaye de faire un Split et récupère le dernier élément de du tableau.
Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 janv. 2006 à 20:51
Oui, avec hyperterminal ça fonctionne parce qu'il a une TextBox multiligne pour l'affichage, mais pas toi !
Comme tu ne veux afficher que la dernière trame reçue alors que tu en acquieres plusieurs d'un coup, il faut filtrer !
NHenry insiste avec le Split et il a raison !
Comme il faut tout te macher :
Dim Tablo() As String
Tablo = Split(Chaine, vbCr)
Text1.Text = Tablo(UBound(Tablo))
... et oublie ton SelText ...
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)