Hi,
ich habe ein USB 6008 und will kontinuierlich mit einem kanal messen. Da funkt sowiet gut
...aber nun will ich von Blöcken aus je 1000 Werten den Mittelwert bilden und ein neues array aus den Mittelwerten erzeugen. Zu dem sollen später auch noch während die kontinuierliche Messung weiter läuft auch auf die anderen Kanäle zugegriffen werden und andere Einstellungen mittels buttons gemacht werden. Die kon. Messung läuft in einer While-loop, heißt das, dass alles was ich sonst machen will auch in diese While-loop rein muss? Wenn ja...wie stell ich das an? Das wiederholt sich dann doch ständig....
Danke schonmal im vorraus!
Gruß
Jan
Hi,
also du musst nicht alles in eine Schleife packen, die Schleifen können auch untereinander kommunizieren.
Ich denke mal das für dich so etwas wie ein Producer/Consumer Aufbau das richtige währe.
Habe mal eine Beispiel angefügt, von der ich denke, dass es dein Problematik abdeckt.
Gruß
Danke illuminus
Ehrlich gesagt verstehe ich deine Lösung nicht so wirklich
bin halt noch ein neuling. Gibt es irgend einen Link oder Buch wo ich mir das Wissen anlesen kann?
Gruß Jan
(06.09.2011 14:15 )Eggord schrieb: [ -> ]...aber nun will ich von Blöcken aus je 1000 Werten den Mittelwert bilden und ein neues array aus den Mittelwerten erzeugen.
Das ist die einfachste Sache der Welt. Dazu mußt Du keine Werte zwischenspeichern, das macht der DAQmx-Lesepuffer. Einfach bei DAQmx Read als "Anzahl zu lesender Samples" 1000 angeben. DAQmx Read wartet dann in der Schleife, bis sich 1000 Werte angesammelt haben. Die werden dann auf einmal augelesen. Aus dem empfangenen Array bildest Du den Mittelwert - fertig.
Hi Jan,
es gibt unzählige Tutorials und Bücher zu LabVIEW. Wenn du Glück hast sind bei deinem LabVIEW Packet die Kursunterlagen vom Basik 1 und 2 beigelegt, dann würde ich dir empfehlen die beiden Kurse durchzuarbeiten. Ansonsten kannst du mal unter
http://www.ni.com/gettingstarted/labviewbasics/ schauen.
Was das Beispiel angeht, schau die halt jeden einzelnen Strang an und lies dir die Hilfe zu den verwendeten VIs durch. Das ist der einzige Weg es zu verstehen.
Aber eines vorweg LabVIEW ist eine Programmiersprache. auch wenn der einstig einfacher ist als bei C, Java, Vbasic usw. man muss wissen und verstehen was man machen will.
Gruß Knut
@Lucki:
Er möchte kontinuierlich Messen und er möchte auch die anderen 7 Kanäle mitbenutzen. Das bedeutet er muss entweder alle Kanäle mit einer Sampelrate von 1000 aufnehmen oder kann die anderen Kanäle nicht nutzen. Das möchte er aber.
Zum Thema Mittelwertsbildung habe ich auch noch ein Problem:
Ich führe Langzeitmessungen durch und benötige von allen aufgezeichneten Werten einen Mittelwert.
Beim angefügten VI funktioniert das auch fast, nur beim Stoppen wir ddie Schleifeniteration auf 0 gesetzt und ich erhalte inf als Mittelwert. Wie kann ich den höchsten Schleifendurchgangswert erhalten?
Wie gross / genau ist diese Art der Mittelwertbildung, wenn bis zu 20.000 Messerte addiert werden müssen?
Vielen Dank
Gruss
Hallo lavoh,
nach Entfernen der RubeGoldbergs bleibt das hier von deinem VI übrig:
[
attachment=37390]
Was sollte diese Akrobatik mit lokalen Variablen und 2 Schleifen?
Zitat:nur beim Stoppen wir ddie Schleifeniteration auf 0 gesetzt und ich erhalte inf als Mittelwert. Wie kann ich den höchsten Schleifendurchgangswert erhalten?
- Das nach Stopp und Neustart wieder bei Null angefangen wird, ist normal und gewünscht.
- Wo erhälst du Inf? Du addierst doch schon eine 1 zum i dazu?
- Was ist ein Schleifendurchgangswert?
- Höchstwerte ermittelt man mit der Min/Max-Funktion.
- Schieberegister kennst du schon, damit kann man sich Werte merken...
Hallo Gerd,
vielen herzlichen Dank für die schnelle Antwort.
Mit dem inf war mein Fehler, im hochgeladenen VI ist der auch bereits behoben, was am +1 zum i liegt.
Mit dem Schleifendurchgangswert meinte ich den Iterationswert i, entschuldigung.
Die zweite Schleife benötige ich noch für weitere Berechnungen. Das Beenden mit der lokale Variable habe ich hierher
http://www.labviewforum.de/Thread-mehrer...en-stoppen
Bei Verwendung Min/Max in der Schleife wird beim Beenden jedoch ebenfalls 0 angezeigt ...?