17.07.2006, 11:30
Beitrag #1
|
Florian79
LVF-Grünschnabel
Beiträge: 20
Registriert seit: Jul 2006
8
2006
kA
Deutschland
|
Regulärer Ausdruck für bestimmte Bitfolge
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
|
|
|
19.07.2006, 08:21
Beitrag #2
|
Florian79
LVF-Grünschnabel
Beiträge: 20
Registriert seit: Jul 2006
8
2006
kA
Deutschland
|
Regulärer Ausdruck für bestimmte Bitfolge
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
|
|
|
19.07.2006, 08:54
Beitrag #3
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
Regulärer Ausdruck für bestimmte Bitfolge
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
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
19.07.2006, 10:09
Beitrag #4
|
Florian79
LVF-Grünschnabel
Beiträge: 20
Registriert seit: Jul 2006
8
2006
kA
Deutschland
|
Regulärer Ausdruck für bestimmte Bitfolge
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
|
|
|
19.07.2006, 10:24
(Dieser Beitrag wurde zuletzt bearbeitet: 19.07.2006 10:28 von Achim.)
Beitrag #5
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
Regulärer Ausdruck für bestimmte Bitfolge
Hi,
hier mal das VI...
Gruss
Achim
Finde_Bitwert_in_Bin_rstring.vi (Größe: 9,37 KB / Downloads: 322)
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...
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
19.07.2006, 11:39
Beitrag #6
|
Florian79
LVF-Grünschnabel
Beiträge: 20
Registriert seit: Jul 2006
8
2006
kA
Deutschland
|
Regulärer Ausdruck für bestimmte Bitfolge
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
Finde_Bitwert_in_Bin_rstring.vi (Größe: 13,48 KB / Downloads: 273)
|
|
|
21.07.2006, 09:12
Beitrag #7
|
Florian79
LVF-Grünschnabel
Beiträge: 20
Registriert seit: Jul 2006
8
2006
kA
Deutschland
|
Regulärer Ausdruck für bestimmte Bitfolge
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
|
|
|
21.07.2006, 11:28
Beitrag #9
|
Florian79
LVF-Grünschnabel
Beiträge: 20
Registriert seit: Jul 2006
8
2006
kA
Deutschland
|
Regulärer Ausdruck für bestimmte Bitfolge
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.
Finde_Bitwert_in_Bin_rstring1.vi (Größe: 22,36 KB / Downloads: 235)
Ich hoffe das man mit dem Beispiel klar kommt
Gruß
Florian
|
|
|
21.07.2006, 12:29
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
Regulärer Ausdruck für bestimmte Bitfolge
Hi,
schau mal ins VI!
So gehts, oder? Die Wandlung in boolesche Array kannst du ja trotzdem irgendwo brauchen, oder?
Gruss
Achim
ascii_zeichen.vi (Größe: 9,78 KB / Downloads: 248)
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
| |