LabVIEWForum.de - Chart zur Freqenzmessung aufzeichnen wenn Frequenz=0

LabVIEWForum.de

Normale Version: Chart zur Freqenzmessung aufzeichnen wenn Frequenz=0
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

das angehängte VI soll die Drehzahl einer rotierenden Scheibe messen.

Prinzip:
Eine Gabellichtschranke mit Lochscheibe (Die bei Stillstand logischerweise nur high oder low ausgibt, bei voller Drehzahl ein TTL-Signal mit 3,2 kHz auf einen digitalen eingang mit Zähler einer DAQ-Karte gibt)

Über den DAQ-Assistenten lässt sich ja einfach die Frequenz auslesen, man muss aber noch Grenzen für die zu erwartende Frequenz eingeben. Als Minimalwert akzeptiert das Express VI aber nicht "0".

Nun möchte ich aber die Aufzeichnung meiner Daten, die über eine Schleife in eine Tabelle geschrieben werden aber kontinuierlich haben, also auch wenn meine Scheibe gerade steht! Bei meiner Lösung läuft die Schleife aber erst los, wenn diese sich minimal dreht!

Hat jemand eine Idee? Ist meine Herangehensweise falsch oder kann ich irgendwo eine Einstellung vornehmen?

Danke für Eure Hilfe,
Markus
Ich würde die Timeout-Zeit mit der niedrigsten Frequenz abstimmen. Z B. bei fu= 0.1Hz würde ich den Timeout 10sec wählen. Kommt es zum Timeout, dann war die Frequenz kleiner als 0.1Hz, und du übergibst dann f=0 in die Anzeige. Du musst etwas experimentieren, ich gebe jetzt keine Garantie dass das genau so funktioniert wie ich es vorschlage.
Hallo Lucki,

danke für den Vorschlag, den ich sogleich ausprobiert habe. Leider funktioniert es aber nicht. Egal wie ich mit Timeout oder Minimal zu erwartender Frequenz rumspiele, jedesmal wenn das Rad steht, bleibt meine komplette Schleife stehen weil der DAQ-Assistent auf wartet und wartet...bis man ihn eben wieder mit einer Frequenz versorgt. Er gibt aber als Wert niemals "0" heraus. Ich muss also irgendwie eine andere Methode finden, Pulse zu zählen und dann getaktet auf die Geschwindigkeit zu schließen. Gibt es keinen Puls, möchte ich eben einfach nur Nullen in meine LOG-Datei schreiben. Das ist deshalb nötig, da ich noch weitere Aufzeichnungen machen möchte die Parallel laufen. Aber wg. der Frequenzmessung bleibt nun jedesmal die komplette Schleife stehen.

Irgendeine Idee wie man das lösen kann?

Danke jedenfalls schonmal,

Markus
Hallo Markus,

du schreibst:
Zitat:weil der DAQ-Assistent auf wartet und wartet.

Lucki schrieb:
Zitat:Ich würde die Timeout-Zeit mit der niedrigsten Frequenz abstimmen. Z B. bei fu= 0.1Hz würde ich den Timeout 10sec wählen.

Alles klar? Ansonsten: VI zeigen...
Mein erster Gedanke wäre die Impulse analog auszuwerten. Also statt des Zählereingangs einen analogen Eingang zu verwenden und immer eine feste Anzahl von Samples abzufragen. Wenn keine Impulse mehr kommen, bekommst du ein konstantes Signal von 0 V (je nach Offset). Dann müsstest du dir nur noch ein kleines VI schreiben, welches dir die Flanken zählt. Das ist aber nicht weiter aufwändig.


Gruß,

Soean
.... oder was GerdW und Lucki sagen ;-)
Was Du beschreibst kann überhaupt nicht sein. Ja, die Schleife bleibt stehen, aber doch nicht einfach so. Nach 8sec Stillstand Schleifenstillstand wird der Timiout ereicht und es kommt eine Fehlermeldung. Wenn Du die nicht quittierst, ja dann bleibt die Schleife natürlich unendlich stehen. Und wenn Du sie quitierst, dann kannst Du entweder so weitermachen, das Spielchen wiederholt sich, oder das Prog wird abgebrochen.
Deshalb sage ich doch: Fehlerbehandlung.

Im einfachsten Fall so:

[attachment=40045]
Zuerst vielen Dank für die vielen Antworten!

@lucki
Das mit der Fehlerbehandlung kannte ich nicht, habe die Idee übernommen! Zumindest wird nun, sobald die Frequenz unter 10 Hz fällt der Wert 0 ausgegeben was gut ist!

