Einzelnen Beitrag anzeigen

Orko

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

Probleme beim ComPort auslesen

  Alt 14. Jun 2010, 22: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 22:26 Uhr)
  Mit Zitat antworten Zitat