LabVIEWForum.de - Eingänge mit verschiedenen Abtastfrequenzen in FIFOs schreiben

LabVIEWForum.de

Normale Version: Eingänge mit verschiedenen Abtastfrequenzen in FIFOs schreiben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo Zusammen,

Ich habe folgende Hardware im Einsatz:
cRIO 9074
2xNI9203
2xNI9215

Labview 2012

Mein Problem:
Ich muss die Eingänge der NI9215 mit 20 MHz und die Daten de NI9203 mit 1 Hz konstant abtasten und die entsprechenden Werte in FIFOs schreiben.

Ich habe mich für das Labview FPGA Interface entschieden.

Jetzt weiß ich aber nicht ob ich eine "Timing Engine- Single Point Timed" oder eine "Timing Engine- Single Point Continuous" nehmen soll. Mir ist der Unterschied auch noch nicht ganz klar, was ich raus bekommen habe ist das nur eine "Timing Engine- Single Point Timed" geht.
Was würdet Ihr nehmen? und warum?

Wie bekomme ich das mit den unterschiedlichen Abtastzeit realisiert?

Wenn ich die Abtastung realisiert bekommen haben würde ich jedem Modul ein FIFO spendieren. Eine eindeutige ID, die Werte der einzelnen Kanäle und ein Zeitstempel in ein Array packen und das via For-Schleife in das entsprechende FIFO schreiben. Siehe Anhang.


Ich habe noch nicht viel mit Labview gemacht daher würde ich mich über hilfreiche Tipps sehr freuen.
(11.07.2013 20:38 )MIngendorf schrieb: [ -> ]Ich muss die Eingänge der NI9215 mit 20 MHz und die Daten de NI9203 mit 1 Hz konstant abtasten und die entsprechenden Werte in FIFOs schreiben.

Ich habe mich für das Labview FPGA Interface entschieden.

Jetzt weiß ich aber nicht ob ich eine "Timing Engine- Single Point Timed" oder eine "Timing Engine- Single Point Continuous" nehmen soll. Mir ist der Unterschied auch noch nicht ganz klar, was ich raus bekommen habe ist das nur eine "Timing Engine- Single Point Timed" geht.
Was würdet Ihr nehmen? und warum?

Wie bekomme ich das mit den unterschiedlichen Abtastzeit realisiert?

Wenn ich die Abtastung realisiert bekommen haben würde ich jedem Modul ein FIFO spendieren. Eine eindeutige ID, die Werte der einzelnen Kanäle und ein Zeitstempel in ein Array packen und das via For-Schleife in das entsprechende FIFO schreiben. Siehe Anhang.

Das 9215 kann maximal 100kHz je Kanal abtasten. Wahrscheinlich meinst du daher 20 kHz Abtastrate und nicht 20 MHz?
Deine genannten Timing Engines dürften aus dem entsprechenden Wizard kommen. Kenne mich damit nicht wirklich aus aber Single Point klingt bei der Abtastrate nicht wirklich sinnvoll.

Solange du noch DMA FIFOs übrig hast würde ich für die unterschiedlichen Abtastraten jeweils einen eigenen FIFO nehmen. Die eindeutige ID sowie der Zeitstempel sind eigentlich nicht zwingend notwendig. Die ID kann entfallen, da du für jede Abtastrate/Modul einen eigenen FIFO hast. Den Zeitstempel könntest du weglassen weil aufgrund der Erfassung im FPGA ergibt sich der zeitliche Abstand zwischen den Samples zu 1/Abtastrate.
Danke erstmal für deine schnelle Antwort. ja ich meinte 20 kHz (400Werte pro Priode bei 50 Hz).

Wenn Singel Point nicht sinnvoll ist wie würde es dann gehen?

