LabVIEWForum.de - Pulse zählen Durchflussensor mit Hilfe einer Waveform

LabVIEWForum.de

Normale Version: Pulse zählen Durchflussensor mit Hilfe einer Waveform
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

ich habe die Aufgabe von Durchflusssensoren die Impulse zu zählen, die Durchflusssensoren sind auf DI-Karten geführt. (Hardware Ni cDAQ-9137)
Nun habe ich mir gedacht, dass ich die digitalen Eingänge einfach als Waveform aufzeichne und anschließend mit Hilfe des Waveform Peak Detection VI einerseits die Pulse zähle und andererseits Rückschlüsse auf den Durchfluss bekomme.
Die Aufzeichnung soll 24 DI umfassen.
Da diese Testläufe unter anderem auch 3 Wochen dauern können habe ich eine Frage zu den Waveformen.
Wo werden die Waveformen gespeichert? Und bekomme ich Probleme mit dem Arbeitsspeicher bei meiner angedachten Lösung?

Vielen Dank und Liebe Grüße
Hallo Aisser,

Zitat:Da diese Testläufe unter anderem auch 3 Wochen dauern können habe ich eine Frage zu den Waveformen.
Wo werden die Waveformen gespeichert? Und bekomme ich Probleme mit dem Arbeitsspeicher bei meiner angedachten Lösung?
Wenn du Daten von 3 Wochen im Speicher halten wolltest, bekämest du sicher Probleme…
Aber warum willst du das?

Alles, was du brauchst, ist doch der jeweils aktuelle Zählerstand!
Also: DI-Daten einlesen, auswerten, jeweiligen Zählerstand aktualisieren. Damit benötigst du für 24 Zähler eben 24*4 Byte (I32) an Speicher…

Außerdem: Wozu die WaveformPeakDetection? Du musst doch nur digitale Flanken zählen - schau dir mal die Funktion PtByPt-BooleanCrossing an!
Vielen Dank für die schnelle Antwort, ich denke dass ich mir die Boolean Crossing selbst schreiben muss, da ich nur das Base Development System benutze.

Ich bin nun mit etwas Internetrecherche auf eine Lösung gekommen, welche aber jedoch noch einige Fragen mit sich bringt.
Und zwar wandle ich die Waveform zuerst in ein Boolean Array um, anschließend folgt ein OrArrayElements VI um dann die Flanken zählen zu können.
Leider ist mir nicht klar, was die Umwandlung in ein Boolean Array macht, ich dachte es werden einfach alle Messpunkte als Array gespeichert.
Weiters ist mir die Funkiton des OrArrayElements nicht klar, in der Hilfe steht, dass es FALSE liefert, wenn alle Elemente False sind, ansonsten TRUE.
Ich möchte nun keinen Code verwenden, wo ich die Funktion nicht verstehe, vielleicht kann mir jemand eine kurze Erklärung geben.
Screenshot befindet sich im Anhang.

Vielen Dank
Hallo Aisser,

Zitat:Und zwar wandle ich die Waveform zuerst in ein Boolean Array um, anschließend folgt ein OrArrayElements VI um dann die Flanken zählen zu können.
Das mit dem "in ein Array umwandeln" ist ja ok, aber wozu die OR-Funktion?

Zitat:Leider ist mir nicht klar, was die Umwandlung in ein Boolean Array macht, ich dachte es werden einfach alle Messpunkte als Array gespeichert.
Macht es doch auch!?

Zitat:Weiters ist mir die Funkiton des OrArrayElements nicht klar, in der Hilfe steht, dass es FALSE liefert, wenn alle Elemente False sind, ansonsten TRUE.
Du weißt schon was eine OR-Funktion macht? (Das ist eine grundlegende boolsche Rechenoperation…)
Die von dir gewählte Funktion führt dieses OR für alle Array-Elemente durch, Ergebnis wie laut LabVIEW-Hilfe!

Zitat:Ich möchte nun keinen Code verwenden, wo ich die Funktion nicht verstehe, vielleicht kann mir jemand eine kurze Erklärung geben.
Sinnvoller wäre es, wenn du dir erstmal überlegst, was du überhaupt und dann auch "wie" machen willst - bevor du irgendwas mit dir unbekannten Funktionen programmierst!
(Stift & Papier und dann ein Ablaufschema entwerfen!)

