Hallo,
ich habe anhand des Beispiels Subpanel Viewer.vi eine Oberfläche erstellt, um dynamisch während der Laufzeit unterschiedliche VIs laden zu können.
Wie kann ich nun zwischen dem Haupt-VI und dem Unter-VI Daten austauschen?
Zum einen würde ich gerne einfache Variablen übergeben, zum anderen aber auch kontinuierliche Messdaten. Ist dies möglich? Und wenn ja, wie?
Danke.
Gruß
freezer
' schrieb:Wie kann ich nun zwischen dem Haupt-VI und dem Unter-VI Daten austauschen?
Mit Queues/Meldern kann man zwischen beliebigen SubVIs Daten austauschen. Guckst du die entsprechenden Beispiele in der Hilfe. Ob einzelne Daten oder ganze Arrays, ob einmalig oder kontinuierlich, Queues/Melder gehen für alles.
Wenn man die Queues noch auf ein Benutzerereignis gibt, kann man auch eventgesteuert reagieren.
Hier ein unverbindliches Muster in
.
Hallo,
vielen Dank für die Hilfe. Das mit den queues funktioniert super. Anbei habe ich mal ein kleines Beispiel für andere hilfesuchende Anfänger wie mich gepackt.
Hi,
tut mir leid. Die habe ich nicht gesehen. Werde ich das nächste mal besser machen, versprochen
Ich habe noch eine weitere Frage:
Wie kann ich ein array an eine queues übergeben. Hierbei bekomme ich es nicht hin den richtigen Datentyp anzugeben.
Gruß
freezer
EDIT:
Ich habe eine Lösung gefunden, weiß jedoch nicht ob sie optimal ist. Ich übergebe jeweils als Datentyp ein array mit einem leeren Element des gewünschten Datentyp als Inhalt.
' schrieb:Ich habe eine Lösung gefunden, weiß jedoch nicht ob sie optimal ist. Ich übergebe jeweils als Datentyp ein array mit einem leeren Element des gewünschten Datentyp als Inhalt.
Bei "Optain Queue" musst du doch den Typ als Dummy angeben...und hier kannst du den gewünschten Typ mit einem beliebigen Inhalt (auch: leeres Array) anschließen, der Inhalt wird nicht ausgewertet. Erst bei "Enqueue Element" musst du den passenden Inhalt reinschreiben!
Ok, danke. Also bei mir fordert er, dass ich die explizit den Datentyp des Arrays angebe, ist aber so auch ok.
Meine Idee ist es die physikalischen Kanäle meiner DAQmx-Ansteuerung an die SubVIs zu übergeben. Da ich meine SubVIs jedoch dynamisch lade (Subpanel Viewer.vi), erhalte ich die Daten aus der queue nur im ersten geladenen Subpanel. Wie sollte ich sinnvollerweise die Daten so vorhalten, dass sie immer verfügbar sind?
Gruß
freezer
' schrieb:Ok, danke. Also bei mir fordert er, dass ich die explizit den Datentyp des Arrays angebe, ist aber so auch ok.
Ich meinte natürlich ein leeres Array des gewünschten Typs, nicht eine leere "Array-Hülle"
' schrieb:Meine Idee ist es die physikalischen Kanäle meiner DAQmx-Ansteuerung an die SubVIs zu übergeben. Da ich meine SubVIs jedoch dynamisch lade (Subpanel Viewer.vi), erhalte ich die Daten aus der queue nur im ersten geladenen Subpanel. Wie sollte ich sinnvollerweise die Daten so vorhalten, dass sie immer verfügbar sind?
Wenn ich dich richtig verstanden habe, tritt folgendes Problem auf:
Irgendwer schreibt EINMALIG in eine Queue "die physikalischen Kanäle meiner DAQmx-Ansteuerung". Dann geht per VI-Server ein SubVI auf, das die Queue ausliest. Damit stehen in der Queue keine Daten mehr drinnen. Das nächste per VI-Server aufgerufene SubVI kann dann die DAQmx-Kanäle nicht mehr auslesen. Meinst du das?
Wenn ja, gibt es mehrere Lösungsmöglichkeiten:
Einfachste Möglichkeit: Nimm statt einer Queue einen Melder. Im Melder steht immer nur ein Datensatz (siehe oben EINMALIG), der auch nach einem Lesen drinnenbleibt.
Zweite Möglichkeit: Auch den SubVIs, die per VI-Server gestartet werden, kann man Daten in gewohnter Form übergeben, also quasi per Eingangsdraht. Dafür gibt es bestimmte VI-Server-Propertys.
Dritte Möglichkeit: Pack die Daten in ein "funktionales SubVI": Ein solches SubVI hat die Funktion einer globalen Variablen.
' schrieb:Wenn ich dich richtig verstanden habe, tritt folgendes Problem auf:
Irgendwer schreibt EINMALIG in eine Queue "die physikalischen Kanäle meiner DAQmx-Ansteuerung". Dann geht per VI-Server ein SubVI auf, das die Queue ausliest. Damit stehen in der Queue keine Daten mehr drinnen. Das nächste per VI-Server aufgerufene SubVI kann dann die DAQmx-Kanäle nicht mehr auslesen. Meinst du das?
Genau das meine ich. Dann nutze ich wohl besser einen Melder. Dankeschön.