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
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]
Im SubVI brauchst du die Referenzen deiner Controls/Indicators vom Hauptprogramm.
Anbei in kleines Beispiel.
[
attachment=29857]LV2009
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
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]
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]
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
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.
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