Communication VB6.0 et port série

Résolu
Signaler
Messages postés
4
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
2 juin 2008
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
j'ai téléchargé le programme d'émission et de réception ci dessous et j'ai fait la communication par un cable croisés mais malheureusement la connection entre les deux pc n'est pas faite je ne sais pas pourquoi? le message affiché sur PC récepteur après que je clique sur send (PC émetteur) est le suivant: erreur de compilation
type d'argument ByRef incompatible!
est ceque quelqu'un pourait m'aider? je croix que c'est à cause des propriétes MSCOMM?peut être si oui est ce vous pouvez me donner les propriétes adéquates et merci.
voici le programme.
la première va envoyer des données, l'autre va les recevoir.
Code de l'appli App1
– Placez un CommControl sur le formulaire
– Placez une zone de texte et mettez la propriété MultiLine à True.
– Placez un bouton de commande
– Mettez le code suivant:
Private Sub Form_Load()
Form1.Caption = "App1"
With MSCOMM1 'configuration du port
.CommPort=1 'On utilise le port COM1:
.Handshaking = 2 'RTS
.RThreshold = 1
.RTSEnable = True 'mieux pour le port COM:
.Settings = "9600,n,8,1"
.SThreshold = 1
.PortOpen = True 'ouverture du port
End With

Command1.Caption = "&Send"
Text1.Text = "Ces données ont été envoyés via le port COM"
End Sub

Private Sub Command1_Click()
MSComm1.Output = Text1.Text
End Sub

Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False 'on ferme le port à la fermeture de l'appli
End Sub
Code de l'appli App1
– Placez un CommControl sur le formulaire
– Placez une zone de texte et mettez la propriété MultiLine à True.
– Placez un bouton de commande
– Mettez le code suivant:
Private Sub Form_Load()
Form1.Caption = "App1"
With MSCOMM1 'configuration du port
.CommPort=1 'On utilise le port COM1:
.Handshaking = 2 'RTS
.RThreshold = 1
.RTSEnable = True 'mieux pour le port COM:
.Settings = "9600,n,8,1"
.SThreshold = 1
.PortOpen = True 'ouverture du port
End With

Command1.Caption = "&Send"
Text1.Text = "Ces données ont été envoyés via le port COM"
End Sub

Private Sub Command1_Click()
MSComm1.Output = Text1.Text
End Sub

Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False 'on ferme le port à la fermeture de l'appli
End Sub
Code de l'appli App2
– Placez un CommControl sur le formulaire.
– Placez une zone de texte et mettez la propriété MultiLine à True.
Redimensionner-le pour qu'il soit assez grand pour afficher plusieurs lignes de texte.
– Mettez le code suivant:
Private Sub Form_Load()
Form1.Caption = "App2"
With MSComm1
.CommPort = 2 'on utilise le port COM2: car on utilise 1 PC avec 2 ports COM:
'si vous avez 2 PC, changez en .CommPort=1 !!!
.Handshaking = 2
.RThreshold = 1
.RTSEnable = True
.Settings = "9600,n,8,1"
.SThreshold = 1
.PortOpen = True
End With
Text1.Text = ""
End Sub

Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False 'on ferme le port quand l'appli quitte
End Sub

Private Sub MSComm1_OnComm()
Dim InBuff As String

Select Case MSComm1.CommEvent
' On effectue la gestion des erreurs (cf. le modèle ci-dessus)
' Ici, on gère en fait pas grand-chose, mais c'est pour illustrer la démarche

'liste des erreurs possibles
Case comEventBreak 'On a reçu un signal d’interruption (Break)
Case comEventCDTO ' Timeout de la porteuse
Case comEventCTSTO ' Timeout du signal CTS (Clear To Send)
Case comEventDSRTO ' Timeout du signal de réception
Case comEventFrame ' Erreur de trame
Case comEventOverrun ' Des données ont été perdues
Case comEventRxOver ' Tampon de réception saturé
Case comEventRxParity ' Erreur de parité
Case comEventTxFull ' Tampon d’envoi saturé
Case comEventDCB ' Erreur de réception DCB (jamais vu)

'liste des événements possibles qui sont, eux, normaux
Case comEvCD 'Changement dans la broche CD (porteuse)
Case comEvCTS 'Changement dans broche CTS
Case comEvDSR 'Changement dans broche DSR (réception)
Case comEvRing 'Changement dans broche RING (sonnerie)

'Chouette! on a reçu des données
Case comEvReceive
tampon=MSComm1.Input
Call Traitement(tampon) 'traitement données

Case comEvSend ' il y a des caractères à envoyer

Case comEvEOF 'on a reçu le caractère EOF
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
End Sub

2 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Re
Tu as dû modifier le code original :
Dans la partie réception Sub MSComm1_OnComm, tu dimensionnes inBuff pour recevoir les données.
Lors de l'action de réception, tu les stockes dans tampon qui n'est pas dimensionné.
Lors de l'appel de Call Traitement(tampon), qui doit être la ligne où se produit l'erreur (boule de cristal V2.0) la variable passée est par défaut ByRef puisque non précisé
Or ceci n'est possible que si la variable a été correctement dimensionnée

Voir ce code qui explique l'utilité des déclarations de variables et l'utilisation de ByVal et ByRef : <source>
La prochaine fois, essaye d'être plus précis.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Bonjour aussi  ;-)

Ton erreur apparait sur quelle ligne ?
Quel est le lien du code original ?

(merci) Mais de rien

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)