Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/07/2006, 18h00   #1
Nouveau Membre du Club
 
Inscription : juin 2005
Messages : 106
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : juin 2005
Messages : 106
Points : 36
Points : 36
Par défaut [Débutant] Port Com MSComm1.Output et Input

Bonjour

J'essaie de créer un programme pour une liaison série entre un périphérique (capteur) et le PC via le port com (rs232). J'ai écrit quelques lignes de code en m'inspirant des différents tutoriaux trouvés sur le net.

Code :
1
2
3
4
5
6
7
Private Sub CommandButton1_Click()
MSComm1.PortOpen = True
MSComm1.Output = "abc" & Chr$(13)
MSComm1.InputLen = 0
TextBox1.Text = MSComm1.Input
MSComm1.PortOpen = False
End Sub
Quand j'appuie sur le bouton voilà ce qui s'écrit dans la zone de texte:‪6*‬*‫‪6
(un carré, un 6, un carré, un 6)

Comment décoder ça (ça veut dire quelque chose ?)

J'ai essayé d'écrire ces lignes :
Code :
1
2
a=MSComm1.Input
ChrB(a)
et de placer un espion sur la variable a pour voir ce que ça donne mais il semble qu'il y a une incompatibilité de type.

L'objectif de mon programme est d'envoyer une donner (avec Output via un buffer) puis de récuper une donnée du port (avec Input et de lire le buffer).
Ender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 18h15   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
essai plutot

Code :
1
2
a=MSComm1.Input
debug.print asc(a)
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 10h15   #3
Nouveau Membre du Club
 
Inscription : juin 2005
Messages : 106
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : juin 2005
Messages : 106
Points : 36
Points : 36
a prend la valeur décimale 21 (ça correspond au code ASCII NAK)

Dites moi si je me trompe mais je voudrais savoir :
lorsque j'utilise MSComm1.Output="abcde" est-ce que la chaine abcde est envoyée sur le port ?
Et si oui comment récupérer cette valeur avec la fonction MSComm1.Input ?
(faut-il utiliser l'évènement OnComm ?)

Merci
Ender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 10h58   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
as-tu lu :

Programmer le port série avec le contrôle MsComm par Alexandre Lokchine
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 11h15   #5
Nouveau Membre du Club
 
Inscription : juin 2005
Messages : 106
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : juin 2005
Messages : 106
Points : 36
Points : 36
Oui plusieurs fois

Code :
1
2
3
4
Do
  DoEvents 'indispensable sinon ça marche pas!!!
  Tampon$ = Tampon$ & MSComm1.Input
Loop Until InStr(Tampon$, "OK" & vbCrLf)
je sens que ces lignes de code sont importantes mais dans mon code ça ne fonctionne pas.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Dim tampon As String
 
Private Sub CommandButton1_Click()
With MSComm1
   .CommPort = 1
   .Handshaking = 2                
   .RThreshold = 1                
   .RTSEnable = True               
   .Settings = "9600,n,8,1"
   .SThreshold = 0               
End With
 
MSComm1.InputLen = 0
MSComm1.PortOpen = True
MSComm1.Output = "111111111"            'OutBufferCount vaut bien 9
MSComm1.PortOpen = False
 
End Sub
 
Private Sub MSComm1_OnComm()
    Case comEvReceive       ' Si on reçoit des données
        tampon = tampon + MSComm1.Input
        Call Traitement(tampon$) ' Routine de traitement
End Sub
 
Sub Traitement(tampon As String)
TextBox1.Text = TextBox1.Text & tampon
End Sub
Le probleme c'est que le programme ne sort jamais de la boucle (peut-être parce qu'il ne reçoit pas de données). Donc, à quoi doit ressembler le code qui contiendrait MSComm1.Input ?

Merci
Ender est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 11h48   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
attention tu ne peu pas mélanger les 2 méthodes données .. dans le lien ... soit tu utilise une boucle, soit tu fonctionne par événements...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2006, 11h55   #7
Nouveau Membre du Club
 
Inscription : juin 2005
Messages : 106
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : juin 2005
Messages : 106
Points : 36
Points : 36
OK. Merci pour cette précision.
Ender est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h22.


 
 
 
 
Partenaires

Hébergement Web