Allerdings ist beim langsamen Anlaufen der Lochscheibe und beim Abbremsen die Frequenz natürlich unter 10 Hertz. (Von der Messgenauigkeit wärs egal, dass diese geringe Geschwindigkeit als 0 angenommen wird)
Mein Problem: Mein Gesamtprogramm ist in eine Schleife eingehüllt, die im 100 ms-Takt Messwerte aufnehmen und in eine Datei schreiben soll. Bei Frequenzen unter 10 Hertz hat der DAQ-Assistent vermutlich so viel Rechenarbeit mit dem Error-Handling, dass er meine ganze Schleife abbremst und so eben hier die Messwerte nicht im 100 ms-Takt geschrieben werden, sondern manchmal 7, 8, 9 oder 10 Stück pro Sekunde, was die Messung unbrauchbar macht.
(Eine Log-File habe ich angehängt)

Wie kann man das beschleunigen? Kann man den DAQ-Assistenten aus der schleife rausziehen? Oder ist mein Ansatz mit der Messdatenerfassung schlichtweg nicht der Richtige?

Kurz zur Erklärung des Versuchsaufbaus: Es geht um eine Messeinrichtung, die Geschwindigkeit (Kopplung des Hinterrads an eine Lochscheibe) und den Motorstrom eines E-Bikes in eine Log-File schreibt.

@Soean: Leider hab ich alle meine Analogeingänge schon belegt, oder kann ich quasi auch den Digitaleingang wie einen Analogeingang nutzen, der eben nur 2 Zustände kennt?

@GerdW: VI ist Angehängt, vielleicht gibt Dir das einen besseren Eindruck?

Bitte um Nachsehen, wenn meine Fragen etwas Anfängerhaft sind, es ist mein erstes LabView Projekt...

Vielen Dank!!! Markus
Das Signal analog auszuwärten wäre nur eine Notlösung gewesen.

Deinen Code zu beschleunigen ist hingegen recht einfach: Rechte Maustaste auf deine DAQ-Assistenten und "NI-DAQmx-Code erzeugen" auswählen. Das init-VI kommt jeweils vor deine Schleife, das Clear Task danach. Nur das Read-VI bleibt drin. Dann noch kurz neu verdrahten, und es sollte hinhauen. (Die so erstellten VIs müssen natürlich noch gespeichert werden)

Du verhinderst auf diese Art und Weise, dass der Task jeden Zyklus neu gestartet und gestoppt wird.
Diese unterschiedlichen Datenerfassungen kann man nicht in eine Schleife zwängen. Das Stichwort heißt: Parallele Schleifen. Das sieht dann etwa so aus:
[attachment=40066]

@Soean:
vom Prinzip her hast Du zwar Recht. Nur hast Du das Express-VI offensichtlich nicht selbst mal geöffnet. Denn dann hättest Du bemerken müssen, daß die Programmentwickler von Labview auch nicht dumm sind. Die Initialisierung wird nur ein einziges Mal, beim ersten Aufruf, gemacht.
@lucki vielen Dank für den Tip!

Habe nun die Frequenzmessung und Spannungsmessung in verschiedene Schleifen gepackt, was mein Programm um ein vielfaches Beschleunigt hat, ich habe sogar noch einen Kanal zur zusätzlichen Erfassung einer Akkuspannung hinzugefügt.

Außerdem wurde das Programm noch erweitert, um aus einer Tabelle die Sollwerte für den Motor im gleichen 100 ms Takt auszugeben.

Das VI habe ich angehängt. Was mich noch interessieren würde:

-Wie hast Du die Stop-Knöpfe der beiden Schleifen verbunden, damit mit einem Klick auf den Stop Knopf alles stillsteht? Habe versucht, mit einer lokalen Variablen beide auf den gleichen Stop-Knopf zu legen, hat aber nicht funktioniert. Hat das etwas mit der "Std wiederherstellen"-Funktion zu tun, die du an der ersten Schleife angeschlossen hast? (Verstehe die Funktion nicht ganz)

-Wie kann man einen "Schalter" programmieren, der bei Knopfdruck die komplette Messung startet und beim umschalten wieder stoppt? Momentan werden nämlich die Sollwerte für den Motor sofort eingelesen und dieser läuft los.

-Um die Messwerte abspeichern zu können habe ich nach der "Format to string" block noch einen "build array" einbauen müssen. Ist das korrekt so oder geht es einfacher. Ziel ist es einfach, alle Messwerte in Spalten abzuspeichern, die nachher in Excel importiert werden können.

Danke für die Hilfe, langsam bekommt das Projekt eine Form...
Markus

@Soean
habe versucht, die DAQ-Assistenten mit "NI-DAQmx-Code erzeugen" zu zerlegen und nur den Read block in der Schleife zu belassen. Das hat die Schleife allerdings NOCH langsamer gemacht...
Seiten: 1 2
Referenz-URLs