Frage zu SubVI's - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Frage zu SubVI's (/Thread-Frage-zu-SubVI-s) |
Frage zu SubVI's - GrauerStar - 14.11.2005 17:11 Hallo zusammen, da ich noch nicht so bewandert in LabVIEW bin, erhofffe ich mir sehr die Hilfe von euch erfahreneren Usern bei der Lösung von ein paar Fragen, die sich mir momentan bei der Realisierung meines Projekts in den Weg stellen... 1. Ist es möglich, aus einer Schleife im SubVI noch während des Ablaufs die Daten an das Main-VI zu senden? Bspw. wenn man innerhalb der Schleife im SubVI in bestimmten Zeitabständen einen Text an das Hauptprogramm senden will... Wenn ja, wie geht das? Sollte ich dafür Globale Variablen verwenden, oder bin ich damit auf dem falschen Weg? 2. Kann man die Abbruchbedingung einer While-Schleife (unter Vermeidung von lokalen Variablen) von außen steuern? Vielen Dank und mfg. Frage zu SubVI's - thomas.sandrisser - 14.11.2005 19:47 1. als anfaenger bist mit globalen variablen recht gut bedient! du kannst aber auch z.b. mit queues arbeiten oder direkt auf die "referenzen" umsteigen! 2. ja ist es, wenn du wiederum mit queues, referenzen oder dem vi server arbeitest! als anfaenger ist es jedoch etwas schwer mit dem vi server oder referenzen zu arbeiten, deshalb wuerde ich dir generell vorschlagen wenn moeglich globale variablen zu verwenden oder mit queues zu arbeiten - diese werden ueber den namen identifiziert und sind vi-uebergreifend gueltig! wenn du daraus jedoch eine exe baust, sind die queues nur noch innerhalb der applikation gueltig! Frage zu SubVI's - GrauerStar - 15.11.2005 11:17 Hallo freedive. Vielen Dank für deine schnelle Antwort. In der Zwischenzeit habe ich mehrmals probiert das Problem mit globalen Variablen in den Griff zu bekommen. Leider bin ich bis jetzt noch nicht auf einen grünen Zweig gekommen. Vielleicht kannst du mir besser helfen, wenn ich zur Erklärung mal meinen letzten Versuch poste. Momentan können die Werte zwar aus der globalen Variable gelesen und in sie hinein geschrieben werden, nicht aber aus der globalen Variablen in das Hauptprogramm namens test1.vi. Gedacht war es so, dass ich einfach die While-Schleife des Programms mit dem Namen geht.vi in ein Unterprogramm auslagere. Die Warteschleife soll in diesem Fall den Sinn haben, dass man aus dem Puffer eines Gerätes nicht mehr liest aus überhaupt vorhanden ist, also wartet, wenn der Puffer leer ist und der Schalter "Read/Write" trotzdem noch auf Read steht. Die Abbruchbedingung soll entweder ein Umlegen des Schalters auf Schreiben, oder aber der Fall sein, dass ungeahnt plötzlich wieder etwas in den Puffer namens Queue hineinkommt. Vielleicht helfen diese Erklärungen, mein Problem genauer zu verstehen und eine detailliertere Lösung zu finden. Vielen Dank im Voraus und mfg Frage zu SubVI's - thomas.sandrisser - 15.11.2005 14:47 waahnsinns kompliziert :-) ich hab dir mal ein biepsiel fuer die queues angehaengt... Starte zuerst das Read.vi -> dort wird dir auffallen, dass das inkrement der schleifen nicht hochgezaehlt wird, solange das Write.vi nicht gestartet ist! Erst wenn ein Wert in der Queue steht, wird das inkr. vom Read.vi um eins inkrementiert! Grund dafuer liegt darin, weil ich den timeout auf -1 (unendlich) belassen habe! du kannst hier auch gerne eine ander zeit waehlen... Ich hoffe, dass dir das etwas weiter hilft Frage zu SubVI's - GrauerStar - 17.11.2005 09:05 hallo freedive, vielen Dank für deine Mühe. Es hat eine Weile gedauert, bis ich dein Bsp. verstanden hab, da ich mich mit Queues zuvor noch nicht beschäftigt habe. Allerdings betrachte ich diese Lösung mittlerweile als ungeeignet zur Realisierung meiner WaitLoop, da ich zur ständigen Aktualisierung der Queue (z.B. plötzliches Auftreten des Falls: Puffer füllt sich wieder) eine While-Schleife im Hauptprogramm benötige, was ich ja gerade vermeiden wollte. Oder sehe ich das falsch...? Allerdings könnte ich die Queue als einen neuen Ansatz für das Gesamtprogramm sehen, da momentan Lesen/Schreiben anhand einer Case-Struktur ausgewählt wird. Dazu müsste ich wiederum mein jetziges Programm nahezu komplett umbauen, was aus Zeitgründen etwas ineffizient wäre. Kompliziert ist es in der Tat ein wenig, daher werde ich wohl damit verbleiben, die WaitLoop im Hauptprogramm zu belassen, so, wie es funktioniert, und nicht, wie geplant, diese in ein SubVI auszulagern... Ich danke dir trotzdem noch mal für deinen Einsatz. MFG |