LabVIEWForum.de
Ändern/Auslesen von Bedienelementen eines Hauptprogramms mittels eines Unterprogramms - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Ändern/Auslesen von Bedienelementen eines Hauptprogramms mittels eines Unterprogramms (/Thread-Aendern-Auslesen-von-Bedienelementen-eines-Hauptprogramms-mittels-eines-Unterprogramms)



Ändern/Auslesen von Bedienelementen eines Hauptprogramms mittels eines Unterprogramms - aptiva - 10.10.2010 09:50

Hallo,
habe zur Zeit ein Problem, für welches mir keine Lösung einfällt. Ich habe ein Hauptpgrogramm, welches diverse Unterprogramme aufruft. Diese Unterprogramme müssen jedoch ohne die klassische Variablenübergabe vom Hauptprogramm aufs Unterprogramm durch eine Verdrahtung auf Variablen im Hauprogramm zugreifen können, defakto lesen und überschreiben können.
Die Unterprogramme sind auch unbedingt erforderlich, da die behandelten Funktionen jedes Blockdiagramm sprengen würden. Im Unterprogramm müssen außerdem die Anzeigen des Hauptprogrammes ständig überschrieben werden, damit der Anwender immer die aktuellen Prozessparameter im Auge behalten kann.
Hat jemand eine Idee, wie ich dies relativ einfach realisieren kann?
Vielen Dank im Vorraus
Aptiva


Ändern/Auslesen von Bedienelementen eines Hauptprogramms mittels eines Unterprogramms - Lucki - 10.10.2010 10:35

Ja das geht alles wunderbar, Du kannst auf jedes Bedien/Anzeigeelement eines laufenden Sub-Vis schreibend/lesend zugreifen. Das Element muß nicht einmal einen Anschluß haben. Das zu erklären ist nur am Sonntag zu viel verlangt, ich poste hier mal nur ein Bild aus einem meiner VIs, damit Du ein Vorahnung bekommst wie es geht:
[attachment=29854]


Ändern/Auslesen von Bedienelementen eines Hauptprogramms mittels eines Unterprogramms - macmarvin - 10.10.2010 14:02

Im SubVI brauchst du die Referenzen deiner Controls/Indicators vom Hauptprogramm.
Anbei in kleines Beispiel.
[attachment=29857]LV2009


Ändern/Auslesen von Bedienelementen eines Hauptprogramms mittels eines Unterprogramms - aptiva - 10.10.2010 15:38

Danke für die Antworten. Hier meine vereinfachte Lösung für das Problem. Ich übergebe den Pfad des aufrufenden Programms an das Unterprogramm und suche mir in diesem die Variable raus, die ich lesen/überschreiben möchte. In dem großen Programm, sind die Variablen natürlich als strikte Typdefinitionen gespeichert Big Grin
Das Programm ist strikt linear aufgebaut, das heißt, es ist in ihm nicht möglich, das Variablen gleichzeitig gelesen/geschrieben werden. Oder habt ihr noch irgendwelche Bedenken bei meiner Lösung?
[attachment=29858]Lv09_img2


Ändern/Auslesen von Bedienelementen eines Hauptprogramms mittels eines Unterprogramms - macmarvin - 10.10.2010 16:03

Wenn du anstatt des Pfades, die "This VI"-Referenz übergeben würdest, könntest du dir im SubVI das "Open VI Ref" und falls du dich später dafür entscheidest, daß du mehrere Instanzen des MainVI brauchst, hast du es dann auch deutlich einfacher.
BTW. Den Pfad kannst du dir auch komplett sparen. Einfach aus der Callchain im SubVi den VI-Namen deines Parent nehmen und damit auf das Open VI Ref gehen.
[attachment=29859]


Ändern/Auslesen von Bedienelementen eines Hauptprogramms mittels eines Unterprogramms - aptiva - 11.10.2010 07:45

Wenn ich das mit der Call-Chain mache, dann kommt ne Fehlermeldung, das die entsprechende Variable nicht gefunden wurde...
Werd mal ausprobieren, was passiert, wenn ich nicht die erste, sondern die nullte Stelle aus dem Array nehme

Edit: Sry habe in nem Unterprogram,m versehentlich die nullte Stelle aus dem Array abgerufen, also kein Wundern das Es nicht funktioniert hat


Ändern/Auslesen von Bedienelementen eines Hauptprogramms mittels eines Unterprogramms - abrissbirne - 11.10.2010 09:26

Da ich kein LV2009 habe kann ich nicht in deine Architektur schauen. Wenn dein Hauptprogramm mittles des Producer/Consumer PAtterns aufgebaut ist, würde ich es vorziehen die Daten in die Consumer Queue zu schieben. Dort können diese an die Userinterface-Queue weitergeleitet werden. Somit behälst du einen konsistenten Programmablauf.


Ändern/Auslesen von Bedienelementen eines Hauptprogramms mittels eines Unterprogramms - aptiva - 11.10.2010 09:59

Habe in allen Programmen das Fehlerregister durchgezogen und es kann nicht gleichzeitig in eine Variable geschrieben werden und diese ausgelesen werden, da ich in den Cases in denen das der Fall sein könnte, eine flache Sequenzstruktur verwendet habe.
Das Beschrieben der Variable wollte ich im Hauptprogramm verhindern, da diese mittels einer Case-Struktur beschrieben werden müssen und dieses auf dem Panel zu viel Platz wegnimmt.

Vielen Dank für eure Hilfe