Hei Leute!
Ich lese vom Serial Port Daten aus. Wenn BytesToRead 0 ist soll er aus einer schleife
hüpfen. Dies üerwache ich wie folgt:
if (com_port.BytesToRead == 0)
aber er hüpft immer egal wie groß BytesToRead ist in die Bedingung. Weis jemand warum das so ist?
Lg
wenn ich einen Brakepoint setze hat BytesToRead aber einen Wert also müsste er den ja auch zuweisen. Oder nicht. Es ist jedenfall so dass noch Daten zum lesen da wären aber dadurch das BytesToRead falsche Werte zurück gibt nichts ausgelesen wird.
setz den brakepoint aber nach der codzeile
alos so
com_port.Read(recieve_data_arr, 0, recieve_data_arr.Length+(47*count));
anz=com_port.BytesToRead;
Breakpoint.
Und dann müsste anz den richigen wert haben. es ist devinitiev so dann noch was zum lesen da ist aber er nichts liest weil er anz falsch beschreibt!
Da die SerialPort-Klasse Daten puffert, der in der BaseStream-Eigenschaft enthaltene Stream jedoch nicht, gibt es möglicherweise Konflikte dahingehend, wie viele Bytes gelesen werden können. Die BytesToRead-Eigenschaft kann angeben, dass zwar Bytes zum Lesen vorhanden sind, der in der BaseStream-Eigenschaft enthaltene Stream aber möglicherweise nicht auf diese Bytes zugreifen kann, da sie in der SerialPort-Klasse gepuffert wurden.
Ja das alles Hilft mir leider nicht weiter!
Mein Problem ist folgendes:
Ich Habe ein Protokoll mit 47 Byte (feste Länge). Ich bekomm zwei hinter einander (also 94 Byte). Und will beide auslesen, hintereinander!
count erhöhe ich um 47 nach dem ersten durchgang und recieve_arr_size ist 47.
beim zweiten mal hüpft er a ber immer ins ctach ich hab aber keinen plan warum und die exception kann ich warum auch immer auch nicht abfragen
try { com_port.Read(recieve_data_arr, count, recieve_arr_size); }
catch (Exception a){ }
Irgendwer ne Ahnung warum?
jedes Serielle Protokoll, daß ich bis jetzt verarbeitet habe, hat ein Start und ein Endezeichen.
Ich habe eine Variable oder ein array daß ich mit den empfangenen Daten fülle.
Beim Startzeichen wird die Variable/array gelöscht, und beim Endezeichen in eine Queue geschrieben.
Somit kann auch mehr wie 1 Datensatz auf einmal eingelesen werden.
Erst dann prüfe ich die Daten.
Wer garantiert dir, daß nicht ein Zeichen irgendwo verloren geht?