LabVIEWForum.de
First Call? Funktion vs wann gibt mein Case false aus? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: First Call? Funktion vs wann gibt mein Case false aus? (/Thread-First-Call-Funktion-vs-wann-gibt-mein-Case-false-aus)

Seiten: 1 2


First Call? Funktion vs wann gibt mein Case false aus? - anne - 23.01.2014 13:59

Liebe Community,

ich habe momentan das Problem, dass mein Programm irgendwann aufhört Messergebnisse ins Excel wegzuschreiben. Das kommt mal nach 20 Min vor, manchmal aber auch erst nach 2h und die angesammelten Datenmengen sind auch vollkommen unterschiedlich. Es ignoriert sogar, wenn der Datasocket zwischendurch mal anstürzt und schreibt einfach munter weiter.

Deshalb dachte ich mir, dass evtl irgendwann dem Schreib-VI das Schreibrecht dauerhaft entzogen wird. Deshalb hänge ich euch einen Ausschnitt des VIs an, dass Schreibrecht vergibt. Da ich diesen Teil nicht selbst programmiert habe, fällt es mir momentan noch etwas schwer das alles nachzuvollziehen. Dazu hänge ich noch die Memory Latch Funktion an.

Während des kompletten ersten Schleifendurchlaufes bleibt first call true oder wird es auch während eines Schleifendurchlaufes mehrmals angesprochen? Wann wird es überhaupt false? Dieses Sub-VI wird ja dann kurze Zeit später erneut ausgeführt, da das Hauptprogramm kontinuierlich läuft, da müsste first call aber doch wieder true sein oder "weiß" das Sub-VI dass es schon einmal lief und gibt dann false aus?

Generell zerbreche ich mir etwas den Kopf darüber, wann der gelb markierte Ausgang false sein kann. So richtig Durchblick habe ich leider noch nicht und dass ich diesen first call nicht 100%ig verstanden habe, kann ich mich auch nicht sicher da durch hangeln.
Könnt ihr mir damit bitte helfen?

Vielen Dank!


RE: First Call? Funktion vs wann gibt mein Case false aus? - jg - 23.01.2014 14:51

Ich habe jetzt nicht den Nerv, mich durch deine T/F Logik auf Grund des Screenshots durchzuarbeiten, aber zur Klarstellung der Funktion "First Call?":
Diese Funktion gibt nur 1x TRUE aus, und zwar bei ihrem ersten Aufruf, solange das Programm läuft. Die Funktion "weiß" also, dass z.B. ein SubVI ein 2. Mal aufgerufen wurde.

Gruß, Jens


RE: First Call? Funktion vs wann gibt mein Case false aus? - anne - 23.01.2014 15:00

Hallo Jens,

danke für die Antwort. Genau diese T/F-Case-Schleifen-Rückkopplungs-Logik raubt ja auch gerade mit den letzten Nerv. Macht's mir als "Neuling" nicht besonders leicht verständlich leider.

Wird die Funktion denn überhaupt mehrfach aufgerufen, wenn die Schleife einmal durchläuft? Also wenn an dem markierten Eingang ein Array mit - sagen wir mal - 2 Elementen ankommt. Dann müsste doch der first call einmal aufgerufen werden und das Ergebnis von Memory Latch am Schleifeneingang anliegen. Liegt dieser denn dann aber nicht "fest" an, auch wenn die Schleife jetzt noch die zweite/finale Iteration macht und somit erst danach über die Rückkopplung neue Eingangswerte am Memory Latch ankommen?

Ich hänge das VI auch mal an, viel mehr als im Screenshot kommt da allerdings auch nicht mehr.


RE: First Call? Funktion vs wann gibt mein Case false aus? - jg - 23.01.2014 15:25

THINK Dataflow! Der Draht ist der Speicher bzw. Wert.
Wenn das "Memory Latch" SubVI 1x ausgeführt wurde und der Ausgang (Boolean) dann an eine FOR-Schleife per Draht weitergebenen wird, dann ändert sich der Wert in der For-Schleife natürlich NICHT.

Gruß, Jens


RE: First Call? Funktion vs wann gibt mein Case false aus? - anne - 23.01.2014 15:40

