LabVIEWForum.de
zeilenweise getaktet auslesen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: zeilenweise getaktet auslesen (/Thread-zeilenweise-getaktet-auslesen)

Seiten: 1 2


zeilenweise getaktet auslesen - Sledge - 12.06.2005 12:23

Hallo Zusammen,

ich möchte zeitabhängige Daten aus einer Datei auslesen und in Echtzeit darstellen. Die Daten liegen in folgender Form vor:

Zeit [s] Wert
0 0
0,5 1,5
1 3,25
1,5 2,55
.... ....

Ist es möglich, jede halbe Sekunde eine Zeile auszulesen und darzustellen und dann in der Datei eine Zeile weiter zu springen und den nächsten Wert getaktet auszulesen? Ich möchte nur ungern das VI "Aribiträres Signal simulieren" verwenden, so dass die Zeit-Spalte in der Datei nicht mehr benötigt wird.

Ich habe schon viel rumprobiert, aber eine Lösung habe ich noch nicht gefunden.

Ich hoffe, Ihr könnt mir weiterhelfen.

Vielen Dank.

Gruß
Sledge


zeilenweise getaktet auslesen - ahlers01 - 12.06.2005 15:38

Sledge schrieb:ich möchte zeitabhängige Daten aus einer Datei auslesen und in Echtzeit darstellen.
Ich vermute, Du meinst 'simulierte Zeit', denn das Lesen einer Datei in Echtzeit geht in Null-Koma-Nix...oder warum ist es wichtig nur jede halbe Sekunde einen Wert zu lesen??

Wenn es nur um ein langsames Darstellen geht, mach folgendes:
-Lies alle Daten in einen Array
-geh mit dem array in eine Loop und stelle im i.ten Durchlauf nur den Teil array von 0 bis i dar
-mach in jedem Durchlauf eine halbe Sekunde Pause

s. Beispiel


zeilenweise getaktet auslesen - Sledge - 14.06.2005 14:23

Hallo,

vielen Dank für Deine schnelle Antwort. Leider entspricht es nicht ganz dem was ich mir vorgestellt habe. Zu Deiner Frage warum es wichtig für mich ist nur jede halbe Sekunde den Wert auszulesen, kurz folgende Hintergrund-Info:

Die Werte entsprechen einer Sollwertvorgabe für eine Messung. Der Messwert soll später zusätzlich im gleichen Diagramm als Istwert dargestellt werden. Die Werte der Sollwertkurve gehören zu einem Zyklus der sich über eine Länge von 1200 Sekunden erstreckt. Bei dem Zyklus handelt es sich um ein Geschwindigkeitsprofil das online mit einem Fahrzeug nachgefahren werden muss. Pro Sekunde liegen zwei Werte vor. Um diesen darzustellen muss also alle 0,5 s ein Wert ausgelesen und dargestellt werden.

Zur Veranschaulichung habe ich einen Screenshot aus einem DIAdem-Programm hochgeladen. Die Gelbe Kurve stellt die Sollwerte dar, die grünen sind Grenzwerte. Die rote Kurve ist der Messwert der in Echtzeit dargestellt werden soll.

Ich hoffe, das veranschaulicht das Problem etwas besser.

Vielen Dank.

Gruß
Sledge


zeilenweise getaktet auslesen - ahlers01 - 14.06.2005 19:58

Vielleicht reden wir ja aneinander vorbei, aber..
Die Sollwerte kannst Du natürlich alle auf einen Schlag aus der Datei auslesen und im Programm in einem Array halten. Entscheidend ist doch wohl nur, das alle halbe Sekunden ein Istwert gemessen und mit dem Sollwert (und irgendwelchen Toelranzgrenzen) dargestellt wird. Beim Timing kommt es dann drauf an, wie exakt es sein soll. Ich denke, dass für die meisten Fälle das vom Betriebssystem garentierte Timing ausreicht. In LabVIEW nimmst Du am besten die Funktion 'Wait for next msec Multiple' (das icon mit dem Metronom). Mit dieser Taktung liest Du dann die Messwerte und stellst sie mit dem entsprechendem Sollwert (den Du aus dem vorher eingelesenen Array nimmst) dar. Warum Du das Auslesen auch nur all halbe Sekunde machen willst ist mir schleierhaft. Oder, wie gesagt, ich hab nicht verstanden worum es eigentlich geht.


