LabVIEWForum.de - Double Value von 0,2 in 0.2 wandeln?

LabVIEWForum.de

Normale Version: Double Value von 0,2 in 0.2 wandeln?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.

Karotte

Hallo Leute,

ich bin dabei eine AG33522A (Arbitary Waveform Generator von Agilent) mit LabView zu betreiben. Dazu habe ich mir die ofiziellen Treiber von Agilent über die LabView-Funktion 'Find Instruments Drivers' installiert.
Bei der Verwendung stelle ich nun fest, dass die ganzen Funktionen in dem Treiberpaket keine Double-Werte mit Komma, wie im Deutschen üblich, sondern nur Werte mit Punkt, akzeptiert (0,2 vs. 0.2). Dies liegt daran, da die Treiber intern die Double-Werte mit der Funktion 'Format into string' in Ascii-Strings wandelt.

Leider kann ich meinem LabView nicht beibringen, aus 0,2 eine 0.2 zu machen. Zumindest kenne ich keinen Weg.

Habt ihr eine Lösung für das Problem?

Mit freundlichen Grüßen

Christian
---------------------------
LabView-Version: 8.5.1
Sprache: Englisch
(18.03.2011 08:21 )Karotte schrieb: [ -> ]Habt ihr eine Lösung für das Problem?
Im Formatstring noch %.; angeben ...

Karotte

Dann muss ich aber in allen Treiber-Dateien den Formatstring anpassen. Ich wollte eigentlich den Treiber nicht anfassen... Zumal ich das dann auf mehreren Rechnern machen müsste.

Gibts keinen anderen Weg Labview zu sagen, dass es auch 0.2 als Double akzeptiert? Es macht ja leider aus 0.2 automatisch 0,2.
Ok, Update:

Es ist %. verwendet worden. Dann kann ich doch noch nicht verstehen, warum das Gerät meint, dass "-121,"Invalid character in number".
Na gut, ich suche weiter.
(18.03.2011 08:29 )Karotte schrieb: [ -> ]dass es auch 0.2 als Double akzeptiert?
Du bekommst also vom Gerät den String "0.2". Den gibst du auf das Element "In String suchen" Als Formatstring verwendest du "%.;%f". Dann wird der String "0.2" in die Zahl 0.2 umgewandelt.

Hast du als String "0,2", dann lautet der Formatstring "%,;%f". Dann wird aus dem String "0,2" die Zahl 0.2.

Zitat:Es macht ja leider aus 0.2 automatisch 0,2.
Da kann man ja nichts dagegen sagen: Wenn du am Frontpanel "0,2" siehst, hat das mit dem Datenaustausch, der zwischen LV und dem Gerät passiert, gar nichts zu tun. Wenn du mit dem Gerät Zahlen mit DezimalPUNKT austauschen musst, dann verwende einfach die entsprechenden Elemente mit dem Formatstring "%.;".

Nachtrag:
Was meinst du denn mit Treiber? Die mitgelieferten VI vom Hersteller? - Das ist schlecht.

Es gibt in den Einstellungen von LabVIEW eine Einstellung, wie der Dezimaltrenner behandelt werden soll. Man kann dort also '.' oder ',' einstellen. Dann findet aber eine grundsätzliche Umstellung statt.

Auch im Betriebssystem kann man den Dezimaltrenner umstellen.

Karotte

Ok, der Fehler muss noch wo anders liegen. Der String, der an das Gerät gesendet wird, sieht folgendermaßen aus:

SOUR1:VOLT:UNIT VPP
SOUR1:FREQ:MODE CW
SOUR1:FUNC ARB
SOUR1:FUNC:ARB Lorentz.arb
SOUR1:FUNC:ARB:SRAT 40000.000000
SOUR1:VOLT 0.200000 VPP
SOUR1:VOLT:OFFS 0.050000

Auf den ersten Blick alles korrekt. Ich werde mal das Manual zu Rate ziehen.
(18.03.2011 08:21 )Karotte schrieb: [ -> ]Leider kann ich meinem LabView nicht beibringen, aus 0,2 eine 0.2 zu machen. Zumindest kenne ich keinen Weg.
LV auf Dezimalpunkt zu ändern halte ich für eine sehr gute Entscheidung, mal ganz uinabhängig von deinem momentanen Problem.
So geht es:
Werkzeuge / Optionen / Frontpanel / Allgemein
Dort Häkchen "Lokales Dezimalzeichen verwenden" entfernen
Also was willst Du jetzt eigentlich?

(18.03.2011 08:21 )Karotte schrieb: [ -> ]Bei der Verwendung stelle ich nun fest, dass die ganzen Funktionen in dem Treiberpaket keine Double-Werte mit Komma, wie im Deutschen üblich, sondern nur Werte mit Punkt, akzeptiert (0,2 vs. 0.2). Dies liegt daran, da die Treiber intern die Double-Werte mit der Funktion 'Format into string' in Ascii-Strings wandelt.

