Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich würde mir gerne eure Verbesserungsvorschläge einholen wollen. Insbesondere wegen der Speicherver(sch)wendung in meinen VIs. Da ich hier mit Toolkits und Hardware arbeite, die ihr bestimmt nicht nutzt, habe ich die VIs mal als Screenshot hochgeladen.
Mein Main.vi bringt meine beiden SubVis, dass der eine was sendet, der andere was empfängt. Nachdem alle Pakete gesendet worden sind, werden Messungen durchgeführt und diese in eine Datei geschrieben. Dieser Vorgang wird in dem Fall 1200 mal wiederholt.
Wichtig ist hier der Empfänger namens Rx.vi. Hier arbeite ich mit fünf parallelen while-Schleifen und vier Queues. Alle Queues werden zuerst angefordert und mit einer maximalen Queuegröße von 1000 begrenzt. Die erste Schleife entnimmt die Daten aus dem Empfänger und schreibt Sie in eine Queue. Die zweite Schleife entnimmt aus der ersten Queue die Daten, verarbeitet sie weiter
und schreibt die Daten in die nächste Queue usw. Im Anschluss werden alle Queues wieder freigegeben.
Am Anfang hatte ich die maximale Queuegröße auf 100 gehabt. Nur leider blieb das Rx.vi einfach hängen (manchmal nach 3 Messvorgängen, manchmal erst nach 100), obwohl alle Schleifen beendet wurden und ein OK als Fehlermeldung aus jeder Schleife raus ging. Ich konnte mir das nicht erklären, da mir das nicht logisch erschien. Im Zeitdruck habe ich dann einfach die maximale Queuegröße auf 1000 erhöht und die 1200 Messungen liefen einwandfrei durch.
Jetzt habe ich das Problem, dass pro Messvorgang mehr Pakete übertrage und es zu einer Speicher ist voll Fehlermeldung kommt.
Habt ihr eine Idee? Mir reichen auch allgemeine Verbesserungstipps bezüglich meines Rx.vis.
ich weiß nicht wie es den anderen geht, aber ich finde das Ganze ziemlich verwirrend.
Was genau ist denn im ersten Bild und was im zweiten.
Das VI im zweiten Bild, ich denke das ist dieses RX.VI ????, solltest du vielleicht mal ein wenig aufräumen. Dann ist das Vorgehen vielleicht etwas erkennbarer.
Im ersten VI hast du eine Wartezeit von 2 sec. Was hat die da zu suchen?
Des weiteren wäre es doch gut, wenn du die VI's einmal hochlädst. Dann kann man leichter schauen was da so passiert und dir vielleicht eher helfen.
Tipps:
- RaceCondition der globalen Stop-Bedingung entfernen...
- im anderen VI: Warum wird dauernd ein Rendesvouz angelegt, gewartet und wieder gelöscht? Kann man die beiden subVIs nicht anders/einfacher aufrufen? Oder wenigstens da Rendesvouz nur einmal anlegen und löschen?
1) Was machst du im VI "Reconstr Data" in der untersten Schleife? Kräftig Arrays aneinanderhängen? Soviel zur Speicherverwendung
2) Was soll das uninitialisierte Schiebe-Register in der untersten Schleife?
3) IMHO brichst deine Programm-Struktur nicht ab. In allen Schleifen hast du ein "Dequeue" mit unendlicher Wartezeit. Solange dieses VI wartet, ist es relativ egal, ob eine globale Variable "Stop" existiert oder nicht.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!