Wie mache ich zwei Instanzen einer FGV im selben Projekt?
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!
Wie mache ich zwei Instanzen einer FGV im selben Projekt?
Ich habe in einem Projekt zwei Programme, die im Endeffekt zwei EXEs werden sollen. In diesen Programmen verwende ich ein paar functional globals, um einige Konfigurationsoptionen immer verfügbar zuhaben ohne massig "Kabel" verlegen zu müssen. Das Problem ist jetzt: baue ich die selbe functional global in beiden Programmen ein, "kommunizieren" diese darüber, was ich aber gar NICHT will. Jedes Programm soll seine eigene Instanz der FGV haben.
Sobald ich die Dateien kompiliere ist es kein Problem. Bei zwei EXEs sind die FGV automatisch von einander getrennt. Aber solange ich das ganze teste und die Programme über die Entwicklungsumgebung starte (wegen debugging usw.) kommen sich beide in die Quere. Das nervt natürlich ziemlich.
Die FGV werden in den Programmen jeweils an mehreren Stellen verwendet, das heißt reentrant setzen ist keine Option. Ich möchte jetzt aber auch nicht lauter Kopien der FGVs anlegen und damit gleich doppelt soviel Wartungsaufwand haben. Was kann ich da machen?
Anzeige
06.10.2013, 10:23 (Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2013 10:24 von Lucki.)
RE: Wie mache ich zwei Instanzen einer FGV im selben Projekt?
Und warum verwendest Du nicht einfach globale Veriablen? Zwar bleibt das Problem dann bestehen, aber der Wartungsaufwand geht doch entscheidend zurück. Statt 17 FGVs im ersten Projekt und 17 umbenannte FGVs im zweiten Projekt hättest Du in jedem Projekt nur ein einziges VI für alle 17 Veriablen. Ich jedenfalls habe mich nicht beeinflussen lassen von der hier verbreiteten kollektiven Meinung "FGVs gut, Globals schlecht" - und bin damit immer gut gefahren. FGVs haben durchaus ihre Berechtigung; wenn es aber nur darum geht, für einfache, sich selten ändernde Werte "Draht zu sparen", dann eher nicht.
RE: Wie mache ich zwei Instanzen einer FGV im selben Projekt?
Du machst die eigentliche FGV rezenteste.
In zwei verschiedenen normalen VIs, die die zwei gewünschten Unstanzen sind, raufdürft du die reentrant FGV auf. Fertig!
RE: Wie mache ich zwei Instanzen einer FGV im selben Projekt?
@Lucki,
prinzipiell würde ich deinen letzten post unterschreiben auch wenn ich fürchte, du trittst damit wieder mal eine alte Disskussion los.
Was aber das Problem von Lupin angeht, hift es ja nicht wirklich weiter.
Gruß, Marko
(06.10.2013 12:31 )BNT schrieb: Du machst die eigentliche FGV rezenteste.
In zwei verschiedenen normalen VIs, die die zwei gewünschten Unstanzen sind, raufdürft du die reentrant FGV auf. Fertig!
RE: Wie mache ich zwei Instanzen einer FGV im selben Projekt?
(06.10.2013 12:32 )Trinitatis schrieb: @Lucki,
prinzipiell würde ich deinen letzten post unterschreiben auch wenn ich fürchte, du trittst damit wieder mal eine alte Disskussion los.
Was aber das Problem von Lupin angeht, hift es ja nicht wirklich weiter.
Gruß, Marko
(06.10.2013 12:31 )BNT schrieb: Du machst die eigentliche FGV rezenteste.
In zwei verschiedenen normalen VIs, die die zwei gewünschten Unstanzen sind, raufdürft du die reentrant FGV auf. Fertig!
Gruß Holger
Ist die Sprache im LVF umgestellt worden?
Hallo Holger,
Kannst du da 2 Worte mehr drüber verlieren ?
Gruß, Marko
Da hat mich wohl mein iPhone mit seine Automatik ausgetrickst. Es sollte natürlich richtig so heissen:
"Du machst die eigentliche FGV reentrant. In zwei verschiedenen normalen VIs, die die zwei gewünschten Instanzen sind, rufst Du die reentrant FGV auf. Fertig!"
Warum hilft das nicht weiter? Die zwei Apps, also Haupt-VIs in einem Projekt sollen jeweils eine Instanz einer FGV benutzten, die Daten mit der gleichen Struktur speichern. So habe ich die Frage jedenfalls verstanden, und der Hinweis, dass es in der kompilierten Exe funktioniert bestätigt mich.
Wo ist da die Verwirrung? Warum tritt das eine alte Diskussion los?
RE: Wie mache ich zwei Instanzen einer FGV im selben Projekt?
(06.10.2013 12:55 )BNT schrieb: Warum hilft das nicht weiter?
Wo ist da die Verwirrung? Warum tritt das eine alte Diskussion los?
Gruß Holger
Hallo Holger,
mein post war zweigeteilt. Der von dir zitierte Teil bezog sich ausschliesslich auf die Antwort von Lucki. Deine Antwort hatte ich mangels klingonischer Sprachkenntnisse beim 1. Mal nicht verstanden.
RE: Wie mache ich zwei Instanzen einer FGV im selben Projekt?
(06.10.2013 13:09 )BNT schrieb: Prima, dann ist ja jetzt alles klar.
Oder nicht, Lupin?
Gruß Holger
Leider nein. Das bringt so nichts. Die FGV wird ja innerhalb des Programms an mehreren Stellen verwendet. Wenn ich nur eine einzige Stelle hätte, an der gelesen/geschrieben wird, würde ich mir FGVs sowieso nicht antun sondern gleich Feedback nodes verwenden. Eine reentrant FGV ist im Prinzip ja nichts anderes mehr als ein teurer Feedback Node.
Das mit globalen Variablen (stimmt natürlich, dass die viel einfacher zu warten sind), verschiebt das Problem nur auf eine höhere Ebene. Ich habe zum Beispiel eine Logging-Funktion, der ich nur einen Text übergebe. Die holt sich den Log-Dateinamen bzw. Referenz auf die geöffnete Datei aus der FGV. Wenn ich jetzt auf zwei globale Variablen umstelle, muss ich die Log-Funktion auch noch verdoppeln, da ich ja jeweils eine andere Globale einbinden muss. Da die Log-Funktion aber in beiden Programmen identisch ist (und auch sein soll), möchte ich hier nichts verdoppeln, und jetzt Wrapper um Wrapper zu schreiben kann doch hoffentlich auch nicht der Sinn sein.
RE: Wie mache ich zwei Instanzen einer FGV im selben Projekt?
Als Alternative kannst Du das Projekt kopieren und unter einem anderen Namen speichern.
Du öffnest das eine Haupt-VI in dem einen LabVIEW-Projekt und das andere in dem zweiten LabVIEW-Projekt.
Jedes LabVIEW-Projekt stallt eine eigenen Applikationsinstanz dar. Ich denke das sollte funktionieren, nicht schön, aber...
RE: Wie mache ich zwei Instanzen einer FGV im selben Projekt?
(06.10.2013 15:12 )BNT schrieb: nicht schön, aber...
Also obwohl es zwei unterschiedliche Projekte sind, binde ich die selben Dateien ein (zumindest alle, die geteilt werden sollen)? Labview ist dann hoffentlich so intelligent, dass es sofort merkt, wenn ich in Projekt A eine Datei verändert habe, die auch in Projekt B verwendet wird und nicht erst Projekt B komplett neu öffnen muss oder so?
Wenn das geht, kann ich damit leben. Ist immer noch viel schöner als Code-Verdoppelung, und auch noch besser als das, was ich als nächstes probiert hätte: Top-Level der Callchain abfragen und dementsprechend in der FGV den passenden Feedback-Node auswählen. Die FGV würde dann zwar jede Menge nicht verwendete FBN enthalten (in jedere Instanz eine andere), aber wäre mir auch immer noch lieber als Code-Verdoppelung.
Das mit dem Projekt scheint sogar auch das einfachste zu sein, sobald weitere solche Programme dazukommen würden. Zur Zeit ist es eine einfache Sender-überNetzwerk-Empfänger Struktur. Es ist aber nicht auszuschließen, dass es weitere leicht adaptierte Sender geben wird.
Danke jedenfalls! Werde mal schauen wieviel Aufwand der Umbau ist. Ich habe ja leider schon mit den Codeverdoppelungen angefangen (bei 4 oder 5 Dateien war's ja noch OK) bis es mir dann aber irgendwann mal zu blöd geworden ist.