LabVIEWForum.de
Wert aus Array für Case Selection - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Wert aus Array für Case Selection (/Thread-Wert-aus-Array-fuer-Case-Selection)

Seiten: 1 2 3


RE: Wert aus Array für Case Selection - Lucki - 03.05.2016 22:22

(03.05.2016 15:17 )LazyCompany schrieb:  Deshalb gebe ich ja nach 0x02 die Länge der Daten an inkl. der Start- und Endkennung Wink
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.


RE: Wert aus Array für Case Selection - LazyCompany - 10.05.2016 14:43

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. Tongue 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 Smile
Vielen Dank an alle die ihre Zeit und Geduld hierfür aufgewendet haben!

Viele Grüße, Lazy


RE: Wert aus Array für Case Selection - GerdW - 10.05.2016 14:47

Hallo Lazy,

- 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? Hmm

Vorschlag:
[attachment=55859]
Wenn dein VI ein paar vernünftige Daten enthalten hätte, dann hätte ich meinen Vorschlag auch gleich testen können…


RE: Wert aus Array für Case Selection - Freddy - 10.05.2016 15:05

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?

Gruß
Freddy


RE: Wert aus Array für Case Selection - GerdW - 10.05.2016 15:25

Hallo Freddy,

Zitat:löscht sich bei Deinem Vorschlag nicht auch das Array sobald die innere If Anweisung false ist?
Nein: man beachte den Modus des Ausgangstunnels…


RE: Wert aus Array für Case Selection - jg - 10.05.2016 15:37

Ein wenig Offtopic2
(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


RE: Wert aus Array für Case Selection - Freddy - 11.05.2016 07:37

Hallo Gerd,
jetzt habe ich es auch gesehen. Top1 Super Variante.

Gruß
Freddy


RE: Wert aus Array für Case Selection - LazyCompany - 03.06.2016 07:38

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 Ahrg1 Ich hätte früher auf euch hören sollen - sorry Sad

Deshalb habe ich mich dem Vorschlag von GerdW angenommen. Ich habe das ganze mal aufgebaut und getestet, schöne Sache Gerdw! Danke! Smile
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? Blink

Viele Grüße,
Lazy


RE: Wert aus Array für Case Selection - Freddy - 03.06.2016 08:17

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.
Ein 1D Array mit Spalten und ZeilenIsagnix_2


RE: Wert aus Array für Case Selection - Freddy - 03.06.2016 08:43

Beim ersten Durchgang steht da ein Index von 28. Dein Array geht aber nur bis 27.
Mach es doch einfach so: