RS232 et Retour chariot VB6

babyboydu92 Messages postés 9 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 12 août 2007 - 10 janv. 2006 à 18:53
KHALMO Messages postés 4 Date d'inscription vendredi 27 février 2009 Statut Membre Dernière intervention 27 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.

12 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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és 9 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 12 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...

...j'y arrive toujours pas ;- /
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
10 janv. 2006 à 21:05
Donc il te suffit de supprimer de ta chaine les caractères de controles comme les Chr(13), avant de l'nvoyer dans ta TextBox.

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és 9 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 12 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 ?

Posez votre question
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
10 janv. 2006 à 23:36
Ecoute, met-nous ton code d'où tu en es actuellement, ce sera plus clair pour tout le monde!!!

Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
NHenry Messages postés 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 159
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és 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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és 9 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 12 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 :

-------------------------------------------------------------------------------------

Private Sub Form_Load()

'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

End Sub

-------------------------------------------------------------------------------------

Private Sub MSComm1_OnComm()

Dim tampon As String ' C'est dans la variable "tampon" que l'on pourra récupérer la trame reçue par le port série

Select Case MSComm1.CommEvent

Case comEvReceiv
'on a reçu des données
tampon = MSComm1.Input

Call Traitement(tampon)
'traitement données

End Select

End Sub

-------------------------------------------------------------------------------------

Sub Traitement(Chaine As String)


'cette procédure sert à traiter l’information reçue dans le tampon
Text1.SelStart = Len(Text1.Text)
Text1.SelText = Chaine 'on affiche ici le résultat dans un champ de texte

End Sub

-------------------------------------------------------------------------------------

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és 15143 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 17 juillet 2024 159
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és 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
babyboydu92 Messages postés 9 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 12 août 2007
13 janv. 2006 à 00:01
Cool ! j'ai trouver quelque chose d'interessant sur le site !
la reponse à ma question se trouve là dedans : http://www.vbfrance.com/code.aspx?id=25327

Je n'ai plus qu'as épluché le code...
Merci pour votre aide
A+++
KHALMO Messages postés 4 Date d'inscription vendredi 27 février 2009 Statut Membre Dernière intervention 27 mai 2009
27 mai 2009 à 02:26
meme probleme mon ami
comment ajouter un retour chariot a la chaine recue
svp quelqu'un peut m'aider....
Rejoignez-nous