Récupération de trame RS 232 VB6

Résolu
JeanLouisBzh - 21 mai 2013 à 13:28
 JeanLouisBzh - 23 mai 2013 à 08:52
Bonjour à tous,

Je viens vous demander un petit coup de main (malgré plusieurs sites visités ainsi que l'aide de VB6) car je n'arrive pas à récupérer puis à afficher un trame sur une TextBox

voici mon code :
Private Sub BT_ENVOI_Click() 'Lors d'un click sur le bouton
Dim Trame As String
Trame = TXT_ENVOI.Text 'La trame envoyé est ce que j'ai remplis dans ma Textboxx
MSComm1.Output = Trame & (vbCrLf) 'A envoyer avec retour ligne et chariot
TXT_RECOI.Text = TXT_ENVOI.Text 'Affichage de la commande envoyée dans une
                                'autre textbox
End Sub

Private Sub Form_Load()
Dim buffer As String
MSComm1.PortOpen = True 'Port ouvert et la config du port est faite dans le Form1
End Sub


Private Sub MSComm1_OnComm()
buffer = MSComm1.Input 'Reception dans "buffer"
TXT_RS.Text = buffer 'Afficher "buffer"
End Sub



L'envoi des commandes fonctionne très bien.
Mais je voudrais maintenant récupérer la trame de retour.

Merci d'avance!

9 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
22 mai 2013 à 12:51
Bonjour,

La variable buffer sert à stocker temporairement les données pour être sûr de tout avoir, à toi de voir comment l'utiliser.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
3
JeanLouisBzh
22 mai 2013 à 13:39
Merci NHenry je veux tout simplement l'afficher en entier donc je pensais qu'en l'affichant simplement sur une TextBox ça fonctionnerais mais non ...
3
JeanLouisBzh
21 mai 2013 à 14:51
J'ai modifié le Rthreshold à 1 pour recevoir à partir du premier caractère mais maintenant je reçois ce signe : "|" dans ma textbox alors que je devrais recevoir : "1" ou "0" ou "11111111"

Merci !
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
21 mai 2013 à 18:47
Bonjour,

Tu parles en binaire ou en caractères ?
Car "11111111" en binaire, c'est &hFF en hexa alors que "11111111" en caractères, ça fait &h31 31 31 31 31 31 31 31 en ASCII.

Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0

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

Posez votre question
JeanLouisBzh
21 mai 2013 à 18:58
Bonjour,

Je cherche à récupérer des caractères (une vingtaine au maximum).

Merci !
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
21 mai 2013 à 23:08
Bonjour,

Il te faut faire un buffer intermédiaire, une variable (globale dans un premier temps) de type String (chaine de caractères) qui servira à stocker les différents caractères reçus.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
JeanLouisBzh
22 mai 2013 à 09:12
D'accord, puis-je utiliser ma variable "buffer" déclaré en tant que variable globale?
Est-ce que je dois la traiter dans le programme Form1 ?

Merci
0
Utilisateur anonyme
22 mai 2013 à 16:47
Bonjour,

l'affichant simplement sur une TextBox ça fonctionnerais mais non ...

Et tu mets une réponse acceptée, alors que ton problème n'est pas résolu ???

Tu mets un timer de quelques millisecondes afin de lui laisser le temps de l'envoi des données dans le buffer:

Private Sub Form_Load()
Timer1.Interval = 100
Timer1.Enabled = False
End Sub

Private Sub MSComm1_OnComm()
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Text1.Text = MSComm1.Input
End Sub



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
JeanLouisBzh
23 mai 2013 à 08:52
Merci beaucoup a tous

J'ai trouver comment faire, j'utilise la fonction InBufferCount qui me donne mon nombre de caractère puis je définit InputLen = InBufferCount - 2. Il m’enlève les 2 derniers caractères (Retour chariot puis Nouvelle ligne).
If MSComm1.InBufferCount <> 0 Then
MSComm1.InputLen = MSComm1.InBufferCount - 2
End If
TXT_RS.Text = MSComm1.Input
MSComm1.InBufferCount = 0


Tout simplement

Merci encore d'avoir pris le temps de me répondre!
0
Rejoignez-nous