Hallo,
ich habe ein Sub Vi mit Schieberegister erstellt.
Dieses Sub VI wird in einem übergeordneten VI in einer While Schleife aufgerufen.
Bei jedem Aufruf läuft dieses Sub Vi genau einmal und schiebt den "aktuellen Wert" in das Schieberegister.
Soweit so gut...
Ich muss dieses Sub Vi/ Schieberegister allerdings Initialisieren wenn das übergeordnete VI das erste mal aufgerufen wurde, damit irgendwelche alten Werte aus diesem Schieberegister gelöscht werden.
Im Augenblick habe ich das so gelöst, dass ich im Übergeordneten VI die Funktion: "erster Aufruf?" mit dem Sub VI verbinde un dort entsprechend verarbeite.
Funktioniert auch noch....
Damit dieses Vi aber einfach und universell einstzbar ist, würde ich gerne auf diesen zusätzlichen unnötigen? "Anschluss" verzichten.
Daher meine Frage:
Kann ich aus einem Sub vi heraus prüfen ob ein beliebiges übergeordnetes VI das dieses Sub Vi nutzt das erste mal aufgerufen bzw. "aktiviert" wurde?
Danke für jeden Tipp
Gruß Andreas
<div align="left">Hallo, Andreas,
das hängt von der LabVIEW-Version ab, die du verwendest.
Ergänze doch bitte dein Profil entsprechend.
MfG,
Jens</div>
' schrieb:Ich muss dieses Sub Vi/ Schieberegister allerdings Initialisieren wenn das übergeordnete VI das erste mal aufgerufen wurde, damit irgendwelche alten Werte aus diesem Schieberegister gelöscht werden.
Warum machst du nicht im SubVI selbst eine Auswertung auf "first call"?
Beim ersten Durchlauf der While-Scheife im Übergeodneten VI wird der Schieberegister dann gelöscht, bei allen weiteren Aufrufen wird er nicht gelöscht. Ohne zusätzlichen Anschluss
Das ist doch das, was du möchtest, oder?
' schrieb:Warum machst du nicht im SubVI selbst eine Auswertung auf "first call"?
Da muß man erstens wissen, daß es genau diese Funktion gibt, und zweitens, wo man sie findet, denn sie ist im Funktionenmenü, wie ich finde, außerordentlich gut getarnt.
Also LV8: Funktionsmenü/Synchronisierung/Erster Ausfruf?
(die Funktion "Erste Aufruf?" hat zwar nichts mit Synchronisierung zu tun, aber ein besserer Ort als dort ist den Entwicklern offenbar nicht eingefallen - ich wüßte auch keinen anderen Ort)
Der bessere Ort wäre die Applikation-Palette, aber First Call hat wirklich mit Syncronisation zu tun.
Gruss
Hallo,
danke für eure Hilfe.
Zitat:Warum machst du nicht im SubVI selbst eine Auswertung auf "first call"?
Beim ersten Durchlauf der While-Scheife im Übergeodneten VI wird der Schieberegister dann gelöscht, bei allen weiteren Aufrufen wird er nicht gelöscht. Ohne zusätzlichen Anschluss
Das ist doch das, was du möchtest, oder?
Das mit der Auswertung im Sub VI selbst funktioniert wirklich.
Ich habe irgendwie die Funktion first call falsch verstanden.
Ich habe gedacht, das sich die Funktion First call auf das VI bezieht in der es sich befindet.
Daher hätte ich erwartet, dass die Auswertung auf First call bei einem immer wieder neu aufgerufenen Sub VI bei jedem aufruf dann wider true ist, aber das ist nicht so.
So ganz ist der Groschen aber noch nicht bei mir gefallen.
Wird denn jetzt auch im Sub VI initialisiert wenn das Hauptprogramm die While Schleife öfter mal aufruft, oder nur wenn das Hauptprogramm erneut gestartet wird?
Gruß Andreas
' schrieb:Hallo,
danke für eure Hilfe.
Das mit der Auswertung im Sub VI selbst funktioniert wirklich.
Ich habe irgendwie die Funktion first call falsch verstanden.
Ich habe gedacht, das sich die Funktion First call auf das VI bezieht in der es sich befindet.
Daher hätte ich erwartet, dass die Auswertung auf First call bei einem immer wieder neu aufgerufenen Sub VI bei jedem aufruf dann wider true ist, aber das ist nicht so.
So ganz ist der Groschen aber noch nicht bei mir gefallen.
Wird denn jetzt auch im Sub VI initialisiert wenn das Hauptprogramm die While Schleife öfter mal aufruft, oder nur wenn das Hauptprogramm erneut gestartet wird?
Gruß Andreas
Hallo!
Du hast es nicht falsch verstanden. Es bezieht sich wirklich auf das VI, in dem es sich befindet.
Dein SubVI wird beim Start des "Haupt"VIs einmalig geladen. Dabei ist dann die firstcall-Auswertung im SubVI == TRUE.
Wenn Du das Haupt-VI erneut öffnest, wird das SubVI auch neu geladen.
Wenn du ein SubVI jedes mal neu laden möchtest (so dass alle Schieberegister (a.s.o.) leer bzw. undefiniert sind), dann musst du im HauptVI mit rechts draufklcken, dann auf "Call Setup..." und da auf "Reload for each call".
Dann bringt natürlich die Firstcall Auswertung nix mehr.
Ich hoffe das war nicht zu durcheinander....
Nisse
Danke Diplnisse,
jetzt habe ich es verstanden.
Bei menem Programm ist das so, dass das Hauptprogramm ein Vi (While Schleife) aufruft, das das Sub VI nutzt.
Beim ersten Start des Hauptprogramms und somit des VIs wird also dann das Sub VI geladen und initialisiert. Jetzt beende ich die While Schleife und starte sie durch das Hauptprogramm neu. Ist dann der folgende Aufruf des Sub Vis dann ein erneuter "erster Aufruf" oder hat LabVIEW das Sub VI geladen und behält die Werte der vorangegangenen Messung im Schieberegister?
Hi.
Ich würde behaupten, dass die Werte bestehen bleiben, solange das Haupt-VI läuft. Würde ich ansonsten mal mit ganz einfachen VI's testen.
Wenn du dein Sub VI (erster Grad, also das mit der While Schleife) mit der Option "Reload for each Call" aufrufst, dann bleiben die Werte -meiner Meinung nach- nur bis zum nächsten Aufruf des SubVIs erhalten.
Musst du mal schauen, je nachdem, was du benötigst....