Hallo Labviewfreunde,
ich stehe vor folgendem Problem! Ich möchte erstmal auf jeder aufsteigenden Flanke eines TTL-Signals einen analogen Messwert erfassen, die eigentliche Problemstellung ist aber nicht bei jeder Flanke einen Messwert zu erfassen sondern z.B. bei jeder 5ten oder 18ten Flanke! Hier im Forum habe ich gelesen, dass es mit Hilfe von der external clock machbar sein soll!
Ich habe versucht das umzusetzen, komme aber nicht weiter. Meinen Versuch hänge ich an. Meinem Versuch nach wird ein Messwert bei der ersten aufsteigenden Flanke erzeugt, jedoch möchte ich, dass solange Messwerte erfasst werden solange aufsteigende Flanken empfangen werden und die Messwerte in einem Signalgraphen oder Array geschrieben werden.
Über Hilfe würde ich mich freuen!
Hallo GreeHorn,
Zitat:Meinem Versuch nach wird ein Messwert bei der ersten aufsteigenden Flanke erzeugt, jedoch möchte ich, dass solange Messwerte erfasst werden solange aufsteigende Flanken empfangen werden und die Messwerte in einem Signalgraphen oder Array geschrieben werden.
Wenn ich das Bild richtig deute, solltest du 100 Messwerte für die ersten 100 steigenden Flanken an PFI0 erhalten - es sei denn, der Standard-TimeOut von 10s wird vorher erreicht…
Das VI verhält sich genau so, wie es von Dir programmiert wurde:
Es sollen 100 Samples erfasst werden, wobei der Takt von einer externen Quelle kommt. So weit, so gut. Dann liest Du die erste Sample aus dem Puffer aus. Auch gut. Und dann beendest Du das Programm, ohne die anderen 99 Werte gelesen zu haben. (Würde es Dir ja korrigieren, aber bei einer Graphik geht das nicht)
Wenn Du nicht von jeder Flanke einen Wert brauchst, ist es übrigens das Einfachste, alle Werte zu erfassen und dann nur jeden n-ten Wert zu verwenden - vorausgesetzt natürlich, die maximal mögliche Rate wird damit nicht überschritten.
Dank euch Jens und GerdW für eure schnelle Hilfe!
Hab versucht eure Vorschläge umzusetzen, hat meines erachtens auch funktioniert.
Ich würde mich über eine Rückmeldung freuen, ob das VI auch genau das tut was ich mir vorstelle!
Also im angehängten VI werden auf den ersten 25 aufsteigenden Flanken jeweils 1 Messwert erfasst und in das Array geschrieben, also 25 Messwerte! Dann werden aus dem Array jeder 5te Messwert in das Array2 geschrieben. Also befindet sich jeder 5te werd im Array2! Richtig?
Probieren geht über studieren...
Aber sieht auf den ersten Blick richtig aus.
Gruß, Jens
Danke Jens,
probiert habe ich es, jedoch habe ich zurzeit keinen Sensor angeschlossen, deshalb wurde immer der selbe Wert in das Array geschrieben. Aus diesem Grund ist es ein bisschen schwer zu sagen ob es jeder 5te Wert ist oder ob doch nur die ersten 5 sind!
Aber laut meines Verständnisses hatte ich auch das Gefühl, dass es richtig ist und wollte deshalb nur nochmal sicher gehen! Werde es aber noch einmal mit richtigen Messwerten testen!
Danke nochmal!
Die Daten würde ich immer sofort reduzieren, ohne vorher alle Daten zu sammeln:
[
attachment=49290].
Überlebenswichtig wäre das allerdings nur bei großen Datenmengen.
Danke Luki,
für die Verbesserung, da ich wirklich eine größere Datenmengeverarbeiten möchte.
Ich habe nun folgendes Problem und zwar weiß ich nicht genau wie viele Flanken an als externer Takt anfallen und deshalb auch nicht weiß wie hoch meine "Anzahl der Sample" sein wird. Ich hab versucht den Sample-Takt auf "kontinuierlich" umzustellen und auf Basis DAQ-Assi das VI, dass in meinen vorherigen Beiträgen eingestellt habe, anzupassen! Es geht so weit, dass ich in der Highlight-Funktion sehe das Messwerte geschrieben werden, jedoch werden wenn keine Flanken mehr kommen de Werte überschrieben!
Ziel:
Ich würde gerne, dass solange Flanken kommen bei jeder aufsteigenden Flanke ein Messwert erfasst wird und in ein Array geschrieben wird sobald keine Flanken mehr kommen While-Schleife abgebrochen und alle erfassten Messwert im Array stehen. Der nächste Schritt wäre dann wieder, dass jeder xte Wert nur erfasst wird.
@Luki: in den jetzt angehängten VI ist dein Vorschlag noch nicht eingebunden, weil ich es leichter fand erstmal nur mit der Datenerfassung zubeschäfftigen! Habe deinen Vorschlag aber getesten und funktioniert!
Über Hilfe wäre ich Dankbar!
Da hast Du schon mal einen grundlegenden Fehler gemacht: Die Hilfe von DAQmxRead nicht aufmerksaem gelesen!
Zitat, Hervorhebung in kursiv von mir:
Anzahl Samples pro Kanal gibt die Anzahl der zu lesenden Samples an. Wenn Sie diesen Eingang offen lassen oder auf -1 setzen, wird die Anzahl der Samples automatisch bestimmt, und zwar je nachdem, ob fortlaufend Samples erfasst werden sollen oder nur eine bestimmte Anzahl.
Bei der fortlaufenden Erfassung von Samples liest das VI bei der Einstellung dieses Eingangs auf -1 alle Samples aus, die sich gerade im Puffer befinden.
Wenn mit dem Task eine bestimmte Anzahl von Samples erfasst wird und Sie diesen Eingang auf -1 setzen, wartet das VI bis zur Erfassung der angegebenen Anzahl von Samples und liest diese dann aus.
Sein eigentliches Problem ist einfach zu lösen: Timeout-Fehler von DAQmxRead beobachten, und wenn er eintritt, die Erfassung beenden.