Accueil       Initiation à VBA5       Les Userforms et outils intégrés
 
 

Acquisition de données sur un port série (RS232)

Vous ne trouverez ici aucune théorie sur ce mode de communication. On se contente de lister les tâches à réaliser accompagnées d'un exemple de programme en VBA5.

Objectif:    Collecter directement dans une feuille Excel des valeurs produites par un appareil externe
Moyens utilisés dans l'exemple:

(*) Cet activeX n'est pas fourni avec Office2000 ou antérieur mais seulement avec Visual Basic. Recherchez d'abord dans votre dossier système les fichiers "mscom*.ocx". Si ils sont présent, passez au paragraphe suivant; sinon, vous pouvez  enregistrer l'activeX en installant le programme XL_RS232 (seul exemplaire gratuit)  La distribution contient le fichier "pesees.xls" avec l'exemple suivant.
Utilisation:
 - télécharger le fichier XL_RS232.ZIP
 - décompresser ce fichier
 - exécuter SETUP.EXE
 - ouvrir le fichier "pesees.xls"
 - exécuter la macro pour tester le fonctionnement
 - adapter le programme VBA de communication avec le port série dans le fichier "pesees.xls"

L'exemple qui suit utilise le port Com1. Il est possible de communiquer avec le port parallèle (non documenté ici) en utilisant le contrôle activeX IOport.ocx (shareware) pour win98 ou le contrôle NTport.ocx sous NT.


Réalisation du programme

Il est indispensable de disposer de la documentation de l'appareil à connecter pour connaître le paramétrage du port série.
Le programme peut-être adapté à n'importe quelle application MS-Office97 ou Visual Basic.
Depuis Excel, activez l'éditeur VBA (touches ALT + F11).

Private Sub CommandButton1_Click()
'Vider le buffer
MSComm1.InBufferCount = 0
'choisir un port série
MSComm1.CommPort = 1 ' 1 est le n° de port que vous pouvez modifier
'Paramétrage du port; les valeurs sont fournies par le constructeur de l'appareil.
'Ces valeurs peuvent être entrées ici (pas très "propre"!)
'ou dans une procédure d'initialisation (c'est mieux)
'ou dans la propriété "Setting" du contrôle
'L'idéal étant d'offrir à l'utilisateur la possibilité de changer ces valeurs à partir d'un menu "Réglage"
'La balance utilisée dans cet exemple requiert les valeurs suivantes: 1200 bauds, bit de parité, 7 bits de données,  bit d'arrêt
MSComm1.Settings = "1200,o,7,2"
' indique au contrôle qu'il doit lire 1 seul caractère
'ce caractère servira à repérer la stabilisation de la balance
MSComm1.InputLen = 1
'ouvre le port
MSComm1.PortOpen = True
'Boucle dans le vide tant que le caractère lu n'est pas un signe plus (+)
Do While MSComm1.Input <> "+"
Loop
'lecture sur le port des 5 1ers caractères et stockage dans la boite de dialogue et dans la feuille active
MSComm1.InputLen = 5
    Label1.Caption = MSComm1.Input
    ActiveCell.Value = CSng(Label1.Caption)
    ActiveCell.Offset(1, 0).Select
'ferme le port
MSComm1.PortOpen = False

End Sub
 

Dans cet exemple, la balance émet les données en permanence. Le programme lit ces valeurs en recherchant le signe + qui dans ce cas sépare les envois successifs de données. Très souvent, il est possible de procéder autrement:
- l'appareil attend un ordre du programme
- le programme signale à l'appareil qu'il attend une valeur
- L'appareil répond en émettant une valeur puis se met en attente de l'ordre suivant.

Les ordres ou codes d'échange sont fourni par le fabriquant du matériel.