LabVIEWForum.de - Testprogramm

LabVIEWForum.de

Normale Version: Testprogramm
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Abend!

Ich möchte gerne mit einem Programm Impulse an zwei Countern zählen und die Frequenz damit bestimmen.

Als Hardware wird ein Gerät von NI verwendet, dass die Bezeichnung NI USB-6251 trägt.

Hardwareseitig werden zwei Signalgeber an die Anschlüsse PFI9 für ctr0 und PFI4 für ctr1 verwendet (Datenblatt: PFI 9/CTR 0 GATE(GPCTR0_GATE) ).

Die maximale Frequenz jeder Signalquelle beträgt 100 Hz. Also kann man nach dem Datenblatt als Taktquelle z.b. den internen Oszillator mit 80 MHz verwenden (oder ggf. auch den 20MHz internen Takt).

Leider kann ich zur Zeit noch nicht mit der Hardware real testen, aber ich habe schon mal versucht, anhand der Vorgaben ein Programm zu entwerfen, erstmal nur für einen der beiden Counter. Ich habe dazu z.B. versucht, mich anhand dieses Beispiels durchzuarbeiten, dass ich auch hier im Forum gefunden habe: http://www.labviewforum.de/attachment.php?aid=43144.

Ich bin wie folgt vorgegangen:

1. Task einrichten
2. Timing einstellen
3. Task starten
4. Daten in while-Schleife lesen
5. Task schließen

Es sollen "steigende Flanken" gezählt werden, 1000 Samples und 10 Samples pro Messvorgang gespeichert werden.

Würde mein Programm so funktionieren oder würde so nur Schrott bei rauskommen?
Hallo Hasenfuss,

erstens brauchst du keinen Sampletakt vorgeben, wenn du hinterher eh mit einer software-getakteten Einzelwertabfrage arbeiten willst!
Zweitens würde ich "kontinuierlich" (statt "endliche Anzahl") einstellen: du willst doch mit einer While-Schleife beliebig oft abfragen und nicht nach einer Anzahl abgefragter Werte plötzlich stoppen...

Zitat:1000 Samples und 10 Samples pro Messvorgang gespeichert werden.
Wo hast du das programmiert?
Eigentlich hätte ich ja viel lieber mit dem Automation & Measurement-Explorer gearbeitet. Dort bin ich auf mehrere Probleme gestoßen.

Ich habe z.B. gewäht - Task erzeugen - Spannungsmessung. Dann kann ich viele Kanäle wählen, wo Sensoren dranhängen, die eine Spannung als Mess-Signal liefern. Ich kann in diesem Task beliebige Kanäle hinzufügen, die dann auch Spannungen messen. Allerdings klappt es nicht, dass ich in diesem Task z.B. eine Frequenzmessung vornehme. Dort erscheint dann in einem Unterfenster - unterstützte physikal. Geräte - keine unterst. Geräte gefunden.

Bedeutet das also, dass ich in einem Task nicht beliebige Messungen vornehmen kann, sondern dann für Spannungs- und Counter-Messungen mit zwei separaten Tasks arbeiten muss?

Etwas anderes klappt auch nicht - wenn ich jetzt einen Task zum Messen der Frequenzen habe und dort eingebe ctr0 und diesen Kanal Frequenz nenne, dann steht in dem Konfigurationsfenster zu Einstellungen zu Frequenz als fester Wert: Anschluss verbunden mit PFI9. Soweit ok. Füge ich nun einen zweiten Kanal hinzu mit ctr1 in dem gleichen Task, dann steht aber in dem Einstellungsfenster immer noch PFI9, obwohl ctr1 an einem anderen Pin in der Hardware angeschlossen wird.

Bedeutet das folglich, dass es auch nicht möglich ist, zwei unterschiedliche Counter in einem Task zusammenzufassen?

Und beim Sample-Takt im Reiter Erweitertes Timing steht auch "nur" intern und alles ist ausgegraut, ich habe dort nicht die Möglichkeit, z.B. den 20MHz oder 80MHz-Taktgeber zu nehmen.

Darum stell ich mir generell die Frage, kann ich die Messung "einfach" mit dem Automation-Explorer machen oder muss ich in der lowlevel-Ebene arbeiten wie in meinem einführenden Beispiel, indem ich nicht mit dem Measurement und Automation-Explorer Tasks benenne und die mit dem Express-VI DAQ-Datenholen arbeite? Dass wäre eigentlich die "schönere" Variante.
Hallo Gerd,

