Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
03.05.2016, 22:22 (Dieser Beitrag wurde zuletzt bearbeitet: 03.05.2016 22:23 von Lucki.)
(03.05.2016 15:17 )LazyCompany schrieb: Deshalb gebe ich ja nach 0x02 die Länge der Daten an inkl. der Start- und Endkennung
So einfach ist das nicht: Solange der Datenstrom noch nicht synchronisiert ist, ist nicht auszuschließen, dass ein 0x02 mitten im Datensatz fälschlich als Startbyte interpretiert wird.
Grob gesagt, gibt es bei der seriellen Übertragung nur zwie gut funktionierende Protokolle:
1.) Mit Steuerzeichen
(da genügt schon ein <CR> am Ende eines Datensatzes) Dann müsen die Daten aber ASCII-Codiert sein. D.H für jedes Datenbyte braucht man 2 ASCII Bytes (00..FF), oder bei dezimalem ASCII sogar 3 Bytes (000..255)
2.) Direkte Übertragung der Datenbytes
Das funktioniert nur richtig im Master-Slave-Modus: Der Master fordert jeden Datensatz einzeln an, da Slave sendet nur wenn er gefragt wird. Hier sollte entweder die Bytelänge konstant sein, oder das erste Byte ist die Bytelänge. Steuerzeichen sind dann überflüssig bzw.kann es gar nicht geben, da der ganze Zahlenraum für Daten verwendet wird.
Bei Datenprotokollen sollte man sich an Bewährtes halten. Creative Neuerfindungen von Anfängern, wie man sie hier im Forum immer mal wieder sieht - so wie z.B. hier - sind unnötig und gehen fast immer in die Hose.
Hallo Lucki!
Doch, die Steuerzeichen gibt es für Start und Stop und zwar ASCII codiert mit STX und ETX. Ich habe festgestellt das die Längenangabe falsch berechnet wurde, jetzt klappt es. Trotzdem danke für den Hinweis, in die Hose ging trotzdem viel bisher. Das mit dem Master Slave Modus mache ich nun als Producer-Consumer damit nix verloren geht.
Danke nochmal an Freddy für den gedanklichen Anstupser, habe mal angehängt wie ich es jetzt mache.
Funktioniert soweit sogar ganz gut
Vielen Dank an alle die ihre Zeit und Geduld hierfür aufgewendet haben!
Viele Grüße, Lazy
10.05.2016, 14:47 (Dieser Beitrag wurde zuletzt bearbeitet: 10.05.2016 14:56 von GerdW.)
- bist du dir sicher, dass dein Array im Schieberegister in allen FALSE-Cases gelöscht werden soll?
- Wozu die (ungebremste) While-Schleife um den Code?
- Warum DeleteFromArray, wenn du eigentlich ArraySubset nutzen willst?
- Warum InsertIntoArray, wenn du eigentlich BuildArray nutzen willst?
Hast du dein VI wirklich ausgiebig getestet?
Vorschlag:
Wenn dein VI ein paar vernünftige Daten enthalten hätte, dann hätte ich meinen Vorschlag auch gleich testen können…
Hallo Lazy,
so sollte die innere Schleife sein nach der Vorstellung von Gerd.
ich vermute, dass das Programm dann weniger Speicher und weniger Zeit benötigt.
Wenn Du die Array erstellen Funktion verwendest musst Du die Eingänge verknüpfen.
Gruß
Freddy
Sorry, habe den Vorschlag von Gerd nicht gesehen.
Hallo Gerd,
löscht sich bei Deinem Vorschlag nicht auch das Array sobald die innere If Anweisung false ist?
(10.05.2016 14:43 )LazyCompany schrieb: Doch, die Steuerzeichen gibt es für Start und Stop und zwar ASCII codiert mit STX und ETX.
Solange aber nicht dafür gesorgt wird, dass diese Zeichen nicht im Rest des Datenstroms vorkommen können, kann es zu Problemen kommen. Und laut deiner Bsps kommen genau diese Zeichen auch im Rest der Daten vor.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Zitat:LazyCompany schrieb:
Doch, die Steuerzeichen gibt es für Start und Stop und zwar ASCII codiert mit STX und ETX.
Zitat:Solange aber nicht dafür gesorgt wird, dass diese Zeichen nicht im Rest des Datenstroms vorkommen können, kann es zu Problemen kommen. Und laut deiner Bsps kommen genau diese Zeichen auch im Rest der Daten vor.
Gruß, Jens
Ich wollte einfach nicht hören, jetzt hab ich den Salat. Mein Programm schmiert oft ab weil ein Datenzeichen fälschlicherweise als Steuerzeichen interpretiert wird - wer nicht hören will muss fühlen Ich hätte früher auf euch hören sollen - sorry
Deshalb habe ich mich dem Vorschlag von GerdW angenommen. Ich habe das ganze mal aufgebaut und getestet, schöne Sache Gerdw! Danke!
Es gibt dabei nur ein Problem:
Mein Array ist zwar auch 1D - kommt aber in einer anderen Form vor, Zeilen und Spalten sind vertauscht. Ich habe das ganze mal angehängt. Array2 funktioniert, BeagleArray_U8 nicht.
Die Daten in BeagleArray_U8 sind echt eingelesene - ich weiß das ich ein 1D Array nicht transponieren kann - jemand eine Idee?
Zitat:Mein Array ist zwar auch 1D - kommt aber in einer anderen Form vor, Zeilen und Spalten sind vertauscht. Ich habe das ganze mal angehängt. Array2 funktioniert, BeagleArray_U8 nicht.