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!
Habe mal wieder ein Problem, bei meinem DAQMx Assi hab ich auf kontinuierliche Auslese eingestellt, und die Speicherung erfolgt über eine Zeitdifferenz.
Wie kann ich nun die Speicherung so machen, dass immer exakt im Speicherintervall von n Sekunden abgespeichert wird.
Die Speicherung erfolg im Moment sehr unregelmäßig und in unterschiedlichen abständen.
Wäre für Tipps sehr dankbar.
Lg
FlorianM
Anzeige
12.06.2007, 15:28 (Dieser Beitrag wurde zuletzt bearbeitet: 12.06.2007 16:11 von Lucki.)
Habe mal wieder ein Problem, bei meinem DAQMx Assi hab ich auf kontinuierliche Auslese eingestellt, und die Speicherung erfolgt über eine Zeitdifferenz.
Wie kann ich nun die Speicherung so machen, dass immer exakt im Speicherintervall von n Sekunden abgespeichert wird.
Die Speicherung erfolg im Moment sehr unregelmäßig und in unterschiedlichen abständen.
Wäre für Tipps sehr dankbar.
Lg
FlorianM
Das Timing der Schleife erfolg mit dem DAQ.vi
Schließe erst mal am DAQ-Assistent Stop=false an.
Mache z.B. diese Enstellungen:
dann arbeitet das DAQ-VI so:
1.) Die Datenerfassung erfolgt kontinuierich.
2.) Bei Aufruf des VI in der Schleife werden immer 100 Werte gelesen. Fall die zum Zeitpunkt des Aufrufs noch nicht im Buffer sind (und davon ist in der Regel auszugehen) wartet das VI solange, bis die 100 Werte erreicht sind.
3.) Die Schleifen-Taktzeit ist #_of_Samples/Samplerate, hier also 100/100 = 1s. Du brachts also nur bei jedem Schleifendurchlauf abzuspeichern.
An Deinen Uhren sehe ich den Versuch, das Speicherintervall variabel zu machen. Hierfür gibt es zwei Möglichkeiten:
1) Speichern nur nach jedem n-ten Schleifendurchlauf, so daß Du dann wie hier im Bespiel alle 1,2,3s,, abspeichern kannst
2) Besser: Den DAQ-Assistenten in eine normale DAQ-Task umwandeln (rechte Maustaste). Damit hast Du dann vom Programm aus Zugriff auf Samplerate, Anzahl der Samples usw.
Anmerkung: Das Abspeichern und und Anzeigen der Werte wird bei Dir ein Mal pro Schleifendurchlauf ausgeführt, und zwar wird dazu (mit den Werten das Beispiels) der jeweils der Letzte der 100 Werte verwendet. Die anderen 99 Werte sind für die Katz. Besser wäre natürlich zumindest ein Mittelwertbildung über alle 100 Werte.
' schrieb:...das Speicherintervall variabel zu machen. Hierfür gibt es zwei Möglichkeiten:
1) Speichern nur nach jedem n-ten Schleifendurchlauf, so daß Du dann wie hier im Bespiel alle 1,2,3s,, abspeichern kannst
2) Besser: Den DAQ-Assistenten in eine normale DAQ-Task umwandeln (rechte Maustaste). Damit hast Du dann vom Programm aus Zugriff auf Samplerate, Anzahl der Samples usw.
Zu 1.) Diesen Vorschlag hatte ich auch mal in einem anderen Thread von Florian gemacht. Da kam dann starke Kritik. Von daher habe ich mir nochmal Gedanken gemacht und mich für eine Mischung aus beidem für mein Messprogramm entschieden.
In dem geposteten Beispiel dauert ein Schleifendurchlauf 250msec. Man kann nun auswählen, nach wievielen Zyklen gespeichert werden soll. Nehmen wir an alle 10 Schleifendurchläufe -> 2,5 Sekunden Speicherintervall. Gleichzeitig wird über eine Zeitdifferenzmessung die verstrichene Zeit ermittelt. Falls diese überschritten wird, muß gespeichert werden. Dadurch vermeide ich das Problem, daß zu lange Schleifendurchläufe die Speichertaktung verzögern.
Vorher aber auf jeden Fall den DAQ-Assi rausschmeißen!
Gruß
Jens
Hinweis: Meine Lösungsvorschläge sind immer mit Vorsicht zu geniessen! Es gibt vermutlich wesentlich elegantere Ansätze. Ich poste dennoch, da ich mir auf diese Weise das entsprechende Feedback erhoffe!
12.06.2007, 17:31 (Dieser Beitrag wurde zuletzt bearbeitet: 12.06.2007 17:34 von FlorianM.)
' schrieb:Zu 1.) Diesen Vorschlag hatte ich auch mal in einem anderen Thread von Florian gemacht. Da kam dann starke Kritik. Von daher habe ich mir nochmal Gedanken gemacht
Vorher aber auf jeden Fall den DAQ-Assi rausschmeißen!
Gruß
Jens
Sorry Jens ich weiß
Wieso soll ich denn den DAQAssi rauschmeißen?
Kannst dein Bsp evtl auch auf 8.0 runterspeichern, dann kann ichs daheim jetzt auch mal ansehen, DANKE
wenn ich den DAQ-Assi umwandle, dann muss ich die komplette verdarhtung da neu machen oder zumindest bis dahin dass die Daten ausgelesen werden.
Noch was, wenn ich den Stop auf Fals machen, was bringt mir das dann? Kann ich eigentlich die n-Schleicfen über das I auslesen und wie kann ich dann das machen dass ich alle min oder so Speicher? Wie kann ich denn da vorgehen? Das I liefert mir in meinem Fall vib 100 samples und 100 Hz ja jede sec nen Impuls.... Wie kann dann der Benutzer da eingreifen?
' schrieb:wenn ich den DAQ-Assi umwandle, dann muss ich die komplette verdarhtung da neu machen oder zumindest bis dahin dass die Daten ausgelesen werden.
Von der "kompletten Verdrahtung" entfallen 90%, wenn man mit For-Schleifen statt mit Einzelbearbeitungen arbeitet. Hier ein paar Skizzen, wie es aussehen könnte:
1.) Die Signale habe ich in einen 2D-Array umgewandelt. (Wenn man kein Express-VI verwendet, hat man gleich von Anfang an diesen 2D-Array für die Daten. Ich denke aber, daß man auch bei Umwandlung des Express-Vi die dynamischen Signale retten könnte, wenn man darauf Wert legt. Der Vorteil ist, daß in der Graphendarstellung die Plots mit den Kanalnamen benannt werden)
2.) Vorschlag Kanäle ausblenden:
3.) Dir Registerkarten-Anwahl hätte ich eher so gemacht, aber vor allem hätte ich sie in einen Ereignisknoten gepackt
Zitat:wenn ich den Stop auf False machen, was bringt mir das dann?
Ohne den Stop auf false ist überhaupt keine kontinuierliche Datenerfassung über mehrere Scheifendurchläufe möglich, da das VI ansonsten bei jedem neuen Durchlauf immer wieder neu initialisiert und beendet wird. Es wäre allerdings gut, wenn bei Stopp des Haupprogramms auch das DAQ gestoppt würde.
Zitat:die n-Schleicfen über das I auslesen und wie kann ich dann das machen dass ich alle min oder so Speicher? Wie kann ich denn da vorgehen? Das I liefert mir in meinem Fall vib 100 samples und 100 Hz ja jede sec nen Impuls.... Wie kann dann der Benutzer da eingreifen?
Dazu wurden schon Vorschläge gemacht, und ich teile wie alle erfahrenen Benutzt hier im Board die Abneigung gegen solche Express-VI, weil man da eben nicht so eingreifen kann wie man will.
Wenn Du nicht jede Sample abspeichern und anzeigen kannst und willst, würde ich empfehlen, immer Mittelwerte von den zwischenzeitlich angefallenen Daten für Speicherung und Anzeige zu verwenden. (siehe Bild oben)
' schrieb:Von der "kompletten Verdrahtung" entfallen 90%, wenn man mit For-Schleifen statt mit Einzelbearbeitungen arbeitet. Hier ein paar Skizzen, wie es aussehen könnte:
1.) Die Signale habe ich in einen 2D-Array umgewandelt. (Wenn man kein Express-VI verwendet, hat man gleich von Anfang an diesen 2D-Array für die Daten. Ich denke aber, daß man auch bei Umwandlung des Express-Vi die dynamischen Signale retten könnte, wenn man darauf Wert legt. Der Vorteil ist, daß in der Graphendarstellung die Plots mit den Kanalnamen benannt werden)
[attachment=33763:Haupt_VI.png]
2.) Vorschlag Kanäle ausblenden:
[attachment=33764:Ereignis.png]
3.) Dir Registerkarten-Anwahl hätte ich eher so gemacht, aber vor allem hätte ich sie in einen Ereignisknoten gepackt
[attachment=33765:Register.png]
Ohne den Stop auf false ist überhaupt keine kontinuierliche Datenerfassung über mehrere Scheifendurchläufe möglich, da das VI ansonsten bei jedem neuen Durchlauf immer wieder neu initialisiert und beendet wird. Es wäre allerdings gut, wenn bei Stopp des Haupprogramms auch das DAQ gestoppt würde.
Dazu wurden schon Vorschläge gemacht, und ich teile wie alle erfahrenen Benutzt hier im Board die Abneigung gegen solche Express-VI, weil man da eben nicht so eingreifen kann wie man will.
Wenn Du nicht jede Sample abspeichern und anzeigen kannst und willst, würde ich empfehlen, immer Mittelwerte von den zwischenzeitlich angefallenen Daten für Speicherung und Anzeige zu verwenden. (siehe Bild oben)
Puhh das hört sich aber nach viel Arbeit an, ich werds mir mal überlegen. Danke mal für die vielen Tipps !!!!!!!!!!!
Wenn ich mal ganz offen reden darf, ich weiß das mein Aufbau net sooo toll ist und auch z.T. net so klar ist, aber da ich erst seit März mit LabVIEW arbeite, denke ich dass dies meinem Kenntnisstand entspricht. Helft mir nur noch bei meinem Zeitproblem, alles andere läuft ja.
Lg und versteht mich net falsch, alles andere komlexe oder so könnte ich nicht verantworten.
Habe mein Speicherproblem gelöst. Ich ziehe von der Zeit die der User eingibt immer 1 ab (dekrementiern) und somit erfolgt die Speicherung just in time.
Den rest hab ich so gelassen wie er ist, ich meine das ist meine Arbeit, die ich vertreten muss und kann.
Vielen vielen tausend Dank für Eure große Geduld und die vielen Tipps, die ihr mir gegeben habt.
Werde dann jetzt auch mal schauen, dass ich anderen hier weiterhlefen kann