Hallo zusammen,
ich arbeite seit wenigen Wochen mit LabVIEW zur Erstellung einer Gerätesteuerung. Zur Ansteuerung des Gerätes möchte ich Binärcode in für das Gerät verständliche hex zeichen umwandeln (- und zurück) und diese über die RS-232 empfangen/senden.
Bsp.: 00101010 = 2a
Den Binärcode möchte ich aus Einzelelementen als String zusammensetzen und dann umwandeln.
Meine Frage: Hat das schon jemand gemacht, gibt es das als Tool in LV oder muss ich mir hier eine eigene Konvertierungstabelle schreiben.
Gruß, EMT1994
du kannst doch hierzu die fix fertigen LV low level funktionen verwenden!
anbei ein kleines beispiel fuer hex nach binaer!
Anbei auch noch ein Foto wie du es noch machen koenntest...
Oder du verwendest einfach die funktion "Scan Value", haengst an den Eingang deinen binaeren string und gibst als format value "%b" an. Den Ausgang haengst dann an einen hexadezimal string!
wennst net mit string arbeiten moechtest musst stattdessen einfach die numerischen indikatoren bzw. controls nehmen und dieses entsprechend in hex bzw. binaer umwandeln (rechte maustaste)
Hallo freedive,
vielen Dank für die Hinweise, da habe ich wohl den Wald vor lauter Bäumen nicht gesehen. Jetzt klappt die Umwandlung so, wie ich es gerne hätte.
Ich bekomme nun einen "hex integer string" den ich an die RS232 zur übertragung weiterleite (z.b. 552a) leider funktioniert die Kommunikation offensichtlich nicht. Meine Frage: Setzt das Visa write das Ganze wieder zu etwas anderem um odergabe ich an einer anderen stelle einen Gedankenfehler? (Bildausschnitt vom VI liegt bei)
Gruß, EMT1994
Hi emt1994,
nein das VISA Write schickt eben die Zeichen auf die Serielle Schnittstelle, die du am eingang anlegst.
Hast du den Seriellen Port denn richtig Konfiguriert?
Gruß
Oliver
Hallo Oliver,
danke für die Antwort, ich habe vergessen, den Schalter für den "Termination Character" zu deaktivieren, nun kommen meine Komandos am Gerät an, leider bekomme ich noch keine Antwort (auch die "Bytes am Port" sind "0") da muss ich nochmal suchen gehen, wo der Fehler liegt, denn mit einem Terminalprogramm bekomme ich sofort die Antwort.
Gruß
EMT1994
Hi emt,
stop - das Termination Char ist lediglich das Rahmenendezeichen, welches das Gerät dir zurücksendet.
Sprich du wählst eine Timeout Zeit von beispielsweise 5 sec und setzt das Rahmenendezeichen auch n (und aktivierst es natürlich).
Dann kannst du der Read-Funktion sagen, sie solle 1000000 Zeichen lesen.
Normaler Weise würdest du die 5 sec. warten müssen, ehe die Readfunktion mit einem Fehler abbricht.
Da du aber das Termination Char nutzt, bricht die Read-Funktion ab, sobald sie das Zeichen empfängt und gibt dier den String zurück.
Auch wenn es keine 1000000 Zeichen sind.
Es hat also nichts mit dem Sendestring zu tun.
Gruß
oliver
Hallo Oliver,
leider sendet mein Gerät kein "termination character". Ich bin also darauf angewiesen zu "wissen" wieviele Zeichen kommen sollten. Allerdings bekomme ich aktuell immer einen timeout mit 0 anliegenden Bytes obwohl mein Terminalpropramm die Antwort ohne sichtbare Verzögerung ausgibt. Das Gerät sendet Hex Code zurück, aber ich würde vermuten, dass zumindest der "Byte Count" einen Wert größer "0" liefern müsste, wenn das Gerät antwortet.
Gruß, Markus
Hi emt,
aber die Timeoutzeit ist hoch genug???
Gruß
Oliver
Hi Oliver,
ja, die Timeoutzeit liegt bei 10sec und ich prüfe noch etwa 3 sec. mit byte count ob nach dem read doch noch etwas ankommt aber der Wert bleibt bei "0"
Gruß, EMT1994
Hi emt,
letzter Versuch:
manche Geräte möchten extra aufgefordert werden zu antworten (z.B. mit "?" hinterm Befehl)...
Ansonsten poste mal dein VI, vielleicht sieht man ja was.
Welches Gerät willst du ansteuern?
Gruß
Oliver