Aber während das Sub-VI einmal durchläuft, sprich die Schleife den ganzen Datensatz abklappert, ist first call die GANZE Zeit true? Wirklich erst dann, wenn das VI erneut, mit einem neuen Datensatz angesprochen wird, schaltet es auf false? Das ist das kleine Detail, das mir noch nicht ganz klar ist. Mich verwirrt da nämlich die Kontexthilfe "Zeigt an, wenn ein Sub-VI oder Blockdiagrammabschnitt das erste Mal abläuft." An der Stelle frage ich mich eben, ob das wirklich nur EINMAL der Fall ist, wenn ein neuer Datensatz durch die Schleife läuft. Dann würde ja auch Memory Latch noch einmal ausgeführt werden. Ich denke mir schon selbst, dass das Kappes ist. Dann würde es ja eine Schleife ausführen, ohne in einer zu liegen. Ich will mich da nur vergewissern. Sorry, dass das vllt auf den ein oder anderen ziemlich stumpf wirkt, aber mir muss eben 100% klar sein, wann der Schleifenausgang false ist zwecks Schreiberlaubnis...


RE: First Call? Funktion vs wann gibt mein Case false aus? - GerdW - 23.01.2014 16:03

Hallo Anne,

Zitat:Aber während das Sub-VI einmal durchläuft, sprich die Schleife den ganzen Datensatz abklappert, ist first call die GANZE Zeit true?
Im oben angehängten VI wird "First Call" einmal aufgerufen und gibt seinen Wert an ein (nicht beigefügtes) subVI. Wie sollte sich dieser Wert jetzt im subVI ändern? THINK DATAFLOW!

Zitat:An der Stelle frage ich mich eben, ob das wirklich nur EINMAL der Fall ist, wenn ein neuer Datensatz durch die Schleife läuft.
Wieso?
Die Hilfe sagt klar (sinngemäß): "wenn ein Codeabschnitt das erste mal aufgerufen wird" und nicht "wenn neue Daten ankommen"...

Zitat:ber mir muss eben 100% klar sein, wann der Schleifenausgang false ist zwecks Schreiberlaubnis...
Genau dafür gibt es Debugging-Tools wie Sonden, Highlighting, Breakpoints und step-by-step...


RE: First Call? Funktion vs wann gibt mein Case false aus? - anne - 23.01.2014 16:12

Hallo Gerd,

das Sub-VI Memory Latch ist im Originalpost als Screenshot angehängt und ja wirklich so simpel, dass ich das nicht noch einmal als VI angehängt habe.

Debugging kann ich momentan eben nur Offline machen, was das ganze etwas verkompliziert. Das Hauptprogramm wird am Fahrstand genutzt, weshalb ich da momentan nicht drin rumfummeln kann bzw es nicht ausführen kann. Ansonsten würde ich da schon lange mit alles Debugging-Hilfen sitzen, die LabView anbietet Wink

Aber ich verstehe euch jetzt einfach mal so: Ich starte das Programm, der first call wird ein einziges Mal das erste Mal ausgeführt - was die Schleife macht ist dann vollkommen egal bis diese abgeschlossen ist. Wenn diese abgeschlossen ist, wird first call erst jetzt wieder aufgerufen und schaltet dann auf false um.

Sorry für's in den Wahnsinn treiben - das VI verknotet mir mein Hirn.

VG
Anne


RE: First Call? Funktion vs wann gibt mein Case false aus? - GerdW - 23.01.2014 16:14

Hallo Anne,

jetzt hast du es (hoffentlich) verstanden! Smile

Zitat:das VI verknotet mir mein Hirn.
Wieso? "TRUE on first call"…


RE: First Call? Funktion vs wann gibt mein Case false aus? - anne - 23.01.2014 19:31

Hallo Gerd,

ja, hab's verstanden und zu allem Überfluss war das Problem viel simpler als ich dachte. Eine VI-Einstellung geändert (die ich vorher noch nicht kannte) und alles lief wie am Schnürchen!

Mit dem Verknoten meinte ich auch nicht das Memory Latch, sondern das MonitSwitch-VI.
Aber jetzt passt alles.

Danke für eure Hilfe Jens und Gerd!


RE: First Call? Funktion vs wann gibt mein Case false aus? - jg - 23.01.2014 19:36

(23.01.2014 19:31 )anne schrieb:  ja, hab's verstanden und zu allem Überfluss war das Problem viel simpler als ich dachte. Eine VI-Einstellung geändert (die ich vorher noch nicht kannte) und alles lief wie am Schnürchen!
Ein Forum lebt von Nehmen und Geben. Also, was hast du geändert? Und wieso? Vielleicht ist es wichtig!

Gruß, Jens