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?
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.
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.
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.
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
Queue geht doch eigentlich nicht, dafür muss ich die Elemente doch entnehmen, oder?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.