Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi ComPort - AsynPro - Empfang aufgeteilt. (https://www.delphipraxis.net/113983-comport-asynpro-empfang-aufgeteilt.html)

Real-TTX 17. Mai 2008 19:44


ComPort - AsynPro - Empfang aufgeteilt.
 
Hallo Jungs,

Ich habe mittels AsyncPro ComPort Komponente Daten eingelesen. Das Funktionert auch, leider nur bedingt. Ich bekomme es einfahc nicht hin.Die Daten, wie es auch sein soll, auf einmal kommen. Sondern die mitgelieferte Procedure OnTriggerAvail, wird 2 mal aufgerufen.

Ich habe ein Digitalen Messschieber/Messlehre. Auf dem Gerät ist eine Taste "DATA". Diese Sendet Daten über den ComPort. Sobald ich die drücke, führt er 2 mal diese Funktion aus.

Beim ersten mal: die ersten 8 char's
Beim zweiten mal: die letzen 4 char's


Ich Prüfe auf die Längen des einkommenden Strings / Zeichen. Und Setze das dementsprechend zusammen. Ist eine sehr schlechte Lösung....

Vielleicht habt ihr ja eine Idee.
Delphi-Quellcode:
procedure TForm1.ComPortTriggerAvail(CP: TObject; Count: Word);
var
  I : Word;
  C : Char;
  S : String;
begin
  S := '';
  for I := 1 to Count do begin
    C := ComPort.GetChar;
    case C of
      #0..#31 : {Don't display} ;
      else S := S + C;
    end;
  end;
  //Memo1.Lines.Add(IntToStr(length(S)));
   if (length(S) = 8) then
   begin
    Result := S;
   end;
   if (length(S) = 4) then
   begin
    Result := Result + S;
    Memo1.Lines.Add(Result);
   end;

end;

Gruß, Real-TTX

Reinhard Kern 18. Mai 2008 07:00

Re: ComPort - AsynPro - Empfang aufgeteilt.
 
Zitat:

Zitat von Real-TTX
Hallo Jungs,

Ich habe mittels AsyncPro ComPort Komponente Daten eingelesen. Das Funktionert auch, leider nur bedingt. Ich bekomme es einfahc nicht hin.Die Daten, wie es auch sein soll, auf einmal kommen. Sondern die mitgelieferte Procedure OnTriggerAvail, wird 2 mal aufgerufen.
...
Gruß, Real-TTX

Hallo,

ich verwende und kenne AsyncPro nicht (nur Win32 API direkt), aber die Windowsfunktionen für COMx lassen es zu, einige Timeoutwerte einzustellen, so dass man den kompletten String bekommt, wenn dieser ohne grössere Pause gesendet wird und dann eine lange Pause kommt. Sieh doch mal nach, was du als Timing einstellen kannst.

Gruss Reinhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz