(19.11.2013 17:26 )jg schrieb: Deshalb die folgende plausible Vermutung:
Deine Gegenstelle sendet unaufgefordert ihre Messwerte. Mglw. werden immer alle Messkanäle als 1 langer Block gesendet, wobei die Blöcke durch die erwähnten 3 0x0 Bytes getrennt werden.
Genau so ist es.
(19.11.2013 17:26 )jg schrieb: Das ist aber noch nicht alles. Wenn man mitten in einen laufenden Datenstrom hineinhört, dann beginnt das Lesen nicht nur mit dem womöglich falschem Byte. Das Lesen kann sogar mitten ein einem der seriell übertragenen Bytes beginnen. Man muß also zu allererst so lange 1-Byte-weise Lesen, bis kein "Rahmenfehler" mehr auftritt.
Man sollte auch mal darauf hinweisen, dass Daten über die seriellen Schnitstelle normalerweise im ASCII-Format übertragen werden. Man braucht dann allerdings für jedes Datenbyte einen String von 2 Byte Länge, also z.B. für den Wert "255" den zweistelligen Srring "FF". Dafür fällt aber der ganze Shit mit Synchronisation-Bytes und Parsen weg. Ein Datensatz wird dann einfach mit dem Zeilenendezeichen abgeschlossen, das genügt zur Synchronisation.
In hier in diesem Fall bringt die direkte Übertragung von Datenbytes sogar überhaupt nichts: Es werden jetzt pro Datensatz 5 Bytes übertragen (3 Synchronisationsbytes und 2 Datenbytes). Eine ASCII-Übertragung würde auch nur 5 Bytes brauchen (1 Byte Kanal-Nr, 3 Bytes Daten, 1 Bytes Zeilenende)
Bei der Direkt-Byte-Übertragung gibt es immer das Problem, dass das Synchronisationsmuster nicht in den Daten vorkommen darf. Das könnte man hier dadurch erreichen, dass man die KanalNr. "0" nicht verwendet. Ansonsten könnte es passieren, dass bei gleichzeitigem Dateninhalt = 0 mehr als 3 Byte den Wert 0 haben und die Start-Markierung nicht eindeutig ist.
Das "Experimental-Board" hast Du doch selbst programmiert, nehme ich an. Was hindert Dich daran, auf ASCII-Format umzusteigen?
puh okay, da merke ich wieder, dass ich nicht so sehr mit der Materie vertraut bin wie ich es vlt. schon gerne wäre.
ich hatte das so verstanden, dass auch im Moment eine ASCII-Übertragung vorliegt und ich aber den ASCII-String mit "String to Byte-Array" konvertiere. Das Board wurde mir so gestellt.
Innerhalb einer Schleife müsste ich ja dann eine Bedingung erzeugen welche prüft, ob 3x 0x00 hintereinander kommt, und wenn nicht, das nächste Byte abgewartet wird um den gesamten String dann wieder daurauf zu untersuchen, stimmt das? Wie das funktioniert ist dann wieder eine andere Baustelle