LabVIEWForum.de - Daten aus for-Schleife in while-Schleife

LabVIEWForum.de

Normale Version: Daten aus for-Schleife in while-Schleife
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.

Katagia

<div align="left">Hallo

Bin noch ziemlich neu in LabVIEW und hänge gerade.
Ich habe ein primitives EKG aufgebaut.
Die Messdaten lese ich vorerst über die Soundkarte ein.
Ich weiß der Hochpass am Eingang mach mir mein Signal kaputt,
aber zum Erkennen reicht es.
Ich habe mir die Beispielanwendung dazu in der Hilfe angesehen.
"SI Read" wird in einer while-Schleife ausgeführt. Die neuen Messdaten
landen zusammen mit den vergangenen Messungen in einem Schieberegister.
Die Daten werden gefiltert und dann als Graph ausgegeben.

Jetzt sollen die Messdaten als zusätzliche Funktion aus einer Spreadsheet-Datei gelesen
werden. Wenn ich die Datei lade, sind alle Daten in einem großen Array.
Ich will aber ein "reales" Signal emulieren, also die while-Schleife alle 100ms mit den
Daten der letzen 100ms füttern.

Meine Idee war, neben die While-Schleife, in der das Signal verarbeitet wird, eine
For-Schleife zu setzen, die alle 100ms ein Array mit den Daten ausgibt.
Leider funktioniert das ganze so nicht. Im "Highlight" Modus sehe ich, wie die For-Schleife
sauber durchlaufen wird. Leider kommen die Daten aus der For-Schleife nicht heraus und
meine While-Schleife wird nicht mit den Daten gefüttert.

Meine Idee war, dass die Signalverarbeitung in der while-Schleife für beide Fälle, also
Signal von Line-In oder Signal aus Datei, identisch ist.
Lediglich die Datenquelle soll umgeschaltet werden.

Bis dann,</div>

Katagia

Anbei noch ein Screenshot. Ist so vielleicht leichter verständlich Smile
Hi,

