LabVIEWForum.de - Kommunikation zwischen parallelen VIs

LabVIEWForum.de

Normale Version: Kommunikation zwischen parallelen VIs
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo miteinander!
Ich habe mir mehrere Teil-VIs erstellt,die jeweils in einer While Schleife laufen (teils mit unterschiedlichen Geschwindigkeiten). Nachdem ich sie separat für sich alle getestet habe, möchte ich sie nun in einem Haupt-VI zusammenfügen, da nur ein Haupt-.VI auf dem FPGA kompiliert werden kann. Um Daten zwischen den einzelnen Teil-VIs auszutauschen, würde ich FGVs wählen um RaceConditions zu vermeiden. Dazu muss ich für jeden Wert den ich von einem Teil-VI zum nächsten transportieren will eine FGV mit dem passenden Datentyp erstellen und jeweils in die Schleife des Teil-VIs miteinfügen (einmal das Schreiben, und in das andere Teil-VI das auslesen), richtig?
Außerdem möchte ich per Referenz einige Werte von Teil-VIs schreiben oder lesen. Ich kann jedoch keine Referenz auf die Teil-VIs machen, da ja nur das Haupt-VI kompiliert wird. Dazu müsste ich diese Werte aus den Teil-VIs irgendwie herausziehen. Da die aber in ihren Scheifen laufen, kann man nicht einfach einen Wert auf einen Ausgang legen oder?
Wie geht man hier vor?
Hallo cRIO,

bisher bin ich auf dem FPGA damit ausgekommen, alles im HauptVI zu erledigen. Dann kann man auch lokale Variablen nutzen, statt noch mehr subVIs (hier: FGVs) einzuführen.

Ein möglicher Zwischenschritt wäre möglich: die BD-Platz schluckenden Rechnungen in subVIs packen, aber das Schleifenhandling im HauptVI belassen. So hat man alle nötigen Anzeigen im HauptVI und kann per Referenz darauf zugreifen...
Wow danke für die Blitzantwort!
Ok lokale Variablen wären auch ein Lösungsweg, aber FGVs müssten funktionieren, soweit ich dich richtig verstanden habe.
Beim 2ten Teil der Antwort komm ich nicht ganz mit, sorry, kannst du es bitte für LbView-Dummies in Worte fassen?
Hab schon so was ähnliches gefunden:
http://www.labviewforum.de/Thread-Kommun...unter-FPGA
Hier mal ein einfaches BSP als Bild. Wenn ich einfach die Beiden Teil-VIs in ein Haupt-VI ziehe und eine Schleife drum herum mache, dann Controls oder Ausgaben herausziehe, wird auf dem Ausgang OUT im Haupt-VI nichts angezeigt.
Oder erkläre ich zu schlecht was ich meine?
Wenn ich das richtig sehe:
ich komme jetzt nicht umhin, die While-Schleifen der Teil-VIs (die vorher nötig waren um ein einzelnes Teil-VI zu testen) aus dem BlockDiagramm der Teil-VIs zu entfernen und den Rest des Blockdiagramms in eine While-Schleife zu ziehen. Dann werden auch die Ausgaben angezeigt, da nicht mehr gewartet wird, bis die innere While-Schleife des Teil-VIs beendet ist, sodass die Ausgabe nach aussen dringt. Dann klappts auch mit den Referenzen auf das Haupt-VI.
Ich finde es nur sehr abschreckend, alle While-Schleifen entfernen zu müssen, da es teil viele Shift-Register sind und eine Vielzahl an Ein/Ausgängen. Dachte vielleicht gibts da geschickte, zeitsparende Möglichkeiten dafür.
Oder habe nur ich das Bedürfnis Codeabschnitte zu testen, anstatt das gesamte Projekt? Dann muss ich die Teil-VIs auch mit While-Schleifen erstellen, und später beim zusammenfügen wieder alle entfernen. Wie macht man das sonst?
ShiftRegister müsste man natürlich nicht auf Ein-/Ausgänge legen um das ShiftRegister in der äußeren Schleife wieder zu realisieren (so wie ich das im BSP gemacht habe), die kann man auch durch einen Rückkopplungsknoten ersetzen.
Hallo,

diese Herausforderung des "debuggbaren Codes auf FPGA" ergibt sich immer wieder.
Es gibt mehrere Wege.

Der eine wäre wo es geht statt Shiftregistern die Rückkopplungsknoten zu verwenden. Sie funktionieren genauso, aber haben (zum Programmierzeitpunkt) keine zugehörige Schleife. Erst wenn kompiliert wird, ist die nächsthöhere Schleife in der der Rückkopplungsknoten sitzt verantwortlich für das "Weiterreichen" in den nächsten Schleifendurchlauf. So läßt sich sehr sauberer und wiederverwendbarer Code erstellen.
Das Problem dabei ist, das man nicht vergessen darf, dass ein Rückkopplungsknoten immer von einem SDL zum nächsten reicht. Damit meine ich folgende Situation: Wenn ein SubVI RKK enthält, und dieses SubVI wird nun in eine (z.B. For-)Schleife getan, weil man mehrere "parallele" Informationen abarbeiten will, dass dann der Zustand des RKK an folgende SDL weitergegeben wird. Ist nicht schlimm, nur man darf es nicht vergessen.

Ein weinterer Weg wäre die Verwendung von Memory.

Ein dritter weg wäre: Nur genau EIN Shiftregister benutzen, nämlich nur auf der Hauptebene. So müssten sämtliche SubVIs ihre Zwischenparameter (die eigentlich für die RKK sind) nach außen führen. Mehrer Zwischenergebnisse werden geclustert. Auch verschachtelte SubVIs reichen so ihre Zwischenwerte immer sauber "bis ganz noch oben" durch. Auf der Hauptebene wird dann ein Shiftregister oder RKK benutzt...


Was man nun aber nimmt für den perfekten Code, hängt leider immer vom Einzelfall ab.
Zumindest sehe ich das momentan so. Ich hoffe das war verständlich und ein wenig nützlich.


Gruß
Referenz-URLs