Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
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.
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Daten aus for-Schleife in while-Schleife
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.
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>
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
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?
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...
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?
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.
A few weeks of developement and testing can save a WHOLE afternoon in the library!
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,
30.06.2006, 18:36 (Dieser Beitrag wurde zuletzt bearbeitet: 30.06.2006 18:37 von Kvasir.)
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.
A few weeks of developement and testing can save a WHOLE afternoon in the library!