INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

HEX-Code über Visa Schnittstelle ausgeben



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!

10.07.2010, 10:02 (Dieser Beitrag wurde zuletzt bearbeitet: 10.07.2010 10:08 von IchSelbst.)
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.696
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
HEX-Code über Visa Schnittstelle ausgeben
' schrieb:ich möchte Hexcode und Acsii über die VISA-Schnittstelle senden
"ASCII" und "HEX" sind Darstellungsformen von Zahlen.
Das, was du am Bildschirm liest, ist eine Darstellungsform. Das, was im Speicher abgelegt ist, ist eine Zahl. Das, was im Speicher abgelegt ist, kann man nicht sehen. Übertragen über VISA werden immer Zahlen - egal ob sie in HEX, ASCII, BINÄR oder DEZIMAL dargestellt werden.

Eine Zahl möge 65 sein. Dargestellt in Dezimal ist das dann "65", in ASCII "A", in HEX "41", in BINÄR "01000001", etc.

Wenn die Zahl 65 (129) übertragen werden soll, geht das am einfachsten mit nur einem Byte: Das Byte 65 (129) - dargestellt als HEX 41 (81 oder auch 0x81) oder als ASCII A (??) - wird eben übertragen. In der ASCII-Darstellung hat jede Bytezahl [0..255] ein spezifisches Symbol in der (sog.) ASCII-Tabelle, eben 65="A". Auch für 129 gibt es ein Zeichen. Weil jede Zahl genau durch ein einzelnes ASCII-Zeichen darstellbar ist, kann man eine "Einzel-Byte-Übertragung" auch als "ASCII-Übertragung" beschreiben.
In der HEX-Darstellung wird jede Bytezahl durch zwei Zeichen dargestellt, eben 65="41". Demzufolge werden zwei Zeichen übertragen, wenn man eine "HEX-Übertragung" macht. Die beiden Zeichen sind dann die Buchstaben (ASCII) "4" und "1", was den Zahlen 52 (0x34) und 49 (0x31) entspricht.

Zitat:ich kann auch anhand eines Zeichens das ich beim lesen des Strings detektiere, unterscheiden ob ein Hex String oder Ascii String vorliegt,
Das geht per se nicht.
Empfangen werde "31313131313131" - ist das ein Hex-String oder ein ASCII-String? Als letzterer hat der resultierende String den Wert "31313131313131". Eine Übertragung im Hexformat könnte als Wert "1111111" meinen. Maßgebend ist, was die Beschreibung der Schnittstelle sagt.
Wenn man eine Übertragung mit "HEX-Zahlen" macht, kann man eine gewisse Sicherheit einbauen - weil nur Zahlen aus dem Bereich [0..9, A..F] übertragen werden. Alle anderen Zahlen sind nicht erlaubt. Ein Empfang derer würde auf einen Fehler in der Datenübertragung hindeuten.

Nun zu deiner Aufgabe:
Wenn einer 0x81 als Zeichen überträgt, dann macht er eine reine binäre Übertragung - also ASCII. Als ASCII-Zeichen heißt das dann "SOH mit gesetzten 8. Bit" (guckst du hier). Das Zeichen, das du als HEX bezeichnest, ist also lediglich ein Zeichen, das in HEX mit 0x81 dargestellt wird. Die anderen Zeichen, die du als ASCII bezeichnest, haben genau das selbe Format wie das Zeichen 0x81.

Wenn du 81 übertragen willst, dann kannst du das wie folgt machen: Nimm eine Stringkonstante, geht ins Kontextmenü und stell die Darstellungsform(!) auf HEX(!) um, schreib dann 81 (also die beiden Zahlen "8" und "1") rein. Der Inhalt des Strings ist dann ein Zeichen mit dem binären Wert 129, also 0x81. Willst du was ASCII-mäßiges übertragen, z.B. den Text "Muster", dann schreibst du den Text "Muster" ganz einfach in eine normale Stringkonstante.

Es gibt auch folgende Möglichkeit: Mach ein Array of U8 und schreib da die Werte rein, die du übertragen willst. Dieses Array kannst du per "Bytearray nach String" in einen String konvertieren.

Zitat:habe gelesen das LabVIEW keine Hex codes über VISA schickt und alles in Bytes umwandelt,
Das liegt eben daran, dass HEX zuerst mal eine Darstellungform ist. Übertragen werden in erster Linie mal nur "binäre Werte". Eine "HEX-Übertragung" im weiteren Sinne (nämlich im Sinne eines Protokolles) würde bedeuten, dass der Treiber aus jedem Zeichen (Bereich [0..255]), das er senden soll, zwei Zeichen (Bereich jeweils [0..9, A..F]) machen muss. Das ist aber nicht im Sinne eines "transparenten Treibers" (wie ihn VISA in erster Linie darstellt).

Dein Problem besteht darin: "Wie bekomm ich eine Zahl, für die ich beim Eintippen zwei Zeichen brauche, in ein einziges Zeichen gequetzt, damit es übertragen werden kann". Lösung: Siehe oben.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
HEX-Code über Visa Schnittstelle ausgeben - IchSelbst - 10.07.2010 10:02

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Zwei Messungen mit zwei identischen Messgeräten über VISA hansi9990 7 6.626 21.10.2019 10:40
Letzter Beitrag: HVo
  Messgerät über Visa auslesen AAlp 10 9.453 07.05.2019 08:59
Letzter Beitrag: AAlp
  VISA Error Code Fehlerbehandlung L@BTR0N 2 5.109 19.02.2019 13:53
Letzter Beitrag: L@BTR0N
  Serielle Schnittstelle: Unterschied zwischen FIFO-Buffer und VISA-Buffer Exle 4 7.077 23.01.2019 08:07
Letzter Beitrag: Ratio
  VISA über MAX geht, im VI nicht mehr buettnerstefan 7 6.760 29.06.2018 13:02
Letzter Beitrag: buettnerstefan
  VISA: I/O Fehler beim Auslesen einer seriellen Schnittstelle konne 5 7.614 19.07.2017 13:04
Letzter Beitrag: konne

Gehe zu: