Regulärer Ausdruck für bestimmte Bitfolge - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Regulärer Ausdruck für bestimmte Bitfolge (/Thread-Regulaerer-Ausdruck-fuer-bestimmte-Bitfolge) Seiten: 1 2 |
Regulärer Ausdruck für bestimmte Bitfolge - Florian79 - 17.07.2006 11:30 Hallo zusammen, ich möchte über eine serielle Schnittstelle(RS-232) Daten die von einem DSP gesendet werden einlesen. Die Datenblöcke sind folgender Maßen aufgebaut. 12 bit lang, 1 start bit -> 8 Daten bits (LSB...MSB) -> 1 Adress bit (gesetzt im ersten datenblock) -> 1 Paritäts bit -> 1 stop bit Mein Problem ist nu das ich die eingehenden Daten binär auf diese Form hin kontrollieren muß, um zwischen dem Adressblock und den Datenblocks unterscheiden zu können. Ich wollte erst einmal dieses Beispiel http://forum.ib-berger.com/viewtopic.php?t=29 so abändern das ich 2 Datenblöcke einen Adress und einen Datenblock einlese und dann anzeige oder abspeichere. Ich habe mir gedacht den regulären Ausdruck in Match Patter entsprechen zu ändern und dann über scan from string die entsprechenden Adress bzw Daten Informationen weiter zu verarbeiten. Leider weiß ich nicht wie ich den regulären Ausdruck formulieren soll, gibts vielleicht eine funktion die die Auswertung der Daten in binärer Form erleichtert. Ich hoffe das war einiger Maßen verständlich. Danke und Gruß Florian Regulärer Ausdruck für bestimmte Bitfolge - Florian79 - 19.07.2006 08:21 Hallo Leute, hat keiner einen Vorschlag?? Ich möchte hier auch keine fertige Lösung bekommen, es würde mir schon etwas in der Art schau Dir mal die Funktion so und so an und versuchs mal so und so. Ich bin gerade erst bei der Einarbeitung in LV und es ist wirklich sehr Umfangreich :-) Da meine Diplomarbeit zum großen Teil auf LV basiert werde ich mich sowieso näher damit beschäftigen, aber eine kleine Hilfestellung hier und da wäre trotzdem super . Gruß Florian Regulärer Ausdruck für bestimmte Bitfolge - Achim - 19.07.2006 08:54 Hi, vielleicht hilft dir das Bildchen ein wenig...ich verstehe noch nicht so ganz, was du eigentlich machen willst! Musst du den ersten empfangenen von allen anderen Datenblöcken separieren (in dem das Adressbit als Hinweis "Ich bin der Adressblock" gesetzt ist)? Dann sollte dir die gezeigte Funktion was nützen, da kannst du dann einfach überprüfen, ob das betreffende Bit gesetzt ist... Gruss Achim [attachment=2626] Regulärer Ausdruck für bestimmte Bitfolge - Florian79 - 19.07.2006 10:09 Erstmal danke Achim! Genau das ist es was ich tun muß, ich muß ihn als Adressblock erkennen und dann entsprechend interpretieren. Das Bild ist ja schonmal ein guter Anfang, wenn Du mir vielleicht erklären könntest welche Bausteine Du da verwendet hast, dann kann ich mir die Hilfedateien dazu durlesen. Mein Problem ist nämlich das ich nicht weiß wie ich die Daten oder zumindest den Adressblock binär interpretieren kann ich habe beim rumstöbern gelesen das LV die Daten an der seriellen Schnittstelle immer als ASCII kodiert erwartet?! Die Datenbits in den Datenblöcke werden warscheinlich ASCII kodiert werden und da müßte ich dann ja eigendlich mit scan from string ausglierdern und zusammenfügen können oder? Gruß Florian Regulärer Ausdruck für bestimmte Bitfolge - Achim - 19.07.2006 10:24 Hi, hier mal das VI... Gruss Achim [attachment=2627] PS: Wenn du so wie gezeigt in Boole'sche Werte wandelst, dann musst du nicht im String nach irgend nem Ausdruck suchen. Wenn du den Adressblock identifiziert hast, kannst du die Adresse (bzw. in den anderen Blöcken die Daten) einfach mit String- oder Array-Funktionen (zB Index Array) extrahieren und dann verarbeiten... Regulärer Ausdruck für bestimmte Bitfolge - Florian79 - 19.07.2006 11:39 Ich habe mal Ansatzweise Dein Beispiel abgeändert und als Eingangsstring die Daten aus der seriellen Schnittstelle mit Match Pattern auf richtiges Format geprüft und dann als Eingang auf Scan Value gelegt. Könnte das so funktionieren? Die Umwandlung in einen boolschen Array ist wirklich praktisch für die weiter Verarbeitung:Dauch wenn ich noch nicht so ganz weiß wie ich das machen soll, aber da wird die LV Hilfe warscheinlich weiter helfen. Danke und Gruß Florian[attachment=2628] Regulärer Ausdruck für bestimmte Bitfolge - Florian79 - 21.07.2006 09:12 Ich hab gestern ein wenig rumprobiert und bin bei der Verarbeitung des booleschen array auf einige Probleme gestoßen. Wenn ich die booleschem Werte wieder in Binärwerte umwandel macht LV daraus 16bit Integer Einsen und Nullen, ich brauche aber alle Datenbits zusammen als ein 8 bit Integer. Kann mir jemand einen anderen Weg sagen wie ich aus dem booleschen array einen 8bit Integer mit meinem ASCII Zeichen bekomme?? Danke Florian Regulärer Ausdruck für bestimmte Bitfolge - Achim - 21.07.2006 10:43 Hi, die Umwandlung in U16 in meinem Beispiel erfolgte deshalb, weil ja pro Nachricht 12 Bit ankommen. Aus diesen kannst du dann ja die acht Datenbits extrahieren (Array Subset), dann hast du ein boolesches Array mit dann acht Elementen. Die Booleschen Werte sind doch nix anderes wie Binärwerte...was meinst du da genau? Wandelst du wieder in nen String mit Einsen und Nullen? Dein boolesches Array wandelst du vermutlich irgendwann wieder in ne Zahl (Boolean Array to Number), da kommt ne U32 Zahl raus (default-mäßig). Diese kannst du doch mit der entsprechenden Funktion locker in ne U8 Zahl wandeln, wenn du dieses Format benötigst... Hab ich dich falsch verstanden? Dann werd ein bisschen konkreter, am besten mit VI oder Screenshot! Kriegst du jetzt eigentlich die Trennung von Daten- und Adressblocks hin? Gruss Achim Regulärer Ausdruck für bestimmte Bitfolge - Florian79 - 21.07.2006 11:28 Hi Achim, ich versuchs mal genauer zu erklären, die umwandlung in U16 und danach ins boolsche array ist schon so in Ordnung weil man mit dem array wirklich gut arbeiten kann bezüglich Trennung Adress und Datenblock. Das hab ich zwar noch nicht gemacht aber das dürfte mit einer Case Struktur und dem Adressbit als Bedingung gut funktionieren, danke nochmal für den Tip. Ich habe dann versucht aus den booleschen Werten Zahlen zu machen, aber da kommt eine 16bit integer 1 oder 0 raus und wenn diese Werte in ein array schreibe kriege ich Probleme den eigendlichen ASCII Wert raus zu kriegen "Byte-Array nach String" interpretiert die arrayelemente als 8bit ASCII Zeichen. Mit (Boolean Array to Number) wird das array auch ander interpretiert ( siehe vi) hier ein Auszug aus der Hilfe "Ist der erste boolesche Wert TRUE, wird 1 ausgegeben. Wenn der zweite Wert TRUE ist, wird 2 ausgegeben. Sind beide TRUE, wird 3 ausgegeben.". In meinem Beispiel hab ich Ascii a geschickt und raus kommt ein †. Ich habe mir eine Schleife gebastelt die mir die mir den boolschen Teilarray in einen array mit Einsen und Nullen umwandelt, aber diese 1 und 0 sind im array auch als irgendetwas anderes als binärwerte abgelegt. Wenn also eine funktion gäbe mit der ich eine 1 ( als interger oder boole oder sonst was) in eine binäre 1 umwandeln könnte müsste ich weiter kommen. [attachment=2653] Ich hoffe das man mit dem Beispiel klar kommt Gruß Florian Regulärer Ausdruck für bestimmte Bitfolge - Achim - 21.07.2006 12:29 Hi, schau mal ins VI! So gehts, oder? Die Wandlung in boolesche Array kannst du ja trotzdem irgendwo brauchen, oder? Gruss Achim [attachment=2654] [attachment=2655] |