Bonjour à tous
[DELPHI RIO]
[ WINDOWS 10]
Même si ce post est la suite de mon post sur les port RS232 virtuel, j'en crée un nouveau car il ne traitement pas le même sujet de programmation.
Le but est de détecteur tous les ports séries actifs sur le pc, d'y associer des composants "TComport" et TcomDataPacket" de l'unité "Cport".
Le processus que j'essaye de mettre ne œuvre fonctionne avec des composant en statique.
La première procédure ci-dessous "RechercheEtAssignRs232Actif" s'occupe de détecter les port séries et d'y associer les composants. Elle fonctionne au moins pour le "TComport", car je sais que j’écris bien dans l'appareil connecté sur le port.
Pour le composant 'TcomDataPacket', je sais pas ... car même si la déclaration de mon événement me semble correcte (procédure "LitAdresse"), je ne reçois en dynamique aucune réponse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 procedure TFRS232.RechercheEtAssignRs232Actif; Var i,j:integer; PortExistant:array[ 1 .. 250] of boolean; begin // On passe tous les ports séries possible du PC et on reécupère dans une // liste lequels sont accessibles. J:=1; for i:=1 to 250 do begin Comport1.Port:= 'COM'+inttostr(i); // on essaye de se connecteur au port pour voir s'il existe. Comport1.Connected:=true; if PortOpen=true then begin PortRs232[J].NomPort:='COM'+inttostr(i); inc(J); if J=11 then break; end; Comport1.Connected:=false; end; // On associé un composant "TcomPort" et un composant TcomDataPacket à // chaque port detecté. for i:=1 to 10 do begin if PortRs232[i].NomPort<>'' then begin PortRs232[i].CompoP:=Tcomport.create(self); with PortRs232[i].CompoP do begin Parent:=self; Port:= PortRs232[i].NomPort; BaudRate:=br9600; databits:=dbEight; StopBits:=sbOneStopBit; Parity.Bits :=prNone; end; PortRs232[i].CompoD:=TcomDataPacket.create(self); with PortRs232[i].CompoD do begin Parent:=self; Comport:= PortRs232[i].CompoP; Onpacket:=LitAdresse; end; // On envoie un ordre RS232 à l'appareil connecté sur le port serie courant // pour qu'il me retourne sont ID PortRs232[i].compoP.connected:=true; PortRs232[i].compoP.WriteStr('ADRESS?'+#10); end; end; end; Procedure TFRS232.LitAdresse(Sender: TObject;const Str: string); var i:integer; begin if (sender is TcomDataPacket) then begin for i := 1 to 10 do begin if (sender as TcomDataPacket) = PortRs232[i].CompoD then PortRs232[i].Adresse:=str; end; end; end;
Je pense que mon erreur viens de la déclaration de l'événement sans comprendre pourquoi !
des idées , des conseils ou tout autre aide est la bien venue..
Merci a vous.
Partager