Icône de la ressource

Comment piloter une liaison série RS232 depuis une appli Excel en VBA, via un port USB V1.1

Katido

XLDnaute Occasionnel
Katido a soumis une nouvelle ressource:

Comment piloter une liaison série RS232 depuis une appli Excel en VBA, via un port USB - Quand il faut contrôler un périphérique RS232, alors que votre PC n'a que des ports USB !!!

Bonjour,

Depuis une quinzaine d'années, les PC n'ont plus d'interface RS232, celle-ci étant remplacée par des ports USB.
Toutefois, ce mode d'accès un peu désuet est toujours utilisé par bon nombre de périphériques, tels que les balances ou les terminaux de paiement.

Afin de piloter ce genre de périphérique depuis une application Excel sur un PC, il faut :
- une interface physique USB <--> RS232
- le pilote qui va bien
- un jeu de fonctions VBA pour réaliser les entrées-sorties

1)...

En savoir plus sur cette ressource...
 

Aurélie1234567

XLDnaute Nouveau
Bonjour,

Débutante dans la communication série, j'aimerais récupérer des données envoyées ponctuellement (quand j'appuie sur un bouton de l'appareil). Comment utilisé ReadPort dans ce cas ?
 

Katido

XLDnaute Occasionnel
Bonjour,

Je suppose que :

1) tu as connecté une interface physique USB <=> RS232 sur un port USB de ton PC.
2) le pilote qui va bien est installé sur ton PC : vérifier dans le Gestionnaire de périphériques, tu dois voir USB Serial Port COMx dans Ports (COM et LPT) quand l'interface est connectée.
3) ton appareil est connecté à l'autre bout et qu'il est censé envoyer un petit message sur la liaison RS232 quand tu appuies sur le bouton (pas plus de 64 octets à la fois).
4) tu as vérifié que les paramètres RS232 sont cohérents. Les changer si nécessaire côté appareil ou dans la sub Openport où ils sont actuellement à 19 200 Bauds, 8 bits, 2 stops.

Tout ceci étant en place, tu dois alors :
1) lancer Openport suivi du nº de ton port, par exemple Openport 3
2) appuyer sur le bouton. L'appareil envoie le message qui est stocké dans l'interface
3) lancer Readport avec en paramètre une chaine de caractères, par exemple Readport texte
4) lire/afficher/utiliser la variable texte
tu peux rejouer 2) 3) et 4) et quand tu as fini, tu lance Closeport
 

Aurélie1234567

XLDnaute Nouveau
Bonjour,

Je suppose que :

1) tu as connecté une interface physique USB <=> RS232 sur un port USB de ton PC.
2) le pilote qui va bien est installé sur ton PC : vérifier dans le Gestionnaire de périphériques, tu dois voir USB Serial Port COMx dans Ports (COM et LPT) quand l'interface est connectée.
3) ton appareil est connecté à l'autre bout et qu'il est censé envoyer un petit message sur la liaison RS232 quand tu appuies sur le bouton (pas plus de 64 octets à la fois).
4) tu as vérifié que les paramètres RS232 sont cohérents. Les changer si nécessaire côté appareil ou dans la sub Openport où ils sont actuellement à 19 200 Bauds, 8 bits, 2 stops.

Tout ceci étant en place, tu dois alors :
1) lancer Openport suivi du nº de ton port, par exemple Openport 3
2) appuyer sur le bouton. L'appareil envoie le message qui est stocké dans l'interface
3) lancer Readport avec en paramètre une chaine de caractères, par exemple Readport texte
4) lire/afficher/utiliser la variable texte
tu peux rejouer 2) 3) et 4) et quand tu as fini, tu lance Closeport
Bonjour,

Merci pour ta réponse.

J'ai bien connecté l'appareil au PC via une interface USB/RS232.
J'ai testé la connexion à l'aide de l'HyperTerminal, je reçois bien les données lorsque j'appuie sur le bouton de mon appareil.

J'ai modifié la partie OpenPort pour coller à mon besoin (4 800 bauds, 7 bits...)
Seulement je suis un peu perdue, je ne sais pas comment adapter la partie ReadPort pour lire le message reçu.
Voila ce que j'ai fait :


Public Function ReadPort(buf As String) As Boolean

Const BUFLEN& = 64
Dim rc&, lg&, i%
Dim rb(1 To BUFLEN) As Byte

ReadPort = False
rc = ReadFile(Handler, rb(1), BUFLEN, lg, 0)

If rc = 0 Then MsgBox "Read failed " & CStr(Err.LastDllError), vbCritical, "RS232": Exit Function
buf = "": For i = 1 To lg: buf = buf & Chr$(rb(i)): Next i
ReadPort = True
MsgBox (buf)

End Function

Et j'utilise la fonction de cette manière :

Sub test()
Dim texte As String
If Not OpenPort(3) Then ClosePort: Exit Sub
ReadPort (texte)
MsgBox (texte)
ClosePort
End Sub


Pas de message d'erreur mais les MsgBox sont vides.

Peux-tu m'éclairer sur les erreurs que j'ai fait ?

Merci !
 

Katido

XLDnaute Occasionnel
L'erreur vient du fait que dans la Sub Test, tu lances ReadPort juste après OpenPort.

Si tu appuie sur le bouton avant Test, tout est réinitialisé par OpenPort et tu ne reçois rien
Si tu appuies après, c'est trop tard car tu lis le message avant qu'il n'existe

Il faut déjà lancer OpenPort
Puis appuyer sur le bouton
Puis lancer ReadPort

Et à la fin lancer ClosePort pour éviter le plantage d'Excel si tu recommence
 

Aurélie1234567

XLDnaute Nouveau
L'erreur vient du fait que dans la Sub Test, tu lances ReadPort juste après OpenPort.

Si tu appuie sur le bouton avant Test, tout est réinitialisé par OpenPort et tu ne reçois rien
Si tu appuies après, c'est trop tard car tu lis le message avant qu'il n'existe

Il faut déjà lancer OpenPort
Puis appuyer sur le bouton
Puis lancer ReadPort

Et à la fin lancer ClosePort pour éviter le plantage d'Excel si tu recommence
Evidemment !
Ca marche parfaitement !
Merci pour ton aide
 

norbione

XLDnaute Nouveau
Bonjour,

Je suppose que :

1) tu as connecté une interface physique USB <=> RS232 sur un port USB de ton PC.
2) le pilote qui va bien est installé sur ton PC : vérifier dans le Gestionnaire de périphériques, tu dois voir USB Serial Port COMx dans Ports (COM et LPT) quand l'interface est connectée.
3) ton appareil est connecté à l'autre bout et qu'il est censé envoyer un petit message sur la liaison RS232 quand tu appuies sur le bouton (pas plus de 64 octets à la fois).
4) tu as vérifié que les paramètres RS232 sont cohérents. Les changer si nécessaire côté appareil ou dans la sub Openport où ils sont actuellement à 19 200 Bauds, 8 bits, 2 stops.

Tout ceci étant en place, tu dois alors :
1) lancer Openport suivi du nº de ton port, par exemple Openport 3
2) appuyer sur le bouton. L'appareil envoie le message qui est stocké dans l'interface
3) lancer Readport avec en paramètre une chaine de caractères, par exemple Readport texte
4) lire/afficher/utiliser la variable texte
tu peux rejouer 2) 3) et 4) et quand tu as fini, tu lance Closeport
 

Statistiques des forums

Discussions
314 629
Messages
2 111 345
Membres
111 109
dernier inscrit
djameldel