Einzelnen Beitrag anzeigen

oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Aktuelle Daten der seriellen Schnittstelle anzeigen

  Alt 2. Sep 2007, 00:55
In etwa so:
Delphi-Quellcode:
Thread.pas
...
type
  TMessung = class(TThread)
  private
    { Private-Deklarationen }
    FRefreshValues : TNotifyEvent;
  protected
    procedure Execute; override;
    procedure DoRefreshValues;
  public
    ComHandle : THandle;
    MeineDatenausMessung : String;
    property RefreshValues : TNotifyEvent read FRefreshValues write FRefreshValue;
  end;

...

procedure TMessung.Execute;
...
buffer_len:=ReadDataFromCOMPort(ComHandle,buffer);
...
while frames in buffer do
...
   Syncronize(DorefreshValues); // Ereignis syncrinisiert aufrufen
...

procedure TMessung.DoRefreshValues;
begin
  IF Assigned(FRefreshValues) then FRefreshValues(self);
end;

---------------------------------------
unit1.pas:
...

TForm1 = class(TForm)
...
public
  procedure OnRefreshValues(Sender : TObject);
....
end;

...
// irgentwo, wo der Thread creiert wird
  Datenerfassung := TMessung.Create(True);
  Datenerfassung.RefreshValues := self.OnRefreshValues;
...

procedure TForm1.StartClick(Sender: TObject);
begin
     ComHandle := 0;
              // Verbindung aufbauen
     ok := ConnectToCOMPort(ComHandle,42, 4);

     if ok = 0 Then
     begin
          Start.Enabled := False;
          Stop.Enabled := True;

              // ErfassungsThread starten
              // Dieser aktualisiert auch die Oberfläche
          DatenerfassungsThread.ComHandle := ComHandle;
          DatenerfassungsThread.Resume;

     end;
              // Verbindung beenden
     ok := DisconnectFromCOMPort(ComHandle);
end;

procedure TForm1.StopClick(Sender: TObject);
begin
     Start.Enabled := True;
     Stop.Enabled := False;
     DatenerfassungsThread.Suspend;
end;

procedure TForm1.RefreshValues(Sender: TObject);
Var Text : String;
begin
  Text := TMessung(Sender).MeineDatenausMessung;

...
end;
Wenn du die Daten direkt hochschicken willst, dann mußt du dir eine eigene Procedure definieren.

Delphi-Quellcode:
Thread.pas
...
type

  TRefreshValues = procedure (Sender : TObject; Daten : String) of Object;

  TMessung = class(TThread)
  private
    { Private-Deklarationen }
    MeineDatenausMessung : String;
    FRefreshValues : TRefreshValues;
  protected
    procedure Execute; override;
    procedure DoRefreshValues;
  public
    ComHandle : THandle;
    property RefreshValues : TRefreshValues read FRefreshValues write FRefreshValue;
  end;

...

procedure TMessung.Execute;
...
buffer_len:=ReadDataFromCOMPort(ComHandle,buffer);
...
while frames in buffer do
...
   Syncronize(DorefreshValues); // Ereignis syncrinisiert aufrufen
...

procedure TMessung.DoRefreshValues;
begin
  IF Assigned(FRefreshValues) then FRefreshValues(self, MeineDatenausMessung);
end;

---------------------------------------
unit1.pas:
...

TForm1 = class(TForm)
...
public
  procedure OnRefreshValues(Sender : TObject; Daten : String);
....
end;

...
// irgentwo, wo der Thread creiert wird
  Datenerfassung := TMessung.Create(True);
  Datenerfassung.RefreshValues := self.OnRefreshValues;
...

procedure TForm1.StartClick(Sender: TObject);
begin
     ComHandle := 0;
              // Verbindung aufbauen
     ok := ConnectToCOMPort(ComHandle,42, 4);

     if ok = 0 Then
     begin
          Start.Enabled := False;
          Stop.Enabled := True;

              // ErfassungsThread starten
              // Dieser aktualisiert auch die Oberfläche
          DatenerfassungsThread.ComHandle := ComHandle;
          DatenerfassungsThread.Resume;

     end;
              // Verbindung beenden
     ok := DisconnectFromCOMPort(ComHandle);
end;

procedure TForm1.StopClick(Sender: TObject);
begin
     Start.Enabled := True;
     Stop.Enabled := False;
     DatenerfassungsThread.Suspend;
end;

procedure TForm1.RefreshValues(Sender: TObject; Daten : String);
Var Text : String;
begin
  Text := Daten;
  // und im Hauptfenster aktualisieren
...
end;
Gruß oki
42
  Mit Zitat antworten Zitat