Hallo,
ich hab eine basicfrage. obwohl es banal aussieht, aber brauche dringend hilfe.
(bin total durcheinander auf einmal)
ich lese mit DAQmx (kanal erzeugen.Timing.task starten.task lesen.task stoppen). eine reihe von messdaten.
DAQmx Timing auf kontinuierlich gestellt und Rate=1000 hz (alles andere Default).
DAQmx Lesen ( N kanal. N sampels, Analog 1D waveform) (alles andere Default)
kommt da am ausgang in meinem fall wirklich 1000 werte in der sekunde raus ?
ich bin mit dem gesamten daten paket puffersachen und einzelwert und konti. durcheinander!!
2 screenshots. danke euch.
' schrieb:ich lese mit DAQmx (kanal erzeugen.Timing.task starten.task lesen.task stoppen). eine reihe von messdaten.
Sieht auf den ersten Blick doch alles ganz gut aus.
Zitat:kommt da am ausgang in meinem fall wirklich 1000 werte in der sekunde raus ?
Ich sag mal ja.
Auf eine Sekunde hochgerechnet kommen 1000 Werte pro Kanal heraus. Das muss so sein, weil du das im DaqMX ja so konfiguriert hast. Da deine While-Schleife eine Wartezeit von 100ms enthält, bekommt du also nicht 1mal 1000 Werte pro Sekunde, sondern 10mal 100 Werte. (Dass es möglicherweise nicht genau 1000, sondern vielleicht 998 oder 1004 Werte sind, kann vorkommen und liegt im weitesten Sinne am Windows-Betriebssystem.)
Zitat:ich bin mit dem gesamten daten paket puffersachen und einzelwert und konti. durcheinander!!
Was genau hat dich denn jetzt durcheinander gebracht?
Sehe ich das richtig, dass die 1000 für "N Samples pro Kanal" nicht mit dem Timing.vi verbunden ist?
Wenn dem so ist, könnte LabVIEW die Puffergröße selbst wie folgt festlegen:
[
attachment=21622]
... in deinem Fall also 10 kS
Gruß dimitri
' schrieb:Sieht auf den ersten Blick doch alles ganz gut aus.
Ich sag mal ja.
Auf eine Sekunde hochgerechnet kommen 1000 Werte pro Kanal heraus. Das muss so sein, weil du das im DaqMX ja so konfiguriert hast. Da deine While-Schleife eine Wartezeit von 100ms enthält, bekommt du also nicht 1mal 1000 Werte pro Sekunde, sondern 10mal 100 Werte. (Dass es möglicherweise nicht genau 1000, sondern vielleicht 998 oder 1004 Werte sind, kann vorkommen und liegt im weitesten Sinne am Windows-Betriebssystem.)
Was genau hat dich denn jetzt durcheinander gebracht?
So vielen dank für schnelle antwort. da bin ich mal bis. beruhigt.
so ich hab ein kleines Vi gemacht. damit es anschaulicher wird. für 2 signale.
im bsp. lese ich mit 10hz lesen. dann softwaremässig für manche signale abtasten. darum wollte ich dass ich gleiche sampelanzahl bekomme.
problem ist hier nach ich nochmal das gleiche signal abtaste mit 1 hz. dann original mit 10 hz. und 1 hz abgetastet nebeneinander speichern. die zeiten sind irgendwie nicht synchron in der tabelle!
das ist was mich irritiert jetzt!
hab das vi und ein test bsp. angehängt. woran liegs? wenn ich wartezeit in der 1.schleife grösser mache, passt das irgendwie! aber das ist keine lösung
grüße
lv. version 8.6
Wenn du immer 100 Werte in einem Schwung auslesen willst, dann mach das doch einfach:
[
attachment=21635]
Dann kannst du auch auf das Timing-VI verzichten, das arbeitet eh nicht genau genug für diesen Zweck.
Gruß, Jens
' schrieb:die zeiten sind irgendwie nicht synchron in der tabelle!
das ist was mich irritiert jetzt!
Ich glaube ich konnte deine Bedenken - nach stundenlangen Versuchen - nachvollziehen.
Warum aber das VI "Resample" manchmal einen T0-Offset hat, kann ich mir nicht erklären. Auch nicht, warum die Werte, die in der Datei in einer Zeile stehen, unterschiedliche Timestamps haben. Das sieht dann so aus, als ob die resamplte Kurve verschoben ist. Eine Verschiebung kann aber trotzdem synchron sein.
Was aber klar ist:
Nimmt man von der zweiten Kurve im File nur die Zeilen, in denen etwas steht, dann ergibt das genau die gewünschte resamplte Kurve! Eigentlich ist es doch egal, wieviele Leerzeilen zwischen zwei Kurvenwerten stehen. Hauptsache, die Kurve, die aus den abgespeicherten Werten entsteht, entspricht den Erwartungen - und das macht sie.
So gesehen mach dein Programm also genau das, was du willst. Die Tatsache, dass das File nicht so aussieht, wie man es gerne möchte, würde ich mal ignorieren.
' schrieb:So gesehen mach dein Programm also genau das, was du willst. Die Tatsache, dass das File nicht so aussieht, wie man es gerne möchte, würde ich mal ignorieren.
Danke für Antworten.:)Wie du gesagt hast IchSelbst, haupsache VI arbeit richtig! und das tut sie.
danke nochmal.
ich hatte in dieser stelle eine andere frage, wenn es passt. Wenn ich zu diesem AI eingang ein Digital eingang oder Counter (für Drehzahl messung) lesen will per DAQ geht das wie vor ? ich meine wegen synchronisieren beide kanäle? und wie kann ich die gesamte daten (Digital + Analog) per Queues weiterschicken ? signale einfach verbiden geht nicht in diesem fall..
wäre nett, wenn jemand mir tipps gibt.
danke nochmal.
' schrieb:Wenn ich zu diesem AI eingang ein Digital eingang oder Counter (für Drehzahl messung) lesen will per DAQ geht das wie vor ? ich meine wegen synchronisieren beide kanäle?
Ich mach das bisher im Prinzip auch immer so, wie du das programmiert hast.
Leg die beiden DaqMX-Start-VIs (die mit dem grünen Pfeil) gemeinsam in einen Sequenzrahmen. Dann starten beide Tasks eigentlich gleichzeitig. Wenn du nur mit 1KHz abtastest, spielt der ganz kurze Zeitunterscheid, der hier immernoch vorhanden ist, keine Rolle. Beide Tasks werden synchron laufen.
Ich glaube es gibt noch folgende Möglichkeit (kann ich aber erst [*grübel*] heute am sehr späten Abend [*grübel*] besser morgen früh verifizieren):
Man kann bei einer Task die Quelle des Abtastrasters angeben. Normalerweise ist das ein Zeitgeber, der eben z.B. 1kHz macht. Man kann aber auch sagen, dass die CounterTask das Abtastraster der Analogtask nehmen soll! Wie das genau geht muss ich erst nachkucken.
Zitat:und wie kann ich die gesamte daten (Digital + Analog) per Queues weiterschicken ? signale einfach verbiden geht nicht in diesem fall..
Kann man bei Counter nicht Waveform einstellen?
Ansonsten kann man das 1D-Array auch in ein Waveform umwandeln. Hierzu nimmst du den Waveform der Analogtask, extrahierst T0 und dT und machst aus T0, dT und dem Counter-1DArray ein Waveform. Dieses Waveform kannst du dann mit dem Waveform vom Analogkanal verbinden zu einem neuen Waveform, das dann Analog und Counter enthält.
Beachte aber folgendes: Lies mit dem DaqMX-Rd immer 100 Werte aus. Hierzu musst du 100 an den entsprechenden Eingang anlegen (siehe Posting oben von Y-P). Wenn du ohne diese 100 (also mit -1, was heißt: "alles was da ist") kann es vorkommen, dass unterschiedliche Anzahl von Abtastwerten gelesen werden. Das ergibt dann aber ein Problem bei der nachfolgenden Waveform-Generierung.
' schrieb:Ansonsten kann man das 1D-Array auch in ein Waveform umwandeln. Hierzu nimmst du den Waveform der Analogtask, extrahierst T0 und dT und machst aus T0, dT und dem Counter-1DArray ein Waveform. Dieses Waveform kannst du dann mit dem Waveform vom Analogkanal verbinden zu einem neuen Waveform, das dann Analog und Counter enthält.
Ich glaube es gibt noch folgende Möglichkeit (kann ich aber erst [*grübel*] heute am sehr späten Abend [*grübel*] besser morgen früh verifizieren):
Man kann bei einer Task die Quelle des Abtastrasters angeben. Normalerweise ist das ein Zeitgeber, der eben z.B. 1kHz macht. Man kann aber auch sagen, dass die CounterTask das Abtastraster der Analogtask nehmen soll! Wie das genau geht muss ich erst nachkucken.
Beachte aber folgendes: Lies mit dem DaqMX-Rd immer 100 Werte aus. Hierzu musst du 100 an den entsprechenden Eingang anlegen (siehe Posting oben von Y-P). Wenn du ohne diese 100 (also mit -1, was heißt: "alles was da ist") kann es vorkommen, dass unterschiedliche Anzahl von Abtastwerten gelesen werden. Das ergibt dann aber ein Problem bei der nachfolgenden Waveform-Generierung.
sehr nett von dir. ich kann leider das mit DI nicht gerad probieren, aber der einsatz ist gut.! wäre nett wenn du zu deinem vorschlag mehr schreibst, wenn du ausprobierst.
vielen Dank, wieder was gelernt. bei einer abtastrate von 1000hz sollte ich dann auf 1000 umstellen.richtig?
' schrieb:vielen Dank, wieder was gelernt. bei einer abtastrate von 1000hz sollte ich dann auf 1000 umstellen.richtig?
Ja, wenn der Eingabeparameter die Größe Hz hat, muss bei 1kHz hier natürlich 1000 stehen.