LabVIEWForum.de
Werte in einer Zeile angeben - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: Werte in einer Zeile angeben (/Thread-Werte-in-einer-Zeile-angeben)

Seiten: 1 2


Werte in einer Zeile angeben - Berdschi - 07.05.2012 15:35

Hallo Labview-Profis,

ich hab ein Problem beim anzeigen meiner Messwerte.
Ich hab eine Wägezelle und lese via VISA und RS232 die Daten aus.
Die Zelle sendet mir permanent Werte die ich Byte für Byte auslese.
Jedes Byte enthält ein Zeichen und die häng ich an einen String an.
Sobald eine Zeile (da stehen alle Werte drin die ich haben will) übertragen wurde bekomm ich von der Wägezelle ein CR und die Zelle fängt wieder von vorne an, das soll jetzt auch mein String-Anzeigefenster machen, also vorne anfangen und die Zeile so zusagen aktualisieren.
Genau das ist aber mein Problem. Wenn das CR kommt springt er im String-Anzeigefenster nach vorne und in die nächste Zeile, aber das soll er ja nich er soll nur nach vorne. Das sieht jetzt aus als ob ich ein CR und LF hab.

Mach ich da was falsch oder gibts allgemein ne andere Möglichkeit wie ich Werte in einer Zeile aktualisieren kann?

Im Blockdiagramm Bild hab ich kurz mal die Methode nachgebildet wie ich die Werte einles. Das ganze Vi ist viel umfangreicher aber das ist eigendlich alles was ich beim lesen mach.
Im Frontpanel Bild sieht man wie er es gerade ausliest, also alles schön untereinander was er aber nicht soll.

[attachment=39729]

[attachment=39728]


RE: Werte in einer Zeile angeben - GerdW - 07.05.2012 15:38

Hallo Berdschi,

