Wie Verfügbare COM-Ports unter Lazarus + Synaser heraus bekommen?

#3107171
Lesenswert?

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
Angehängte Dateien:
#3107323
Lesenswert?

Ich hab es gefunden, In der Unit synaser gibt es die Funktion:

function GetSerialPortNames: string;
Returns list/ of existing computer serial ports. Working properly only 
in Windows!

Jetz bekomm ich die gegenwärtig zur Verfügung stehenden COMs als string 
mit Komma getrennt zurück.

Beispiel:
1
procedure TForm1.ComboBox1DropDown(Sender: TObject);
2
var
3
  ports : string;
4

5
begin
6
  ports := GetSerialPortNames;
7
  Memo2.Text := ports;
8
end;

Jetzt muss ich die nur noch sortieren, und in die ComboBox eintragen. 
Lerne aber gerade erst Pascal.. kann also dauern :)



Gruß Steffen
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren