Zweites, dynamisch aufgerufenes SubVI startet nicht - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Zweites, dynamisch aufgerufenes SubVI startet nicht (/Thread-Zweites-dynamisch-aufgerufenes-SubVI-startet-nicht) Seiten: 1 2 |
Zweites, dynamisch aufgerufenes SubVI startet nicht - Belimo - 18.03.2014 10:18 Hallo miteinander! Der Titel sagt es schon, ich rufe aus meinem HauptVI über Referenz öffnen nacheinander 2 Unterprogramme auf (Lüfterregelung und Heizerregelung). [attachment=49011] In der Sequenz werden nacheinander die VIs aufgerufen, gestartet und ihr Status in "Hidden" bzw. "nicht sichtbar" gesetzt. Klicke ich zur Laufzeit im HauptVI auf eine Schaltfläche, so wird in der Ereignisstruktur der SubVI Status auf Standart gesetzt und dadurch im Vordergrund aufgerufen. Das Klappt für die "Lüfter"-Steuerung sehr gut. (Schaltfläche geklickt, VI erscheint ausgeführt) Wenn ich die Schaltfläche für das 2. aufgerufene VI anklicke "Heizer.VI erscheint das Frontpanel, leider jedoch unausgeführt. Versuch ich es über das "Ausführen" ICON von Labview zu starten, so bricht es wieder ab... Woran könnte das liegen? [attachment=49010] Wenn ich zu beginn zuerst "Heizer.vi" aufrufe und dann "Lüfter.vi" wird entsprechend "Lüfter.vi" nicht ausgeführt. : RE: Zweites, dynamisch aufgerufenes SubVI startet nicht - GerdW - 18.03.2014 10:28 Hallo Belimo, erstmal vorneweg: es gibt nicht ohne Grund spezielle Pfad-Befehle, da muss man nicht mit Zitat:StandartWenigstens Abschreiben sollte funktionieren, oder willst du hier irgendwelche Kunst verkaufen? Zitat:Wenn ich die Schaltfläche für das 2. aufgerufene VI anklicke "Heizer.VI erscheint das Frontpanel, leider jedoch unausgeführt. Versuch ich es über das "Ausführen" ICON von Labview zu starten, so bricht es wieder ab... Woran könnte das liegen?Wenn irgendwas nicht funktioniert, sollte es Fehlermeldungen geben. Hast du da was für uns? Sind die Referenzen gültig? RE: Zweites, dynamisch aufgerufenes SubVI startet nicht - Belimo - 18.03.2014 10:39 Hey, tut mir leid das passiert mir ab und zu mit "standard" Gut die Pfad Befehle kann ich bei gelegenheit nochmal ersetzen, dass stimmt. Bei ansetzen eines Fehlerknotens hinter dem Methodenknoten "VI ausführen" wird kein Fehler angezeigt. Die Referenzen werden für jedes SubVI ja in einer Globalen Variable eingefügt. Kann da irgendwas durcheinander geraten Das Labview nicht mehrere Referenzen (auch wenn unter anderem Namen) speichern kann? RE: Zweites, dynamisch aufgerufenes SubVI startet nicht - GerdW - 18.03.2014 10:43 Hallo Belimo, Zitat:Kann da irgendwas durcheinander geraten Das Labview nicht mehrere Referenzen (auch wenn unter anderem Namen)Nein, das kann es nicht sein. Du kannst sehr wohl (beliebige) Referenzen in globalen Variablen speichern… Zitat:Versuch ich es über das "Ausführen" ICON von Labview zu starten, so bricht es wieder ab... Woran könnte das liegen?Wie sieht dein subVI denn überhaupt aus? Was bedeutet "bricht es wieder ab"? Ist das subVI fehlerfrei? Hat es irgendwelche Abbruchbedingungen? Bisher mangels VIs nur RE: Zweites, dynamisch aufgerufenes SubVI startet nicht - Belimo - 18.03.2014 10:56 ich hab mal mein VI angehangen RE: Zweites, dynamisch aufgerufenes SubVI startet nicht - GerdW - 18.03.2014 11:20 Hallo Belimo, das Problem ist hier die unnötige Verwendung von TimedWhileLoops! Dummerweise hast du die subVIs durch Kopieren erzeugt. Damit hat die Kopie bei der TWL den exakt gleichen Namensbezeichner für die TWL übernommen - und LabVIEW kann nun einmal keine zwei TWL mit exakt dem gleichen Namen laufen lassen… - Verzichte bei dieser Anwendung auf TWL, sie bringen keinen Vorteil und nur unnötigen Overhead. - Eine Event-Struktur in einer TWL ist schlichtweg Blödsinn! - Versuche die globalen Variablen zu reduzieren, das läuft früher oder später auf RaceConditions hinaus! - (Stacked)Sequenzen erhöhen nicht die Lesbarkeit eines VIs! - Warum bindest du die VIs nicht wirklich als subVI ein, sondern rufst sie per VIServer auf? Was soll hier der Vorteil sein? Lesson learned: VIs anhängen erläutert Probleme viel besser als "bricht wieder ab"… RE: Zweites, dynamisch aufgerufenes SubVI startet nicht - Belimo - 18.03.2014 11:26 Die TWL musst ich nehmen, da es sonst arge Probleme mit der Synchronisation meines Host mit dem cRIO system gibt. Das bedeutet, als ich vorher normale While loops hatte und dann z.B. auf "Lüfter einschalten" geklickt habe, dauerte es eine Ewigkeit eh der simple "True" befehl mit der SharedVariable an den digitalen Output ging... hab lange mit den Variablen Eigenschaften rumprobiert, (RT FIFO, Puffer etc.) aber nichts hat geholfen bis ich dann die TWL auf dem Host verwendet hab. Würd die gern beibehalten, gibts da trotzdem noch ne Möglichkeit? achso, ja das reine "reinziehen" des SubVIs ginge natürlich auch. Wusste nicht ob das im Hintergrund weiterlaufen und erscheinen/verschwinden dann so gut funktionert RE: Zweites, dynamisch aufgerufenes SubVI startet nicht - GerdW - 18.03.2014 12:20 Hallo Belimo, in deinem Beispiel sind nirgends SVs zu sehen… Zitat:Das bedeutet, als ich vorher normale While loops hatte und dann z.B. auf "Lüfter einschalten" geklickt habe, dauerte es eine Ewigkeit eh der simple "True" befehl mit der SharedVariable an den digitalen Output ging...Ich kann mir jetzt keinen Grund ausdenken, warum das mit einer TWL besser funktionieren sollte als mit einer normalen WhileLoop. Oder halt: Hast du irgendwo in deinem Programm eine Schleife (z.B. irgendeine Polling-Loop) laufen, die viel CPU-Last erzeugt? Dann ist natürlich die CPU ausgelastet und arbeitet andere Sachen nicht im gewünschten Takt ab. TWLs sind höher priorisiert und können dann evtl. doch ausgeführt werden… Also eher mal die "normalen" Schleifen kontrollieren und alle mit einer Wartezeit versehen! Zitat:Wusste nicht ob das im Hintergrund weiterlaufen und erscheinen/verschwinden dann so gut funktionertDieses ständige (Un)Sichtbar-Schalten würde ich im subVI (und nur dort) erledigen. Nur eine Instanz, die sich darum kümmert, und zwar abhängig von irgendwelchen Settings, die du da in den globalen Variablen speicherst… RE: Zweites, dynamisch aufgerufenes SubVI startet nicht - Belimo - 18.03.2014 12:30 Danke Gerd fürs weiterhelfen! Das mit dem "Warten" in einer normalen While Schleife hat ich gerad auch nochmal probiert und klappt gut. Das Problem mit dem "nicht ausführen besteht leider weiterhin, aber ich werd das jetzt so machen wie du vorgeschlagen hast. (VI im HauptVI als SubVI behandeln und dann die sichtbarkeit im SubVI klären) Vielen Dank! RE: Zweites, dynamisch aufgerufenes SubVI startet nicht - GerdW - 18.03.2014 12:31 Hallo Belimo, Zitat:Das Problem mit dem "nicht ausführen besteht leider weiterhin Ich wiederhole: Zitat:Dummerweise hast du die subVIs durch Kopieren erzeugt. Damit hat die Kopie bei der TWL den exakt gleichen Namensbezeichner für die TWL übernommen - und LabVIEW kann nun einmal keine zwei TWL mit exakt dem gleichen Namen laufen lassen…Wie wäre es damit, die TWL mit einem anderen Namen zu versehen? Falls dir das nicht klar sein sollte, verweise ich mal auf die LabVIEW-Hilfe… |