benutz doch einfach dein CR als EOT-Zeichen (bei VISA-Init anzugeben und lese mehr Zeichen als, dein zu erwartender String lang ist: dann bekommst du keine Einzelzeichen. sondern gleich deinen kompletten String!

Fangfrage: was machst du, wenn mal mehr als 1 Zeichen im Buffer landet?


RE: Werte in einer Zeile angeben - Berdschi - 07.05.2012 16:11

Hallo GerdW,

danke für die schnelle Antwort.
Wenn mehr als ein Zeichen im Puffer landet läuft er voll Big Grin darum les ich auch so schnell es geht aus um das zu verhindern.

Ein kompletter String wär natürlich super kann ich aber leider nicht umsetzten da es eigendlich so gedacht ist das die Wägezelle die Darstellung im Terminal steuert (nach unten fortlaufend wie im Bild oder nur in einer Zeile) dazu schickt die Zelle unterschiedliche EOF-Zeichen einmal eben CR (in einer Zeile) und einmal CR plus LF (fortlaufend).


RE: Werte in einer Zeile angeben - GerdW - 07.05.2012 16:16

Hallo Berdschi,

Zitat:Wenn mehr als ein Zeichen im Puffer landet läuft er voll Big Grin darum les ich auch so schnell es geht aus um das zu verhindern.
Es gibt viele Threads, wo der Umgang mit der seriellen Schnittstelle erklärt wird. Einfach mal suchen...

Zitat:Ein kompletter String wär natürlich super kann ich aber leider nicht umsetzten da es eigendlich so gedacht ist das die Wägezelle die Darstellung im Terminal steuert (nach unten fortlaufend wie im Bild oder nur in einer Zeile) dazu schickt die Zelle unterschiedliche EOF-Zeichen einmal eben CR (in einer Zeile) und einmal CR plus LF (fortlaufend).
???
- Du erhälst also in jedem Fall ein CR, welches du als EOT einsetzen kannst...
- LabVIEW ist kein Terminal, sondern eine Programmiersprache. Du könntest also einen Filter für dein überzähliges LF programmieren... Halt, warte: dafür gibt es ja schon TrimWhitespace...


RE: Werte in einer Zeile angeben - Berdschi - 07.05.2012 19:10

Hallo GerdW,

das Labview kein Terminal ist, ist mir auch klar.
Das Terminal soll ja auch nur zeigen was die Zelle gerade macht oder bestimmte Statuswerte anzeigen.
TrimWhitespace sagt mir nichts das werd ich mir mal anschauen, danke.


RE: Werte in einer Zeile angeben - Lucki - 08.05.2012 07:37

Da du in der kompfortablem Lage bist, dass das Gerät ein TermEnd-Zeichen (CR) sendet, geht es viel einfacher. Einfach in der Konfiguration TermEnd (Abschlusszeichen) aktivieren (das ist standardmäßig der Fall), und das richtige Zeichen eingeben (Standard ist LF = 0xA, das mußt Du wahrscheinlich ändern in CR = 0xD).
Dann funktioniert es so:
[attachment=39730]
Funktionsweise: Read wartet, bis TermEnd kommt, liest dann die ganze Zeile auf einmal aus und überschreibt die vorher angezeigten Werte in "Terminal". Das ist doch genau das was Du wolltest.


RE: Werte in einer Zeile angeben - GerdW - 08.05.2012 14:07

Hallo Berdschi,

sprech bitte mit deinem Kollegen, bevor ihr auch im NI-Forum nach einer Problemlösung fragt...


RE: Werte in einer Zeile angeben - Berdschi - 08.05.2012 14:36

Hallo,

so hab mir jetzt mal das Trim Whitespace angeschaut. Das kannt ich bereits nur nicht unter dem Namen. Leider bringt mir das hier nichts.

(08.05.2012 07:37 )Lucki schrieb:  Da du in der kompfortablem Lage bist, dass das Gerät ein TermEnd-Zeichen (CR) sendet, geht es viel einfacher. Einfach in der Konfiguration TermEnd (Abschlusszeichen) aktivieren (das ist standardmäßig der Fall), und das richtige Zeichen eingeben (Standard ist LF = 0xA, das mußt Du wahrscheinlich ändern in CR = 0xD).
Dann funktioniert es so:

Funktionsweise: Read wartet, bis TermEnd kommt, liest dann die ganze Zeile auf einmal aus und überschreibt die vorher angezeigten Werte in "Terminal". Das ist doch genau das was Du wolltest.
Danke Lucki, das ist so nicht schlecht leider nicht die Lösung die ich brauch.
Ich muss vielleicht meine Frage genauer stellen.
Den Programmcode auf der Wägezelle kann ich nicht beeinflussen und gewünscht ist von mir das ich ein Terminal realisiere das genau die Zeichen umsetzt die von der Wägezelle kommen. CR also als Wagenrücklauf zum Zeilenanfang und nicht als Zeilenumbruch wie es im Moment ist.
Die Zelle steuert das Erscheinungsbild der Werte. D. h. die Zelle ist standartmäßig so eingestellt das sie mir alle Werte in einer Zeile und im Sekundentakt abschliesend mit einem CR schickt. Das sollte dann eben dazu führen das durch das CR wieder an den Zeilenanfang gegangen wird und dort einfach über die alten Werte geschrieben wird.
Wenn ich jetzt aber die Werte fortlaufend sehen will schick ich der Zelle einen Befehl was zur folge hat das die Wägezelle einfach am Ende ein LF zusätzlich anfügt.
Genauso muss ich mit einem Befehl einen Wert direkt anfordern können, der dann einfach dazwischen ausgegeben wird bevor die Zelle wieder in ihrem alten Muster alles ausgibt.

Ich hab unten nochmal zwei Bilder und das Vi über die ich das zum Teil hinbekommen hab.

[attachment=39743]

[attachment=39744]

[attachment=39745]


RE: Werte in einer Zeile angeben - GerdW - 08.05.2012 14:43

Hallo berdschi,

wenn du ein Terminal emulieren sollst, dann musst du das halt programmieren...

LabVIEW-Stringindikatoren behandeln ein CR genauso wie ein LF: Zeilenvorschub und Wagenrücklauf.
Du musst eine Routine selbst programmieren, wenn du nur den Wagenrücklauf haben willst...


RE: Werte in einer Zeile angeben - Berdschi - 08.05.2012 15:17

(08.05.2012 14:07 )GerdW schrieb:  Hallo Berdschi,

sprech bitte mit deinem Kollegen, bevor ihr auch im NI-Forum nach einer Problemlösung fragt...
ohhh, sry.
Der Eintrag ist auch von mir nur über den Account von meinem Kollegen.