LabVIEWForum.de - Messwerte in TXT schreiben

LabVIEWForum.de

Normale Version: Messwerte in TXT schreiben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich versuche gerade Aufzeichnungen in einer .txt Datei dokumentieren. Klappt soweit auch ganz gut bis auf einen Wert!

Ich möchte :
- Die Uhrzeit erfassen (Diese habe ich mir über einen Timestamp geholt und anschließend auf Stunden, Minuten und Sekunden getrennt)
- Die Raumtemperatur erfassen ( Dafür habe ich einen Sensor der über RS232 Daten sendet)
- Die Messwerte von meinem Drucksensor erfassen.

Ich soll über einen Zeitraum von 5 Minuten alle 2 Sekunden einen Wert in meine txt schreiben. Das Schreiben selbst funktioniert bis auf den Wert "Messung 1" -> siehe Anhang. Dort wird mir in die txt immer eine null geschrieben obwohl ich zu Testzwecken schon nicht den eigentlichen Wert abgreife sondern einfach feste Konstanten gebe.

Falls jemand Verbesserungsvorschläge hat, gerne in die Kommentare setzen Blush
Durch die Verwendung von lokalen Variablen und die parallele Ausführung deiner Speicherroutine hast du dir eine wunderbare "Race-Condition" programmiert.

Merke, alles was LabVIEW parallel abarbeiten kann, wird in der Regel auch parallel abgearbeitet. Dazu gehört u.a., dass eine lokale Variable schon ausgelesen wird, obwohl du woanders im Code erst einen Wert in den Indikator schreibst. Und das passiert dir hier. Du schreibst erst einen Wert in "Messung 1", nachdem du 1x mit deinem Fluke kommuniziert hast. Zu diesem Zeitpunkt ist die Datei längst angelegt und der bisher vorhandene Default-Wert aus "Messung 1" ausgelesen.

Mögliche Lösung: Starte das Speichern von Werte erst, wenn du mind. 1x alle Werte ausgelesen hast.

Weiterhin: Gerade die lokalen Variablen "Hour", "Minute" und "second" sind vollkommen überflüssig, hier langt eine Weitergabe per "Draht".
Außerdem wird deine Speicherung so nicht funktionieren, da du in jedem Aufruf die Datei neu anlegst. Datei anlegen und Header schreiben gehört nicht IN die Messschleife!

Gruß, Jens
Hallo MarcoN,

du tust leider nicht sicherstellen, dass in die Datei geschrieben wird erst nachdem du alle Werte hast.

Zitat: "Think Dataflow"

bzw. da die Anderen Elemente laut deiner txt-Datei Inhalt besitzen, beschreibst du evtl. dein "Messung 1" wo anders im Code mit einer "0" Stichwort Race-Condition


Grüße TR
Hallo Marco,

andere haben ja schon auf THINK DATAFLOW! hingewiesen, hier noch der Link in meiner Signatur...

Weitere Kommentare:
- den Timestamp würde ich nicht mit %g formatieren, hier reicht %d vollkommen aus... (Oder gleich korrekt als HH: MM: SS!)
- wozu das separate WriteText, um einen Zeilenvorschub zu schreiben? Warum nicht einfach das LF in den Formatstring aufnehmen?
- wozu gemischte Trennzeichen in deinem Text? Entweder Semikolon oder Space/Tab, aber nicht beides gleichzeitig...
- bei Stringkonstanten ist es hilfreich, immer den Anzeigemodus sichtbar zu machen...
Erstmal danke für die vielzähligen Antworten. Ich versuche das mal Schritt für Schritt abzuarbeiten:

@ Jens: Du hast natürlich Recht. Das war nicht gut durchdacht. Ich habe jetzt die Sequenz für das Schreiben der TXT einfach hinter meine Messung gelegt. Jetzt steht in meiner TXT auch der Wert für den Druck. Die Speicherung und den Header habe ich jetzt auch vor meine Whileschleife gesetzt!

@ TR: Ich wollte sicher gehen das mein Anzeigeelement mir beim Start des VI´s keine Werte vom vorherigen Lauf zeigt. Allerdings ist das im Nachhinein gar nicht so kritisch, da ich mit meinem SubVI "FLUKE 700G27 ZERO MEAS" sowieso schon den Sensor wieder auf Null stelle. Deswegen habe ich jetzt alle unnötigen lokalen Variablen entfernt!

@ Gerd:
- Ich habe den umgewandelten TimeStamp jetzt auf %d umgestellt und habe die ";" durch ":" ersetzt.
- Wie meinst du das? Muss ich in den String "%d;....." noch ein Enter einfügen und er würde dann nach dem Durchlauf eine Zeile springen?
- Habe ich geändert. Wird jetzt nur mit Space gemacht.

Im Anhang ist ein Bild wie die txt im Moment aussieht!


Zusammengefasst: Es funktioniert jetzt fast alles. Das einzige Problem ist jetzt nur das ich für einen Durchlauf 9 Sekunden brauche aber theoretisch alles in 2 Sekunden durch sein soll.
(06.06.2019 09:39 )MarcoN schrieb: [ -> ]- Wie meinst du das? Muss ich in den String "%d;....." noch ein Enter einfügen und er würde dann nach dem Durchlauf eine Zeile springen?

Was GerdW an dieser Stelle wahrscheinlich meint, ist der Zusatz "\n" in deinem Format String.
Beispiel: [attachment=60044]
Wunderbar! Funktioniert alles super!

Vielen Dank an alle!
Referenz-URLs