vielen Dank für Deine Antwort.

Du schriebst:
"erstens brauchst du keinen Sampletakt vorgeben, wenn du hinterher eh mit einer software-getakteten Einzelwertabfrage arbeiten willst!
Zweitens würde ich "kontinuierlich" (statt "endliche Anzahl") einstellen: du willst doch mit einer While-Schleife beliebig oft abfragen und nicht nach einer Anzahl abgefragter Werte plötzlich stoppen..."

jetzt wird mir erst mein "Denkfehler" bewusst. Ich hatte gedacht, kontinuierlich bedeutet - der Task misst, bis der Task beendet wird - und schickt erst nach dem Beenden alle Werte in einem Paket dann raus und ich hatte Angst, es könnte zum "Speicherüberlauf" kommen. Ich dachte bei "meiner" Variante würde bei jedem Takt mit der endlichen Anzahl immer eine endliche Menge an Werten ausgelesen. Jetzt wird mir aber klar, dass dann "endliche Anzahl" nur einmalig vorgenommen wird. Vielen Dank für den Hinweis.

Du schriebst:
" Zitat:1000 Samples und 10 Samples pro Messvorgang gespeichert werden.

Wo hast du das programmiert? "

In dem Block DAQmx-Timing. Bei Samples pro Kanal hab ich eine Konstante mit dem Wert 10 angeschlossen und bei Rate 1000. Ich habe das so verstanden, dass ich dann 1000 Abtastpunkte habe pro Messungsintervall und 10 Werte gespeichert werden.
noch ein Problem hab ich, wo ich noch nicht schlau raus werte:

Ich habe eben noch dieses Beispiel gefunden, was glaub ich identisch mit meinem Problem ist:

http://www.labviewforum.de/Thread-Daten-...g-einlesen

Ich habe Probleme mit dem Eigenschaftsknoten wie in dem Bild - ich kann den Eigenschaftsknoten von Event nicht nach Kanal umstellen, ich glaub, wenn ich das hätte, dann könnte ich alles so einstellen, wie in dem Beispielprogramm vom anderen Thread.
Hallo Hasenfuss,

Zitat:Bei Samples pro Kanal hab ich eine Konstante mit dem Wert 10 angeschlossen und bei Rate 1000. Ich habe das so verstanden, dass ich dann 1000 Abtastpunkte habe pro Messungsintervall und 10 Werte gespeichert werden.
Liest du manchmal auch die Kontexthilfe?
Wenn du die 10 bei "TimeOut" anschließt, soll dir die Funktion (die im Modus "1 Sample" eingestellt wurde!!!), plötzlich 10 Werte liefern? Und das, obwohl der Ausgang eindeutig ein sklararer Draht ist???

Und die 1000 sollte am Eingang "Samplerate" dran sein. Was hat das bitte mit der Anzahl von Messwerten zu tun???
Wall
Hallo Hasenfuss,

zu deiner letzten Frage bzgl. der PropertyNode: Das funktioniert wie sonst auch mit der Maus per Rechtsklick:
[attachment=43481]

Ansonsten funktioniert natürlich auch das übliche "Ersetzen" mit der gewünschten PropertyNode (auch hier per Rechtsklick mit der Maus)!
Hallo,

ich habe jetzt ein Programm erstellt und bekomme auch sauber Messwerte geliefert, und zwar Spannungen und Frequenzen.

Wenn ich jeweils zwei Arrays erstelle und die Werte aneinanderhänge und diese eindimensionalen Arrays später z.B. in ein Excelsheet übertrage, habe ich dann eine gleiche Zeitbasis für beide Werte? Bei dem einen Messwert heisst es "Sample-Takt", dort ist die Sample-Rate auf 1000 eingestellt. Also erhalte ich pro Sekunde 1000 Messwerte - der Abstand von einem Wert zum Nächsten ist also 1/1000 Sekunde.

Bei der impliziten Erfassung weis ich nicht, welchen zeitlichen Abstand ich zwischen den Werten habe. Bei der Frequenzbestimmung kann ich aber nur die implizite Variante des Timers wählen, "Sample-Takt" wie bei der Spannung ist nicht möglich.

Wenn mir dort jmd. von Euch weiterhelfen könnte, würde ich mich sehr drüber freuen.
Referenz-URLs