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


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

Ehrlich gesagt war das noch ein ganz anderes VI. Wenn ich etwas im angehängten geändert hätte, hätte ich das hier geteilt.

Ich versuche das Problem und dessen Lösung aber noch kurz zu beschreiben:

Es gibt ein VI mit dem man manuell das Schreiben einer Messdatei im Hauptprogramm triggert. Dieses VI existiert allerdings auch in dem parallel laufenden Programm, in dem der Fehler auftrat. Es ging aber nicht um eine Schreibberechtigung, die war die ganze Zeit true, da der Ausgang vom Monit Switch VI (gelb markiert oben) nach dem ersten Durchlauf immer true ist. Es ging um ein anderes Sub-VI.
Das Problem war einfach nur, dass durch den Aufruf des Schreibens einer neuen Datei im Hauptprogramm die Referenz (?) geändert wurde, in meinem Programm wird das Schreiben abgebrochen und in dem anderen Programm werden Messwerte aus meinem teilweise eingeschoben.
Ich weiß nicht, ob das einem von euch Experten irgendwie weiter hilft. Ich kann auch nur die Lösung wiedergeben, wie ich es verstanden habe. Ob das so korrekt wiedergegeben ist, könnt ihr wohl besser interpretieren, als ich. Ich hatte nämlich Glück und habe denjenigen heute noch einmal antreffen können, der das VI vor ein paar Monaten abgeändert hat und der hat den Fehler Ruckzuck finden können.

In den VI-Einstellungen jenes VI in ablaufinvariante Ausführung geändert - und schon läuft's wie geschnitten Brot!

Ist das dann eigentlich oft der Fehler, wenn man mehrer Sub-Vis verwendet, aber die fehlerhaft laufen - obwohl sie richtig programmiert sind? Ich habe zB noch ein VI, das mir Daten über Zeit plottet und ich gebe über einen Sub-VI-Eingang an, wie lange es die darstellen soll. Das funktioniert aber auch nicht so super. Es zeigt mir immer nur 10s Plots an. Und wenn man dann mal an den Eingang eine Sonde legt, sieht man auch, dass der Eingang - obwohl 30s hardgecoded sind an diesem Sub-VI - 10s, 30s und 120s durchswitcht, obwohl es für alle drei Intervalle einen eigenen Plot gibt.
Meint ihr, das ist etwas ähnliches?
Auch hier würde ich jetzt das VI anhängen, ich habe da aber keinen Zugang mehr zu von zu Hause aus.


RE: First Call? Funktion vs wann gibt mein Case false aus? - GerdW - 24.01.2014 08:34

Hallo Anne,

Zitat:In den VI-Einstellungen jenes VI in ablaufinvariante Ausführung geändert … Meint ihr, das ist etwas ähnliches?
Ablaufinvariant ("reentrant") bedeutet:
Dein VI besitzt einen internen Datenspeicher. Wenn ein solches VI nun mehrfach mit verschiedenen Datenquellen aufgerufen wird, dann vermischen sich die intern gespeicherten Daten mit den Daten der aufrufenden Instanz. Das ist fast immer hinderlich, wie du selbst festgestellt hast. Wenn man nun ein solches VI "reentrant" setzt, erzeugt LabVIEW intern für jeden Aufruf dieses VIs eine eigene Instanz (aka Kopie) mit ihrem eigenen Datenspeicher - so stören sich die verschiedenen VI-Aufrufe nicht mehr gegenseitig.
Was man auch wissen sollte: ein "Standard"-VI befindet sich nur einmal im Speicher, parallele Aufrufe dieses VIs werden nacheineinder ausgeführt (und können sich so im Extremfall gegenseitig blockieren)…

Zitat:Ist das dann eigentlich oft der Fehler, wenn man mehrer Sub-Vis verwendet, aber die fehlerhaft laufen
Das passiert nur, wenn man den Text oben nicht verinnerlicht hat - und das VI intern Daten speichert…
Ein VI auf "reentrant" zu setzen ist aber kein Allheilmittel, man muss schon wissen, was man da (und warum) tut!