Guten Morgen! Ich bin gerade dabei dass ich mich in C# einlerne. Nun möchte ich ein, denke ich, einfaches Programm erstellen womit ich Daten von einen Mikroprozessor empfange und an eine Label.text Ausgebe. Die Daten kommen so [Byte][Byte][Byte][Byte][Byte][Byte][EndByte] Ich lese es mir Readexisting ein und kann es auch ausgeben. Aber, die Daten kommen so schnell bzw. die nächsten kommen gleich nach dass man nicht mehr erkennen kann wo das erste Byte ist. Nun meine Frage wie kann ich mich an das letzte Byte [EndByte] Synchronisieren damit ich immer meine 6Byte+[EndByte] auswerten kann? Danke für die Hilfe!
Du kannst einstellen, nach wie vielen empfangenen Bytes der Event ausgelöst wird. Du kannst alternativ auch alle Daten in z.B. eine Liste schreiben und diese nach dem EndByte durchsuchen und, wenn das EndByte angekommen ist, alle Bytes aus der Liste in die Datei schreiben. Wenn ich mich nicht irre, kannst du auch das EndByte als Zeilenumbruchzeichen definieren und ReadLine() benutzen. Problem dabei: das EndByte darf (!!) nicht in den Daten vorkommen. Das ist bei Variante zwei ebenfalls ein Problem.
vergiss die Vorschläge mit ReadLine und Readexisting. Das sind String funktionen. Wenn du bytes empfangen willst dann verwende Read oder Readbyte. Sonst handelst du dir nur ärger mit der Zeichensatz-Konvertierung ein. erstmal ohne events. byte b = com.ReadByte();
Martin schrieb: > Nun meine Frage wie kann ich mich an das letzte Byte [EndByte] > Synchronisieren damit ich immer meine 6Byte+[EndByte] auswerten kann? Dein Problem hat mit C# erstmal gar nichts zu tun. Du überträgst Daten ohne jegliches Protokoll. Wozu sendest du ein "Endbyte"? Du brauchst kein End- sondern ein Startbyte, damit der Empfänger sich darauf synchronisieren kann. Zuende ist der Datenblock dann, wenn die vereinbarte Zahl an Daten empfangen wurde. Wie soll sich denn der Empfänger auf den 1. Block synchronisieren? Da gab es vorher kein Endbyte. Aber ein Synchronisationsbyte muss eindeutig sein. Das ist bei binärer Übertragung aber nicht der Fall. Denn die Daten können jeden Wert von 0 255 annehmen. Und somit auch für ein Sync-Byte gehalten werden. Deshalb überträgt man die Daten im Ascii-Format. Also aus jedem Nutzdaten-Byte werden 2 Ascii-Zeichen, die nur die Werte von 0x30-0x39 oder 0x41-0x46 bzw. 0x61-0x66 annehmen können. Alle anderen Werte stehen dann zur Synchronisation oder für andere Zwecke, z.B. Acknowledge, zur Verfügung. Z.B. kann man nach jedem empfangenen Block ein Acknowledge senden, auf das der Sender wartet, bevor er den nächsten Block sendet. Man kann auch die Daten noch prüfen und ggf. ein NACK senden, was den Sender den letzten Block wiederholen lässt. Das verdoppelt zwar die Menge der zu übertragenden Bytes, also halbiert den Datendurchsatz, steigert aber die Sicherheit auf 100%. mfg.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.