Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
schlage mich erst seit Kurzem mit LV um und bin ohne eure Hilfe mit meiner Aufgabe überfordert. Für einen Prüfstand muss ich die Messsoftware auf LabView schreiben. Dabei werden unter anderem folgende Sensoren ausgelesen:
17x Volumenstromsensor (max. fünf im Simultanbetrieb)
Signalausgabe der Sensoren:
fmax: 5000Hz
Signal: Rechteck
0: 0V
1: 22V
k: 84 Imp./l
Hardware:
NI 9178 cDAQ
Messmodul: NI 9425 (hat keine Counterfunktion)
Meine Fragen:
1. Ist es überhaupt möglich mit diesem Modul eine Frequenz zu messen? (Hab auf verschiedene Arten versucht einen Wert zu bekommen, aber habe nie etwas Vernünftiges erhalten.)
2. Falls eine Frequenzermittlung möglich ist, kann mir jemand einen Tipp geben, wie ich das Problem lösen könnte?
Ein vi folgt...
Danke und Gruss
ElRon
01.11.2012, 09:25 (Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2012 09:26 von GerdW.)
um bei fmax=5kHz des Sensors alle Pulste mitzubekommen, musst du mit wenigstens 10kHz abtasten. Das 9425-Modul kann bis zu 140kHz, dies würde also funktionieren. Du müsstest dann selbst Pulse zählen, was aber relativ einfach ist.
Aber:
Das Modul selbst bietet keinen HW-Timer an (und deshalb auch keine Counter). Du musst also in Software entsprechend schnell (und deterministisch) abfragen! Und hier kommt das cDAQ ins Spiel: Ich weiß nicht, ob dieses einen HW-getakteten DI-Task für dein Modul erlaubt. Denn dies wäre die (aus meiner Sicht) einzige Möglichkeit, entsprechend schnell abzutasten...
Erstelle doch einfach mal in MAX einen Task und schaue, ob dies überhaupt (fehlerfrei) möglich ist!
Zitat:bin ohne eure Hilfe mit meiner Aufgabe überfordert.
danke für deine Antwort. HW-getaktet funktioniert leider nicht, habs soeben versucht. Aber ich werde mir vier NI 9421 (Schmerz!) beschaffen, ich glaube das ist die beste Lösung. Trotzdem nimmt mich folgendes wunder:
- woher der Fehler in meinem vi rührt (siehe Abbildung).
- wie ich mein vi erweitern kann, damit die Pulse gezählt werden.
Zitat:
Zitat:Zitat:bin ohne eure Hilfe mit meiner Aufgabe überfordert.
Keine gute Voraussetzung für den Job...
... aber lehrreich...
01.11.2012, 20:00 (Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2012 20:01 von GerdW.)
zu deinem Bild:
- Hast du dir schon mal die Beispiele zu den DAQmx-Funktionen angeschaut? Dort wird überall der Fehlercluster durchverdrahtet. Das hat seine Gründe...
- Kann den Fehler hier bei mir nicht nachstellen. Ich vermute mal, es liegt an den gleichen Namen für Task und virtuellem Kanal...
- Warum jetzt gleich 4 9421-Module? Reicht dir nicht eines für deine 5 Sensoren?
- Bei Hardware-Fragen sollte man sich (gerade, aber nicht ausschließlich, als Anfänger) direkt von NI beraten lassen. (Tel. 089-7413130)
Wenn die Module mit dem Chassis direkt Counter bieten, kannst du Tasks erstellen, die dir direkt die Frequenz ausgeben. Schau dir die mitgelieferten Beispiele an!
Wie gesagt, ich habe mir versuchshalber ein NI9421 (8 DI 10kHz) gekauft. Damit lässt sich problemlos ein Frequenztask erstellen. Das Problem ist, sobald ein zählergestützte Erfassung erstellt wird, sind HW-mässig nur noch 4 DI möglich. Leider habe ich nicht genügend freie Slots, um alle 17 Sensoren zu erfassen. Daher kommt wieder das NI9425 (32DI 140kHz) ins Spiel...
...folgende ist meine Überlegung:
Mit dem DAQ-Assistent erstelle ich z.B. diesen Task:
Abtastrate: 10kHz
zu lesende Werte: 10000
Erfassungsmodus: kontinuierlich
Dann erhalte ich jede Sekunde ein 1D-Array mit 32*10'000 Werte (Siehe Screenshot).
Wenn ich bei diesem Array in jeder Spalte (roter Pfeil) die Anzahl der "1" bestimmen kann, lässt sich damit die Frequenz ermitteln. In meinem Screenshot ist eine Turbine an das Modul angeschlossen.
z.B. 2000 "1" -> 2000Hz Frequenz...
Nun meine Frage:
Wie kann ich aus diesem Array die Anzahl der "1" in jeder Spalte ermitteln? Habe schon alle Array-Funktionen ausprobiert und Onkel Google half mir leider auch nicht weiter.
Ich danke euch, freundliche Grüsse ElRon
07.11.2012, 16:42 (Dieser Beitrag wurde zuletzt bearbeitet: 07.11.2012 16:45 von GerdW.)
ich habe mal stur nach Kontexthilfe deine digitale Waveform in boolsche Arrays umgewandelt:
(Ich arbeite nur wenig mit Waveforms und gar nicht mit digitalen...)
Wie du aus dem Zählen der TRUE-Bits auf die Frequenz schließen willst, ist mir nicht ganz klar.
Wenn ich je 16 Bits habe wie
1.) TTFFTTFFTTFFTTFF und 2.) TTTTFFFFTTTTFFFF
dann hat Beispiel 1 eine höhere Frequenz als Beispiel 2 - aber beide die gleiche Anzahl TRUE-Bits...
Vielleicht solltest du besser (steigende) Flanken zählen?
die True Bits stellen die steigenden Flanken dar. Das NI-9425 Modul gibt mir beim Task "digitale Erfassung" die steigenden Flanken als Bits aus. Daher ist für mich nur die Anzahl der True-Bits in jeder Spalte relevant und nicht die Reihenfolge.
Die Funktion "Digitaldaten nach boolesches Array" hab ich auch versucht, bin aber daran gescheitert. Warum muss ich diese Funktion in eine For-Schleife packen (siehe Screenshot "DWDT ohne...", bzw. "DWDT mit...")? Das verstehe ich nicht Ich hab mal ein Waveform in der gleichen Grösse generiert. Diese kann ich ohne For-Schleife konvertieren...?
Jedenfalls komme, so glaube ich, mit deinem Tipp weiter... Nächste Woche stellt es sich heraus...
Danke und Gruss
elron
08.11.2012, 08:52 (Dieser Beitrag wurde zuletzt bearbeitet: 08.11.2012 09:03 von Achim.)
(31.10.2012 23:00 )ElRon schrieb: Hardware:
NI 9178 cDAQ
Messmodul: NI 9425 (hat keine Counterfunktion)
Kein einziges DI-Modul hat ne Counterfunktion integriert...das Modul ist nur die Schnittstelle zu den im Chassis integrierten 4 Countern. Diese sind gleichzeitig nutzbar, das reicht allerdings nicht für deine fünf Sensoren. Allerdings ist die Countermessung die beste (oder besser: einzig verlässliche) Methode, um Frequenzen der von dir verwendeten Sensoren zu erfassen. Kommst du evtl.doch mit nur vier Sensoren gleichzeitig aus?
Für die "Umschaltung" zwischen den Sensoren müsstest du z.B. ein Auswahl-Menü (?) bereitstellen oder das programmatisch machen, d.h. die entsprechenden DI-Kanäle jeweils einem programmatisch zur Laufzeit erzeugten Countertask zuordnen.
Zitat:Mit dem DAQ-Assistent erstelle ich z.B. diesen Task:
Abtastrate: 10kHz
zu lesende Werte: 10000
Erfassungsmodus: kontinuierlich
Dann erhalte ich jede Sekunde ein 1D-Array mit 32*10'000 Werte (Siehe Screenshot).
Wenn ich bei diesem Array in jeder Spalte (roter Pfeil) die Anzahl der "1" bestimmen kann, lässt sich damit die Frequenz ermitteln. In meinem Screenshot ist eine Turbine an das Modul angeschlossen.
z.B. 2000 "1" -> 2000Hz Frequenz...
Hm...ist mir auch nicht klar wie das funktionieren soll. Ich hab noch keine digitalen Waveforms verwendet. Wenn ich aber versuche, mit nem DI eine kontinuierliche DAQ zu machen, sagt mir der DAQ-Assi dass ich eine externe Taktquelle konfigurieren soll.
(07.11.2012 21:55 )ElRon schrieb: Warum muss ich diese Funktion in eine For-Schleife packen (siehe Screenshot "DWDT ohne...", bzw. "DWDT mit...")?
Weil das VI halt nur mit einer Digitalen Waveform und nicht mit einem "Array of digital Waveforms" zurechtkommt!
A.
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
nicht um 5 Stück. Aber egal, das ändert nichts an meiner Fehlüberlegung
Zitat:Dann erhalte ich jede Sekunde ein 1D-Array mit 32*10'000 Werte (Siehe Screenshot).
Wenn ich bei diesem Array in jeder Spalte (roter Pfeil) die Anzahl der "1" bestimmen kann, lässt sich damit die Frequenz ermitteln.
z.B. 2000 "1" -> 2000Hz Frequenz...
-> Funktioniert natürlich nur, wenn die Impulslänge bekannt ist. Man könnte sie messen, leider ist sie abhängig von der Frequenz...
Also doch:
Zitat:Wie du aus dem Zählen der TRUE-Bits auf die Frequenz schließen willst, ist mir nicht ganz klar.
Wenn ich je 16 Bits habe wie
1.) TTFFTTFFTTFFTTFF und 2.) TTTTFFFFTTTTFFFF
dann hat Beispiel 1 eine höhere Frequenz als Beispiel 2 - aber beide die gleiche Anzahl TRUE-Bits...
Vielleicht solltest du besser (steigende) Flanken zählen?
->GerdW, du hast vollkommen recht: meine Idee funktioniert nicht. Und genau das ist meine Aufgabe: Flanken zählen!
Gruss
elron
09.11.2012, 06:54 (Dieser Beitrag wurde zuletzt bearbeitet: 09.11.2012 07:00 von Achim.)
(08.11.2012 18:54 )ElRon schrieb: Es handelt sich um
17x Volumenstromsensor
nicht um 5 Stück.
(08.11.2012 18:54 )ElRon schrieb: Und genau das ist meine Aufgabe: Flanken zählen!
Ist mir schon klar...du musst 17 bedienen können, d.h. hw-mäßig anschließen, aber nur max. 5 Stück gleichzeitig auslesen. Meine Anregung geht dahin, eben nicht für alle vorab Tasks zu definieren, sondern dies zur Laufzeit (z.B. nach vorheriger Auswahl durch den Bediener) zu machen. Da gehen mit deinem Chassis aber eben nur 4 Stück gleichzeitig, weil das cDAQ eben nur so viele Counter hw-mäßig zur Verfügung stellt.
Wenn du wirklich nicht von den 5 Stück gleichzeitig abweichen kannst, dann brauchst du z.b. das hier: http://sine.ni.com/nips/cds/view/p/lang/de/nid/1123 Allerdings hast du dann nicht genügend Pins zur Verfügung um alle Sensoren gleichzeitig auch anschließen zu können...dann müsstest du vorher ein Umschaltmodul einbauen...wenn du das nicht selber bauen willst, gibts das auch als PXI-Karte...dann müsstest du die Counterkarte auch in PXI ausführen und bräuchtest auch ein entsprechendes Chassis...ist halt ne Geldfrage!