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 = '00' then
begin
timer1.Enabled := true;
label7.Caption := 'Messung';
end;
if command = '7F' then
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 = 'FF' then
begin
timer1.Enabled := false;
lange := length(temp_in_string) - 2;
edit1.Text := copy(temp_in_string,3,lange);
label7.Caption := 'Bereit';
end;
if command = 'F7' then
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