LabVIEWForum.de - Falsche Schleifen-Abbruchbedingung

LabVIEWForum.de

Normale Version: Falsche Schleifen-Abbruchbedingung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo an alle!

Ich weiß einfach nicht mehr weiter. Es ist eigentlich ein super simples Problem.

Ich habe einen Hall-Sensor, eine Turbine zur Messung des Volumenstroms, die Rechteckimpulse ausgibt. Diese Impulse muss ich digital einlesen lassen, da alle anderen Kanäle meiner Karte NI-6008 besetzt sind.
Das digitale Signal wird dann in ein analoges umgerechnet. Das heißt, LabVIEW registriert und zählt 209 Impulse und rechnet es in 5 L/min um. Das funktioniert soweit.

Mein Problem:

Irgendwie passt meine Sampling-Rate und die Schleifenabbruchbedingung nicht.

Wie kann ich es realisieren, dass 2 mal pro Sekunde meine Messung aktualisiert wird? Wie kann ich einen Timer einrichten?

Für Vorschläge wäre ich suuuuuuper dankbar. Ich bin leider am Ende mit meinem Latein.

PS: Lv86_img
' schrieb:Ich bin leider am Ende mit meinem Latein.
Wenn es so ernst ist, dann erlaube ich Dir ausnahmsweise mal die Verwendung eines Express-VIs, und zwar "verstrichene Zeit"
Lv86_img[attachment=23927]
Edit: Das boolsche Shift-Register besser nicht initialisieren, damit kein systematischer Fehler entsteht.
Danke für deine schnelle Antwort.

Die Idee ist super. Genau sowas hab ich gesucht.
Hast du eine Ahnung, woran das liegen könnte, dass sich das Programm beim Starten aufhängt? Es zeigt auch keine Werte an.
Liegt es am Schieberegister? Muss ich aber nicht das Schieberegister immer initialisieren?

Ach herrje, steh ich grad aufm Schlauch. In meinem nächsten Leben beschäftige ich mich mit den Gesängen der Buckelwale...Sad

Grüßle
' schrieb:Hast du eine Ahnung, woran das liegen könnte, dass sich das Programm beim Starten aufhängt? Es zeigt auch keine Werte an.
Am Schieberegister liegts bestimmt nicht, es muß irgend etwas mit dem Devive/demKanal/dem Port zu tun haben.
Die 1ms Schleifenrate wird übrigens nicht geschafft. Es ist realistischer, geich 2ms statt 1ms vorzugeben.
Es ist keine gute Programmierpraxis, den Task immer wieder neu zu initialisieren und zurückzusetzen. Besseres Beispiel siehe unten.
Wenn das Schieberegister nicht initialisiert wird, macht die Zählung beim neuen Eintritt in die Schleife an genau der Stelle weiter, wo sie aufgehört hatte. Es tritt also, wenn man langfristig die Summer aller Flanken zählen würde, kein Fehler auf - vorausgesetzt natürlich, die große Schleife ist schnell genug, so daß keine nennenswerte Pause entsteht.
Die Flankenzählung funktioniert so bis zu Taktfrequenzen von ca. 200Hz - mäanderformiger Verlauf vorausgesetzt. Sollte sie höher sein, dann muß man ganz anders takten.
Die bessere Methode ist auf alle Fälle, den in die Karte eingebauten Counter für die Flankenzählung zu verwenden. Das funktioniert dann bis in den MHz-Bereich hinein.
[attachment=23941]
Supi dupi! Solche guten Tipps bekommt man auch selten.
DAAAAAAAAAAAAANKEEE!!!

Leider funktioniert mein selbstgebastelter Counter nicht, der einfach nur Impulse zählen soll.Sad

Stattdessen zählts irgengwie gar nichts. Ach herrje...
Na ich bastel nochmal weiter, aber wenn du mir noch einen einzigen klitzkleinen Tipp geben kannst, wär ich dir sehr sehr dankbar.

Tschüdelü
' schrieb:Leider funktioniert mein selbstgebastelter Counter nicht, der einfach nur Impulse zählen soll.Sad
Das ist aber ganz einfach. Schief gehen tut es nur, wenn man auf der Karte nicht den richtigen Eingang anschließt.
(Die boolsche Konstante muß richitg true sein)
[attachment=23949]
COOL COOL COOOOOOL!

Alles funktioniert!
Ich bin so oberfroh! Ich weiß gar nicht, warum ich da so lange dran gebastelt habe. es ist ja, wenn man den richtigen Ansatz hat, ganz einfach.
Ich kann die Counter leider nicht verwenden, da ich zu viele Sensoren (7Stück) habe. Ich musste also eine digitale Lösung finden.

Wenn ich sie parallel laufen lasse, gehen mir jedoch beträchtlich viele Impulse verloren. Jetzt hab ich es mit einer Ereignisstruktur gelöst, die meine Sensoren nacheinander auslesen soll.

Kannst du mal schauen, ob ich das richtig verstanden habe?
Gibt es eine elegantere Lösung, mehrer Sensoren gleichzeitig auslesen zu können? Da es, wenn ich 7 Sensoren nacheinander auslesen lasse, es doch bis zur nächsten Aktualisierung ziemlich lange dauert.

Super, dass du mir weitergeholfen hast. Vielen lieben Dank, die Woche ist gerettet.

Lv86_img
Habe jetzt keine Zeit, aber die Lösung ist nicht gut.
Besser nur 1 Task einrichten, für 1 Port statt 1 Leitung. Jeden Sensor an eine Leitung des Ports (wie bisher auch) anschließen. Bei dem Einlesen die 8 Bit des Ports aufschlüssseln und mit den Einzelleitungen (bis zu) 8 Flankenzähler in einer Unterschleife bedienen.
Und vor allem: Den Task nur einmal, außerhab der Schleife, initialisieren und freigeben!
Referenz-URLs