Hallo Zusammen,
Ich muss gleich vorausschicken, dass ich keinesfalls ein
Profi in Delphi bin, ich bin gerade mal so am lernen.
Also:
Ich möchte ein Programm schreiben, mit dem man Daten über die serielle
Schnittstelle an ein Gerät schicken kann, und möchte natürlich
auch die Antworten auswerten.
Zu diesem Zweck habe ich mir SerialNG besorgt.
Das Daten senden funktioniert auch ohne Probleme, aber beim
Empfangen komm ich nicht weiter.
So sieht meine "Empfangsroutine" aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| procedure lesen (port:TSerialPortNG); Var buffer,ergebnis:String; timeout: integer; abgelaufen:TDateTime; datenok:boolean; stringlaenge,i,e:integer; kommtwas:Boolean; inhalt,x,z:integer; begin
buffer:=''; datenok:=false; timeout:=5000; abgelaufen:=IncMillisecond(getTime(),timeout); i:=0; e:=0; sleep(50);
while (getTime() <= abgelaufen) and (not datenok) do begin if port.nextClusterSize > 0 then begin buffer := buffer + port.ReadNextClusterAsString(); if copy(buffer, length(buffer), 1) = #10 then begin datenok := true; showmessage('Daten ok'); end; end;
end;
if (getTime()>abgelaufen) and (not datenok) then begin Showmessage ('Verbindung fehlgeschlagen');
end;
Showmessage ('Buffer:'+buffer); ergebnis:=analyse(Buffer); port.Active:=false; freeandnil(port);
end; |
Ich denke das sieht ziemlich normal aus.
Nun habe ich folgendes Problem:
"port.nextClusterSize" scheint immer den Wert "-1" bzw "0" zu führen,
sobald ich die Showmessage in der ersten Zeile while-Schleife auskommentiere..
Denn, wenn ich diese Showmessage in die Schleife "if port.nextClusterSize > 0" stelle,
wird sie gar nie angezeigt und die Routine läuft ins timeout (jetzt 5000ms).
Wenn ich die showmessage in der while-Schleife anzeigen lasse, funktioniert alles sofort
nach dem Klick auf OK.. ?
Natürlich kann ich diese Showmessage da nicht gebrauchen
Ich wäre euch für jeden Denkanstoß dankbar..