wenn ich mich nicht ganz arg täusche, dann kannst Du nicht das gesamte Array nach einem Schleifendurchlauf von 100 ms (durch Verzögerung) auslesen. Entweder liest Du einzeln pro Schleifendurchlauf einen Wert aus, dann musst Du aber "Enable Indexing" aktivieren (Rechtsklick auf die beiden "Ausgänge" Deiner For-Schleife und dann "Enable Indexing" anklicken. Oder aber die For-Schleife läuft so oft durch, wie viele Elemente in Deinem Array sind und gibt dann das gesamte Array auf einmal aus.
Daher würde ich in Deinem Fall die Verzögerung nicht in der For-Schleife setzen, sondern außerhalb. Dann kannst Du ja schauen, wie lange die For-Schleife benötigt und die Differenz auf 100 ms auffüllen. Weil um ein Array auszulesen dauert es bestimmt keine 100 ms.
Hoffentlich habe ich Dein Problem richtig erkannt. Rolleyes

Gruß M.Weippert

' schrieb:<div align="left">Hallo

Bin noch ziemlich neu in LabVIEW und hänge gerade.
Ich habe ein primitives EKG aufgebaut.
Die Messdaten lese ich vorerst über die Soundkarte ein.
Ich weiß der Hochpass am Eingang mach mir mein Signal kaputt,
aber zum Erkennen reicht es.
Ich habe mir die Beispielanwendung dazu in der Hilfe angesehen.
"SI Read" wird in einer while-Schleife ausgeführt. Die neuen Messdaten
landen zusammen mit den vergangenen Messungen in einem Schieberegister.
Die Daten werden gefiltert und dann als Graph ausgegeben.

Jetzt sollen die Messdaten als zusätzliche Funktion aus einer Spreadsheet-Datei gelesen
werden. Wenn ich die Datei lade, sind alle Daten in einem großen Array.
Ich will aber ein "reales" Signal emulieren, also die while-Schleife alle 100ms mit den
Daten der letzen 100ms füttern.

Meine Idee war, neben die While-Schleife, in der das Signal verarbeitet wird, eine
For-Schleife zu setzen, die alle 100ms ein Array mit den Daten ausgibt.
Leider funktioniert das ganze so nicht. Im "Highlight" Modus sehe ich, wie die For-Schleife
sauber durchlaufen wird. Leider kommen die Daten aus der For-Schleife nicht heraus und
meine While-Schleife wird nicht mit den Daten gefüttert.

Meine Idee war, dass die Signalverarbeitung in der while-Schleife für beide Fälle, also
Signal von Line-In oder Signal aus Datei, identisch ist.
Lediglich die Datenquelle soll umgeschaltet werden.

Bis dann,</div>

Katagia

Guten morgen.

Wenn alle Elemente aus dem Array auf einmal an die while Schleife übergebe,
am Übergabepunkt "Enable Indexing" verwende, funktioniert das ganze.
Jetzt will ich die Daten von Line-In mit der selben Methode übergeben.
Hierbei bekomme ich pro Sekunde ein neues Array mit 2x4096.
Leider gibt die while Schleife, in der ich die Daten von Line-In lese,
nur beim letzten Durchlauf Daten aus.
Wie kann ich dafür sorgen, dass die Schleife bei jedem Durchlauf Daten
ausgibt?

Bis dann,
Ich bin jan och nicht so lange bei LabVIEW dabei, aber liest du nicht in der ersten While schleife deine Daten ein bis die Stp bedingung erfüllt wird, erst dann geht er in die andere Schleife und gibt die Daten aus oder?

In dem Fall gibt er natürlich nur die letzten Daten aus, die Ausgabe sollte in derselben Schleife erfolgen, z.B über lokale Varablen.

Hoffe mal ich hab das Problem hier richtig erkannt, wenn nicht sorry...

Katagia

Es ist genau so wie du schreibst.

Ich weiß, wenn ich die rechte While-Schleife mit den Schieberegistern in die linke while-Schleife
stecke, würden die Daten richtig ankommen.
Dann hätte ich den Code in der innersten while-Schleife doppelt, da der selbe Code für
Daten aus einer geladenen Datei verwendet wird.

Die Idee mit der lokalen Variable ist nicht schlecht. Nur in welche Variable kann ich ein 2x4096 Array
speichern?

Mir fehlt noch ein wenig der Überblick.

Bis dann,
Solange deine Messschleife läuft, kannst du außerhalb dieser Schleife nicht arbeiten.

Du könntest aber die Indizierung aktivieren bei der Schleife. Dadurch bekommst du dann einen 3D Array mit 2x4096xN(Messungen) als Größe.
Den kannst du dann wieder abarbeiten.

Oder du packst die gesamte rechte Schleife in deine Messschleife, dann werden die Daten gleich bei jeder Messung verarbeitet und sekündlich aktualisiert.

Katagia

Meinst du Indizierung am Ausgang der linken while-Schleife? Das funktioniert leider nicht.
Die Daten kommen wieder erst beim letzten Durchlauf raus.

Ich will die Daten bereits während der Messung ausgeben.

Ich habe in einem anderen Posting einen Tip bekommen.
Ich speichere die Abtastwerte in einer lokalen Variable.
Leider hängt es hier noch bei mir.

Wie kann überhaupt eine lokale Variable für Arrays erstellen?
Ich habe über das Frontend ein Array erstellt.
Wenn ich versuche, dieses Array mit dem 8Bit Stereo Ausgang verbinde,
erhalte ich den Fehler:
The type of the source is 2-D array of unsigned byte [8-bit integer (0 to 255).
The type of the sink is 2-D array of void.

Ich wollte darauf verzichten, die rechte while-Schleife in die Linke hereinzupacken,
da ich sonst den gesammten Code in der rechten Schleife doppelt im Programm hätte,
da die selbe Schleife auch verwendet wird, wenn Messdaten aus einer Datei gelesen werden.

Bis dann,
Thread

Das Problem in diesem Thread läuft sich auch auf dein Problem hinaus. Wenn du es also außerhalb der Schleife haben willst, solltest du am besten Notifier verwenden.

Was meinst du mit frontend?
Rechte Maustaste auf den Ausgang deines "SI Read" und dann "Anzeigeelement erstellen". Von diesem Element dann eine lokale Variable erstellen.

Katagia

Super, danke für die Hilfe. Jetzt funktioniert es.

Mit Frontend habe ich das Bedienelement gemeint.

Jetzt muss ich mir nur noch richtige Elektrodenkabel besorgen.
Mit meinen ungeschirmten Kabeln ist die ganze Schaltung ein prima
RadioSmile

Bis dann,
Referenz-URLs