zeilenweise getaktet auslesen - Sledge - 15.06.2005 10:03

Ich habe mal programmiert wie es ungefähr aussehen soll. Läuft allerdings nicht hundertprozentig, reicht aber um die sache zu veranschaulichen.

Da ich mit LabVIEW 7.1 arbeite und Du mit 7.0 muss ich es wahrscheinlich anders abspeichern, da Du die Datei sonst nicht öffnen kannst? Kannst Du mal kurz beschreiben wie ich das mache. Wäre super.


zeilenweise getaktet auslesen - Sledge - 15.06.2005 10:49

So, hab gefunden wie es geht. Hoffe es hat auch geklappt.

Bei der ganzen Geschichte handelt es sich um ein Fahrerleitsystem. Auf dem Monitor soll ein Geschwindigkeitsprofilangezeigt werden, das dann nachgefahren werden muss. Das rechte Diagramm soll eine Vorschau auf das kommende Profil zeigen, damit man weiß ob beschleunigt, gebremst oder die Geschwindigkeit gehalten werden muss. Um es übersichtlich zu gestalten, soll die Vorschau allerdings nicht länger als 10s sein. Das Mess Signal wird auf dem linken Diagramm am rechten Rand angezeigt. Normalerweise soll das Sollprofil auch in diesem Diagramm mitlaufen. Die Istgeschwindigkeit habe ich jetzt durch einen Schieberegler simuliert. Ich kann auch direkt das gesamte Sollprofil im Diagramm anzeigen lassen, allerdings fehlt mir dann ein vernünftiger Bezug zur x-Achse (10s Vorschau). Sei denn von dem Profil werden jeweils nur die aktuellen Ausschnitte in einem laufenden Diagramm angezeigt. Habe aber noch nicht gefunden, wie das funktionieren soll.

Ich bin bisher von einer 2Hz-Taktung für das Sollsignal ausgegangen, da die Werte in meiner Datei so vorliegen, also für jede halbe Sekunde liegt ein Geschwindigkeitswert des Profils vor. Deshalb war ich der Meinung, es sollte jede halbe Sekunde der nächste Geschwindigkeitswert ausgelesen werden.

Sorry wenn das alles etwas unglücklich erklärt und ausgeführt ist, aber ich bin ein absoluter Anfänger mit LabVIEW. Vielleicht siehst Du die Lösung ja viel klarer.


zeilenweise getaktet auslesen - Sledge - 15.06.2005 15:53

Hallo,

habe es jetzt doch halbwegs mit Deinem Beispiel hinbekommen. Noch drei kleine Fragen dazu:

Erstens: Enspricht der angegebene Wert auf der x-Achse bei Verwendung des vi´s "Warten(ms)" konstant der laufenden Zeit (natürlcih bei korrekter Einstellung)? Habe jetzt schon mehrfach gelesen, dass die Zeit die zum Ausführen gebraucht wird nicht mit eingerechnet wird, so dass ein zeitlicher Versatz entsteht. Also z.B. 500ms Warten + 2ms Ausführung + 500ms Warten .... macht dann anstatt z.B 1000ms ca. 1004ms. Lässt sich dieses Problem, falls es überhaupt existiert, auch umgehen?

Zweitens: Wie kann ich den Wert der x-Achse nach Abbruch wieder automatisch auf Null setzen?

Drittens: Wie oben erwähnt, soll im gleichen Diagramm noch ein über den DAQ gemessener Messwert laufen. Inwieweit beeinflusst das die x-Achse? Hier wird ja dann eine reale Zeit angezeigt.

Vielen Dank für Deine Hilfe, das bringt mich ein großes Stück weiter.

Gruß
Sledge


zeilenweise getaktet auslesen - ahlers01 - 15.06.2005 19:42

