Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Ich möchte über die serielle Schnitstelle ein Byte an einen Microkontroller übertragen. Also Werte von 0 bis 255. Somit dachte ich wandle einfach meine Zahl "to an 8-bit integer" und dan mit "Byte Array To String" in ein ASCII Zeichen und übertrage dieses. Das klappt von 0-127 ganz prima, aber von 128-255 bleibt es bei 127. Hat LabVIEW dafür kein ASCII-Zeichen parat oder wo liegt das Problem? Und noch wichtiger, wie löse ich es?
' schrieb:Ich möchte über die serielle Schnitstelle ein Byte an einen Microkontroller übertragen. Also Werte von 0 bis 255. Somit dachte ich wandle einfach meine Zahl "to an 8-bit integer" und dan mit "Byte Array To String" in ein ASCII Zeichen und übertrage dieses. Das klappt von 0-127 ganz prima, aber von 128-255 bleibt es bei 127. Hat LabVIEW dafür kein ASCII-Zeichen parat oder wo liegt das Problem? Und noch wichtiger, wie löse ich es?
Warum wollen nur immer alle ASCII übertragen?
Konvertiere das zu übertragende Zeichen (U8) mit "Byte Array To String" in einen String - und fertig.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
03.12.2006, 13:52 (Dieser Beitrag wurde zuletzt bearbeitet: 03.12.2006 13:56 von Mark_labview.)
' schrieb:Warum wollen nur immer alle ASCII übertragen?
Hallo IchSelbst,
es giebt 2 gute Gründe die Werte als ASCII Zeichen zu übertragen.
Mit einem ASCII- zeichen kann ich Zahlen bis 255 mit einem einzigen Byte übertragen, sonst bräuchte ich bis zu 3 Byte.
Zweitens muss ich das Ascii-Zeichen im Microkontroller nicht umständlich umrechnen, der versteht das Acii Zeichen ohne umschweife sofort als Wert von 0-255.
' schrieb:Konvertiere das zu übertragende Zeichen (U8) mit "Byte Array To String" in einen String - und fertig.
Sorry, hast du meinen Post gelesen? Genau das hab ich gemacht, klappt aber nur bis zum Wert 127.
' schrieb:So? Eine "Drei-Byte-Übertragung" heißt bei mir "Dezimal"-Übertragung. Alles, was ein Byte bezeichne ich als Binär.
Wieviele Datenbits hast du denn eingestellt?
Ich habe 8 Datenbits eingestellt, aber das Problem seh ich ja schon in LabVIEW selbst. Wenn ich mir das ASCII Zeichen von LabVIEW wieder in eine Integer zurückwandlen lasse kommen ab 127 bis 255 nur noch 127 raus.
Wie kann ich den Binär übertragen? Giebts eine andere Möglichkeit als über die Wandlung in ein ASCII-zeichen?
' schrieb:Wenn ich mir das ASCII Zeichen von LabVIEW wieder in eine Integer zurückwandlen lasse kommen ab 127 bis 255 nur noch 127 raus.
Nach der Standard-ISO-Definition sind ASCII-Zeichen nur 7Bit breit - was aber hier keine Rolle spielen dürfte. Hast du vielleicht eine "Begrenzung" in der Darstellung der Zahl?
Ich habe hier leider kein LV, daher als Text:
Wenn du ein ganz ordinäres Array of U8 mit der entsprechenden Konvertierung in einen String wandelst, für die Darstellung des Strings "Hexfromat" wählst, dann musst du im String FF sehen, wenn im U8 255 steht.
Zitat:Wie kann ich den Binär übertragen?
Auch "ASCII"-Zeichen werden "binär" übertragen. ASCII ist eine Darstellungsform genauso wie Hex, Dezinal etc.
Das Problem liegt darin, dass man dem VISA-VI nur einen "String" übergeben kann. Schön wäre, wenn man direkt eine Zahl anschließen könnte. Würde man einen U8 anschließen (können), würde ein Zeichen übertragen werden - und nicht drei, auch wenn die Zahl (in Dezimaldarstellung) 255 heißt. Wegen dieses "Mangels" muss man also eine Zahl (bzw. ein Array) in einen String konvertieren - der eigentlich kein "String" im Sinne von lesbarem Text ist, sondern ein Stream.
Teste also folgendes:
Nach der Konvertierung des Array of U8 nach String müssen bei Hexdarstellung des Strings die Zahlen des U8-Array als Hexwerte im String erscheinen: also 0..255 als 00 .. FF.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:Nach der Standard-ISO-Definition sind ASCII-Zeichen nur 7Bit breit - was aber hier keine Rolle spielen dürfte.
Hm, na das dürfte doch die Erklärung für mein Problem sein 2^7 = 128. Sprich LV arbeitet nur mit der Standart-Tabelle und nicht mit der erweiterten für IBM PC oder Windows?
' schrieb:Auch "ASCII"-Zeichen werden "binär" übertragen. ASCII ist eine Darstellungsform genauso wie Hex, Dezinal etc.
Das war mir schon bewusst. Meine frage ziehlte darauf ab ob es eine Möglichkeit giebt die serielle Schnittstelle mit LV so low level ansprechen zu können das man einzelne bit-folgen eingeben kann. Aber ich denke die frage hats du auch schon mit "nein" beantwortet. Also bleibt nur der "Umweg" über einen ASCII string?
Deinen Test hab ich gemacht. Es giebt Hexwerte von 0x00 bis 0x7F, also wie auch in dezimal von 0-127.
Ich hab mal noch ein wenig in LabVIEW nach anderen Funktionen gesucht und folgende gefunden:
VISA Out 8
Writes an 8-bit block of data to the specified address space and offset.
leider bekomm ich den nicht zum laufen. Die fehlermeldung lautet:
Possible reason(s):
VISA: (Hex 0xBFFF0067) The given session or object reference does not support this operation.
' schrieb:Sprich LV arbeitet nur mit der Standart-Tabelle und nicht mit der erweiterten für IBM PC oder Windows?
Das kann ich mir nicht vorstellen. Bei einer "Konvertierung" einer "Zahl nach ASCII" wird praktisch nichts gemacht - außer Speicher kopiert. Ein Speicherbereich, der als Typ U8 hat, wird in einen Speicherbreich kopiert, der zu einer Variablen vom Typ String gehört. Eine "Übersetzungstabelle" gibt es da nicht.
Zitat:Aber ich denke die frage hats du auch schon mit "nein" beantwortet. Also bleibt nur der "Umweg" über einen ASCII string?
Im Prinzip ja - außer wenn ich das mit VISA OUT 8 finde.
Zitat:Es giebt Hexwerte von 0x00 bis 0x7F, also wie auch in dezimal von 0-127.
Wenn du das sagst, glaube ich dir das natürlich. Das ist aber nicht Sinn und Zweck. Das muss mit 00 bis FF gehen. Vergleiche Anhang (LV7.1.1)
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
ok, an dieser Stelle muss ich mich für meine Blödheit entschuldigen. Ich hatte bei meinen ganzen tests die ich gemacht habe noch diese Funktion dazwischen:
To Byte Integer
Converts a number to an 8-bit integer in the range -128 to 127. The connector pane displays the default data types for this polymorphic function
Also, das mit der Begrenzung auf 127 hat mir doch keine Ruhe gelassen.
' schrieb:Ich hatte bei meinen ganzen tests die ich gemacht habe noch diese Funktion dazwischen:
To Byte Integer
Converts a number to an 8-bit integer in the range -128 to 127. The connector pane displays the default data types for this polymorphic function
Ohne das funzt es besser!......
Hast du als "Start-Zahl" eine vom Typ double? Double nach I8 gibt natürlich nur positive Zahlen von 0 bis 127.Wenn dann musst du den double zuerst nach I16 und das dann nach U8 wandeln . Guckst du Beispiele.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).