Hallo, ich habe folgendes Problem oder ich könnte auch sagen mir einen unbekannten Effekt in meinem Propramm entdeckt.
Ich instanziere über einen For-Loop 4 FPGAs und übergebe diese als Array in einen While-Loop. Sollte Ich das Programm beenden oder ein Fehler auftreten, so würde der While-Loop beendet und ich würde danach die Instanzen beenden und den Speicher wieder freigeben dafür
. In dem While-Loop kann ich, wenn ich will über das Frontpanel Befehle zu den einzelnen FPGAs schicken um Messdaten über deren Eingänge zu erhalten als auch dessen Ausgänge für Sollwerte zu Messen).
Jetzt kommt der Effekt den ich mir nicht erklären kann:
Wenn ich Befehle zum ersten FPGA schicke funktioniert alles wunderbar, aber sobald ich zum 2,3 oder 4 FPGA einen Befehl schicke in dem While-Loop verschwindet die Instanz und ich erhalte auch keine Meldung (als Fehler / Event) über Probes dazu. Dabei beende ich nirgendswo in dem While-Loop die Instanz.
Nun meine Frage dazu: Wodurch könnte das Verursacht werden bzw. ist dieses Verhalten schon mal bei Jemand anderen vorgekommen?
Grüße Ressless
Soll das heißen, du hast 4 FPGA-Karten in deinem System?
Ein VI-Upload oder zumindest ein Screenshot würde deine Beschreibung verständlicher machen. Vermutung: Du schleifst irgendwo (z.B. in einer Case-Struktur) Default-Referenzen durch...
Gruß, Jens
Hallo Jens, was meinst du mit Default-Referenzen genau?
Ja ich schleife Referenzen durch und diese werden auch ständig in dem Programm gebraucht um bestimmte Befehle von meinem Frontpanel zu dem VI mit dem While-Loop über Queues darauffolgenden Case-Selector zu senden.
Hier ein paar Bilder der Struktur.:
[
attachment=58553]
[
attachment=58551]
[
attachment=58552]
Im Bild "02_FPGA_VI" habe ich 3 VIs mit rotem Rahmen markiert. Das erste erstellt die Instanzen enstprechend den FPGA-Builds (und auch Referenzen für die Queues), das 2te ist das VI im wie im Bild "03_FPGA_VI_Inside" zu sehen ist wo die Befehle empfangen und an die FPGAs weitergeleitet werden und das dritte soll die Instanzen und Referenzen wieder löschen und freigeben.
Grüße
Ressless
Hallo Ressless,
eine Frage.
Bei der For Next Schleife verwendest Du zwei indizierende Eingänge. Hast Du geprüft ob wirklich auf beiden Eingängen ein 4fach Array ansteht.
Sollte eines nur ein einfach Array sein, wird nur ein Satz weitergegeben.
Gruß
Freddy
(18.12.2017 09:58 )Freddy schrieb: [ -> ]Hallo Ressless,
eine Frage.
Bei der For Next Schleife verwendest Du zwei indizierende Eingänge. Hast Du geprüft ob wirklich auf beiden Eingängen ein 4fach Array ansteht.
Sollte eines nur ein einfach Array sein, wird nur ein Satz weitergegeben.
Gruß
Freddy
Ah um das Missverständniss zu klären. Die Indizierung ist nur ein 1D-Array mit 2 Elementen aus Clustern. Es wird aber nur der Index 0 davon verwendet und beide sind 1D-Array mit der selben anzahl an Elemten.
Hallo Ressless,
Zitat:um das Missverständniss zu klären. Die Indizierung ist nur ein 1D-Array mit 2 Elementen aus Clustern. Es wird aber nur der Index 0 davon verwendet und beide sind 1D-Array mit der selben anzahl an Elemten.
![Hmm Hmm](images/smilies/lvfsmilies/fun/hmm.gif)
Jetzt ist alles klar wie Kloßbrühe…
Du hast also ein Array mit genau 2 Elementen, von denen aber nur "der Index 0" verwendet wird???
Und du wunderst dich, warum deine Loop nur einmal vernünftig durchläuft?
Ansonsten:
- Bilder kann man mit LabVIEW leider nicht debuggen. Von daher musst du entweder VIs oder deutlich mehr Informationen liefern!
- Zu deinem RT-Host-VI: Wozu eine While-Loop innerhalb einer TWL, die wiederum auf 1kHz Takt gesetzt ist?
- Sind deine VIs reentrant? (Sonst würde eine parallelisierte FOR-Loop wenig Sinn ergeben.)
(18.12.2017 10:39 )GerdW schrieb: [ -> ]Hallo Ressless,
Zitat:um das Missverständniss zu klären. Die Indizierung ist nur ein 1D-Array mit 2 Elementen aus Clustern. Es wird aber nur der Index 0 davon verwendet und beide sind 1D-Array mit der selben anzahl an Elemten.
Jetzt ist alles klar wie Kloßbrühe…
Du hast also ein Array mit genau 2 Elementen, von denen aber nur "der Index 0" verwendet wird???
Und du wunderst dich, warum deine Loop nur einmal vernünftig durchläuft?
Ok nochmal genauer: In dem Cluster sind die 4 Instanzen der FPGAs enthalten. Ich habe eigentlich 2x4 FPGAs aber, das lass ich mal hier warum das so ist, da ich derzeit nur 4 FPGAs verwende.
Und ich kann das VI nicht hochladen (Größe + Verschwiegenheitspflicht)
EDIT: Hier nochmal ein Bild wie ich es aktuell verwende. Entschuldigung nochmal für die Verwirrung.
Zitat:Ansonsten:
- Bilder kann man mit LabVIEW leider nicht debuggen. Von daher musst du entweder VIs oder deutlich mehr Informationen liefern!
- Zu deinem RT-Host-VI: Wozu eine While-Loop innerhalb einer TWL, die wiederum auf 1kHz Takt gesetzt ist?
- Sind deine VIs reentrant? (Sonst würde eine parallelisierte FOR-Loop wenig Sinn ergeben.)
1. Ich werde wenn Zeit ist das noch genauer schreiben.
2. Da bin ich mir nicht sicher ob dann noch meine einzelnen VIs parallel abgearbeitet werden (sofern ich das VI Parallel betreibe). Aber Gegenfrage: Könnte ich den inneren While-Loop weglassen und dafür den TWL nutzen?
3. Ja sind sie. bzw werde ich bei Zeiten machen um dies zu testen. Ich muss aber erstmal nur eine Instanz des VIs zum laufen bekommen mit den 4 FPGAs.
Grüße Ressless
Danke an Freddy, Jens und GerdW.
Habe das Problem gefunden und gelöst bekommen.
Es war in der Tat ein Problem mit Indizierung von einem Array.
Ich habe vorher nur mit einem FPGA gearbeitet und mir immer nur den ersten Index ausgegeben von einem 3D-Array und dieser Werte bearbeitet und später durch Indizierung wieder auf 3D-Array-Größe gebracht ohne die Werte der anderen FPGAs mitzunehmen.
Jetzt habe ich einen For-Loop verwendet anstatt dem Index-Array-Baustein und nun bleiben meine Instanzen erhalten (der Fehler war also meine Vergesslichkeit).
Danke und Frohe Weihnachten wünsche ich euch noch!