LabVIEWForum.de - Kommunikation FPGA-RT

LabVIEWForum.de

Normale Version: Kommunikation FPGA-RT
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich versuche nun vergeblich eine Kommunikation zwischen den Modulen der FPGA und dem RT herzustellen.
Ich habe es über Globale Variablen versucht, denen ich die Werte übergebe. Allerdings leiten diese ihren Inhalt nicht an das VI der FPGA weiter. Auch über Umgebungsvariablen ist es mir nicht gelungen Werte zwischen den VIs auszutauschen. Gibt es denn eine weitere Möglichkeit das Problem zu lösen, oder liegt ein struktureller Fehler in meinen bisherigen Versuchen vor?
Mein Projekt befindet sich im Anhang.
Freue mich über jede Hilfestellung, da ich bisher in keinem bisherigen Beitrag etwas hilfreiches gefunden habe.

[attachment=59910]

Ich arbeite mir:
Labview 2018
NI cRIO-9035

Gruß
Alp
Hallo AAlp,

herzlich willkommen im Forum!

Zitat:Ich habe es über Globale Variablen versucht, denen ich die Werte übergebe. Allerdings leiten diese ihren Inhalt nicht an das VI der FPGA weiter.
Korrekt beobachtet!

Zitat:Auch über Umgebungsvariablen ist es mir nicht gelungen Werte zwischen den VIs auszutauschen.
Auch korrekt beobachtet!

Zitat:Gibt es denn eine weitere Möglichkeit das Problem zu lösen,
Ja!

Zitat:liegt ein struktureller Fehler in meinen bisherigen Versuchen vor?
Ja!

Schau dir doch einfach mal die ganzen Beispielprojekte an, die mit LabVIEW (+RT+FPGA) mitgeliefert werden!
Du kannst Daten per FIFO oder per Zugriff auf FPGA-FP-Elemente austauschen…
Hallo GerdW,
danke für deine Nachricht.

Ich habe nun versucht das ganze über den Austausch mit FIFO hinzu bekommen. Allerdings läuft es noch nicht ganz. Ich denke mal, dass es von der Struktur stimmen müsste. Allerdings werden die Daten immer noch nicht so übergeben, wie sie es sollen.
Dabei soll auf die FPGA Daten sowohl senden, als auch empfangen. Das geschieht allerdings noch nicht. Woran könnte das liegen?
Ich füge jeweils den Screenshot ein.

Viele Grüße
Alp
Hallo Alp,

Zitat:Allerdings läuft es noch nicht ganz.
Was genau funktioniert denn - und was nicht?

Zitat:Ich denke mal, dass es von der Struktur stimmen müsste.
Ich würde jeden FIFO in seine eigene Schleife legen, um Timing-Probleme zu minimieren/auszuschließen.

Zitat:Allerdings werden die Daten immer noch nicht so übergeben, wie sie es sollen.
Wie werden sie den übergeben?

Zitat:Dabei soll auf die FPGA Daten sowohl senden, als auch empfangen. Das geschieht allerdings noch nicht. Woran könnte das liegen?
Musst du hier wirklich FIFOs verwenden? Für Einzelwerte? Für langsame (?) Temperatursensoren?
Warum nicht Zugriffe auf das FPGA-Control?
Hallo GerdW,

Zitat:Was genau funktioniert denn - und was nicht?
Es sollen unterschiedliche Spannungssignale und Boolean-Werte übergeben werden. Wenn ich das am Ausgang der FPGA überprüfe, kommt überhaupt nichts an. Ich nehme an, dass ich irgendwo einen Fehler mit den Datentypen habe.


Zitat:Wie werden sie den übergeben?
Theoretisch über die Lesen-und Schreiben-Funktion mehrerer FIFO-Schnittstellen. Praktisch funktioniert das nicht Blink


Zitat:Warum nicht Zugriffe auf das FPGA-Control?
Wie meinst du das?


Gruß
Alp
Hallo Alp,

Zitat:Wie meinst du das?
Man kann über eine FPGA-Methode im RT-VI auf Controls/Indicator im FPGA-VI zugreifen…
Für deinen DO legst du also ein boolsches Control im FPGA an, für den Temperatur-AI einen entsprechenden Indicator. Und die liest/schreibst du per FPGA-Methode im RT-VI: wozu für so etwas einzelne (!) FIFOs anlegen und verwalten?
(Auch das wird in den Beispiel-Projekten zu FPGA+RT gezeigt…)
Ich finde den gesamten Aufbau doch sehr fehleranfällig, bzw. fehlerhaft.

