AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Probleme beim ComPort auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme beim ComPort auslesen

Ein Thema von Orko · begonnen am 14. Jun 2010 · letzter Beitrag vom 15. Jun 2010
 
Orko

Registriert seit: 18. Jul 2007
10 Beiträge
 
#1

Probleme beim ComPort auslesen

  Alt 14. Jun 2010, 23:01
Einen schönen guten Abend,

ich hab ein kleines Projekt wo ich zwischen einem Mikrocontroller und einem PC Daten austausche z.B. Akku Status, Zeiten und so was. Der Controller arbeitet einwandfrei hab die Daten über ein Terminal ausgelesen. Das Prinzip meiner Programmierung auf dem Controller war so gedacht das die ersten beiden Zeichen eine Art Befehls Codierung ist damit das PC Programm weiß was für Nutzdaten folgen z.B. steht "7F" dafür das jetzt Daten kommen die den Zustand des Akkus darstellen. Auf dem Terminal würde das dann wie folgt aussehen "7F456" die Zahl 456 ist in diesem beispiel jetzt der Wert des AD Wandlers (Akku Stand). In diesem Zuge habe ich mich mit der ComPort Library http://sourceforge.net/projects/comport/ beschäftigt und folgenden code geschrieben:
Delphi-Quellcode:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
command: string;
Temp_in_string:string;
power: integer;
lange: integer;
begin

  sleep(300);

  comport1.ReadStr(temp_in_string,count);

  temp_in_string := trim(temp_in_string);

  temp_in_string := copy(temp_in_string,length(temp_in_string) -4,20);

  command := copy(temp_in_string,1,2);

  comport1.ClearBuffer(true,true);

  if command = '00then
  begin

  timer1.Enabled := true;

  label7.Caption := 'Messung';

  end;

  if command = '7Fthen
  begin

  lange := length(temp_in_string) - 2;

  Power := strtoint(copy(temp_in_string,3,lange));

  power := trunc(power * 0.204);

  label5.Caption := inttostr(power) + '%';

  end;

  if command = 'FFthen
  begin

  timer1.Enabled := false;

  lange := length(temp_in_string) - 2;

  edit1.Text := copy(temp_in_string,3,lange);

  label7.Caption := 'Bereit';

  end;

  if command = 'F7then
  begin
  label7.Caption := 'Bereit';
  end;

  temp_in_string :='';

end;
Nun habe ich ein paar fragen: Springt das Ereignis "RxChar" an wenn der erste Charakter in den Buffer gelangt?
Was bedeutet "#$D#$A"?

Hab jetzt das Problem das es manchmal geht und manchmal nicht. (mehr nicht!!)
Hat jemand eine Idee wie man das sauber Programmieren kann? Ich hab keine Ahnung wie die Daten im Buffer gespeichert sind.
Wenn ich mir im Debug die Variable "temp_in_string" ansehe dann sieht das so aus "'7F456'#$D#$A'7F456'#$D#$A'7F456'#$D#$A" hab versucht es aus zuschneiden aber irgendwas haut nicht hin. Hoffe ihr könnt mir helfen. MfG Orko

Geändert von Orko (14. Jun 2010 um 23:26 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz