Forum: PC-Programmierung Labview Daten aufnehmen, speichern und verarbeiten


von Kurt (Gast)


Lesenswert?

Hallo

Ich habe eine Frage, die sicherlich schon x mal perfekt beantwortet 
wurde, aber die LV Foren sind irgendwie so unübersichtlich, dass ich die 
Antwort nicht finde.

Ich habe eine National Instruments Karte, die Daten mit einigen kS/s 
aufnimmt. Die sollen kontinuierlich in eine Datei gestreamt werden. 
Gleichzeitg will ich aber eine fft machen und bei Überschreitung einer 
Schwelle einen digitalen pin toggeln. Es müssen nicht immer alle Samples 
prozessiert werden, es reicht die fft zweimal pro Sekunde über die 
letzten 2 Sekunden zu machen. ms kritisch ist das ganze auch nicht. 100 
ms delays sind völlig ok.

Wie gehe ich das Problem am besten an?

von Dumdi D. (dumdidum)


Lesenswert?

Das ist schwierig. Du hast Echtzeit Anforderungen (Echtzeit bedeutet 
nicht schnell, sondern garantierte maximale Latenzzeiten).
Ganz normal unter windows kann es sein, das Windows.der Meinung ist 
jetzt mal 1s fuer sich selbst zu brauchen, wenn z.B. Software gestartet 
wird.

Es gibt LabView Realtime Umgebung, braucht eine extra Lizenz. Oder Du 
machst das auf fpga (compactrio) oder so, braucht glaube ich auch eine 
Lizenz.

Oder Du laesst die Anforderung fallen und klickst Dir das Programm 
zusammen.

von Kurt (Gast)


Lesenswert?

Ist nicht Echtzeit. Wenn es mal ne Sekunde dauert ist das kein Problem. 
So schnell wird der Reaktor nicht kritisch. Meine Frage ist nur mit 
welchen Strukturen ich das generell angehen soll. Bisher haben wir immer 
2 Sekunden gemessen, ausgewertet, getriggert, weggeschrieben und neu 
gemessen. Der neue Ansatz soll nur die Totzeit eliminieren und parallele 
Messung, Speichrung und Auswertung erlauben.

von Kurt (Gast)


Lesenswert?

Ich habe es jetzt so hinbekommen, dass ich einen task kreire, und dann 
immer n samples aus dem Puffer lese, speichere und auswerte. Das wäre 
das Minimum aktuell. Gut wäre aber, wenn man samples mehrmals nutzen 
könnte, sozusagen um überlappende ffts machen zu können.

von Lars F. (flemmy)


Lesenswert?

Moin Kurt,

Nimm dir drei While-Schleifen her und verbinde sie je mit einer Queue.

Die erste Schleife nimmt nur Daten auf und legt sie in der Queue ab. Die 
zweite Schleife rechnet dann und die dritte Stellt das Ergebnis dar.


Schau dir dazu http://www.ni.com/white-paper/3023/en/ an.

Die Überlappung lässt sich sicherlich mit den LV Schieberegistern und 
einem Array umsetzen.

: Bearbeitet durch User
von Kurt (Gast)


Lesenswert?

Queue geht doch eigentlich nicht, dafür muss ich die Elemente doch 
entnehmen, oder?

von Lars F. (flemmy)


Lesenswert?

Kurt schrieb:
> Queue geht doch eigentlich nicht, dafür muss ich die Elemente doch
> entnehmen, oder?

Naja,
Zum Zwischenspeichern musst du ja keine Queue nehmen. Stattdessen eben 
besagtes Schieberegister auf Basis eines Arrays.
Die Queue soll nur zur Kommunikation zwischen den Schleifen sein.

von Kurt (Gast)


Lesenswert?

Ah, hab's verstanden und implementiert. Läuft! Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.