LabVIEWForum.de - Datenerfassung mit Compactrio 9022 - Umwandlung von 64bit reell in Signalverlauf

LabVIEWForum.de

Normale Version: Datenerfassung mit Compactrio 9022 - Umwandlung von 64bit reell in Signalverlauf
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

erstmal folgende Angaben:
LV-Version 2010
Hardware zur Signalaufnahme: Compactrio 9022

Mit unten stehendem VI möchte ich Signaldaten aufnehmen und am Computer sichtbar machen und weiter verarbeiten (FFT).

Im unteren Teil des VI erstelle ich ein künstliches, aus 2 Sinus zusammengesetztes Signal und ermittle damit problemlos mein Spektrum.

[attachment=34828]

Im oberen Teil ist an AI0 ein Signalgenerator angeschlossen, der über den Compactrio eingelesen wird. Angezeigt wird das Signal, aber ich kann kein Leistungsspektrum daraus erzeugem. Zusätzlich ist das Signal nicht schön dargestellt (zweiter Screenshot, eingestellte Frequenz: 1Hz). Die Fehlermeldung: Unterschiedlicher Dateityp. Datenquelle ist 64bit reell und Datensenke ist Signalverlauf. Kann man das konvertieren? Und in einem zweiten Schritt: kann man das Signal nicht so abgestuft darstellen?

Gruß, Tobias
Hallo Tobias,

Zitat:Datenquelle ist 64bit reell und Datensenke ist Signalverlauf. Kann man das konvertieren?
Ja.
Aber noch besser als Konvertieren ist ordentliches Sammeln eines Signalverlaufs, d.h. Sammeln der Werte in einem Array...
Und noch viel besser wäre der Verzicht auf ExpressVIs - dann muss man erst gar nicht mit dem (unübersichtlichen) Datentyp "Signalverlauf" hantieren...

Zitat:Und in einem zweiten Schritt: kann man das Signal nicht so abgestuft darstellen?
Ja.
- höhere Samplingrate
- größere Datenübertragungsrate
- Aufnehmen ganzer Signalverläufe und Versenden dieser an den Host
- andere Plot.Interpolation für den Plot einstellen
Hallo,

Zitat:Aber noch besser als Konvertieren ist ordentliches Sammeln eines Signalverlaufs, d.h. Sammeln der Werte in einem Array...

Welche Art von Array nimmt man dann? Sammelt ein Array die Daten ersteinmal in einen Speicher und gibt sie dann weiter, oder passiert das kontinuierlich? Welche Angaben muss das Array enthalten?
Und: wie verarbeitet man die Daten des Arrays dann weiter? Nach erstem Sichten und Probieren gibt es meiner Meinung nach verschiedene Möglichkeiten des erstellens eines Leistungsspektrums / FFT. Ich kann dort keine Unterschiede feststellen.

Zitat:- höhere Samplingrate

Wo stelle ich die Samplingrate ein?

Zitat:- Aufnehmen ganzer Signalverläufe und Versenden dieser an den Host

D.h. ich erstelle ein VI im "Gerätebereich", also unter dem Unterreiter Compact Rio, das sich mit dem Erfassen beschäftigt (Erstellen des Arrays?), und erst im zweiten Schritt werden diese Dateien im Host-VI auf dem Rechner analysiert?

Vielen Dank schon einmal für die bisherige Antwort.

Gruß, Tobias
Hallo Tobias,

Zitat:Wo stelle ich die Samplingrate ein?
In deinem Beispiel über die Schleifen-Iterationsrate. Wobei die ScanEngine auf ca. 1kHz beschränkt ist...

Zitat:erst im zweiten Schritt werden diese Dateien im Host-VI auf dem Rechner analysiert?
Ja. Der PC ist meist potenter als das cRIO und kann stupide Rechenaufgaben erledigen.

Zitat:Welche Art von Array nimmt man dann?
Gibt es da verschiedene Arten? Ich würde das nehmen, welches am besten zur Aufgabe passt...

Zitat:Sammelt ein Array die Daten ersteinmal in einen Speicher und gibt sie dann weiter, oder passiert das kontinuierlich?
Hängt von deiner Programmierung ab...

Zitat:Welche Angaben muss das Array enthalten?
Die Messdaten!?

Du sammelst z.B. 1024 Messwerte in einem Array und schickst diesen Datenblock (per SharedVariable) an den PC. Der kann dann bequem eine FFT davon berechnen und die UI-Darstellung übernehmen...
Hallo,

Zitat:Schleifen-Iterationsrate

Wo stell ich diese ein? In den Eigenschaften zur Schleife hab ich gesucht, aber nichts gefunden. Gibt es einen extra Port, den man an die Schleife hängen, und mit einer numerischen Konstante versehen muss?

Zitat: Zitat:Welche Art von Array nimmt man dann?

Gibt es da verschiedene Arten? Ich würde das nehmen, welches am besten zur Aufgabe passt...

Ich meine damit 1D, 2D ... . Reicht zum Sammeln der Daten und zum Erstellen des Signalverlaufs einfach das Erstellen des Array, oder muss danach geschaltet noch etwas passieren? Ich habe folgenden Screenshot gemacht um das nochmal zu verdeutlichen. Mir ist denke ich klar, dass es nicht so einfach geht, aber irgendwie muss man ja anfangen. Dort sind zwei Versionen dargestellt, die ich schon mal in Beispielen gefunden habe, habe aber keine Ahnung wann man was nimmt.

