Icône de la ressource

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

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) J'ai pour ma part acheté une interface physique double (USB vers 2 ports RS232) de marque DIGITUS, qu'on trouve encore facilement pour environ 35 €

2) Le pilote pour "USB Serial Port (COM3)" et "USB Serial Port (COM4)" de FTDI s'installe sans problème

3) Les fonctions VBA nécessaires font l'objet de la ressource que je poste ici pour ceux qui seraient intéressés.
Elles sont au nombre de 4 :

- OpenPort(n As Integer) As Boolean pour initialiser la liaison, un peu comme le faisait le bon vieux Open "COM1:9600,N,8,1" For Binary...
n est le nº du port qui ne peut être que 3 ou 4.
La fonction ramène True si tout s'est bien passé.
Dans cette fonction, on peut choisir la vitesse, la parité, etc. ainsi que certaines tempos.

- WritePort(buf As String) As Boolean pour envoyer un message sous forme de chaine de caractères
Dans cette version, la longueur du message est limitée à 64 octets.
La fonction ramène True si tout s'est bien passé.

- ReadPort(buf As String) As Boolean pour recevoir un message sous forme de chaine de caractères
Dans cette version, la longueur du message est limitée à 64 octets.
La fonction ramène True si tout s'est bien passé.

- ClosePort pour fermer la liaison

Ces 4 fonctions font appel à des API

La routine Test n permet d'effectuer un test qui ne peut fonctionner que si un rebouclage physique est réalisé sur un des accès RS232 (broches TX et RX reliées). Ce test envoie 20 messages de longueurs aléatoires (de 1 à 64 octets), qui doivent être reçus dans la foulée et sans erreur.

Dans cette version, les 2 liaisons ne doivent pas être ouvertes simultanément.

Si les tempos sont bien choisies, les vitesses de 50 à 115200 Bauds fonctionnent correctement.

Il y a certaines limitations sur lesquelles je ne me suis pas trop penché :
- 1 ou 2 bits "Stop" fonctionnent bien, mais pas 1,5 bit "Stop"
- 7 ou 8 bits fonctionnent bien (en adaptant le test), mais pas 6 bits
- je n'ai pas testé les lignes RTS/CTS/DTR/DSR
- si ClosePort n'est pas exécuté (par exemple par perte du handler en réinitialisant VBA), il faut quitter et relancer Excel
Auteur
Katido

Derniers avis

Merci! J'y ai trouvé de quoi réutiliser mon régulateur de température de four avec mes Feuilles de commande Excell qui ne fonctionnaient plus depuis mon nouveau PC sans port RS232
K
Katido
Et ça marche ?