Hallo Leute,
Ich beschäftige mich gerade mit dem Delphi angelegtem freien Lazarus
mit freiem Pascal Compiler.
Ich habe jetzt schon eine Kommunikation zwischen PC und µC hin bekommen.
Dazu hab ich die ebenfalls freie Unit/Package Synaser verwendet. Also
dies funktioniert schon mal.
1 | unit Unit1;
|
2 |
|
3 | {$mode objfpc}{$H+}
|
4 |
|
5 | interface
|
6 |
|
7 | uses
|
8 | Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
|
9 | StdCtrls, ExtCtrls, synaser;
|
10 |
|
11 | var
|
12 | serv:TBlockSerial;
|
13 | memoLineIndex: integer= 0;
|
14 |
|
15 | type
|
16 |
|
17 | { TForm1 }
|
18 |
|
19 | TForm1 = class(TForm)
|
20 | Beenden: TButton;
|
21 | Memo1: TMemo;
|
22 | Verbinden: TButton;
|
23 | Senden: TButton;
|
24 | Edit1: TEdit;
|
25 | Edit3: TEdit;
|
26 | Timer1: TTimer;
|
27 | Transmit: TLabel;
|
28 | Receive: TLabel;
|
29 | Label3: TLabel;
|
30 | Label4: TLabel;
|
31 | procedure BeendenClick(Sender: TObject);
|
32 | procedure VerbindenClick(Sender: TObject);
|
33 | procedure SendenClick(Sender: TObject);
|
34 | procedure Timer1Timer(Sender: TObject);
|
35 |
|
36 | private
|
37 | { private declarations }
|
38 | connected: Boolean;
|
39 |
|
40 | public
|
41 | { public declarations }
|
42 | end;
|
43 |
|
44 | var
|
45 | Form1: TForm1;
|
46 |
|
47 | implementation
|
48 |
|
49 | { TForm1 }
|
50 |
|
51 | procedure TForm1.Timer1Timer(Sender: TObject);
|
52 | var
|
53 | signal : string;
|
54 |
|
55 | begin
|
56 | if not connected then exit;
|
57 | signal := serv.Recvstring(Timer1.Interval div 2);
|
58 | if serv.LastError <> 0 then exit;
|
59 | Memo1.Lines[memoLineIndex] := signal;
|
60 | memoLineIndex := memoLineIndex +1;
|
61 | end;
|
62 |
|
63 |
|
64 | procedure TForm1.BeendenClick(Sender: TObject);
|
65 | begin
|
66 | serv.free;
|
67 | ShowMessage('ComPort muss freigeschalten werden! Jetzt freischalten?');
|
68 | sleep(1000);
|
69 | close;
|
70 | end;
|
71 |
|
72 |
|
73 | procedure TForm1.VerbindenClick(Sender: TObject);
|
74 | var
|
75 | portnr : string;
|
76 | parity : char;
|
77 | baud,bits,stop : integer;
|
78 | softflow : boolean;
|
79 | hardflow : boolean;
|
80 |
|
81 | begin
|
82 | if connected then
|
83 | begin
|
84 | ShowMessage('Verbindung ist bereits vorhanden');
|
85 | exit;
|
86 | end;
|
87 | serv:=TBlockSerial.create;
|
88 | portnr := 'COM3';
|
89 | parity := 'N';
|
90 | baud := 9600;
|
91 | bits := 8;
|
92 | stop := SB1;
|
93 | softflow := false;
|
94 | hardflow := false;
|
95 | serv.Connect(portnr);
|
96 | sleep(1000);
|
97 | serv.Config(baud, bits, parity, stop, softflow, hardflow);
|
98 | sleep(1000);
|
99 | if serv.LastError = 0 then
|
100 | begin
|
101 | connected := True;
|
102 | ShowMessage('Verbindung erfolgreich');
|
103 | end
|
104 | else
|
105 | ShowMessage('Verbindung konnte nicht hergestellt werden');
|
106 | end;
|
107 |
|
108 |
|
109 | procedure TForm1.SendenClick(Sender: TObject);
|
110 | var
|
111 | befehl, data : string;
|
112 |
|
113 | const
|
114 | CR = #$0d;
|
115 | begin
|
116 | befehl := edit1.text;
|
117 | data := befehl+CR;
|
118 | serv.SendString(data);
|
119 | end;
|
120 |
|
121 | initialization
|
122 |
|
123 |
|
124 | {$R *.lfm}
|
125 |
|
126 | end.
|
So, jetzt möchte ich aber beim Öffnen des Programmes im TEdit Edit2 die
unter Windows verfügbaren COM-Ports anzeigen und daraus auswählen
können.
Also benötige ich irgendwie eine Information von Windows oder über
Synaser von Windows, welche COM-Ports gerade verfügbar sind.
Welche Funktionen/Prozeduren/Units kann man dafür nehmen? Wer kann mir
weiter helfen?
Gruß Steffen