[attachment=34904]

Zitat:Du sammelst z.B. 1024 Messwerte in einem Array und schickst diesen Datenblock (per SharedVariable) an den PC.

Für den ersten Schritt würde es auch reichen., Aber ich würde gerne die Messdaten nicht erst irgendwo zwischenspeichern und dann auslesen, sondern gleich weiterverarbeiten und das Leistungsspektrum erstellen. Sozusagen online bei einer Frequenzänderung gleich die Auswirkungen sehen. Sorry, wenn das aus meinen Fragen nicht deutlich hervorging.

Gruß, Tobias
Hallo,

hab ich euch verschreckt?

Möchte nicht den Eindruck erwecken, dass ich mich hier nur berieseln lasse. Ich habe bevor ich den Thread erstellt habe und auch jetzt noch Stunden mit Tutorials, der internen Labviewhilfe und dem Forum hier verbracht. Durch einige Sachen steig ich einfach nicht durch. Hab halt noch überhaupt keine Erfahrungen mit Labview und muss mich jetzt selbstständig da irgendwie zurecht finden.

Beste Grüße,

Tobias
Hallo Tobias,

Zitat:Schleifen-Iterationsrate - Wo stell ich diese ein?
Die stellt man ein, indem man eine Wartefunktion (aus der "Zeit"-Palette) in die ansonsten ungebremst laufende Schleife einfügt. Beachte: diverse Funktionen bringen ihre eigenen Wartezeiten mit - wie z.B. Datenerfassungsfunktionen...

Zitat:Aber ich würde gerne die Messdaten nicht erst irgendwo zwischenspeichern und dann auslesen, sondern gleich weiterverarbeiten und das Leistungsspektrum erstellen.
Erstelle dir einen Buffer und ersetze darin immer wieder den ältesten durch einen neuen Wert...
Hallo,

vielen Dank, für die bisherigen Antworten, aber:

Habe nochmal ganz von vorne angefangen. Dazu habe ich mich an unten stehendem Beispiel orientiert (screenshot "einfaches Bsp"), welches auch tadellos funktioniert (simulierter zusammengesetzter Sinus). Dann habe ich analog dazu ein neues Projekt erstellt ("Leistungsspektrum ermitteln.vi" und als Ersatz für den simulierten Sinus mein echtes Signal genommen.
[attachment=35314]

Zitat:Erstelle dir einen Buffer und ersetze darin immer wieder den ältesten durch einen neuen Wert...

Frage: Welchen Befehl muss ich für den Buffer verwenden, und muss er an die Stelle, wo ich ihn im Screenshot "Bild_Leistungsspektrum" vermute?
[attachment=35317]

Momentan ist es ja logischerweise so, dass der Wert gelesen wird, der einzeln in das Array geschrieben wird, und der dann einzeln weiter gegeben wird. Ist die Bufferfunktion nicht auch mit dem Array anwendbar? Also in das Array z.B. 1000 Werte schreiben und die dann analysieren, und dann in der neuen Schleife die beginnt das Array neu schreiben lassen? Kann oder muss man dann auf den Signalverlauf verzichten?

Oder ist der Fehler bei der Funktion "Signalverlauf erstellen" zu finden? Ich möchte ja keinen einzelnen Wert, sondern aus einer Reihe von Werten einen Signalverlauf erstellen. Muss man dort ein zusätzliches Attribut erzeugen?

Beste Grüße, Tobi
Hallo Tobias,

Zitat:Also in das Array z.B. 1000 Werte schreiben und die dann analysieren,
Ja dann mach das doch! Bisher erzeugst du nur ein Array mit einem einzigen Wert darin...
[attachment=35323]
Man kann aber auch 1000 Messwerte in ein Array schreiben (für das richtige Timing musst du noch sorgen!).

Bufferfunktion: Gibt es nicht direkt. Kann man aber einfach machen: Array der gewünschten Größe initialisieren, Einzelwerte darin ersetzen... (Schieberegister sind sehr hilfreich, wenn man sich Werte merken will!)
Hallo,

schon mal vielen Dank für den Tipp. War echt gut!

Im weiteren Verlauf möchte ich nun bei einzelnen Frequenzbereichen eine boolesche Anzeige haben, ob ich gerade in diesem Frequenzbereich bin oder nicht. Der untere Zweig im Bild funktioniert sehr gut, aber nur im Gesamtbereich.

Im oberen Zweig des Blockdiagramms möchte ich das auch in einzelnen Frequenzbereichen haben (hier im Beispiel von 1-3,5 Hz). Dazu nutzt man den Bandpassfilter, oder? Setze ich ihn an der richtigen Stelle ein? Ich habe es an mehreren Stellen versucht, logisch wäre es meiner Meinung nach nach dem Cluster und vor der Anzeige, aber da kommen die Datentypen durcheinander.

[attachment=35349]

[attachment=35348]

Die Labview-Version ist 2010.

Viele Grüße,

Tobias
Seiten: 1 2
Referenz-URLs