DMA FIFO + TDMS File IO - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Module (/Forum-LabVIEW-Module) +---- Forum: LabVIEW RealTime (/Forum-LabVIEW-RealTime) +---- Thema: DMA FIFO + TDMS File IO (/Thread-DMA-FIFO-TDMS-File-IO) |
DMA FIFO + TDMS File IO - NoD - 15.10.2009 14:07 Hallo Jungs, hab in meinem aktuellen projekt ein problem... Also ich habe ein cRIO und nutze dieses für die Datenerfassung, Streaming und Sollwertausgabe... weiter wird ein prüfstand damit gesteuert... desshalb der state machine aufbau des RT-VI's. den File IO habe ich in einen parallel laufenden schleife ausgelagert (RT und shared variable). Die Datenübertragung vom FPGA zum RT erfolgt mit einem DMA FIFO "Messdaten". Dieser wird jedoch aufgrund der State machine im regelfall nur jeden 3. Schleifendurchlauf ausgelesen. Dann erfolgt, im selben Schleifendurchlauf, eine Berechnung und die Ausgabe eines Sollwertes mittel einem 2. DMA FIFO "MFC_Setpoint". Nun zu meinem problemen: 1. Die CPU-Auslastung des RT-Systems ist meines erachtens sehr enorm (etwa 50-75%), wenn ich in jedem Statemachine durchlauf nur Daten erfasse, speichere und die Sollwerte ausgebe, d.h. hier habe ich testweise die Statemachine umgangen und einfach nur diesen State abarbeiten lassen. Wieso ist das so? 2. Wenn ich nun die Statemachine regulär laufen lasse, also vor dem Sample-, Rechen- und Ausgabe-State noch 2 weitere States (Prüfstand) laufen lasse, klappt der File IO nicht mehr, da nur jeden 3 Schleifendurchlauf aktuelle Daten von der StateMachine-Schleife in die TDMS-File IO Schleife übertragen werden. Somit wird jeder Wert 3 mal geschrieben. Auch gibts dann probleme mit dem FIFO, da der sich füllt.(FPGA Schleifen laufen auch mit 200ms Schleifendurchlaufzeit) Wie kann ich das umgehen? 3. Weis vielleicht jemand wie man die ganze Sache verbessern könnte um Rechenleistung zu minimieren und den File IO richtig ablaufen zu lassen? Vielen Dank für eure Hilfe, NoD [attachment=21763] [attachment=21764] DMA FIFO + TDMS File IO - dlambert - 30.10.2009 15:21 meine Tips - Auf FPGA Seite verwende ich nicht mehr den Infinite Wait sprich -1 als Timeout Wert. Hier wird selbst beim Neustart des RT gewartet ! Also meine Empfehlung ist lieber einen Timeout definieren und ggfls den TO-Status lesen. - Generell verwende ich Pipelining am FPGA, d.h. lesen der Inputs auf Shift-Register und schreiben auf den FIFO im nächsten Zyklus. Ist zwar bei 200ms unkritisch aber es ist immer gut ein paar Regeln zu haben. - Auf Empfehlung der NI App Spezis sind auf FPGA Seite die TypeCasts selbst zu machen, also kill the RED dots... - Die Timed Structure des RT setzt Du mit dem infinte wait des FIFO read ausser Kraft bzw. ist das ein Widerspruch. Wie gesagt, lass doch lieber einen Timeout zu. - Eine RT Auslastung von 75% ist aus meiner Sicht völlig unproblematisch. Schau Dir lieber die Verteilung der RT Last auf die unterschiedlichen Prioritäten zur Laufzeit an. - Es spricht auch nichts dagegen Dein File I/O auf dem PC zu machen. Das ist alles so langsam, dass Du die Daten auf eine buffered network var schreiben könntest. Wer macht denn hier eigentlich das wichtige Timing der FPGA oder der RT ? Hope it helps Christian PS: Manchmal liege ich mit meinem Rat auch total daneben :-) |