Einzelnen Beitrag anzeigen

AJ_Oldendorf

Registriert seit: 12. Jun 2009
385 Beiträge
 
Delphi 12 Athens
 
#32

AW: COM Port Daten auslesen und auf bestimmtes Char reagieren

  Alt 10. Feb 2016, 09:01
Hallo,
mein Ablauf sieht jetzt so aus:


ComPortInit
Daten vorhanden an Schnittstelle?

Delphi-Quellcode:
TmpMask := EV_RXFLAG;
WaitCommEvent(SerHandle, TmpMask, @rOverlapped);
Thread prüft Overlapped Event auf WAIT_OBJECT_0 im Execute

Delphi-Quellcode:
if ReadFile (MyHandle, ReceiveBuffer, 1024, ReceivedBytes, @rOverlapped) then
begin
  //Tue irgendwas mit den Daten
  //Now als Zeitstempeleingang nutzen
  //Protokolliere Daten
end;
Wieder auf Daten vorhanden prüfen an Schnittstelle

Delphi-Quellcode:
TmpMask := EV_RXFLAG;
WaitCommEvent(SerHandle, TmpMask, @rOverlapped);
Daten vorhanden? Dann wird Thread wieder angetriggert usw. usw. usw.


Das läuft soweit auch ganz gut auf meinem Rechner.
Trotzdem passiert es ab und zu, dass ich 2 oder 3 Strings rein bekomme (bzw. in meinem Protokoll sehe), die genau den gleichen Zeitstempel haben (Now wird genutzt nach dem ReadFile für den Zeitstempel).

Jetzt habe ich das auf einem anderen Rechner probiert und da sieht das Protokoll noch "schlechter" aus.

Der String den ich bekomme hat immer 14 Byte + #13#10

Inhaltsbeispiel:
abcdefghijklmn#13#10

Auf meinem Rechner sieht es erstmal ganz gut aus, bis auf dem Problem mit den 2-3 Werten, die alle den gleichen Zeitstempel haben.

Auf dem anderen Rechner sieht das Protokoll so aus (jede Zeile ist ein Wert):

abcdefghijklmn#13#10
abcdefghijklmn#13#10
abcdefghijklmn#13#10
abcdefghi
jklmn#13#10
abcdefghijklmn#13#10
abcdefghijklmn#13#10
abcdefghijklmn#13#10
abcdefghijklmn#13#10
abcde
fghijklmn#13#10
abcdefghijklmn#13#10
abcdefghijklmn#13#10
abcdefghijklmn#13#10
abcdefghijkl
mn#13#10
abcdefghijklmn#13#10
abcdefghijklmn#13#10
abcdefghijklmn#13#10
abcdefghijklmn#13#10

Das ist nur ein Beispiel...
Wie man aber sieht, sind die Werte nicht immer am #10 beendet wurden sondern auch irgendwo dazwischen.
Das sieht für mich so aus, als wenn das WaitCommEvent kommt (#10 erkannt) und ich dann mit ReadFile auslese aber noch nicht alle Daten vollständig im Cache sind. Kann das sein?
Ansonsten würde ja das ReadFile nicht angetriggert werden wenn das WaitCommEvent nicht kommt.
Habt ihr dazu noch eine Idee?
  Mit Zitat antworten Zitat