ich bin am verzweifeln ( ist ja nichts neues bei mir :-P )..
Irgendwie bekomme ich es nicht anständig hin, dass ich die eingehenden Daten sammele und verarbeite..
Bei höheren Baudraten ≥ 115200 funktioniert es besser oder gar überhaupt also mit niedrigeren Baudraten.
Vermutlich ist das Probleme, das die Daten bei niedrigeren Baudraten langsamer eintreffen und das Event mehrmals aufgerufen wird.. Bei höheren sind manchmal bei der Auswertung schon alle Daten da..
Das ganze soll nach folgendem Protokoll laufen ->
Das Ende erfahre ich halt an dem "Nachrichtenlänge" Byte..
Hat jemand eine Idee, was ich besser machen könnte?!
public void Client_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
/* Protokoll
*
* Startbyte[0] : '-'
* Startbyte[1] : '+'
* Nachrichtenlänge[2] : 0..255
* Anzahl Nutzdaten[3] : 0..255
* Daten Type[4] : 0..6
* Nachrichten Identifikation[5] : 0..255
* Funktionsrückgabe Code[6] : 0..255
* Checksumme[7] : 0..255
* Nutzdaten[8..n] : 0..255
*/
Thread.Sleep(10);
/* Empfangene Daten abholen
*/
try
{
Length += Client.Read(buffer, Length, 250);
}
catch { }
/* Kommando Start Parsen
* Rückgabewert: - 1 = Kein Start gefunden..
*/
int index = Parser.ParseStart(buffer);
if (index != -1)
{
/* Anzahl der zu empfangenen Bytes auslesen
* HIER WIRD NOCH KEIN CRC BERECHNET!
* Es könnten Übertragungsfehler nicht erkannt werden..
*/
BytesToReceive = buffer[index + (byte)Cmd.Communication_Header_Enum.CMD_HEADER_LENGHT];
}
/* Wurden alle Bytes empfangen?
* Wenn nicht, direkt wieder raus hier!
*/
if (Length < BytesToReceive)
{
return;
}
else
{
Length = 0;
BytesToReceive = 0;
}
/* Kommando untersuchen..
*/
Parser.Parse(buffer, ref Cmd.CommandoParsed);
}