Wie setze ich meinen Waiting Werte?
Dein Ansatz im FPGA ist nicht Single Point, von daher gibt es im gezeigten Screenshot kein Problem. Der Unterschied zwischen Single Point Verarbeitung und Blockverarbeitung ist eher auf der RT respektive Host-Seite relevant. Dort spielt es eine Rolle ob du versuchst 20000 Werte je Sekunde einzeln zu verarbeiten oder in größeren Blöcken als Array.
Hinsichtlich des Timings musst du nur ein Wait Multiple (Metronom) mit 50 µs platzieren. Dann wird deine Schleife mit den IOs und dem FIFO entsprechend abgearbeitet, vorrausgesetzt du hast keine andere Sachen platziert die dies verhindern.
Im Allgemeinen wäre Quellcode bzw. Screenshots bei denen man mehr sieht nicht schlecht. Jetzt kann man immer nur nen sehr kleinen Ausschnitt sehen und viele Aussagen sind daher dann auch Spekulation.
so jetzt habe ich mal meinen gesamtes FPGA.vi gepostet. Ich weiß nicht ob das jetzt so funktioniert oder ob ich was vergessen habe. Ich weiß noch nicht so richtig wie ich das testen soll hat wer ne Idee?

Wenn das alles läuft würde ich zwischen Eingang und Fifo noch die Rückrchnung in die Orginaleinheit machen oder besser auf dem Host?

Wenn ich was vergessen habe bitte posten.
Guten Morgen,

ich würde 2 komplett parallele Schleifen nehmen. Ansonsten sieht es doch schon gut aus. Clean and simple.
Die Rückrechnung würde ich im Host machen.

Zum testen brauchst dann deine Hardware und dann sind eigentlich folgende Punkte interessant. Kommen genug Datenpunkte im Host an, entsprechend der Abtastrate. Weiterhin ist dann auch ein wichtiger Punkt, ob die Kanalzuordnung dann im Host noch sauber funktioniert. Das kann man immer sehr gut sehen durch anlegen eines definierten Signales an einen der Eingangskanäle.
Hallo zusammen,

nach dem ich heute endlich mein Host fertig gemacht und getestet habe. Musste ich feststell das es nicht geht und die Remaining Elemente immer größer werden und nix angezeit wird. Da ich mich ein dem ich habe an dem NI Beispiel orientiert und festgestellt das ich es nich verstanden habe. Ich habe die Fragen in den VI an die entsprechende Stelle geschrieben.

Ich würde mich riesig freuen wenn der eine oder andere von euch mir meine Fragen beantworten könnte und ggf. auch meinen Fehler finden Blush.
Es wäre gut wenn du die VIs auf 2010 runterspeichern könntest. Alle die bisher im Thread geantwortet haben, haben kein LabVIEW 2012, laut Profil. Weiterhin sind manchmal Screenshots auch nicht verkehrt, insbesondere bei FPGA-Code. Nicht jeder hat das FPGA-Modul für LabVIEW.
Guten Morgen

FPGA: die 2. FIFO (FIFO-NI9203) hat einfach als Datenformat einen int-Typ vorgegeben bekommen von dir. Gehe mal im Projektexplorer mit Rechtsklick auf diese FIFO und schaue dir die Eigenschaften an. Welchen Datentyp willt du denn? Mit oder ohne Nachkommastellen?

Host: also zuerst (FIFO.Configure) stellst du die Host-seitige Tiefe des FIFO-Puffers ein. Dieser ist mit 120Samples/Ch bei 20KHz super knapp bemessen meiner Meinung nach. Ich würde mindestens 20kS/CH vorhalten, also 1s Puffer insgesamt. Danach startest du die FIFO, soweit sogut. Nun willst du die aufgelaufenen Daten auslesen. Dabei ist es wichtig die abrufende Schleife und das Füllen des Puffers richtig zu timen. Du bekommst 20kS/Ch bei 11Ch auf 1s. Also sind das 220kS/s. Diese solltest du nun auch auslesen mit der Geschwindigkeit. Wenn du ein Schleifentiming von 100ms (1/10s, was ich empfehlen würde) nimmst. Dann musst du pro Schleifendurchlauf 22000 Werte auslesen und die auf 11 Kanale aufteilen. So sollte die das Elements Remaining um einen Wert einpendeln.
Bei beiden Schleifen hast du untersch. Timings eingestellt. Ich würde die untere auf 1s lassen (1000ms hast du ja auch schon eingestellt) und die obere wie beschrieben auf 100ms stellen, statt wie du auf 1ms. (was sowieso vom Host fast unmöglich gehalten werden kann)

bis dahin.
Seiten: 1 2 3
Referenz-URLs