27/11/2003
Par Alexandre "grafikm_fr" Lokchine
|
A l’heure de l’Internet haut débit, le port série, avec son débit maximum de quelques dizaines de kilo-octets par seconde, peut sembler inintéressant. Pourtant, il a encore de nombreuses applications : le pilotage de machines industrielles et de mécanismes automatiques se fait encore largement au moyen du port série. Enfin, n’oublions pas que même les routeurs ont un connecteur série qui permet de se connecter à la machine pour la piloter. Ce tutoriel a donc pour objet de montrer comment communiquer via le port série en Visual Basic. Le Microsoft Comm Control 6.0Pour gérer le port série, la meilleure façon est d’utiliser le Microsoft Comm Control distribué avec n’importe quelle édition de Visual Basic. Il suffit simplement de le rajouter dans la liste des contrôles de la barre d’outils.
Les propriétés de base du Microsoft Comm ControlUne fois le contrôle de communication rajouté, il nous faut le paramétrer. Cela se fait avec les propriétés suivantes : – CommPort : Cette méthode fixe ou retourne le port COM utilisé par le contrôle. La plupart des ordinateurs n’ayant qu’un ou deux ports COM, cette propriété vaudra donc le plus souvent 1 (port COM1: ) ou 2 (port COM2: ). MsComm1.CommPort=1 ‘on utilise le port COM1: – Settings : Cette méthode fixe les caractéristiques de la connexion, à savoir la vitesse de communication, l’utilisation ou non du bit de parité, le nombre de bits de données et le nombre de bits d’arrêt. Cette information est le plus souvent fournie par le constructeur de l’équipement avec lequel vous souhaitez communiquer. Elle est construite de la manière suivante : "vitesse, parité(Y ou N), bits de données, bits de stop"
– PortOpen : cette méthode permet d’ouvrir le port si on la positionne à True et le fermer si on le positionne à False :
Il est important de ne pas oublier de fermer le port série ! Pour être sûr, rajoutez le code suivant dans votre formulaire :
– OutPut : cette méthode permet d’envoyer des données au port. Bien entendu, il faut au préalable configurer et ouvrir le port. La chaîne envoyée doit être terminée par un retour chariot ( Chr$(13)) ou par un retour chariot + retour ligne (vbCrLf) en fonction de la connexion. Souvent, le seul moyen de savoir lequel choisir consiste à essayer les deux à prendre celui qui marche.
On dit ici au modem de composer le numéro 0123456789. – Input : cette méthode permet de recevoir des données sur le port COM. Ici, une explication s’impose : le port série stocke les données arrivant au système dans une mémoire tampon interne qui vaut par défaut 1024 octets. Si la mémoire tampon est saturée et que de nouvelles données arrivent, celles-ci sont perdues. Il est donc impératif de recopier les données dans une chaîne de caractères, par exemple :
Bien sûr, cela doit être fait de façon répétitive tant que des données arrivent sur le port. En général, les données se terminent par un caractère de terminaison (si-si!), qui nous fera savoir que la transmission est terminée. Par exemple, on attend ici des données terminées par "OK" suivi de retour à la ligne :
– InBufferSize : cette méthode fixe ou retourne la taille de la mémoire tampon entrée (donc celle qui contient les données arrivant sur le système), elle vaut par défaut 1024 octets : MSComm1.InBufferSize=2048
Taille_du_tampon=MSComm1.InBufferSize – OutBufferSize : cette méthode fixe ou retourne la taille de la mémoire tampon sortie (donc contenant les données envoyées par le système), elle vaut par défaut 512 octets: MSComm1.OutBufferSize=1024
Taille_du_tampon_entree=MSComm1.OutBufferSize – HandShaking : Cette propriété permet de fixer le mode de « poignée de mains », c’est-à-dire la façon dont la communication est établie au niveau matériel. Elle peut prendre les valeurs suivantes :
La plupart du temps, la nature du hand-shaking est imposée par le matériel, il faut donc fouiller le manuel de l’équipement ou faire des tests, il n’y a pas de règle universelle… La communication par événementsLe contrôle de communication serait bien rudimentaire et compliqué d’utilisation s’il n’incluait pas une propriété fondamentale, à savoir la communication événementielle. Le contrôle Comm dispose en effet d’un événement appelé OnComm, qui se déclenche lorsque des données arrivent sur le port série. Donc, plutôt que de se prendre la tête avec le "Do…Loop" comme tout à l’heure, on place notre code dans l’événement OnComm et on laisse faire le système.
L’événement OnComm sert en fait à plusieurs choses : – A recevoir les données La programmation typique d’un événement OnComm se passe donc de la manière suivante :
Oui, ça fait beaucoup de cas d’événements à traiter, et la plupart ne servent quasiment jamais, mais peuvent servir un jour… Exemple de code (communiquer avec un autre PC via le port COM)Pour exécuter ce code, il va vous falloir: – Soit 2 PC et un câble null-modem entre les deux. – Soit un PC avec 2 ports COM: (de plus en plus dur à trouver) et un câble null-modem reliant les deux ports COM: Ensuite, il va falloir créer deux programmes, qu'on va appeler App1 et App2, la première va envoyer des données, l'autre va les recevoir.
Ensuite, exécutez les deux appli (vous aurez besoin de deux instances de VB si vous les exécutez sur le même PC). Télécharger le code source de l'exemple (5 ko, ZIP) Quelques problèmes fréquents et solutions– Si vous pilotez un modem, vérifiez que le problème ne part pas en mettant la propriété RTSEnable à True. – La plupart du temps, il faut laisser la propriété InputLen à 0 (valeur par défaut) – La plupart du temps, il faut laisser la propriété RThreshold à 1 (valeur par défaut) Voilà, vous savez maintenant tout pour programmer une petite application exploitant le port série. Bon développement… grafikm_fr |
||||||||||||||||||||||
Copyright © 2000-2012 - www.developpez.com