LabVIEWForum.de - NI 9423 Flankenzähler(Edge Count)

LabVIEWForum.de

Normale Version: NI 9423 Flankenzähler(Edge Count)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

das ist mein erster Post und bin für Verbesserungen bzw. Tipps wie ich es besser(leichter verständlich machen kann) immer offen.


Bin neu im Forum und relativ neu in LabVIEW.
Arbeite in der Arbeit mit Version 2013 und Zuhause mit Version 2009.
Hab zur Zeit ein größeres Projekt am laufen und bin gerade dabei mich erst mal mit der Hardware vertraut zu machen.

Hardware:
cDAQ NI 9188 mit 5 Modulen
Module:
NI 9215 AI
NI 9208 AI
NI 9423 DI
NI 9265 AO
NI 9472 DO

Die Analogen Eingänge hab ich schon einigermaßen hinbekommen und arbeite gerade noch an der Synchronisation mithilfe der Beispiele.
Mein eigentliches anliegen, wie aus dem Betreff hervorgeht, ist der Digital Input NI 9423.
Ich möchte mit diesem Modul mir die Anzahl der Flanken und den dazugehörigen Zeitstempel ausgeben lassen. Wenn ich es mit dem Assistenten erzeuge bekomme ich ja eine "Dynamic Data" wo beide Informationen enthalten sind.
Lasse ich mir jedoch den NI-DAQmx Code dann erzeugen, bekomme ich nur noch die Flankenanzahl. Wie genau kann ich auf den Zeitstempel wieder zugreifen...dachte viell. über Property Node...aber bin wie gesagt noch recht neu in LabVIEW und find dort nicht die richtige oder ist mein Idee komplet falsch?

Habe schnell mal ein Beispiel VI erzeugt in Version Lv09_img2
Hoff die Angaben reichen soweit aus...

Grüße Oscar234
Hallo liebe LabVIEW-Experten,
bin noch recht neu und habe leider auf meinen ersten Beitrag keine Antwort bekommen und hoffe ich habe mit diesem mehr Erfolg! Wink
Hardware:
cDAQ NI 9188 mit 5 Modulen
Module:
NI 9215 AI
NI 9208 AI
NI 9423 DI
NI 9265 AO
NI 9472 DO
Zu meinem Problem:
Ich möchte die 4 Counter die auf meinen cDAQ-9188 sind, synchron auslesen. D.h. sie sollen alle immer zum gleichen Moment starten über eine einstellbare Zeit(von 1 sec – 30 sec) laufen und dann Stoppen (Anschluss über Module NI 9423).
Den ersten Counter gebe ich die 20MHz Timebase vor, um mir daraus die Zeit zu berechnen. An die anderen drei Counters liegen später verschiedene Signale an(bis zu 12kHz). Aus Testzwecken habe ich derzeit auf allen drei das gleiche Signal, um zu überprüfen ob der Counterstand auch identisch ist!

Habe einen Pause-Trigger realisiert, der extern ein Signal bekommt, wann die Counter ausgelesen werden sollen und wann nicht(dient zur Zeitsteuerung und eig. hatte ich gehofft das es mir die Counter synch. Sad )!

Problem ist, dass die Counter unterschiedliche Zählerstände haben! Ich kann mein Gate mit dem Pause-Trigger öffnen und schließen wie gewollt, kann mir damit auch die Zeit berechnen über Ctr0, muss aber feststellen das die drei Counter unterschiedliche Zählerstände haben!!

Wie bekomme ich es hin das die 4 Counter alle gleichzeitig Starten?? Brauche denk ich noch eine Sample-Clock..versteh aber scheinbar nicht recht wie ich diese einbauen muss.. bzw. allen 4 Counter vorgebe… Sad

Hier mal mein Test-Vi…hoffe ihr versteht mein Problem und habt eine Lösung parat.
Danke schon mal...
Grüße Oscar234
Hallo Oscar,

ich habe deine beiden Themen mal zusammengelegt. Es gibt keinen Grund für eine Frage mehr als einen Thread zu eröffnen…

Zu den VIs:
Du verwendest sehr viele und dazu unnötige lokale Variablen. Bitte entferne diese und nutze stattdessen Drähte. Du holst dir sonst nur schwer zu debuggende Raceconditions in dein Programm!
Dein "ConfCounters" könnte bei ordentlicher Programmierung so aussehen:
[attachment=48488]
Anmerkung: du hast den Eingang "Task to Copy" im MainVI unverdrahtet. Dies würde mit meinem Vorschlag aber zu Problemen mit dem AutoIndexing führen. Da du den Eingang sowieso nicht benutzt, solltest du ihn löschen…