Tipp: eine steigende Flanke erkennt man an einem TRUE-Wert, der auf einen FALSE-Wert folgt. (In LabVIEW benötigt man dafür ein Schieberegister oder eine Feedbacknode…)
Zitat:Das mit dem "in ein Array umwandeln" ist ja ok, aber wozu die OR-Funktion?

Die OR-Funktion habe ich ja nicht verstanden und mich aus diesem Grund gewundert, warum die Flankenauswertung funktioniert.
Die bestehende Anlage baut auf diesen Code auf, aus diesem Grund wollte ich erstmals die Funktion verstehen.

Ich werde nun versuchen deinen Tipp anzuwenden und bei dem gewandelten Array auf einen Wechsel von FALSE auf TRUE achten.
Erstellt die Konvertierung hierbei nur ein Boolean-Array zwischen zwei Konvertierungen?
Ich habe versucht, dass Boolean Array auszulesen, werde aber hierbei nicht schlauer, ich vestehe auch nicht, warum hierfür ein 2D-Boolean Array erstellt werden muss.

Vielen Dank
Hallo Aisser,

Zitat:Erstellt die Konvertierung hierbei nur ein Boolean-Array zwischen zwei Konvertierungen?
Häh? "die Konvertierung zwischen zwei Konvertierungen?" Häh?
Hmm

Zitat:Ich habe versucht, dass Boolean Array auszulesen, werde aber hierbei nicht schlauer, ich vestehe auch nicht, warum hierfür ein 2D-Boolean Array erstellt werden muss.
Ich auch nicht, aber ich arbeite auch nie mit den digitalen Waveforms…
Wenn deine digitale Waveform genau einen digitalen Kanal enthält, dann sollte das 2D-Bool-Array auch nur eine Zeile (oder Spalte?) enthalten. Wenn du mehrere digitale Kanäle in der Waveform hast, dann sollte jede Zeile (oder Spalte?) einem Kanal entsprechen…
Ich glaube, dass die Waveform bei jedem DAQ read neu beschrieben wird, daraus folgt, dass bei jedem DAQ read nach der Wandlung auch mein Array mit den aktuellen Werten befüllt wird.
Wie könnte ich nun die Länge des Arrays raus finden? Die size Funktion liefert mir immer nur den Wert 1.
Ich bin langsam echt am verzweifeln mit diesem Waveform->Array Problem.
Hallo Aisser,

Zitat:Ich glaube, dass die Waveform bei jedem DAQ read neu beschrieben wird, daraus folgt, dass bei jedem DAQ read nach der Wandlung auch mein Array mit den aktuellen Werten befüllt wird.
THINK DATAFLOW: da kommt ein Draht aus dem DAQmxRead heraus, der neue Daten enthält…
(Da wird keine Waveform "neu beschrieben"…)

Zitat:Wie könnte ich nun die Länge des Arrays raus finden? Die size Funktion liefert mir immer nur den Wert 1.
Um die Größe eines Arrays zu bestimmen, wird ArraySize verwendet.
Wenn dieses ausgibt, dass das Array genau "1" Element groß ist, dann wird das wohl so sein…

Zitat:Ich bin langsam echt am verzweifeln mit diesem Waveform->Array Problem.
Wo kommt denn deine Waveform her? Mit welchen Parametern rufst du DAQmxRead auf?
Verwendest du etwa einen "x chan 1 sample"-Modus? Dann solltest du dich allerdings auch nicht wundern, wenn dein Array hinterher nur 1 Sample enthält…
(19.06.2017 15:21 )Aisser schrieb: [ -> ]Wie könnte ich nun die Länge des Arrays raus finden? Die size Funktion liefert mir immer nur den Wert 1.
Wenn man wüsste, wie du deinen DAQmx-Task konfiguriert hast...
Und welches DIO-Modul du verwendest...

Gruß, Jens
Zitat:Wo kommt denn deine Waveform her? Mit welchen Parametern rufst du DAQmxRead auf?
Verwendest du etwa einen "x chan 1 sample"-Modus? Dann solltest du dich allerdings auch nicht wundern, wenn dein Array hinterher nur 1 Sample enthält…

Ich habe gerade meine Datenaufzeichnung angseschaut und feststellen müssen, dass ich auf NChan und 1 Sample eingestellt habe, erklärt nun auch, warum mein Array nur die Größe 1 besitzt.

Vielen Dank für den Hinweis.

Ich habe im Anhang einmal meine aktuelle DAQ-Read angehängt.

Ich zeichne hier zum testen nur die Eingänge einer Digitalen Ausgangskarte auf.
Seiten: 1 2
Referenz-URLs