Leider kann ich meinem LabView nicht beibringen, aus 0,2 eine 0.2 zu machen. Zumindest kenne ich keinen Weg.

Dezimalpunkt ist zwingend erforderlich wenn man mit einem Agilent Apparat kommuniziert. Die implementieren keine doppelte Syntax nur um ein paar Sonderlinge die Dezimalkommas bevorzugen zu behagen.

Was das Anzeigen der Fliesskommazahlen angeht verwendet LabVIEW in Frontpanelelemente grundsätzlich das was Du in Deinen Systemeinstellungen eingestellt hast.

Format into String hat einen sogenannten Prefix mit dem man LabVIEW mitteilen kann wie man Dezimalzahlen formatiert haben möchte.

kein Prefix oder %; heisst, verwende was immer in den Systemeinstellungen steht.
%.; verwendet einen Dezimalpunkt bei allen Fliesskommazahlen
%,; verwendet ein Dezimalkomma bei allen Fliesskommazahlen

Steht alles auch sehr gut dokumentiert in der Onlinehilfe zu dieser Funktion. Rtmfx

Aber gehe jetzt nicht alle Format Into Strings anpassen dass sie ein Dezimalkomma verwenden um zu Deinem Agilent Apparat zu schicken. Dann versteht der Agilent nämlich nur noch Bahnhof.

Karotte

Guten Morgen,

zu erst dachte ich, dass die LabView-Treiber des Gerätes den lokalisierten Dezimalpunkt an das Agilent-Gerät übertragen, da das Gerät einen Fehler meldet, der da hieß 'unerlaubtes Zeichen' (oder so ähnlich). Ich habe mir die Befehle angeschaut, die der LabView-Treiber übermittelt, und habe nur normale Ascii-Zeichen gesehen, sowie halt Zahlen in Ascii gewandelt. Ich hatte also vermutet, dass evtl meine Double nicht locale-unabhängig gewandelt wurden und so den Fehler generierten.
Nach dem ihr geschrieben habt, wie man ein Double korrekt wandelt, habe ich das überprüft und festgestellt, dass die LabView-Treiber das so machen, wie ihr es beschrieben habt.

Nun war der nächste Schritt, dass ich die Befehle, die die Treiber an das Gerät absetzen, händisch an das Gerät schicke (über den Measurement & Automation Explorer). Dabei habe ich festgestellt, dass das Gerät einen der Befehle, so wie ihn der LabView-Treiber generiert, nicht versteht.

Also bin ich hin und habe mir das Programmer's Guide besorgt um die Dokumentation den Aufbau des Befehls zu überprüfen.
Leider hat Agilent die Programmer's Guides nicht mehr als PDF sondern nur noch als CHM-Datei, die auf meinen Rechner auf Grund von Sicherheitsrichtlinien nicht angezeigt werden können.

Also ich vermute, dass es weniger an LabView sondern mehr an den Befehlen, oder dem Gerät liegt.

Viele Grüße!
Auch wenn es jetzt nicht daran liegt, aber ich hatte ein ähnliches Problem: Mein Gerät versteht nur Steuerbefehle mit Punkt als Dezimaltrennzeichen. Da aber diverse User aus diversen Ländern mein Programm nutzten wollen, wollte ich diese Beschränkung nicht.

Ging aber recht einfach. Bei jede Eingabe in der Sendenprozedur wird bei mir nun vorher nach Kommatas gesucht und diese durch einen Punkt ersetzt. Wenn also jemand Punkt-getrennt eingibt, findet er keien Kommatas und der Wert wird so gesendet, ansonsten wird eben Komma durch Punkt ersetzt.

Grüße,

Takuro
(18.03.2011 08:45 )Karotte schrieb: [ -> ]Ok, der Fehler muss noch wo anders liegen. Der String, der an das Gerät gesendet wird, sieht folgendermaßen aus:

SOUR1:VOLT:UNIT VPP
SOUR1:FREQ:MODE CW
SOUR1:FUNC ARB
SOUR1:FUNC:ARB Lorentz.arb
SOUR1:FUNC:ARB:SRAT 40000.000000
SOUR1:VOLT 0.200000 VPP
SOUR1:VOLT:OFFS 0.050000

Auf den ersten Blick alles korrekt. Ich werde mal das Manual zu Rate ziehen.

Wenn es nicht am Dezimalpunkt liegt könnte es evtl. an der von mir fett markierten Zeile liegen.
Mit Agilent-Geräten kenne ich mich nicht aus, aber bei Keithley-Geräten, die ebenfalls per SCPI
kommunizieren, muss bei ähnlichen Kommandos das Argument von func in Anführungszeichen
gesetzt werden (ob einfache oder doppelte ist dabei egal).
Probier es also mal mit SOUR1:FUNC 'ARB'

Ist mal so ein Schuss ins Blaue...
Referenz-URLs