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:
-
Excel97 ou supérieur (version Windows exclusivement)
-
VBA5 ou supérieur
-
activeX MSComm32.ocx (*)
-
une balance munie d'une sortie RS232 avec sa documentation
-
un petit programme VB ou VBA
(*) 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).
-
Insérez un module
-
insérez un userform
-
dans la fenêtre "Boite à outils", recherchez l'icône
MSCOMM symbolisée par un téléphone. Si elle est absente,
cliquez sur la boîte à outils avec le bouton droit de la souris
puis sur "Contrôles supplémentaires et cochez "Microsoft Communication
Control".
-
posez le contrôle MSCOMM sur le userform
-
posez un contrôle COMMANDBUTTON sur le userform
-
posez un contrôle LABEL sur le userform
-
double cliquez sur l'objet COMMANDBUTTON et entrez le code suivant:
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.