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!
ich habe ein ziemlich komplexes Programm, welches ich nun als ausführbare .exe-Datei erstellen soll.
Als Anleitung dafür dient mir das Buch "Einführung in LabVIEW" von Wolfgang Georgi&Ergun Metin.
Zu Beginn soll man alles was man benötigt bei einem neuen Projekt unter "my Computer" reinziehen.
Anschließend unter "Build Specifications" auf "new" -> "Application (EXE)" eine .exe erstellen.
Dazu muss unter "Source File" die HauptVI zu "Startup VIs" hinzufügen.
Nun zu meinem Problem:
Wenn ich dort dann nichts zu "Always Included" hinzufüge, so wird eine .exe Datei erstellt.
Diese kann ich auch ausführen und mein Programm startet, jedoch kann ich in meinem Programm einen Klick machen, danach geht nichts mehr.
Wenn ich dort dann zu "Always Included" alle SubVIs und Dateien hinzufüge, die ich normalerweise im Ordner habe, aus dem ich mein Programm als VI über LabVIEW starte, dann kommt immer wieder eine Fehlermeldung zu irgendwelchen SubVIs. Diese seien angeblich nicht ausführbar ( "broken"). Dies ist soweit auch richtig, als dass die SubVIs zum Teil Informationen aus meiner HauptVI bekommen und erst dann funktionieren. Nochmal der Hinweis: Starte ich die VI ganz normal über LabVIEW, dann funktioniert das Programm.
Kann mir da jemand einfach so helfen, also liegt der Fehler darin, wie ich die .exe erstellen möchte, oder liegt der Fehler irgendwo in meinem Programm?
Nur so ins Blaue raten bringt es meist nicht. Etwas mehr Informationen wären da doch schon von Nöten.
Z.B.: Welche Informationen kommen von deinem "Main" und werden wie in deinem "Sub" das ja "broken" sein soll verarbeitet? Wäre mal echt interessant, wenn du das zeigen könntest.
Sonst kann es häufig auch zu Problemen der .Exe kommen, wenn du irgendwo relative Pfade verwendest und diese relativ zu deinem VI liegen. Dann müsstest du einfach nur hingehen und den Pfad in der Executable zweimal strippen statt einmal. Siehe hier.
MfG Carsten
30.01.2012, 11:43 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2012 11:51 von hi2012us.)
danke für die schnelle Antwort.
Meine Subs geben Daten an die Main. Also als Beispiel stell ich bei meiner Main für meine Motorsteuerung Min- und Max-Werte ein, die Sub checkt dann ob Min auch kleiner als Max ist. Solche Sachen halt.
Das Problem ist, ich hab das Programm nicht komplett selbst erstellt, sondern nur von meinem Vorgänger übernommen.
Ich kann leider auch nicht die VI einfach hochladen, Betriebsgeheimnisse =(.
Dein Hinweis auf das "strippen" könnte aber trotzdem nützlich sein.
Denn in dem Ordner meines Programms sind einige Unterordner, die dann config-Dateien und SubVIs enthalten.
Im Main wird darauf so zugegriffen: der String "resources\interface\interface.vi" wird weitergegeben über ein "String-to-Path" an "Open VI Reference".
Dabei liegen Main.VI und der Ordner "resources" auf gleicher Ebene. Also müsste es sich um relative Pfade handeln?!
Also hab ich mir deinen Link zum "strippen" angesehen, jedoch versteh ich nicht wie ich das auf meine relativen Dateipfade anwende.
Denn bei meiner .exe-Herstellung entstand die .exe, .ini, .aliases und ein Ordner "data" in dem einige .conf-Dateien sind.
Also sind meine SubVIs mit in der .exe? wie gebe ich ihm dann die Pfade an??
mfg
edit: ich hab so einen Aufruf-Teil jetzt mal kurz nachgebastelt und angehängt:
30.01.2012, 12:06 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2012 12:10 von Hook1986.)
Du hast schon richtig erkannt, dass du ein Pfadproblem hast, weswegen dein Programm abstürzt. Das Problem ist, dass du relative Pfade verwendest. Abhilfe kannst du dadurch verschaffen, dass du die Pfade entweder immer absolut angibst, was aber das Problem hat, dass die Datei immer an einem festen Ort liegen muss (Das ist eher ein Nachteil). Die zweite Möglichkeit wäre, dass du die Dateien, auf die du dich beziehst (Configs), in den Ordner "Data" der ja beim Build erzeugt wird reinkopierst. Dafür kannst du zum Beispiel auch ein kleines VI nutzen, das du als "Post-Build-Action" ausführst. Dann musst du in der Case-Struktur in dem jeweiligen Fall den Pfad anpassen.
Edit: Die VIs, welche du während deinem Programm aufrufen willst könntest du der Einfachheit halber auch als SubVI einbinden. Dann wäre das Problem eigentlich gelöst. Falls du die VIs jedoch zwingend per Referenz aufrufen musst, müsstest du auch diese in den Ordenr "data" kopieren.
MfG Carsten
30.01.2012, 12:17 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2012 12:20 von hi2012us.)
Die *.conf wurden automatisch in den Ordner "data" reinkopiert.
Die Frage ist nur welchen Pfad gebe ich in meinem Main jetz dafür an?
Einfach "data\blabla.conf" anstatt bisher "configs\blabla.conf"??
Ich will ja aber dem Endverbraucher nur noch meine .exe mit ggf dem Ordner "data" geben, er soll aber ja keine VIs an sich mehr sehen. Also ist das mit den Referenz-SubVIs nicht möglich?
in dem Fall wäre es für den Aufruf der SubVIs leichter diese direkt in das Blockdiagramm reinzuziehen und somit aufzurufen. Wie das geht sollte dir ja nicht neu sein. Zudem würde es dir wahrscheinlich auch leichter fallen, als die VIs nur per Referenz aufzurufen.
Für das Problem mit den Configs hab ich dir einfach mal ein Beispiel angehängt.
Ich hatte in etwa das selbe Problem und habe es, wie in dem VI zu sehen gelöst.
Anmerkung: Meine Config lag in einem Ordner sub/inis , welcher sich in der selben Ebene wie das Main-VI befand. In der Executable dagegen in dem data Ordner.
Das mit den SubVIs wird wohl so nicht klappen
Der Grund, warum Referenzen benutzt werden ist, dass ich dann bestimmte SubVIs mehrfach aufrufen und benutzen kann, also als sog. Clone. Sie arbeiten dann parallel aber unabhängig von einander.
Ziehe ich die SubVIs direkt rein, so ist dies meines Wissens nach nicht mehr möglich.