02.02.2015, 20:43
Hallo Gesetzt,
VISARead liest bis
- die angeforderte Anzahl Zeichen im Buffer stehen
- ein TermChar im Empfangsbuffer gefunden wird
- ein Fehler (wie z.B. Timeout) auftritt
Wenn deine Messages also mit einem TermChar enden und üblicherweise 20 Bytes enthalten, dann konfiguriert man das TermChar und versucht 99 Bytes zu lesen. Warum 99? Um eben mehr als die übliche Message-Länge abzufragen - da VISARead ja automatisch mit dem TermChar den Lesezugriff erfolgreich beendet…
Stell dir vor, in der Vergleichspalette gäbe es schon eine Funktion, die dir sagt, ob ein String leer ist oder nicht…
THINK DATAFLOW!
LabVIEW liest dein String-Control, wenn es für den DATAFLOW nötig ist…
Und nein: man muss den Inhalt eines Controls nicht in eine lokale Variable eben desselben Controls kopieren!
Nach Jens' Vorschlag auch einer von mir:
[attachment=51957]
(Üblicherweise erledigt man die Abfrage der Bedienelemente mit einer Event-Struktur - da spart man sich gleich das Zusammenbauen und Testen des Strings…)
Zitat:en Zusammenhang mit dem TermChar nicht verstehe( Vllt kann das jemand kurz erläutern?)Das wurde hier schon öfter erläutert, aber es schadet ja nicht, das nochmal aufzuschreiben…
VISARead liest bis
- die angeforderte Anzahl Zeichen im Buffer stehen
- ein TermChar im Empfangsbuffer gefunden wird
- ein Fehler (wie z.B. Timeout) auftritt
Wenn deine Messages also mit einem TermChar enden und üblicherweise 20 Bytes enthalten, dann konfiguriert man das TermChar und versucht 99 Bytes zu lesen. Warum 99? Um eben mehr als die übliche Message-Länge abzufragen - da VISARead ja automatisch mit dem TermChar den Lesezugriff erfolgreich beendet…
Zitat:dass der ganze Kram mit Visa Write nur ausgefuehrt wird, falls entweder einer der Schalter auf True steht, oder ein String eingegeben wurde. … Zusätzlich müsste halt noch überprüft werden, ob etwas im Eingabefeld steht, also quasi wieder True oder False. … Das könnte quasi so aussehen: If "Empty String" then false else True.
Code:
IF EmptyString?(sendstring) THEN
do nothing
ELSE
VISAWrite(sendstring + "LF")
ENDIF
Zitat:Wenn ich jetzt den Befehl mit Enter bestätige, dann muss das ganze wieder in einer lokalen Variable gespeichert werden, oder merkt Labview sich automatisch die Eingabe bis abgefragt wird?Was hat das Drücken der Enter-Taste mit dem Speichern zu tun? Fragst du dich das auch, wenn du irgendeinen Buchstaben eintippst?
THINK DATAFLOW!
LabVIEW liest dein String-Control, wenn es für den DATAFLOW nötig ist…
Und nein: man muss den Inhalt eines Controls nicht in eine lokale Variable eben desselben Controls kopieren!
Nach Jens' Vorschlag auch einer von mir:
[attachment=51957]
(Üblicherweise erledigt man die Abfrage der Bedienelemente mit einer Event-Struktur - da spart man sich gleich das Zusammenbauen und Testen des Strings…)