Delphipage - la reference en Delphi
Accueil - Astuces - Composants - Programmes - Tutoriaux - Livres - Liens
 Sources
- Astuces
- Composants
- Programmes
- Tutoriaux
 Rechercher
- Delphipage
- Ngscan
 Ressources
- Lexique Delphi
- Livres
- News
- Patchs Delphi
 Liens
- Borland France
- CodeGear
- Les meilleurs sites


Tutoriaux - Port série

Pourquoi utiliser le port série ?

Lorsqu'une liaison doit être établie entre un ordinateur et un périphérique, on a le choix entre plusieurs modes de transmissions dont entre autres, une transmission parallèle et série.

Le port parallèle d'un PC, généralement occupé par une imprimante bien que maintenant l'USB (Universal Serial Bus) devient très répandu du faite de sa vitesse de transmission, offre de nombreuses lignes numériques utilisables pour l'échange rapide de données. A la différence des ports séries, les ports parrallèles sont particulièrement fragiles. En effet, les entrées et les sorties des ports parallèles ne sont pas protégées contre les surcharges. Pour être connecter un périphérique, l'ordinateur doit être hors tension. Les entrées ne supportent que des tensions comprises entre 0V et 5V.

L'utilisation du port série possède de nombreux avantages non négligeable :
- les périphériques peuvent être connectés ou déconnectés sans risque alors que l'ordinateur est sous tension
- les ports séries peuvent fournir un courant électrique suffisant (environ 10mA) pour alimenter des dispositifs élémentaires comme par exemple une diode électroluminescente.
- les ports sont très bien protégés contre les maladresses.


Présentation du port série

Le port série, appelé également le port sériel ou "COM", d'un ordinateur permet la communication entre deux systèmes numériques.
Le port série est utilisée dans tous les domaines de l'informatique permettant la liaison avec des périphériques tels qu'un modem ou une souris.

Le port série utilise un connecteur DB9 (9 broches).

Il existe également le connecteur DB25 (25 broches) qui n'est plus beaucoup utilisé.

DB9 mâle
DB9 femelle

Afin que les éléments (un émetteur et un récepteur) qui communiquent ensemble puissent se comprendre, il est nécessaire d'établir un protocole de transmission. Ce protocole devra être le même pour les deux éléments afin que la transmission fonctionne correctement.
Il existe de nombreux protocoles de transmission de données qui utilisent le port série dont le plus connus est le protocole RS232 qui est devenu un standard.

Beaucoup de personne font l'amalgame entre le port série et le protocole RS232. En effet, il existe pour le port série d'autres protocoles de communication mais le plus répandu est en effet le protocole RS232. D'ailleurs sur les ordinateurs l'UART (Universal Asynchronous Receiver Transmitter) du port série intègre ce protocole.

Ce protocole fixe aux différentes broches d'entrées et de sorties des fonctions particulières.

Broche
E/S
Désignation
Description
1
Entrée
DCD (Data Carrier Detect)
Détection de porteuse.
2
Entrée
RXD ou RD (Receive Data)
Réception de données.
3
Sortie
TXD ou TD (Request Data)
Emission de données.
4
Sortie
DTR (Data Terminal Ready)
Terminal prêt.
5
-
GND (Ground)
Masse.
6
Entrée
DSR (Data Set Ready)
Emmission prête.
7
Sortie
RTS (Request To Send)
Demande d'emmission.
8
Entrée
 CTS (Clear To Send)
Prêt à emettre.
9
Entrée
 RI (Ring Indicator)
Indicateur de sonnerie.

Toutefois, pour de petites applications, vous pouvez créer votre propre protocole de transmission.

Vous devez respecter les entrées et les sorties lorsque vous utilisez les broches.

Un protocole de transmission se caractérise par différentes règles qui doivent être respecter par l'émetteur et le récepteur :
- le type de liaison (synchrone ou asynchrone)
- la longueur des mots (par exemple 8 bits)
- la vitesse de transmission (par exemple 9600 bauds, bits par secondes)
- le bit de start (1 bit)
- la parité (paire, impaire)
- le bit de stop (1, 1/2 ou 2 bits)

Le niveau logique "1" (état haut) correspond à une tension comprise entre -3V et -15V. Le niveau logique "0" (état bas) correspond à une tension comprise entre 3V et 15V.

Le bit de parité, s'il a été programmé, permet d'indiquer si la transmission s'est bien effectué. Cela évite les erreurs de tansmission et vérifie le bon fonctionnement du sytsème. La parité peut être paire ou impaire.

