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!
18.03.2021, 12:30 (Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2021 12:31 von MicroScoop.)
Werte Kollegen, ich müsste mich mal der Schwarmintelligenz bedienen.
Folgende Thematik:
- Ich hab ein Unterprogramm, nennen wir es Sub.vi, welches ablaufinvariant ist und die Arbeit einer Klimabox übernimmt. Davon laufen eine unbestimmte Anzahl Parallel. Diese übernehmen eigenständig ihre Konfiguration, Klimamessung und Datenspeicherung.
- Ich hab ein Hauptprogramm, nennen wir es Master.vi, in dem die Benutzer Zugriff auf die Subs bekommen und sich die Frontpanel anzeigen lassen können (zeigt Klimadaten aus der jeweiligen Position der Klimabox)
Das funktioniert soweit alles tadellos...bis ich eine Anwendung daraus generiere. Das Masterprogramm soll auf einem Server laufen und geht dort natürlich nur als exe. Leider kann in dieser exe, keine Sub mehr gestartet werden.
Starte ich den Sub als VI, fehlen natürlich alle darin enthaltenen vi's sowie lib's
Die Subs als Anwendung zu starten geht auch nicht, oder sagen wir, ich weiß nicht wie, da ich ja auch Parameter (Konfigurationen) an die Subs übertragen muss.
Hat jemand eine Idee für dieses Problem???
PS: Ich hab zur Übersicht nur den Master im Anhang
hast du den Pfad zum subVI mal überprüft?
Hast du bei den subVIs alle benötigten subsubVIs bereitgestellt?
Hast du mal über ein Error-Handling/-Logging im Master nachgedacht?
Die bessere Lösung besteht üblicherweise darin, alle aufzurufenden subVIs in deine Master-EXE als "immer enthaltene Daten" mit hineinzubauen. Oder man arbeitet mit statischen VI-Referenzen, die stellen auch sicher, dass das subVI beim EXE-Build inkludiert wird…
Zitat:Hast du bei den subVIs alle benötigten subsubVIs bereitgestellt?
Nein, das ist ja das Problem, mit dem "Wie?"
Zitat:Hast du mal über ein Error-Handling/-Logging im Master nachgedacht?
Da sitz ich gerade dran.
Zitat:Die bessere Lösung besteht üblicherweise darin, alle aufzurufenden subVIs in deine Master-EXE als "immer enthaltene Daten" mit hineinzubauen. Oder man arbeitet mit statischen VI-Referenzen, die stellen auch sicher, dass das subVI beim EXE-Build inkludiert wird…
Was passiert denn wenn ich VI's in "immer enthalten" schiebe?
Die statische VI-Referenz ist doch Pfad-gebunden?! Da müssten die Pfade zwischen VI und Anwendung gleich sein, nehm ich an. Sind bei der stat. Ref alle "inneren" VI's mit dabei? Das wäre dann ja die beste Lösung
Zitat:Was passiert denn wenn ich VI's in "immer enthalten" schiebe?
Sie landen dann im Executable, mitsamt ihrer Dependencies…
Zitat:Die statische VI-Referenz ist doch Pfad-gebunden?! Da müssten die Pfade zwischen VI und Anwendung gleich sein, nehm ich an. Sind bei der stat. Ref alle "inneren" VI's mit dabei? Das wäre dann ja die beste Lösung
Bei statischen Referenzen landen die subVIs auch automatisch im Executable, mitsamt Dependencies.
Und einen Pfad brauchst du dann auch nicht mehr, da du ja schon eine Referenz hast!
Zitat:Die statische VI-Referenz ist doch Pfad-gebunden?! Da müssten die Pfade zwischen VI und Anwendung gleich sein, nehm ich an. Sind bei der stat. Ref alle "inneren" VI's mit dabei? Das wäre dann ja die beste Lösung
Bei statischen Referenzen landen die subVIs auch automatisch im Executable, mitsamt Dependencies.
Und einen Pfad brauchst du dann auch nicht mehr, da du ja schon eine Referenz hast!
Hab ich jetzt gemacht. Bekomme folgenden Fehler:
"Fehler 1198 bei Methodenknoten in reentrant_call_static.vi->cb_start.vi->#Klimaster-v1.01.vi
Mögliche Ursachen:
LabVIEW: (Hex 0x4AE) Das VI befindet sich in einem für diese Operation unzulässigen Zustand. Ändern Sie für diese Operation den Ausführungsmodus des VIs auf "ablaufinvariant"."
Die vorherige Fehlermeldung kam zu Stande, weil die statische Referenz "strikt typisiert" war...mein Fehler!!!
Jetzt läufts. Für alle die ähnliche Probleme haben,.. VI's aus Anwendungen heraus immer als statische Referenz starten und beim kompillieren die aufzurufenden VI's mit in "immer enthaltene Dateien".
(18.03.2021 13:56 )MicroScoop schrieb: Jetzt läufts. Für alle die ähnliche Probleme haben,.. VI's aus Anwendungen heraus immer als statische Referenz starten und beim kompillieren die aufzurufenden VI's mit in "immer enthaltene Dateien".
Beides brauchst du nicht. Ich bin aber bei Gerd, "Static VI Reference" ist der einfachste Ansatz.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!