LabVIEWForum.de
Reentrant / functional Vi's - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Reentrant / functional Vi's (/Thread-Reentrant-functional-Vi-39-s)



Reentrant / functional Vi's - Kvasir - 17.11.2008 17:51

Hallo,

es ist wieder einmal soweit, dass mich ein Problem(chen) quält, das eurer Hilfe bedarf.

Folgende skizzenhafte Problemstellung:
Ich habe ein Programm geschrieben, das im Wesentlichen ein Eingangssignal über eine Filterbank mehrerer Bandpassfilter in verschiedene Frequenzbereiche aufspaltet. Mit diesen typischerweise 10-12 Signalen arbeite ich dann weiter.
Das ganze läuft online - ich bekomme also ständig (soll heißen kontinuierlich) Signale, die ich filtere und verarbeite.

Dabei ergibt sich:

a) Filterfunktionen und einige andere Operationen in meiner Signalverarbeitung erfordern für den korrekten Betrieb einige Werte aus dem vorherigen Durchlauf.
b) die Filterbank muss auf jeden Fall variabel sein. Dies führt dazu, dass ich die Filter Vis in eine For Loop packe (muss?!). Das ist prinzipiell ja kein Problem, aber ich kann dadurch meine Signalverarbeitung nicht mehr einfach auf Reentrant stellen, da innerhalb einer ForSchleife nicht für jeden Durchlauf eine Instanz erstellt wird.

Ich löse das zur Zeit mit Hilfe von funktionalen Vi's. Das klappt auch. Allerdings bin ich damit nicht ganz glücklich, da meine Anzahl von nichtinitialisierten Schieberegistern (zur Datenübergabe) irgendwie ins (gefühlte) unendliche steigt.
Wenn ich pro Kanal 2 1d Arrays speichern muss, dann sind das schon 2 2dim Arrays zur Speicherung. (1d array x Anzahl Kanal = 2d array)

Meine Frage also: Gibt es irgendeine elegante Lösung, die ich hier anwenden könnte? Kann man reentrant innerhalb einer Forschleife aktivieren? Wie würdet ihr sowas angehen?

Anbei ein Screenshot von einem typischen functional Vi bei mir. In diesem Fall ein 2d Array, der die Daten mitschleift.

Besten Dank mal im VorausSmile


Reentrant / functional Vi's - eg - 17.11.2008 18:17

Diese Frage hat mich auch sehr gequält. Ich glaube wenn du ein VI als reentrant definierst, wird nur beim Erstaufruf eine neue Instanz erzeugt, bei weiteren Aufrufen (am selben Platz im Block Diagramm) wird diese Instanz weiter benutzt.
Ansonsten würden die ganzen Filter, die uninitialisierten Schieberegister benutzen und dabei reentrant sind nicht funktionieren.
Kann das jemand bestätigen?


Reentrant / functional Vi's - Kvasir - 17.11.2008 18:40

Ja genau. Ich denke auch, dass das so funktioniert.

Mein Problem ist eben nur, dass ich in einer Schleife arbeite und sozusagen für jeden Index eine Instanz brauche.


Reentrant / functional Vi's - eg - 17.11.2008 18:55

' schrieb:Ja genau. Ich denke auch, dass das so funktioniert.

Mein Problem ist eben nur, dass ich in einer Schleife arbeite und sozusagen für jeden Index eine Instanz brauche.

Geht es vielleicht damit? Es nennt sich Call Setup.


Reentrant / functional Vi's - IchSelbst - 17.11.2008 19:53

' schrieb:wenn du ein VI als reentrant definierst, wird nur beim Erstaufruf eine neue Instanz erzeugt, bei weiteren Aufrufen (am selben Platz im Block Diagramm) wird diese Instanz weiter benutzt.
Genau davon geht ich aus. So soll es meiner Meinung nach ja auch sein.

Hab ihr schon mal versucht, das ganze über VI-Server zu machen? Array mit Referenzen auf das eine VI. Da die Referenzen unterschiedlich sind, sollten auch trotz "Einmaligkeit im BD" mehrere Instanzen geöffnet werden.


Reentrant / functional Vi's - Kvasir - 18.11.2008 10:01

' schrieb:Genau davon geht ich aus. So soll es meiner Meinung nach ja auch sein.

Hab ihr schon mal versucht, das ganze über VI-Server zu machen? Array mit Referenzen auf das eine VI. Da die Referenzen unterschiedlich sind, sollten auch trotz "Einmaligkeit im BD" mehrere Instanzen geöffnet werden.

Mit Vi-Server hab ich mich überhaupt noch nicht befasst. Werde das morgen (wenn ich wieder am LV Arbeitsplatz bin) mal ansehen.

Wie sieht es denn dort mit Performance aus? Bin schon recht knapp mit Ressourcen. Viel langsamer darf meine Signalverarbeitung nicht mehr werden.


Reentrant / functional Vi's - IchSelbst - 18.11.2008 10:29

' schrieb:Wie sieht es denn dort mit Performance aus? Bin schon recht knapp mit Ressourcen.
Keine Ahnung. Bin immer nicht so knapp mit Ressourcen. Tongue

Ich gehe aber davon aus, dass das Management im VI-Server unerheblich ist.


Reentrant / functional Vi's - Lucki - 18.11.2008 12:03

Also das Problem hatte ich auch, aber da habe ich nicht lange herumgrübelt, sondern einfach dafür gesorgt, daß in der Forschleife jeder Kanal sein eigenes Filter-Ikon bekommt - und schon funktionierts.
[attachment=15394]<div align='center'></div>
Wenn die Kanalzahl variabel ist, muß man natürlich zumindest wissen, wie viele Kanäle maximal zu erwarten sind und entprechend viele Cases einrichten


Reentrant / functional Vi's - Kvasir - 18.11.2008 15:11

' schrieb:Also das Problem hatte ich auch, aber da habe ich nicht lange herumgrübelt, sondern einfach dafür gesorgt, daß in der Forschleife jeder Kanal sein eigenes Filter-Ikon bekommt - und schon funktionierts.
[attachment=42934:temp2.png]<div align='center'></div>
Wenn die Kanalzahl variabel ist, muß man natürlich zumindest wissen, wie viele Kanäle maximal zu erwarten sind und entprechend viele Cases einrichten

Das ist wirklich ein cleverer Ansatz. Auf die Idee wär ich nicht gekommen.
Die maximale Anzahl kann ich schon angeben, daran wirds nicht scheitern.

Vielen Dank für den Tip.