Zum deinem Problem selbst kann ich momentan leider nichts sagen…
Hallo GerdW,

Danke, dass du die Themen zusammen gefügt hast!
Hast damit recht, das sie eig. auf das gleiche Problem zielen(den lieben Counter).

Deinen Vorschlag hab ich in anderen Konfiguration-VI eh schon umgesetzt, bin nur bei den Counter noch nicht dazu gekommen.
„Task to Copy“ brauch ich hier wirklich nicht, nur bei meinen analogen Signalen, aber das ist wieder ein anderes Thema.

Zu meiner ersten Frage hab ich eine Antwort:
Bei dem Zeitstempel des Assistenten handelt es sich nur um eine normale Systemzeit laut NI, diese jedoch nicht mit der wirklichen Counterauslesezeit übereinstimmt. Kann also nicht wirklich verwendet werden. Da frag ich mich wieso sie diese dann überhaupt beim Express-VI dazu ausgeben…

Grüße Oscar
Hallo Oscar,

Zitat:Bei dem Zeitstempel des Assistenten handelt es sich nur um eine normale Systemzeit laut NI, diese jedoch nicht mit der wirklichen Counterauslesezeit übereinstimmt. Kann also nicht wirklich verwendet werden. Da frag ich mich wieso sie diese dann überhaupt beim Express-VI dazu ausgeben…
Du musst dazu das DAQmx-Konzept verstehen: dieses verwendet einige Buffer.
- ein Buffer kann auf der Karte selbst vorhanden sein, hier werden Messwerte zwischengespeichert
- dann werden die Daten vom DAQmx-Treiber von der Karte abgeholt und in einen Buffer im PC-RAM verschoben
Wenn der DAQAssi jetzt einen Timestamp ausgibt, dann kann er natürlich nur angeben, wann du ihn angewiesen hast, die Daten aus dem PC-RAM-Buffer auszulesen, auf tiefere Schichten hast du da keinen Zugriff!
Außerdem:
- Üblicherweise macht man da keine Einzelwertabfrage, sondern holt mehrere Messwerte mit fester Samplerate ab. Dann legt nämlich ein Timer auf der Messkarte selbst den zeitlichen Abstand der Samples hochgenau fest und du kannst dann mit den Messwerten und deren zeitlichen Abständen rechnen.
- Die andere Alternative ist, nur Einzelwerte abzufragen, dies aber möglichst zu immer gleichen zeitl. Abständen. Dann interessiert nicht der Zeitpunkt, sondern auch nur das Intervall.
Meist benötigt man nur einen Startzeitpunkt der Messung und ab da dann die zeitlichen Abstände der Samples.
Und noch viel öfter verzichtet man auf das DAQAssi-ExpressVI und nimmt die einfachen DAQmx-Funktionen…
Hallo GerdW,
danke für deine Antwort.

Das mit dem DAQmx-Konzept hab ich wirklich noch nicht so verstanden, besonders wenn es um das Timen geht. Habe aber jetzt im Allgemeinen schon etwas zusammengebastelt, das eig. so funktioniert wie ich es gerne hätte.
Die Countermessung ist eine Vorgabe der Firma, die möchte eben einen Zeitcounter und 3 weitere wo die Impulse gezählt werden um daraus dann die Durchflussmenge auszurechnen.

Hab es jetzt so gelöst:
Habe einen Pause-Trigger realisiert, dieser reagiert auf eine fallende Flanke. Zu diesem Zeitpunkt laufen die Counters synchron bzw. geben mir exakt denselben Zählerstand aus auch über 12kHz.
Erzeuge mir jetzt sozusagen eine Startzeit durch ein kleines Gate und Starte dann meine eigentliche gewünschte Torzeit des großen Gates. Während dieser Zeit lauf die Counter zwar unterschiedlich, aber zum Ende des Gates wenn wieder eine fallende Flanke kommt und die Counter „gestoppt“ werden bekomme ich wieder ein synchrones Signal somit meine Endzeit.

Schaut ungefähr so aus wie im Anhang…weiß wahrscheinlich nicht die beste Lösung, aber auf die Schnelle fällt mir nicht besseres ein.


Hatte den DAQAssi eh nur zu Beginn genommen um mich einzuarbeiten.^^

Grüße Oscar
Referenz-URLs