Voici le code source avec quelques commentaires. Pour le com usb/série, j'utilise un OCX : MSCOMM dont l'instanciation est ici MSCommUSBLenz pour gérer le port COM. Cet objet, MSCommUSBLenz comporte plusieurs propriétés dont:
(1) settings à remplir par le paramétrage du port : MSCommUSBLenz.settings:='57600,n,8,1'
(2) Handshaking contient le protocole : MSCommUSBLenz.Handshaking:=leprotocole {0=aucun 1=Xon-Xoff 2=rts-cts 3=RTS-Xon-Xoff}
il est ouvert systématiquement par 2 (rts-cts) le 0 ne sert que pour la genli
(3) SThreshold et RThreshold servent à déclencher une transmission si le tampon d'émission contient 1 octet, et déclenche une interruption
si le tampon de réception contient 1 caractère
(4) CommPort contient le numéro du port :MSCommUSBLenz.CommPort:=5 // pour le com5 évidemment
(5) forçage de la ligne DTR
(6) si on utilise la genli (protocole=4) alors j'allume le signal RTS sinon j'éteinds RTS
(7) InputMode = type de trames comInputModeBinary c'est le mode d'échange en binaire
(8) Positionnement d'une variable par défaut sur "le port est ouvert" (on va le mettre à faux si il n'a pas été ouvert)
(9) c'est
là qu'on demande l'ouverture du port. Si le port s'ouvre, la fonction try ve termine sans exception
(10) interception de l'exception en cas de non ouverture du port : la variable "le port est ouvert" passe à faux
voila c'est tout... Après on peut envoyer des trames FF FE FO FO , j'attends un peu et je reçois la réponse.
- Code: Tout sélectionner
// initialisation de la comm USB
procedure connecte_USB;
var i,j : integer;
begin
if NumPort<>0 then
begin
With Formprinc.MSCommUSBLenz do
begin
(1) Settings:=ConfStCom;
Affiche('Demande ouverture COM'+intToSTR(NumPort)+':'+ConfStCom+' protocole '+IntToSTR(protocole),CLYellow);
(2) if protocole>=4 then Handshaking:=0 {0=aucun 1=Xon-Xoff 2=cts 3=RTS-Xon-Xoff 4=5=protocoles "maison"}
else Handshaking:=protocole;
(3) SThreshold:=1;
RThreshold:=1;
(4) CommPort:=NumPort;
(5) DTREnable:=True;
(6) if protocole=4 then RTSEnable:=True //pour la genli
else RTSenable:=False;
(7) InputMode:=comInputModeBinary;
end;
(8) portCommOuvert:=true;
try
(9) Formprinc.MSCommUSBLenz.portopen:=true;
except
(10) portCommOuvert:=false;
end;
end
else
begin
portCommOuvert:=false;
Affiche('Port Com nul dans le fichier de configuration',clyellow);
end;
if portCommOuvert then
begin
affiche('port COM'+intToSTR(NumPort)+' ouvert',clGreen);
With Formprinc do
begin
LabelTitre.caption:=titre+' Interface connectée au COM'+IntToSTR(NumPort);
MenuConnecterUSB.enabled:=false;
DeConnecterUSB.enabled:=true;
ConnecterCDMRail.enabled:=false;
DeConnecterCDMRail.enabled:=false;
end;
end
else
begin
Affiche('port COM'+intToSTR(NumPort)+' NON ouvert',clRed) ;
end;
end;