RT/FPGA: Nullen in Netzwerkvariable - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Module (/Forum-LabVIEW-Module) +---- Forum: LabVIEW RealTime (/Forum-LabVIEW-RealTime) +---- Thema: RT/FPGA: Nullen in Netzwerkvariable (/Thread-RT-FPGA-Nullen-in-Netzwerkvariable) |
RT/FPGA: Nullen in Netzwerkvariable - Danjo - 03.09.2012 14:51 Hallo zusammen, mittlerweile habe ich mich mal an ein RealTime System von NI herangewagt. Ich bin also noch ein Neuling in dem Gebiet, habe aber die Grundlagen verstanden (denke ich). Meinen prinzipiellen Softwareaufbau habe ich in einem Beispielprojekt mal angehängt. Wir benutzen ein CRio 9074 mit 4 NI-9205 A/D Wandlern. Datentransport zum PC über Netzwerkkabel. Die Software besteht aus FPGA und RT-Ebene. Die Daten (fs = 20kHz) werden mit einem DMA-FIFO von der FPGA an die RT-Ebene übergeben. In der RT-Ebene werden die Pakete (50ms Länge) dann in einer zeitgesteuerten Schleife in die Variable "Daten" (RT-FIFO) geschrieben. In einer separaten zeitgesteuerten Schleife wird die Variable "Daten" in eine Netzwerkvariable ("nvar_Daten") geschrieben zu werden. Genau an diesem Punkt schleichen sich zahlreiche Nullen in den Datensatz ein. In den Diagrammen im RT_b.vi (Anhang) kann man sich das auch ganz gut anschauen. Die Daten werden für wenige Sekunden Problemlos übergeben, bis für einen kurzen Zeitraum einige Nullen geschrieben werden. Das ganze passiert anscheinend auch komplett willkürlich, also ohne erkennbares zeitliches Muster. Das FIFO stellt beim Auslesen den Ausgang verbleibende Elemente zur Verfügung. Diese Anzahl ist leider nicht immer konstant, weshalb die Probleme zu stande kommen. Es stehen nicht immer genug Werte im FIFO zur Verfügung und deshalb werden dann Nullen "aufgefüllt". - Ist die grundsätzliche Architektur mit den zeitgesteuerten Schleifen so überhaupt umsetzbar (wäre praktisch, wenn ja, da ich die Pakete zum ungefähren Timing mit einem weiteren USB-Wandler nutzen kann)? - Woher kommt die Schwankung der Elemente im FIFO, warum hält das Zusammenspiel FPGA/Realtime seine Rate nicht konstant? - Was passiert mit dem Timing für die gesamte Messung (Es sollen auch Frequenzanalysen gemacht werden) - Welchem Timing ist mehr zu trauen, dem des FPGA oder dem der Realtimeebene? Die CPU-Auslastung vom CRIO habe ich überprüft. Diese liegt bei ca. 40% und sollte somit in Ordnung sein. Wichtig ist das die Samplingfrequenz stimmt, damit ich das Timing für die Versuchsnachbearbeitung in den Griff bekomme (Habe am echten System noch einen USB Wandler etc...). Stellt man eine feste Anzahl an auszulesenden Werten für das FIFO ein, klappt es ohne die oben beschriebenen Probleme. Allerdings verstehe ich nicht, was dann mit dem Timing passiert. Falls ihr noch Daten etc. braucht um besser ins Thema zu kommen, dann sagt bescheid. Ich bin für jede Hilfe dankbar!!! Viele Grüße Danjo RE: RT/FPGA: Nullen in Netzwerkvariable - jg - 03.09.2012 21:05 1) Off Topic: Screenshots bitte in Zukunft als Bilder hochladen, nicht als PDFs. 2) On Topic: Für mögliche vereinzelte Nuller sorgst du selber. Wer garantiert dir aktuell, dass du immer eine durch fünf teilbare Anzahl von Elementen aus dem FPGA-FIFO ausliest. Wenn dem nicht so ist, dann sorgt dein Array-Reshape für "virtuelle" Nullen. 3) Ich würde für die Übergabe lieber eine "Queue" oder die Verwendung der RT FIFO VIs empfehlen als hier über den Shared Variable Engine zu gehen. 4) Silver Controls sind langsam und verbieten sich deshalb bei RT-VIs. Gruß, Jens RE: RT/FPGA: Nullen in Netzwerkvariable - Danjo - 06.09.2012 19:30 Hallo, zu 1) sry kommt nicht mehr vor zu 2) Ich hatte auf nur auf 5 Kanälen gemessen. Das Reshapeproblem gab es nicht, letzendlich war auch immer eine ganze Zeile in den Messdaten Null. Das Problem konnte ich mittlerweile lösen. Die Pakete mit variierender Elementanzahl aus dem DMA-Fifo gebe ich nicht mehr in eine Umgebungsvariable mit festegelegter Elementanzahl (daher kamen die Nullzeilen!). zu 3) und 4) Danke für den Tipp. Ich habe jetzt RT-Fifos genutzt und auch die Silver Controls ersetzt. Leider habe ich nun noch immer Probleme bei der Anwendung in meinem realen System. Dort möchte ich die 4 A/D Wandler mit unterschiedlichen Frequenzen auslesen: A/D 1 soll 5 Kanäle mit 20000Hz, A/D 2 32 Kanäle mit 1000Hz und A/D 3 und 4 sollen zusammen 64 Kanäle mit 3500Hz auslesen. Im FPGA habe ich deshalb 3 Schleifen mit 3 Fifos programmiert. Im RT werden die drei Fifos in einer zeitgesteuerten Schleife ausgelesen und wie im Beispiel an eine weitere Schleife übergeben, wo sie in die Netzwerkvariable geschrieben werden. Hier habe ich jetzt auch die RT-Fifos benutzt. Bei den oben genannten Datenraten und 50ms Schleifenzeit ergeben sich folgenden theoretische Elementgrößen: A/D 1 -> 20000Hz*50ms*5Ch = 5000 Element, A/D 2 -> 1600 Elemente, A/D 3+4 -> 6400 Elemente. Bei einer Frequenz von AD3+4 von 2kHz wird die Größe der Elementpakete aber nicht konstant gehalten und schwankt um den gewünschten Wert. Warum? Bei höheren Datenraten für AD3+4 werden die gewünschten Werte gar nicht mehr erreicht. Die CPU Last vom cRIO liegt bei ca 75% und sollte damit ja noch im grünen (gelben) Bereich liegen. 1) Ist es mit dem System CRio 9074 und 4 x NI 9205 überhaupt mögllich die genannten Kanäle mit den unterschiedlichen Frequenzen zu lesen? 2) Wenn ja, ist der Aufbau mit mehreren parallelen FIFO's prinzipiell in Ordnung oder gibt es bessere Möglichkeiten? 3) Liegt mein Problem noch immer in der RT-Ebene oder bereiten schon die DMA-FIFOs die Probleme? 4) Sind die DMA und RT-FIFOs so richtig implementiert? Langsam bin ich ein bisschen am verzweifeln und daher für jede Hilfe sehr dankbar. Viele Grüße Danjo |