Seriellen Datenstrom in hierachischen Cluster parsen - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Seriellen Datenstrom in hierachischen Cluster parsen (/Thread-Seriellen-Datenstrom-in-hierachischen-Cluster-parsen) Seiten: 1 2 |
Seriellen Datenstrom in hierachischen Cluster parsen - tanka - 11.08.2010 11:23 ' schrieb:daß er nicht Lust hat, auf der Sendenseite einen Header zu programmieren, ... Leider geht es hier nicht nach er Lust. Ich KANN gar nicht, denn die Senderseite habe ich nicht in der Hand.Es handelt sich um ein fertiges Gerät. Die Kommunikation ist schon ja auch schon fertig und funktioniert bestens. Ich versuche nochmal mein Problem zu erleutern: Ich habe einen großen Cluster im Frontpanel und Knöpfe mit "Senden" und "Empfangen". Ich erhalte von diesem Teil Daten im Datentyp 1D-U8-Array (Bytestream) mit bestimmter Länge. Diesen Bytestream möchte ich nun an meinen Cluster im Frontpanel weitergeben und ihn gerne korrekt angezeigt haben. D.h. die ersten 4Bytes (des Bytestreams) sollen ein Float werden weil auch das 1. Element im Cluster ein Float ist. die nächsten 2 Byte (des Bytestreams) sollen als String interpretiert werden weil das 2. Element im Cluster ein... Weiterhin soll von meinem Labviewprogramm auch ein selbiger Bytestream erzeugt werden können. Ich suche nun nach einer Lösung,bei der ich... ...nicht jedes Element einzeln in/aus den/m Cluster geben muss ...nicht die "Zusatzinformationen"(Header) händisch in den Bytestream ein-/ausstricken muss. Mehr nicht. ' schrieb:Ja, richtig, es befinden sich Zusatzinformationen im String, von mir aus nennen wie sie Header. Aber das Entscheidende ist doch, daß niemand (Programmier-) Arbeit damit hat.Ich hoffe du kannst mir trotzdem helfen. Seriellen Datenstrom in hierachischen Cluster parsen - IchSelbst - 11.08.2010 11:41 Hinweis: Bei kaskadierten, komplexen Datentypen ist das mit hart typcast nicht mehr so einfach. In LV gibt es nur dynamische Arrays. Die aber werden im Cluster als Pointer auf die Daten gehandhabt, nicht mit ihren Daten selbst. In einem Datenstream aber steht das (fixed-sized) Array mit seinen Daten. Woher soll der Cluster jetzt wissen, dass das dynamische Array eine bestimmte Länge haben soll. Bei Strings tritt ein analoges Problem auf. Es wird dir also mit einem Typcast nicht gelingen, das 1DArrOfU8 in einen Cluster zu wandeln - solange nicht vor dynamischen Typen die Länge steht. Ohne explizite Längenangaben im Stream bleibt dir nur die Möglichkeit, das 1DArrUfU8 abschnittsweise in die Elemente des Cluster zu typcasten. Seriellen Datenstrom in hierachischen Cluster parsen - Lucki - 11.08.2010 12:34 ' schrieb:Ich hoffe du kannst mir trotzdem helfen.Ja, gern, aber es wäre viel einfacher, wenn Du dazu das hier beitragen würdest: Ein VI posten, welches nur diese beiden Elemente enthält 1. Einen Beispielstring oder das entsprechende U8-Array. (als Konstante oder als Anzeige/Bedienelement) 2. Ein Clusterelement mit genau den Daten, wie sie in dem Beispielstring auch enthalten sind. (Als Konstante oder als Anzeige/Bedienelement) Beim Posten als Anzeige/Bedienelement nicht vergessen, vor dem Abspeichern des VI "Diese Werte als Standard" ankzulicken. Wenn es sich, wie Du sagtst, nur um reine Dateninhalte ohne Zusatzinformationen handelt, dann kann das nur funktionieren, wenn es im Cluster weder Arrays variabler Länge noch Strings varabler Länge gibt. Seriellen Datenstrom in hierachischen Cluster parsen - tanka - 11.08.2010 13:14 ' schrieb:... dann kann das nur funktionieren, wenn es im Cluster weder Arrays variabler Länge noch Strings varabler Länge gibt. ' schrieb:Hinweis:Wie jetzt? Es werden im die gleiche Anzahl an Elementen in einem Array empfangen/gesendet. Diese Anzahl ist mir auch bekannt. Ob dieses dann dynamisch (variabel lang) ist weiß ich nicht. Hier mal das VI: [attachment=28702] Seriellen Datenstrom in hierachischen Cluster parsen - IchSelbst - 11.08.2010 13:42 ' schrieb:Wie jetzt? Es werden im die gleiche Anzahl an Elementen in einem Array empfangen/gesendet. Diese Anzahl ist mir auch bekannt.Luckis und meine Aussage widersprechen sich nicht. Ob dir die Länge des Arrays bzw. des Strings bekannt ist oder nicht, ist für das LV-Programm unerheblich. Gesetzt der Fall dein Datenstream hieße "00 11 22 33 44 55 66 77 88" und "22 33 44 55" seinen ein Array im Cluster. Woher soll das LV-Programm wissen, dass das Array genau diese vier Zeichen ist und nicht doch drei mehr? Man könnte meinen, wenn man an den Typeingang von TypCast oder Unflatten einen CLuster anschließt, in dem das Array vier Werte hat, dann müsste LV doch in der Lage sein, den Stream automatisch dem Cluster zuzuweisen. - Wäre schön, wenn das ginge - geht aber leider nicht. [*ausprobier*] Aus diesem Grunde kann man an einen harten Typcast auch keinen Cluster anschließen, der komplexe Datentypen (Arrays und/oder Strings etc.) enthält. Auch Unflatten geht nur, wenn im Stream die Arraylänge angegeben ist. Seriellen Datenstrom in hierachischen Cluster parsen - Lucki - 11.08.2010 13:55 ' schrieb:Hier mal das VI:Genau das hatte ich befürchtet, und damit das nicht passiert, was nun doch passiert ist (leeres U8-Array), hatte ich noch eine Bedienungsanleitung mitgegeben. Also noch mal: ENTWEDER: rechte Maustaste/Datenoperationen/Diesen Wert alS Standard ODER: Auswählen, Hauptmenü Bearbeiten/Markierte Werte als Standard Dann abspeichern, posten Seriellen Datenstrom in hierachischen Cluster parsen - Lucki - 11.08.2010 15:09 Habe gesehen, daß immerhin die Werte in das VI mit hineingeschrieben wurden. Damit ließ sich etwas machen. Das Ergebnis sieht so aus: [attachment=28709] Des VI enthält enthalt noch etwas Hilfscode zur Erzeugung der Typbeschreibung und wie man herausfindet, wo die Arraylänge in den Bytestrom eingefügt werden muß. Das kann aber alles gelöscht werden, wenn Die Konvertierung so wie in der Graphik abgebildet funktioniert. Der zusätzliche Code soll nur verständlich machen, wie das VI entstanden ist. [attachment=28710] Anmerkung: Da die Arraylänge mit 2 Elementen immer konstant ist, wäre es sinnvoller, wenn man statt des SGL-Arrays ein Cluster hätte. Damit entfällt die Arraygrößenangabe im Bytestrom. d.h man könnte direkt den Originalstream zur Konvertierung benutzen und alles würde viel einfacher. Und das ist sogar untertrieben: Das ganze Problem schrumpft dann zu enem Nichts zusammen. [attachment=28715] Edit: Und wenn das nicht sein soll, dann geht es auch so: [attachment=28716] |