Im RT:
  • Wieso startest du den FPGA-Code 4x?
  • Ich kann es jetzt nicht nachstellen, aber ich würde erst den FPGA starten (Node ausführen) und dann die FIFOs starten. Das kannst du auch gerne seriell anstatt parallel machen.
  • Ich stimme Gerd zu, pack die Lese- und Schreibelemente in eigene Loops, so dass sie unabhängig voneinander arbeiten. So wie es jetzt ist, schreibst du aktuell nur 1x, max. im Takt der Abklingzeit, wartest parallel aber auf 200 Elemente beim Temperatur-Lesen, ohne aber darauf zu achten, ob die FIFOs vielleicht überlaufen.
  • Auch beim Thermofühler stimme ich Gerd zu: Aus Erfahrung sind die Dinger relativ träge, eine Übertragung von Einzelwerten per Read/Write Node langt meist völlig, kein Bedarf für FIFOs. Dasselbe gilt wahrscheinlich für die Werte, die du an den FPGA schickst.

Der FPGA-Code ist ebenfalls seltsam:
  • Du versuchst immer mit Time-Out 0 (also so schnell wie möglich) Werte aus den FIFOs zu lesen, wertest aber den Ausgang "Timeout?" nicht aus. Stattdessen hängt jweils am Standardwert Null bzw. False eine Case-Struktur, in der du deinen Ausgänge immer auf Null setzt. Da aus dem FIFO beim Timeout auf jeden Fall ein Wert kommt, ist in den allermeisten Durchläufen z.B. der Ausgang Mod2/AO0 immer bei 0 Volt.
  • Besser: Falls es Sinn macht: FIFOs auch bzw. gerade im FPGA in unabhängige Loops packen. Aktuell wird deine Loop-Rate vom langsamsten Modul bestimmt. Wenn z.B. dein Mod1/AI1 ein langsames Thermo-Erfassungsmodul ist, dann ist die Looprate irgendwo im niedrigen Hertz-Bereich. Außerdem: Beim Lesen den Timeout? Ausgang auswerten oder vorher nachschauen, wieviele Elemente im FIFO-Buffer zum Auslegen bereitliegen.

Gruß, Jens
Hallo,
zu aller erst danke an Gerd und jg, für eure Antworten. Ich bin gerade dabei mir die Beispiele anzusehen und denke, dass ich so langsam raus habe, wie ich es umzusetzen habe.
Beim Thema Timeout habe ich euren Punkt noch nicht ganz verstanden. Wie ermittle ich den richtigen Wert für meine Anwendung?

Gruß
Alp
Ich gehe nochmal auf deinen FPGA-Screenshot ein: Dort hast du an die FIFO-Read-Node bei Time-Out eine Null angeschlossen. Die Node wird somit 0 ms (also gar nicht) auf einen neuen Wert warten. Da du in deinem RT-VI zwecks Datenfluss eher selten Werte in den FIFO schiebst, wird er bei den meisten Aufrufen leer sein. "Kein Wert" gibt es aber beim Ausgabetypen "Numeric" oder "Boolean" nicht, der Ausgang wird in diesem Fall 0 bzw. False sein. Um festzustellen, ob dies jetzt wirklich ein neuer Wert aus dem FIFO ist oder nur der Default-Wert, musst du noch den Time-Out Ausgang an der Read-Node auswerten. Wenn der FIFO leer ist, wird hier ein TRUE rauskommen. In diesem Fall hast du also keinen gültigen neuen Wert, meist bedeutet das, dass man die Ausgänge auch nicht verändert.

Was jetzt aber für dich richtig ist, das musst du schon selber wissen, meine Glaskugel ist leider defekt! Glas2

Gruß, Jens
Hallo,
so nach etwas herumprobieren und mit Hilfe der Beispiele habe ich es geschafft, dass die Daten zwischen Host und Target ausgetauscht werden.
Dank der Hilfe von Gerd und Jens hat das alles geklappt. Angel_not


Gruß
Alp
Referenz-URLs