02.01.2011, 12:39
Beitrag #1
|
Herby07
LVF-Gelegenheitsschreiber
Beiträge: 54
Registriert seit: Mar 2010
2011
2010
kA
Deutschland
|
Byte-Daten nach ASCII
Hallo,
ich möchte Roh-Messdaten (Byte-Werte: 0 - 255) über die serielle COM-Schnittstelle übertragen.
An die Funktion ´VISA:Schreiben´ müssen die Daten ja in Form von ASCII-Zeichen (String) übergeben werden (=Schreibpuffer).
Gibt es unter LabVIEW eine einfache Funktion, die mir aus den Zahlen (0 .. 255) ASCII-Zeichen macht ?
Meine bisherige Lösung erscheint mir etwas umständlich: ich erschaffe mir ein 1*1-Array und initialisiere dieses permanent mit meinem Messwert (Funkton: ´Initialize Array´).
Am Ausgang dieser Funktion habe ich dann ein 1*1-Array mit dem Messwert. Daran schließe ich die Funktion ´Byte-Array to String´an und erhalte so einen einstelligen String mit dem ASCII-Zeichen, das meinem Messwert entspricht.
Diesen String kann ich dann über die VISA-Funktion aussenden.
Das klappt zwar, erscheint mit aber etwas aufwendig.
Vielen Dank für die Hilfe
Herby
|
|
|
02.01.2011, 13:55
Beitrag #2
|
BNT
LVF-Freak
Beiträge: 744
Registriert seit: Aug 2008
5.0 - 22Q3
1999
EN
64291
Deutschland
|
Byte-Daten nach ASCII
Hi Herby
ein Beispiel als LV2009 VI Snippet:
1. Irgendeinen Datatentypen, am besten als .ctl-Typedef, in einen String casten, die Datenstringlänge davor hängen und mit VISA Write versenden.
2. Länge des Datenstrings lesen und danach die entsprechnende Anzahl an Datenbytes.
3. Typecast in den gewünschten Typdef.
Damit kannst Du die Konversion in ASCII komplett vermeiden. Du musst Dir aber über die Version des Typedefs Gedanken machen, falls du gezwungen sein solltest, in Zukunft mit verschiedenen Versionen des Typedefs zu arbeiten. Um ein solches möglichesProblem zu lösen, könnte LVOOP in Frage kommen.
Gruß Holger
|
|
|
02.01.2011, 14:14
Beitrag #3
|
Herby07
LVF-Gelegenheitsschreiber
Beiträge: 54
Registriert seit: Mar 2010
2011
2010
kA
Deutschland
|
Byte-Daten nach ASCII
Hallo Holger,
vielen Dank ür die Antwort.
Deine Lösung sieht aber auch recht aufwendig aus.
Wenn ich z.B. einen einfachen Meßwert habe, z.B. den Wert 70, so muß ich daraus ja eigentlich nur das ASCII-Zeichen ´F´ machen, das ich dann mit ´VISA: Schreiben´ aussende.
Mehr will ich eigentlich nicht machen.
Ich dachte, es gäbe irgendwo versteckt eine ganz einfache Funktion: ´Byte-Zahlenwert rein --> ASCII-Zeichen (String) raus´, die ich dann direkt an die VISA-Funktion anschließen kann.
Viele Grüße
Herby
|
|
|
02.01.2011, 14:34
Beitrag #4
|
|
|
02.01.2011, 18:06
(Dieser Beitrag wurde zuletzt bearbeitet: 02.01.2011 18:07 von GerdW.)
Beitrag #5
|
GerdW
______________
Beiträge: 17.465
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
Byte-Daten nach ASCII
Hallo Herby,
es geht auch ohne ArrayInit:
Erscheint mir kürzer als das TypeCast - und wenn man nur einzelne Bytes bearbeitet, dürfte beides ähnlich (in)effizient sein...
|
|
|
02.01.2011, 19:22
Beitrag #6
|
Herby07
LVF-Gelegenheitsschreiber
Beiträge: 54
Registriert seit: Mar 2010
2011
2010
kA
Deutschland
|
Byte-Daten nach ASCII
Hallo GerdW,
vielen Dank für Deine Hilfe.
So etwas habe ich gesucht.
Da ich allerdings noch nicht allzu fit bin in LabVIEW, kenne ich die erste Funktion nach der U8-Konstanten noch nicht.
Wo kann ich diese finden ? (bzw. wie macht man aus solch einem Bild ein Blockdiagramm (dann könnte ich die Funktion ja ermitteln).
Das Rest ist mir klar.
Viele Grüße
Herby
|
|
|
03.01.2011, 00:32
(Dieser Beitrag wurde zuletzt bearbeitet: 03.01.2011 00:40 von Lucki.)
Beitrag #7
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Byte-Daten nach ASCII
Verstehe nur nicht, warum die Beispiele alle so künstlich verumständlicht sind. Hier mal drei einfache Vorschläge:
Das funktioniert mit anderen Zahlenformaten ebenso, als z.B mit I32, oder wenn eine Gleitkommazahll als String über der Serielle Schnitstelle gesendet werden soll. Die Rückkonvertierung ist ähnlich einfach.
|
|
|
03.01.2011, 08:31
Beitrag #8
|
GerdW
______________
Beiträge: 17.465
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
Byte-Daten nach ASCII
Hallo Herby,
das ist ein BuildArray - eine der an die Anzahl der eingänge anpassbaren Funktionen...
|
|
|
05.01.2011, 14:08
(Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2011 14:10 von Herby07.)
Beitrag #9
|
Herby07
LVF-Gelegenheitsschreiber
Beiträge: 54
Registriert seit: Mar 2010
2011
2010
kA
Deutschland
|
Byte-Daten nach ASCII
Hallo Lucki,
vielen Dank für diese sehr kompakte Lösung.
Was mich hier allerdings wieder einmal verblüfft ist die Tatsache, daß am Anschluß ´Typ´ von der Typumwandlungsfunktion keine "Ziel-Typ-Festlegung" angeschlossen werden muß.
Auch in der Hilfebeschreibung zu dieser Funktion steht eigentlich nicht, was passiert, wenn man diesen Anschluß offen läßt.
Aber es funktioniert ja (irgendwie).
Vielen Dank
Herby
|
|
|
05.01.2011, 15:29
(Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2011 15:30 von Lucki.)
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Byte-Daten nach ASCII
' schrieb:Was mich hier allerdings wieder einmal verblüfft ist die Tatsache, daß am Anschluß ´Typ´ von der Typumwandlungsfunktion keine "Ziel-Typ-Festlegung" angeschlossen werden muß.
Das ist ja öfters so, daß bei Nicht-Anschluß ein Default-Wert gilt. Mit Kontext-Menü "Erstellen/Konstante" erzeugt man eine leere String-Konstante, also könnte man davon ausgehen, daß dieser Typ der default-Wert ist. Du hast aber Recht, da sollte auch in der Hilfe so angegeben werden - ist es aber nicht. Im Gegenteil: Es gibt einen Unterschied zwischen Kontext-Hilfe und ausführlicher Hilfe. In der Kontext-Hilfe ist am "Typ"-Eingang ein String-Draht angeschlossen, in der ausführlichen Hilfe ein Gleitzahl-Draht.
Also ich kann letztlich nur dieses sagen: Es hat sich bewährt, bei Konvertierung nach String den Typ nicht anzuschließen. Möglicherweise war es sogar genau dieser fehlende Anschluß, der Dich veranlasste, meinen Vorschlag wegen seine besonderen Einfachheit zu loben.
|
|
|
| |