Hallo zusammen,
ich habe ein Gerät, welches mir ca. aller 10ms ein Wert über die serielle Schnittstelle liefert.
Dieser String hat immer den gleichen Aufbau und endet mit #13#10.
Das Gerät kann aber auch andere Daten schicken aber es wird immer mit #13#10 abgeschlossen.
In meiner Software habe ich eingestellt, dass ich auf das #10 reagieren möchte und damit das Ende eines Strings erkenne.
Leider wird mir immer der komplette Buffer gefüllt den ich bei ReadFile angegeben habe und nicht nur bis zu dem gesetztem RXFlagChar (#10).
Zum seriellen Gerät:
Baudrate: 19200
Parität: Keine
StopBits: 1
Hier ein Ausschnitt, wie ich die serielle Schnittstelle initialisiere:
Delphi-Quellcode:
MyHandle := CreateFileA (tmpStr, Generic_Read or Generic_Write, 0, Nil,
Open_Existing, FILE_FLAG_OVERLAPPED, 0);
if MyHandle <> INVALID_HANDLE_VALUE then
begin
if SetupComm (MyHandle, 1024, 1024) then //eigentlich interessiert mich der Buffer nicht da ich immer nur bis #10 erkennen möchte
begin
FillChar (DCB, SizeOf(TDCB), 0);
DCB.DCBlength := SizeOf (TDCB);
DCB.BaudRate := 19200;
DCB.Flags := $0001;
DCB.Parity := 0;
DCB.ByteSize := ByteSize;
DCB.StopBits := 0;
DCB.EvtChar := #10;
if SetCommState (MyHandle, DCB) then
begin
With CommTimeOuts do
begin
ReadIntervalTimeout := 10;
ReadTotalTimeoutMultiplier := 0;
ReadTotalTimeoutConstant := 0;
WriteTotalTimeoutMultiplier := 0;
WriteTotalTimeoutConstant := 0;
end;
if SetCommTimeouts(SerHandle, CommTimeOuts) then
begin
if SetCommMask(SerHandle, EV_RXFLAG) then
....
Die Software läuft soweit und die Kommunikation zum seriellen Gerät ist auch vorhanden nur habe ich wie gesagt das Problem, dass immer der komplette Buffer gefüllt wird, bevor ich ein Event bekomme. Ich hätte gerne ein Event nach jedem #10.
Hier der Ausschnitt vom ReadFile:
Delphi-Quellcode:
rOverlapped.Offset := 0;
rOverlapped.OffsetHigh := 0;
ReadFile (MyHandle, ReceiveBuffer, 1024, ReceivedBytes, @rOverlapped);
Kann mir da jemand ein Tip geben wo ich weiter suchen könnte?
Viele Grüße