Il existe également la parité "marquage" ou "espace" mais qui ne présente pas un grand intérêt.

Dans la majorité des cas, pour de petites applications, qui n'utilisent donc pas le protocole RS232, seules les lignes TXD (broche 3) et RXD (broche 2) et masse (broche 5) seront utilisées.

Le port série avec Delphi

Sous DOS, tous les langages de programmation proposés des instructions ("PORT[..]" pour Turbo Pascal) permettant de gèrer le port série. Ces instructions permettaient d'avoir un accès direct à l'ensemble du matériel d'un ordinateur.
L'arrivée de Windows imposait aux programmeurs certaines limites matérielles. La première version de Delphi, pour Windows 3.1x, avait encore l'instruction "PORT[..]". Par contre, Windows 95 ainsi que Windows 98 n'offraient plus d'accès direct aux ports. Il fallait passer par des instructions en assembleur. Windows NT et également Windows XP a été conçu de façon à interdire tous les accès directs aux ports pour la sécurité. La seule façon d'y accèder et d'utiliser les routines du système d'exploitation.

Pour utiliser le port série avec Delphi, il existe différents composants dont le plus connus est le composant TComPort. Ce composant est surtout utilisé car il gère le protocole RS232.

Dans ce tutorial, pour communiquer avec le port série d'un ordinateur, nous utiliserons une librairie DLL.



Présentation de l'exemple d'utilisation du port série

Notre programme d'exemple a pour but de faire clignoter une DEL (diode electroluminescente, en anglais LED : Ligh Emiting Diode).
Pour cela, il suffit de créer une holorge. Une horloge est un signal périodique (de manière successive dans le temps) passant d'un état haut à un état bas. On utilise la broche TXD, c'est à dire la broche 3.

Schéma du montage électronique
DEL

Le courant de sortie est limité entre 10 à 20mA, il n'est pas nécessaire d'utiliser une résistance de tirage.
Pour relier le montage à l'ordinateur, il existe plusieurs types de câble (mâle-femelle ou femelle-femelle). Veillez bien à relier les bonnes broches. Vous pouvez vous aider des deux schémas des connecteurs DB9 (voir ci-dessus).

Ce petit montage électronique permet par exemple de vérifier si la connexion fonctionne correctement.


Communiquer avec le port série en utilisant la librairie DLL

La librairie DLL (34 Ko) de Burkhard Kainka permet d'avoir un accès direct sur les différentes lignes du port série. Une librairie DLL est un fichier ("RSCOM.dll") qui comporte des fonctions et des procédures pouvant être appelées par le programme principale.

Je vous conseille également le livre "Je programme les interfaces de mon PC sous Windows" de Burkhard Kainka. Vous trouvez de nombreux montages électronique pour contrôler le port série, le port parallèle, le bus I2C, le port de jeu (joystick) et le port de la carte son en Delphi.

On peut schématiser le principe de fonctionnement du programme Delphi lorsqu'il communique avec le port série avec la librairie DLL comme ceci :


Cette librairie DLL possède quelques avantages :
- accès direct aux lignes du port série sans réaliser des masques
- compatibilité avec Windows 95, 98, 2000, NT et XP

Créez un nouveau projet. Enregsitrez les sources dans un répertoire et placez la DLL dans le même répertoire.
Ajoutez deux composants TButton et un composant TTimer.
Modifiez la propriété "Caption" du premier bouton en mettant "Connexion" et pour le deuxième bouton "Déconnexion". Mettez la propriété "Enabled" du Timer à "False".



Le type de liaison effecutée est une liaison simplex, c'est à dire que le système A envoit des données alors que le système récupère les données (pour une liaison full-duplex, le système A et B peuvent tous les deux envoyer et recevoir des données).



Dans le cas de notre programme, vous l'aurez compris, l'émetteur est l'ordinateur et le récépteur, la DEL.


Lorsque vous utilisez une DLL en Delphi, vous devez importer dans votre programmes les procédures et fonctions exportés par la DLL pour pouvoir les utiliser.
Uses Windows;

