LabVIEWForum.de - Zugversuch - Oberfläche: Programmablauf?

LabVIEWForum.de

Normale Version: Zugversuch - Oberfläche: Programmablauf?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich will für einen Zugversuch eine LV-Oberfläche machen. Wie man da am besten vorgeht ist mir noch nicht so ganz klar. Ein fertiges Diagramm sieht z.B. so aus:
https://de.wikipedia.org/wiki/Zugversuch...grenze.svg

Ich habe Sensoren die Weg und Kraft erfassen und das als analoge Spannung ausgeben. Ich benötige ja einen XY-Plot. Der XY-Plot kann ja Daten nicht fortlaufend schreiben so wie ein Diagramm, wenn ich es richtig weiß. Ich müsste also das aktuelle XY-Wertepaar jeweils in ein Array speichern und dann immer das gesamte Array plotten, richtig? Beim ersten Durchlauf wäre dann halt ein Wertepaar drin, beim zweiten zwei, etc.

Da ich derzeit mit 10 kHz abtaste und mein Programm nicht schnell genug laufen wird für eine Einzelwertübertragung, lasse ich jeweils 1000 Messwerte paketweise kommen, speicher die in das Array und plotte (würde das in einer while-Schleife machen). Nach Beenden des Zugversuchs (und Verlassen der while-Schleife) würde ich das gesamte Datenarray noch in eine csv-Datei speichern.

Das wäre so mein Vorgehen. Ist das so sinnvoll? Da ich damit sicher einige Stunden, wenn nicht zwei Tage beschäftigt sein werde, wollte ich mal eure Meinung wissen, bevor ich mir unnötig Mühe mache, wenn es doch eine viel einfachere Lösung gibt (ich habe bisher noch nicht angefangen mit dem Programm, nur bissel rumgespielt und da schon Probleme mit den vielen Typkonvertierungen und Arrays gehabt).

Viele Grüße
Markus
Hallo Markus,

Zitat:Ich benötige ja einen XY-Plot.
Ja.

Zitat:Der XY-Plot kann ja Daten nicht fortlaufend schreiben so wie ein Diagramm, wenn ich es richtig weiß. Ich müsste also das aktuelle XY-Wertepaar jeweils in ein Array speichern und dann immer das gesamte Array plotten, richtig? Beim ersten Durchlauf wäre dann halt ein Wertepaar drin, beim zweiten zwei, etc.
Ja. Du musst alle Daten, die du plotten willst, in einem Array sammeln.

Zitat:Da ich derzeit mit 10 kHz abtaste und mein Programm nicht schnell genug laufen wird für eine Einzelwertübertragung, lasse ich jeweils 1000 Messwerte paketweise kommen,
Prima Idee!

Zitat:speicher die in das Array und plotte (würde das in einer while-Schleife machen).
Das wird jetzt langsam fragwürdig!
Willst du wirklich pro Sekunde 10000 Punkte in deinen Graph malen lassen? Das ist unsinnig:
- Was glaubst du, wie viel CPU-Zeit das fressen wird?
- Wieviel davon ist sinnvoll, wenn dein Graph geschätzte 600 Pixel breit ist?
Alle Samples zu speichern ist sinnvoll, aber auch alle im Graph anzuzeigen nicht mehr! Hier kommt das Stichwort "dezimieren" ins Spiel: man könnte z.B. von jedem 1000-Samples-Block nur den Mittelwert (und vielleicht noch min/max oder ±StAbw) plotten…

Zitat:Nach Beenden des Zugversuchs (und Verlassen der while-Schleife) würde ich das gesamte Datenarray noch in eine csv-Datei speichern.
Auch das ist fragwürdig: du bekommst pro Sekunde 20000 Samples (2 Kanäle mit 10kS/s). Dein Versuch dauert vielleicht 100s: dann willst du wirklich 2MS im Speicher halten und hinterher abspeichern? Was passiert, wenn dein Programm (oder der Rechner) zwischendrin abstürzt? Daten futsch…
Also: Daten gleich in eine Datei speichern. DAQmx bietet dir hier an, direkt schon im DAQmx-Treiber in eine TDMS-Datei zu speichern: damit hast du dann gar keine Arbeit beim Datenspeichern…

Zitat:ich habe bisher noch nicht angefangen mit dem Programm, nur bissel rumgespielt und da schon Probleme mit den vielen Typkonvertierungen und Arrays gehabt
Ich empfehle deshalb mal die Links in meiner Signatur…
Referenz-URLs