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!
ich habe LabView 2011 und Programmiere die Messung eines Strömungssensors. Die ausgelesene Größe ist Spannung.
Das Programm läuft auch schon es geht mir nur um 2 Dinge.
1. Da recht hohe Abtastraten erreicht werden sollen habe ich mich für kontinuierliche Abtastung in Verbindung mit 1D Signalverlauf lesen ( 1D NKanäle NSamples) entschieden. Auch die Anzahl der zu erfassenden Samples wird an das VI Sample Takt übergeben. Dadurch wird der Puffer wohl automatisch auf die nötige Größe festgelegt. Die erfassten Messwerte landen im Puffer und durch die Kombination von kontinuierlicher Abtastung und 1D Signalverlauf NKanäle NSamples lesen werden immer wieder alle Abtastwerte aus dem Puffer gelesen. Das passiert in einer schleife bis die erwünschte Anzahl an Werten erfasst wurden.
Die Frage ist nun ob die Abtastrate zb. 25k Herz auch exakt umgesetzt wird, bzw wie groß ggf Abweichungen sind.
Ich müsste praktisch in Erfahrung bringen welche aktuelle Samplerate die Messwerterfassungkarte tatsächlich macht oder zu welchem diskreten Zeitpunkt der jeweilige Messwert erfasst wurde. Leider wird dieser Zeitpunkt anscheinend aber nicht mit abgespeichert sondern nur der Messwert und dt wobei dt=1/f entspricht.
Gibt es eine Möglichkeit zu erfahren ob die mit LabView vorgegebene Abtastrate wirklich der tatsächlichen entspricht??
(Mir ist nur die Idee gekommen ein bekanntes Signal abzutasten und es mit dem exakten Zeitarray das man erwarten würde zu Plotten, wenn die Abtastung dann nicht äquidistant wäre würde sich der Graph verändern bzw. einfach könnte man versuchen einen Sinus mit Hoher Frequenz aufzulösen). Ich suche aber eine weniger experimentelle Lösung, falls es diese gibt.
2. Diese Frage ist mir gerade spontan eingefallen es reicht mir wenn einer nen Link hat, leider kann ich jetzt nicht auf suchen klicken....
Die Abtastwerte sammel in einem Schieberegister das durch ein Array einfügen gespeist wird. Das Schieberegister ist natürlich irgenwann voll.
Was kann ich dagegen tun, bzw betrifft dieses Problem nur das Schieberegister oder kann die Txtdatei in der ich die Messwerte am Ende ablege auch nur eine bestimmte Anzahl an Daten aufnehmen, sodass ich immer wieder neue Txtdateien schreiben muss.
Ich hoffe einer versteht meine Ausführungen. Wenn es nötig ist kann ich auch versuchen ein Bild mit dem Programmabschitt reinzustellen. Ach ja die verwendete Messwertkarte ist NI 6230.
Anzeige
31.07.2013, 12:05 (Dieser Beitrag wurde zuletzt bearbeitet: 31.07.2013 12:14 von GerdW.)
Zitat:kontinuierliche Abtastung in Verbindung mit 1D Signalverlauf lesen
Du erhälst also ein Array of Waveforms? Oder ein 2D-Array ("N Kanäle, NSamples")?
Zitat:ob die Abtastrate zb. 25k Herz auch exakt umgesetzt wird, bzw wie groß ggf Abweichungen sind.
Du kannst über eine DAQmx-PropertyNode auch die Samplerate auslesen. Schau mal in die DAQmx-Funktionspalette. So z.B.:
Alternativ: das dt der per DAQmxRead gelesenen Waveforms überprüfen!
P.S.: Der Herr Hertz schreibt sich mit "tz"!
Zitat:sammel in einem Schieberegister das durch ein Array einfügen gespeist wird.
Warum nicht BuildArray?
Zitat:Das Schieberegister ist natürlich irgenwann voll.
Aha. Echt?
Zitat:betrifft dieses Problem nur das Schieberegister oder kann die Txtdatei in der ich die Messwerte am Ende ablege auch nur eine bestimmte Anzahl an Daten aufnehmen
Welches Problem? Das Schieberegister ist nur durch den verfügbaren RAM und die Textdatei durch den Festplattenspeicher begrenzt (und evtl. noch durchs Dateisystem)!
Zitat:Ich hoffe einer versteht meine Ausführungen.
Ein VI wäre hilfreich. Ein Bild sagt mehr als 1000 Worte...
Zitat:Du erhälst also ein Array of Waveforms? Oder ein 2D-Array ("N Kanäle, NSamples")
Ja genau ich bekomme ein Array (0-3) mit 4 Signalverläufen.
Zitat:Alternativ: das dt der per DAQmxRead gelesenen Waveforms überprüfen!
Handelt es sich bei diesem dt tatsächlich um die Zeit zwischen jedem einzelnen Messwert eines Signalverlaufs oder nur um die Zeit die seit dem letzten Lesen von Messwerten aus dem Puffervergangen ist.
Zitat:Warum nicht BuildArray?
Ich habe genau nachgesehen ich verwenden in Array einfügen um einfach den neuen Satz Messwerte an den alten dranzuhängen. Sodass ich am Ende ein Array mit allen Messwerten eines Kanals habe.
Zitat:Aha. Echt?
^^.. Ich wollte eignetlich wissen was ich da machen kann. Aber sehe ich das richtig das ich keinen direkten einfluss darauf habe?
Zitat:Welches Problem? Das Schieberegister ist nur durch den verfügbaren RAM und die Textdatei durch den Festplattenspeicher begrenzt (und evtl. noch durchs Dateisystem)!
Ich weiß leider nicht genau wie lange die Anwendung mit welcher Hertzzahl laufen soll, am besten wäre es natürlich wenn es auch mit 25k Hz 3 Tage lang laufen kann.
Das mit dem Bild scheint ja etwas komplexer zu sein, ich hab keine Plan wie oder wo ich ein Bildhochladen kann um dann hier Adresse anzugeben.
31.07.2013, 12:41 (Dieser Beitrag wurde zuletzt bearbeitet: 31.07.2013 12:47 von GerdW.)
Zitat:Handelt es sich bei diesem dt tatsächlich um die Zeit zwischen jedem einzelnen Messwert eines Signalverlaufs oder nur um die Zeit die seit dem letzten Lesen von Messwerten aus dem Puffervergangen ist.
dt ist die Zeit zwischen 2 Samples, sagt jedenfalls die Kontexthilfe...
Zitat:am besten wäre es natürlich wenn es auch mit 25k Hz 3 Tage lang laufen kann.
Soviel Speicher (RAM) wird dein PC nicht haben! Deine Festplatte musst du vorher evtl. auch aufräumen...
Außerdem: um 100kS/S auf die Festplatte zu streamen, musst du schon etwas "advanced" an die Sache rangehen!
Zeig mal dein VI!
Allgemeiner Tipp: Producer-Consumer-Schema oder direkt DAQmx-nach-TDMS-Streamen...
Zitat: keine Plan wie oder wo ich ein Bildhochladen kann
Unterhalb des Editor-Fensters hast du einen "Neues Attachment: Durchsuchen"-Button!
Zitat:Ja genau...
Auf eine "Oder ?"-Frage mit "Ja" zu antworten ist schon clever
Zitat:Soviel Speicher (RAM) wird dein PC nicht haben! Deine Festplatte musst du vorher evtl. auch aufräumen...
Außerdem: um 100kS/S auf die Festplatte zu streamen, musst du schon etwas "advanced" an die Sache rangehen!
Ok dann lässt sich dort nichts machen, dass er einfach nach xx Werten immer speichert und die alten Werte im Schieberegister gelöscht werden.
Zitat:Auf eine "Oder ?"-Frage mit "Ja" zu antworten ist schon clever
Das steht im ersten Text etwas versteckt,
Zitat:Die erfassten Messwerte landen im Puffer und durch die Kombination von kontinuierlicher Abtastung und 1D Signalverlauf NKanäle NSamples lesen werden immer wieder alle Abtastwerte aus dem Puffer gelesen.
Zitat:Du kannst über eine DAQmx-PropertyNode auch die Samplerate auslesen. Schau mal in die DAQmx-Funktionspalette. So z.B.:
Das hab ich mir schon mal angesehen, die Kontexthilfe hatte ich eher so interpretiert, dass nur die Einstellungen die ich an das VI Sample Takt übergebe abergefragt werden und nicht die tatsächliche von der Messkarte ausgeführte Samplerate.
Zitat:Dient zum Festlegen oder Abfragen der Eigenschaften eines Objekts, das anhand einer Referenz angegeben ist. Eigenschaftsknoten dienen zum Festlegen und Abfragen von Eigenschaften und Methoden für VIs, Objekte und Applikationsinstanzen auf dem lokalen Computer und auf Netzwerkcomputern.
Zitat:dt ist die Zeit zwischen 2 Samples, sagt jedenfalls die Kontexthilfe...
Hab ich mir auch schon mal angesehen, ich fand es komisch das es immer exakt 1/F war, ich hätte erwartet das es eine kleine Abweichung gibt zb 25000,01 Hz statt 25k Hz.
Hier ein Bild
31.07.2013, 13:27 (Dieser Beitrag wurde zuletzt bearbeitet: 31.07.2013 13:31 von Achim.)
(31.07.2013 11:58 )michaelnietgen schrieb: Die Frage ist nun ob die Abtastrate zb. 25k Herz auch exakt umgesetzt wird, bzw wie groß ggf Abweichungen sind.
Ich müsste praktisch in Erfahrung bringen welche aktuelle Samplerate die Messwerterfassungkarte tatsächlich macht oder zu welchem diskreten Zeitpunkt der jeweilige Messwert erfasst wurde. Leider wird dieser Zeitpunkt anscheinend aber nicht mit abgespeichert sondern nur der Messwert und dt wobei dt=1/f entspricht.
Auf der Datenerfassungskarte ist Intelligenz verbaut...die sorgt dafür, dass deine Abtastrate exakt eingehalten wird. Wie genau der Quarz auf dem Board ist, steht irgendwo in den Specs.
Das muss dich aber als "normaler" User nicht kümmern. Die Karte arbeitet vor sich hin, und füllt den Puffer. Je höher die Abtastrate, desto schneller. Dementsprechend musst du schnell genug den Puffer leeren ("Read-VI"), und gut...Bei sehr schnellen Raten und hohen Datenmengen musst du mal schauen...TDMS-Streaming (Example Finder!) ist ein guter Vorschlag.
Das Read-VI macht ein asynchrones (im Bezug auf die Datenerfassung) leeren des Puffers. Aber alle Werte die du während der Erfassung aus dem Puffer liest, haben den Abstand dt=1/Abtastrate zueinander...egal wieviele Werte du pro "Read" aus dem Karten-Puffer in deine LabVIEW-Anwendung holst!
A.
(31.07.2013 13:21 )michaelnietgen schrieb:
Zitat:dt ist die Zeit zwischen 2 Samples, sagt jedenfalls die Kontexthilfe...
Hab ich mir auch schon mal angesehen, ich fand es komisch das es immer exakt 1/F war, ich hätte erwartet das es eine kleine Abweichung gibt zb 25000,01 Hz statt 25k Hz.
Warum hast du das erwartet? Die Ungenauigkeit ist maximal im Bereich der Ungenauigkeit des Quarzes...das ist aber sicher um Längen kleiner als dein eingestelltes dt, d.h. vernachlässigbar bzw. gar nicht ausgebbar mit dieser Karte.
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
31.07.2013, 13:42 (Dieser Beitrag wurde zuletzt bearbeitet: 31.07.2013 13:49 von GerdW.)
Zitat:ich fand es komisch das es immer exakt 1/F war
Neben der Genauigkeit des Quarzes ist hier ein anderer Punkt entscheidend:
Der Sampletakt wird durch Dividieren des Grundtaktes (20MHz) gewonnen. Du bekommst eine "merkliche" Abweichung von der gewünschten Samplerate, wenn du Werte haben willst, die sich nicht durch Dividieren ableiten lassen! Probier doch mal als Wunsch-Samplerate einen krummen Wert wie 25013,4Hz aus und lese den wirklich eingestellten Wert zurück - wie in meinem Beispiel in Beitrag #2 oben...
Zum Bild:
- Aufräumen, RubeGoldbergs entfernen, aufräumen, lokale Variablen vermeiden, aufräumen...
- Warum liest du die Werte als Waveform vom DAQmxRead, wenn du die Waveforms überhaupt nicht benötigst? Warum nicht gleich als 2D-Array lesen? (Das zählt auch zu RubeGoldberg...)
Zitat:Das Read-VI macht ein asynchrones (im Bezug auf die Datenerfassung) leeren des Puffers. Aber alle Werte die du während der Erfassung aus dem Puffer liest, haben den Abstand dt=1/Abtastrate zueinander...egal wieviele Werte du pro "Read" aus dem Karten-Puffer in deine LabVIEW-Anwendung holst!
Also ich habe jetzt mal bei Abtastrate 500Hz alle dt gesammelt es kommt pro Whilschleifendurchlauf 1 Wert für dt, wobei immer
0.002 dann 9 mal 1 und wieder 0.002 und so weiter kommt.
Zitat:Also ich habe jetzt mal bei Abtastrate 500Hz alle dt gesammelt
An welcher Stelle hast du gesammelt?
An der gestrichelten DAQmxPropertyNode in deinem Bild? Dann machst du einen Fehler beim Stoppen/Löschen/Erstellen/Starten deines Tasks!
In der Erfassungsschleife? Dort sollte das gezeigte Verhalten unmöglich sein!
Was sind RubeGoldbergs und meinst du mit aufräumen die Linien gerade machen und mehr sortieren?? (Das Programm ist nur zum experimentieren ^^ deswegen ist es so unordenlich. Was die lokalen Variablen anbelangt ich mag die, dann muss ich nicht 10kilometer Kabel verlegen. Sonst hab ich noch mehr Kabelsalat, aber das mit 2D Array ist an sich eine gute Idee. Ich habes einfach so gemacht weil ich so angefangen hatte.
Hallo GerdW
Zitat:An welcher Stelle hast du gesammelt?
Nein ich habe einfach an einen dt ausgang alle Werte abgefangen und gesammelt. Praktisch wie bei den y-Werten nur halt mit dem Ausgang dt.
Also dt > array einfügen > schieberegister > und von vorn..