Sledge schrieb:Bei der ganzen Geschichte handelt es sich um ein Fahrerleitsystem. Auf dem Monitor soll ein Geschwindigkeitsprofilangezeigt werden, das dann nachgefahren werden muss.
Das rechte Diagramm soll eine Vorschau auf das kommende Profil zeigen, damit man weiß ob beschleunigt, gebremst oder die Geschwindigkeit gehalten werden muss.
Muss derjenige, der das Profile 'nachfährt', auf die Monitoranzeige reagieren? Wenn ja, dann ist eine halbe sec Reaktionszeit viel zu lang. Wenn das Display nur zur visuellen Kontrolle dient, ist's o.k.
Zitat:Das rechte Diagramm soll eine Vorschau auf das kommende Profil zeigen, damit man weiß ob beschleunigt, gebremst oder die Geschwindigkeit gehalten werden muss. Um es übersichtlich zu gestalten, soll die Vorschau allerdings nicht länger als 10s sein. Das Mess Signal wird auf dem linken Diagramm am rechten Rand angezeigt. Normalerweise soll das Sollprofil auch in diesem Diagramm mitlaufen. Die Istgeschwindigkeit habe ich jetzt durch einen Schieberegler simuliert. Ich kann auch direkt das gesamte Sollprofil im Diagramm anzeigen lassen, allerdings fehlt mir dann ein vernünftiger Bezug zur x-Achse (10s Vorschau). Sei denn von dem Profil werden jeweils nur die aktuellen Ausschnitte in einem laufenden Diagramm angezeigt. Habe aber noch nicht gefunden, wie das funktionieren soll.
Schau mal in dem VI test3.vi. Ich hab da mal rumgespielt (und vor allem die häßlichen Express VI rausgeschmissen. Bin vielleicht zu alt für so'n neumodisches Zeug).

Auf jeden Fall ist Dein Problem kein Datei I/O Problem, denn es ist ziemlich egal woher und wie schnell das VI an die Sollwerte kommt. Entscheidend ist, wie sie dargestellt und vor allem, wie sie zusammen mit den in Istzeit gemessenen Istwerten dargestellt werden.

Zitat:Ich bin bisher von einer 2Hz-Taktung für das Sollsignal ausgegangen, da die Werte in meiner Datei so vorliegen, also für jede halbe Sekunde liegt ein Geschwindigkeitswert des Profils vor. Deshalb war ich der Meinung, es sollte jede halbe Sekunde der nächste Geschwindigkeitswert ausgelesen werden.

Sorry wenn das alles etwas unglücklich erklärt und ausgeführt ist, aber ich bin ein absoluter Anfänger mit LabVIEW. Vielleicht siehst Du die Lösung ja viel klarer.
Wenn, wie oben gesagt, jemand auf die Sollanzeige reagieren soll, muss das VI auf jeden Fall schneller als mit 2 Hz update Rate laufen. In test3.vi ist gezeigt, wie man so was machen kann (wobei es sicher nicht nur diesen Weg nach Rom gibt...)

Viel Erfolg

Franz


P.S.:
Durch das Rausschmeißen dieser unsäglichen Express VIs ist test3.vi 95 kB lang, gegenüber vorher >900 kB!


zeilenweise getaktet auslesen - Sledge - 15.06.2005 21:28

Hallo Franz,

vielen Dank für Deine Mühen. Das scheint echt toll zu funktionieren.

War auch gerade dabei die Express-vi´s rauszuschmeißen, aber das hätte ich nie im Leben in dieser Form hinbekommen. Ist schön, wenn man so eine Hilfe bekommt.

Ich hoffe nur, dass ich die Datenerfassung über den DAQ mit der seperaten Abtastrate problemlos einfügen kann.

Tausend Dank.

Gruß
Sledge


zeilenweise getaktet auslesen - dirkster - 27.06.2005 13:40

Hi Slegde, Hi Franz !

bin grad zum ersten mal im forum weil mir LabVIEW kopfschmerzen bereitet und finde gleich die lösung zum problem, das nämlich ein ganz ähnliches ist wie das von slegde.
leider arbeite ich mit LabVIEW 6i also 6.02 und kann mit den bsp nichts anfangen.
wäre es möglich die mal auf 6i format zu speichern ??? (unechtzeit und test3)

DANKE !!

gruß dirk