![]() |
Rs232
Hallo,
über RS232 sende ich einen Befehl und erhalte eine Antwort darauf. Der Antwortstring ist nicht mit #13 abgeschlossen. Wenn ich den Antwortstring mit ReadFile abhole, erhalte ich nur einen Teil der Antwort. D.h. ich muss nochmals Lesen, um auch den Rest der Antwort zu erhalten. Für das Ganze habe ich einen Timeout definiert, so daß ich immer sicher gehen kann, dass die gesamte Antwort ausgelesen ist. Der Timeout oft nicht optimal und kostet unnötig Zeit. Gibt es eine schnelle Möglichkeit einen solchen Antwortstring auszulesen? Beste Grüße |
AW: Rs232
Ich glaube es wäre einmal interessant wie und was du für den Timeout einstellst und wie genau dein ReadFile-Aufruf aussieht.
Wenn ich es richtig verstehe:
|
AW: Rs232
Jupp, entweder die Länge wird vorher mit gesendet, bzw. ist vorher bekannt/statisch, oder es gibt eine "Ende"-Kennung, egal ob in den Daten oder mit Hilfe der Steuerleitungen (DCD, DTR, DSR, RTS, CTS und RI).
Ansonsten kannst du halt nur warten, ob nicht doch noch etwas kommt. Alternativ vorher die maximal mögliche Zeit warten, wie lange eine Antwort dauern kann und danach dann einmal auslesen. (geht nur, wenn der Puffer des COM-Ports groß genug ist) |
AW: Rs232
Es gibt kein Ende-Zeichen und die Länge ist auch nicht bekannt.
So siehts aus: var s: AnsiString SetLength(s, InQueue); ReadFile(FComHandle, s[1], Length(s), result, @Overlapped); GetOverlappedResult(FComHandle, Overlapped, result, True); Das ganze wird halt x-mal wiederholt bis der Timeout (GetTickCount ...) abgelaufen ist. |
AW: Rs232
Und wann fällt die Zahl
Delphi-Quellcode:
vom Himmel?
InQueue
Ansonsten: Kannst du vom Protokoll aus denn überhaupt nicht erkennen ob denn nun nichts mehr kommt? |
AW: Rs232
if ClearCommError(FComHandle, e, @ComStat) then
result:=ComStat.cbInQue; Ansonsten zeigt mir die Antwort ob noch was kommt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 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-2025 by Thomas Breitkreuz