Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
leider bin ich sehr unerfahren in LV. Auch nach langem Durchsuchen der Hilfe und dem Forum konnte ich meine Probleme nicht lösen.
Ziel meines Programms ist die Eingabe, Speicherung und Ausgabe von 6 Messwerten über der Zeit (wählbar über Zeitstempel) in einer Tabelle und einem Graph.
Ich habe die Anzeige und Speicherung in einer Tabelle integrieren können und auch den Graph kann ich anzeigen lassen.
Die Aufzeichnungen direkt nach Messwertübernahme passen soweit (Anzeige von 6 Messwerten in Tabelle und Graph).
Bei der Historie gibt es nun leider einige Probleme:
Generell wird die gespeicherte Datei nur bei Betätigung des Messwertübernahme Buttons ausgelesen, dies soll jedoch direkt bei Programmstart geschehen.
Die X-Achse soll nicht wie aktuell eine fortlaufende Nummer anzeigen, sondern ein Datum. Ich schaffe es hierbei leider nicht das Datum aus der Tabelle in einem korrekten Format in den Graph zu implementieren. Bestenfalls soll der Bediener noch den Zeitbereich auswählen können, den der Graph anzeigt.
Zudem würde ich gerne in beide Graphen die Grenzwerte horizontal einfügen, dh. ein Warnwert bei 0,7 und ein Grenzwert bei 1,0.
LV-Version: 17.0f2
Vielen Dank für die Hilfe.
Viele Grüße
Tobias
Anzeige
28.11.2017, 12:41 (Dieser Beitrag wurde zuletzt bearbeitet: 28.11.2017 12:42 von GerdW.)
Zitat:Generell wird die gespeicherte Datei nur bei Betätigung des Messwertübernahme Buttons ausgelesen, dies soll jedoch direkt bei Programmstart geschehen.
Dann müsstest du ein ValueChange-Event für den Button erzeugen - das ist bei einem Latch-Button aber nicht ganz so einfach…
Vielleicht dann doch ein "saubereres" Programmdesign? Ein Producer-Consumer oder eine Statemachine?
Zitat:Die X-Achse soll nicht wie aktuell eine fortlaufende Nummer anzeigen, sondern ein Datum. Ich schaffe es hierbei leider nicht das Datum aus der Tabelle in einem korrekten Format in den Graph zu implementieren.
Du verwendest immer den Begriff "Graph", verwendest aber einen Chart in deinem VI. Das sind in LabVIEW zwei verschiedene Dinge - und das solltest du schon bei der Wortwahl bedenken!
Wenn du mit einem Chart halbwegs vernünftig Zeitstempel an der X-Achse haben willst, solltest du mit Waveforms arbeiten (versuchst du ja) und auch die Zeitanzeige aktivieren…
Wieso schreibst du da irgendwie die Attribute der Waveform?
Zitat:Bestenfalls soll der Bediener noch den Zeitbereich auswählen können, den der Graph anzeigt.
Das ist mit einem Graph einfacher als mit einem Chart - du musst an die Chart-Historie denken…
Ansonsten: X-Achse NICHT autoskalieren und dann den gewünschten Zeitbereich einstellen!
Zitat:Zudem würde ich gerne in beide Graphen die Grenzwerte horizontal einfügen, dh. ein Warnwert bei 0,7 und ein Grenzwert bei 1,0.
Du willst also zwei weitere Plots einfügen? Dann mach das doch!
(Bei einem Graph hättest du auch Cursor zur Verfügung, die man ebenfalls dafür verwenden könnte. Bei einem Chart aber nicht…)
Warum musst du in jeder Iteration Daten in eine Datei schreiben und dann gleich wieder auslesen?
Zitat:Dann müsstest du ein ValueChange-Event für den Button erzeugen - das ist bei einem Latch-Button aber nicht ganz so einfach…
Vielleicht dann doch ein "saubereres" Programmdesign? Ein Producer-Consumer oder eine Statemachine?
Ich habe mich für ein separates Programm zum Auslesen entschieden, da es Benutzer gibt die nur Daten auslesen und nicht eingeben, somit ist dieses Problem gelöst.
Zitat:Du verwendest immer den Begriff "Graph", verwendest aber einen Chart in deinem VI. Das sind in LabVIEW zwei verschiedene Dinge - und das solltest du schon bei der Wortwahl bedenken!
Wenn du mit einem Chart halbwegs vernünftig Zeitstempel an der X-Achse haben willst, solltest du mit Waveforms arbeiten (versuchst du ja) und auch die Zeitanzeige aktivieren…
Wieso schreibst du da irgendwie die Attribute der Waveform?
Entschuldige bitte die falsche Bezeichnung. Nach weiterem Probieren habe ich den Zeitstempel in den Chart integrieren können ("Übernommene Messwerte Zeit"). Dadurch fallen auch die Attribute weg. Anschließend habe ich versucht mit dem VI "Signalverlauf in Datei schreiben" diesen Signalverlauf abzuspeichern und analog dazu wieder auszulesen. Jedoch schaffe ich es hierbei nicht die Historie auszulesen, obwohl "An Datei anhängen?" aktiviert ist. Kannst du mir hier helfen, dass die komplette Historie gespeichert und ausgelesen wird?
Zitat:Das ist mit einem Graph einfacher als mit einem Chart - du musst an die Chart-Historie denken…
Ansonsten: X-Achse NICHT autoskalieren und dann den gewünschten Zeitbereich einstellen!
Autoskalieren zu deaktivieren ist nicht zielführend, da der Bediener immer wieder erneut einen Zeitbereich wählen soll. Es ist aber so wie aktuell (x-Achse Bildlaufleiste) auch gut, dann muss man eben etwas scrollen und den Bereich suchen.
Zitat:Warum musst du in jeder Iteration Daten in eine Datei schreiben und dann gleich wieder auslesen?
Bei jeder Iteration ist das nicht zwingend notwendig, wichtig ist die Ausgabe von einer Chargendatei und einer Datei mit allen Messwerten.
Anbei nochmal die aktuellen Dateien.
Vielen Dank nochmal.
30.11.2017, 14:12 (Dieser Beitrag wurde zuletzt bearbeitet: 30.11.2017 14:15 von GerdW.)
Zitat:Anschließend habe ich versucht mit dem VI "Signalverlauf in Datei schreiben" diesen Signalverlauf abzuspeichern
Wo genau findet man diese Speicher-Funktion in deinem VI?
Zitat:und analog dazu wieder auszulesen. Jedoch schaffe ich es hierbei nicht die Historie auszulesen, obwohl "An Datei anhängen?" aktiviert ist. Kannst du mir hier helfen, dass die komplette Historie gespeichert und ausgelesen wird?
Wenn du zeigen würdest, wo du all das versuchst!?
Zitat:Dadurch fallen auch die Attribute weg.
Das versuchst du doch immer noch in deinem VI…
Zitat:wichtig ist die Ausgabe von einer Chargendatei und einer Datei mit allen Messwerten.
Ich finde es sehr "unglücklich", wenn man irgendwelche Textdateien mit der Endung "xls" versieht. Das, was du da schreibst, sind landläufig CSV-Dateien: bennenne sie bitte auch so…
(Momentan verwendest den Tab als Trennzeichen: für solche Daten erwartet Excel die Endung TXT. Bei einem deutschen Excel wird üblicherweise das Semikolon als Trennzeichen in CSV-Dateien erwartet.)
Deine Array-Operationen sehen auch sehr umständlich aus: warum musst du andauernd Daten in ein leeres Array einfügen? (Für solch einen Fall reicht eigentlich immer BuildArray aus…)
Zitat:Wenn du zeigen würdest, wo du all das versuchst!?
Ich habe zwei Bilder angehängt, indenen das Speichern und Lesen des Signalverlaufs ersichtlich werden. Nach wie vor ist hierbei das Problem, dass beim Auslesen nur eine Messreihe angezeigt wird und diese nicht mit korrekter Uhrzeit (meistens die Uhrzeit von vorherigen Messreihen).
Zitat:Das versuchst du doch immer noch in deinem VI…
Entschuldige bitte dann habe ich leider doch nicht verstanden was du mit den Attributen meinst.
Zitat:Ich finde es sehr "unglücklich", wenn man irgendwelche Textdateien mit der Endung "xls" versieht. Das, was du da schreibst, sind landläufig CSV-Dateien: bennenne sie bitte auch so…
(Momentan verwendest den Tab als Trennzeichen: für solche Daten erwartet Excel die Endung TXT. Bei einem deutschen Excel wird üblicherweise das Semikolon als Trennzeichen in CSV-Dateien erwartet.)
Ich habe die Dateiendungen und Trennzeichen entsprechend angepasst. Vielen Dank für den Hinweis.
Zitat:Deine Array-Operationen sehen auch sehr umständlich aus: warum musst du andauernd Daten in ein leeres Array einfügen? (Für solch einen Fall reicht eigentlich immer BuildArray aus…)
Das Erstellen der Arrays, wie in meinem Programm war meine erste Idee, welche funktioniert hat. Mit einer anderen Umsetzung hatte ich leider keinen Erfolg.
07.12.2017, 09:16 (Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2017 09:20 von GerdW.)
Zitat:kannst du auch noch eine solche csv-Datei anhängen? (Gern auch in einem ZIP!)
Die Datei ist nicht allzu groß, habe sie direkt angehangen.
Zitat:Mit den "Attributen" meine ich dies hier:
Achso das. Da habe ich versucht die Uhrzeit als Attribut einzufügen, was so nicht funktioniert hat. Mit dem Signalverlauf speichern geht das wesentlich einfacher, jedoch bis jetzt ohne Erfolg beim Lesen aller Daten.
wenn ich mit der Funktion wie bei dir oben im Bild eine Waveform speichere, dann sieht das Ergebnis komplett anders aus als die von dir angehängte CSV-Datei…
laut ReadWaveform enthält deine Datei eine Waveform ohne Samples…
Kannst du deine Daten einfach mal mit WriteDelimitedSpreadsheet speichern?
(Evtl. würde es auch nicht schaden, beim Speichern von Waveforms dort auch ein dt zu setzen.)