function
OPENCOM(OpenString:PChar):Integer; stdcall; external 'RSCOM.DLL';
procedure TIMEOUTS (TOut: Integer); stdcall; external 'RSCOM.DLL';
procedure BUFFERSIZE (Size: Integer); stdcall; external 'RSCOM.DLL';
procedure CLOSECOM(); stdcall; external 'RSCOM.DLL';
procedure SENDBYTE (Dat: Integer); stdcall; external 'RSCOM.DLL';
function READBYTE(): Integer; stdcall; external 'RSCOM.DLL';
procedure SENDSTRING (Buffer: PChar); stdcall; external 'RSCOM.DLL';
function READSTRING (): PChar; stdcall; external 'RSCOM.DLL';
procedure CLEARBUFFER (); stdcall; external 'RSCOM.DLL';
function INBUFFER (): DWORD; stdcall; external 'RSCOM.DLL';
function OUTBUFFER (): DWORD; stdcall; external 'RSCOM.DLL';
procedure DTR(d:WORD); stdcall; external 'RSCOM.DLL';
procedure RTS(d:WORD); stdcall; external 'RSCOM.DLL';
procedure TXD(d:WORD); stdcall; external 'RSCOM.DLL';
function CTS:Integer; stdcall; external 'RSCOM.DLL';
function DSR:Integer; stdcall; external 'RSCOM.DLL';
function RI:Integer; stdcall; external 'RSCOM.DLL';
function DCD:Integer; stdcall; external 'RSCOM.DLL';
function INPUTS():Integer; stdcall; external 'RSCOM.DLL';
procedure TIMEINIT(); stdcall; external 'RSCOM.DLL';
function TIMEREAD(): Real; stdcall; external 'RSCOM.DLL';
procedure DELAY(DelayTime: Real); stdcall; external 'RSCOM.DLL';
procedure REALTIME(); stdcall; external 'RSCOM.DLL';
procedure NORMALTIME(); stdcall; external 'RSCOM.DLL';

Vous pouvez remarquer que l'on ne retrouve pas la ligne "RXD" dans les procédures. En effet, cette ligne est spécifique aux protocoles RS232.

Vous pouvez soit importer une par une les procédures et fonctions que vous avez besoin ou soit ajouter le fichier "RSCOMdec.pas" dans la partie "Uses".

Uses RSCOMdec; //Unité à déclarer pour utiliser la librairie

Le fichier DLL devra se trouver dans le même répertoire que votre exécutable. En effet, sans cette DLL, le programme ne pourra marcher.

Pour notre programme, nous utiliserons simplement la fonction "OpenCOM" et les procedures "TXD" et "CloseCOM". Il n'est donc pas nécessaire d'importer toutes les fonctions avec le fichier "RSCOMdec.pas".

Configuration du port

Un ordinateur possède souvent deux ports séries (COM1 et COM2) pour communiquer avec d'autres périphériques. La première étape est donc de configurer la connexion à l'aide de la fonction "OpenCOM" et de choisir le port que l'on veut utiliser.

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenCom('COM1: baud=9600 parity=N data=8 stop=0'); //Ouvre et paramètre la connexion sur COM1
Timer1.Enabled:=True; //Active le timer
end;

La fonction "OpenCOM" permet de paramètrer la connexion en choisissant le port de l'ordinateur utilisé, la vitesse de transmission, le choix de la parité, le nombre de données et le nombre de bits de stop.
Si vous souhaitez utiliser le deuxième port série, il suffit de remplacer "COM1" par "COM2".

Réalisation de l'horlog
e

procedure TForm1.Timer1Timer(Sender: TObject);
Var SortieClgn:Integer;
begin
//Alterne les états haut et bas ("0" et "1")
if
SortieClgn=0 then
SortieClgn:=1
else
SortieClgn:=0;
TXD(SortieClgn);
Label1.Visible:=True; //Affiche le label
end;


Vous pouvez modifier la propriété "Interval" du composant TTimer pour accèlérer ou ralentir le temps de clignotement de la DEL. Par exemple, j'ai mis cette propriété à "500", ce qui correspond à 500ms.

Déconnexion

Pour se déconnecter, il faut désactiver le timer pour arrêter l'envoi de "0" et de "1". Puis on envoit un "0" à TXD. Ceci permet d'allumer la DEL. Pour finir, on utilise la procédure "CloseCOM" pour libérer le port.

procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=False; //Désactive le timer
Label1.Visible:=False; //Enlève le label
TXD(0); //Envoi la valeur "0" vers la sortie pour que la LED soit allumée
CloseCOM; //Libère le port
end
;


Port série    [ 11-11-2004 ]
 Exemple d'utilisation du port série avec Delphi.
Télécharger :  [39 Ko] [Télécharger portserie.zip] [ DLL inclus ]

Auteur : Yoann
Site internet :
http://delphipage.free.fr/
 

Vous serez amener peut être un jour à récupèrer ou à envoyer des données vers un appareil utilisant les caractères ASCII. Dans ce cas, je vous conseil le composant TCompPort.

Tous droits réservés - Contacts
Haut de la page