Referenzen in Variable speichern und in SubVI aufrufen
Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Referenzen in Variable speichern und in SubVI aufrufen
Hallo,
ich habe in einem Programm verschiedene Anzeige- und Bedienelemente, nennen wir sie Bedien, Anzeige1 und Anzeige2. Um auf die Elemente drauf zugreifen zu können aus einem SubVI heraus, muss ich mit Referenzen arbeiten.
Ich habe in dem Program die Referenzen in einer funktionalen gloablen Variable zwischengespeichert. Das SubVI soll die Referenzen aus der FGV lesen, dass die Anzeige- und Bedienelemente steuern soll.
Leider nimmt das SubVI - das in dem Bild dargestellt ist - den Wert nicht an. Was mache ich da falsch?
RE: Referenzen in Variable speichern und in SubVI aufrufen
Ich kann die Referenzadresse nicht in einer FGV speichern. Ich habe einen Cluster erzeugt, in dem vier Elemente zum Speichern der Referenzadresse erzeugt. Den hab ich in die FGV eingefügt. Leider erkennt das SubVI die Referenzadressen nicht - kann ich keine Referenzen von Objekten in einem SubVI zwischenspeichern, um sie an mehreren Stellen weiterverwenden zu können?
RE: Referenzen in Variable speichern und in SubVI aufrufen
Hallo Hasenfuss,
doch, sowas kann man schon machen. Nur muss dein verarbeitendes VI eben genau den Typ der Referenz (bzw. den zugrundeliegenden Datentyp) kennen, um die Referenz weiterzuverwenden…
Was für Referenzen hast du denn da erzeugt? Welche Bedienelemente stecken dahinter?
Wieso musst du mit Referenzen hantieren - statt gleich die Daten in der FGV zu bündeln?
RE: Referenzen in Variable speichern und in SubVI aufrufen
Ich hab folgendes gemacht - ich bin auf "Referenz erzeugen" gegangen beim Element. Dann hatte ich die Referenz und am Ausgang hab ich gesagt - Bedienelement erzeugen. Dieses Bedienelement hab ich kopiert und in einen Cluster eingefügt - siehe das Frontpanel mit dem Cluster.
Ich habe in meiner Oberfläche eine Vielzahl von Bedienelementen, die ich alle mit Initialwerten füttern muss und später natürlich auch die Anzeigewerte anzupassen habe. Deshalb ist mein Blockdiagramm sehr voll. Meine Idee ist es, die Referenzen der Elemente in einer FGV zu speichern und dann z.B. die Initialisierungen in einem SubVI zu machen, was dort die Initialwerte setzt oder so.
28.04.2015, 14:07 (Dieser Beitrag wurde zuletzt bearbeitet: 28.04.2015 14:11 von GerdW.)
RE: Referenzen in Variable speichern und in SubVI aufrufen
Hallo Hasenfuss,
Zitat:Ich hab folgendes gemacht - ich bin auf "Referenz erzeugen" gegangen beim Element. Dann hatte ich die Referenz und am Ausgang hab ich gesagt - Bedienelement erzeugen. Dieses Bedienelement hab ich kopiert und in einen Cluster eingefügt - siehe das Frontpanel mit dem Cluster.
Ich habe in meiner Oberfläche eine Vielzahl von Bedienelementen,
Und jetzt willst du für diese "Vielzahl von Bedienelementen" jeweils eine Referenz erzeugen und in diesem Cluster in der FGV ablegen?
Es ist dann doch viel einfacher, einfach eine Referenz auf das FP deines VIs zu holen und sich darüber alle Control-Referenzen zu holen. Dann filtert man die interessanten Bedienelemente über ihr Label - welches man dazu natürlich nach einem sinnvollen Schema benannt haben muss…
So sieht das bei mir aus:
Bei "1" werden die Referenzen auf die FP-objekte eingesammelt, bei "2" werden die zu setzenden Werte aus einer Datei geladen und dann über das Label der Controls zugewiesen…
RE: Referenzen in Variable speichern und in SubVI aufrufen
Das ist natürlich sehr elegant :-)
Kannst Du Dir mal mein SubVI anschauen? Ich rufe das SubVI aus dem HauptVI auf und übergebe die VI-Referenz. Dann hab ich einen Eigenschaftsknoten mit Panel verwendet, dann Elemente. Das Array gehe ich in einer Schleife durch. Mit BeschrText frage ich ab, ob es sich um das Element handelt, dem ich einen Wert übergeben möchte, in dem ich den in einer Case-Anfrage auswerte.
Was mir daran nicht so gut gefällt ist, dass sich die Bezeichnung in dem Case nicht automatisch ändert, wenn ich die Bezeichnung eines Elements in dem Hauptprogramm ändere. Aber es ist auf jeden Fall 1000mal besser, was ich mir da gestern zusammengebastelt habe.
Kann ich denn an meinem jetzigen Entwurf noch etwas besser machen?
RE: Referenzen in Variable speichern und in SubVI aufrufen
Hallo Hasenfuss,
Zitat:Was mir daran nicht so gut gefällt ist, dass sich die Bezeichnung in dem Case nicht automatisch ändert, wenn ich die Bezeichnung eines Elements in dem Hauptprogramm ändere.
Warum sollte es?
Du hast einen Case namens "True" - wieso sollte dieser Case-Name mit dem Label irgendeines Controls verknüpft sein???
Zitat:Kann ich denn an meinem jetzigen Entwurf noch etwas besser machen?
Ich übergebe an Punkt 2 im obigen Bild zwei Arrays: eines mit Labels, eines mit Werten. Und über das Array mit den Labels suche ich mir das passende Control heraus! (Es gibt da so Funktionen wie "Search1DArray"…)
Das hat die Vorteile:
- Ich kann eine Config-Datei verwenden und dort mit dem Texteditor Labels ändern/hinzufügen/löschen - ganz nach Bedarf…
- Wenn ich das passende Control zum Label gefunden habe, kann ich den Controltyp abfragen und den zu übergebenden Wert passend aufbereiten (ich arbeite hier nur mit Zahlen oder boolschen Werten, das macht die Sache einfacher)…
RE: Referenzen in Variable speichern und in SubVI aufrufen
Cool, danke für Deine Antwort.
Ich hab jetzt in dem Beispiel zwei Array-Konstanten angelegt, die dann später z.B. für die Frontpanelelementsbezeichnung und den Initialwert stehen sollen und in der zweiten for-Schleife zugeordnet werden. Leider muss ich erst noch eine primäre for-Schleife anlegen, damit ich aus Elemente[] eine Liste von den Bezeichnungen kriege.
Meinst Du das so von der Art her?
Auf alle Fälle bin ich schon mal erleichtert, dass ich nicht so komplizierte FGVs anlegen muss, um die einzelnen Referenzadressen abzuspeichern. Auf die Idee wäre ich ohne Dich nicht gekommen - ganz herzlichen Dank deshalb nochmal.
29.04.2015, 13:22 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2015 13:23 von GerdW.)
RE: Referenzen in Variable speichern und in SubVI aufrufen
Hallo Hasenfuss,
Zitat:Leider muss ich erst noch eine primäre for-Schleife anlegen, damit ich aus Elemente[] eine Liste von den Bezeichnungen kriege.
Sowas muss man ja pro VI nur ein einziges Mal durchführen…
Zitat:Meinst Du das so von der Art her?
Ja, in der Art. In der letzten Schleife dann noch die passende Referenz mittels IndexArray (und nicht per AutoIndizierung!) aus dem Referenzen-Array holen…
Und etwas Fehlerbehandlung schadet auch nicht, wenn man mal nicht das korrekte Label vergeben hat und deshalb keine passende Referenz gefunden wird!