Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Chemin VI pour appels dynamiques

Résolu !
Accéder à la solution

Bonjour,

 

Cette question revient souvent sur le forum, mais pas moyen de parvenir à quelque chose qui marche. Je souhaiterais créer un exe à partir d'un vi qui en appelle un autre de façon dynamique. Aucun souci pour l'appele dynamique en mode développement, ni lorsque je code "Use LabVIEW 8.x file layout". Je souhaiterais pouvoir décocher cette option, afin d'avoir un fichier exe qui ne soit pas accompagné de moult sous-dossier contenant les différentes bibliothèques utilisées (ce qui est le cas avec l'option 8.x layout). Mais impossible de trouver LE chemin qui fonctionne...

Mon projet ("..." représente le début de mon chemin, pas pertinent ici)

- ..\Dossier\EXE: contient lvproj et exécutable généré

- ..\Dossier\VIs: contient mon vi source (test.vi)

- ..\Dossier\VIs\Dynamiques: contient le vi appelé dynamiquement (test dyn.vi)

 

Le vi appelé dynamiquement est bien sûr en "always included", j'ai essayé "Same as caller" et "test.exe" comme destinations, sans succès.

Les chemins essayés:

 - ...\Dossier\EXE\test.exe\VIs\Dynamiques\test dyn.vi

 - ...\Dossier\EXE\test.exe\test dyn.vi

Et des chemins relatifs:

 - ..\VIs\Dynamiques\test dyn.vi

 - ..\test dyn.vi

 - ..\test.exe\VIs\Dynamiques\test dyn.vi

 - ..\test.exe\test dyn.vi

 

J'ai à chaque fois une erreur 1445. J'utilise "Open VI reference.vi", avec le fameux chemin en entrée, puis le nœud de méthode "Run VI".

Quelqu'un saurait-il me dire ce que je ne fais pas correctement? En PJ mon code (LV2018SP1).

Merci d'avance!

Francis M
0 Compliments
Message 1 sur 7
2 837 Visites

Bonjour, 

Lors de la création de votre application, la fonction "Application Directory" renvoie le chemin suivant : ...\Dossier\EXE\test.exe
Vous devez donc ensuite utiliser la fonction "Strip Path" deux fois à la suite pour récupérer le chemin suivant:  ...\Dossier

Puis utiliser la fonction "Build Path" en spécifiant la chaine de caractères suivante 'VIs\Dynamiques\test dyna.vi' dans l'entrée 'name or relative path'. 

Vous obtiendrez alors le chemin suivant: ...\Dossier\VIs\Dynamiques\test dyna.vi 

Ce chemin peut être relié à l'entrée de la fonction "Open VI reference". 

Cordialement, 
Alexandra Falkiner Andrews
Ingénieur Support Technique, National Instrument

 

0 Compliments
Message 2 sur 7
2 739 Visites

Bonjour,

 

Merci de votre réponse. La fonction "Application Directory" ne renvoie pas "...\Dossier\EXE\test.exe" mais "...\Dossier\EXE".

Un seul strip path est donc à mettre en place. Malheureusement, malgré plusieurs tentatives et combinaisons différentes, aucun des chemins testés ne fonctionne. 

 

test.png

Dans mon exemple, le chemin "..\test.exe\Dynamiques\test dyn.vi" ne renvoie pas la même erreur (1003 au lieu de 1145). Le vi ne serait pas exécutable... pourtant il l'est!

J'attache à nouveau mon exemple, un peu retravaillé (projet + vi + vi dyn + exe). Il est très simple, juste une queue de lecture et d'écriture avec un entier.

Merci.

Pas de soucis sans EXE ni avec layout 8.x, mais sinon ça ne fonctionne pas. Le code joint démontre le problème, aucun des chemins testés ne fonctionne. Je ne cherche la façon d'obtenir le chemin (je m'en sortirai avec les strip et build path), mais bien quel est le bon format de chemin pour ce cas.

Francis M
0 Compliments
Message 3 sur 7
2 731 Visites

En effet un seul strip path est nécessaire. Travaillez vous sous Windows? Si oui, votre premier chemin devrait fonctionner. J'ai fais le test sur mon ordinateur, vous trouverez l'exemple ci-joint. 

 

Lors de la création de l’exécutable, le répertoire de destination est-il bien le suivant '...\Dossier\EXE' ? 

Pouvez-vous m'éclairer: pourquoi essayez -vous avez le chemin suivant : 

 "..\test.exe\Dynamiques\test dyn.vi"

Il n'y a pas de sens à vouloir "rentrer" dans l’exécutable. Il faut aller chercher les sous-VI là où ils sont stockés dans votre répertoire de fichiers. 

Cordialement, 
Alexandra Falkiner Andrews
Ingénieur Support Technique, National Instrument

0 Compliments
Message 4 sur 7
2 726 Visites

Bonjour,

Je travaille sur Windows 10, LabVIEW 2018 SP1 (votre projet semble être en LV19, impossible de l'ouvrir). Le premier chemin fonctionne, mais pas avec un exe compilé avec l'option layout labview 8.x décochée.

Pour répondre à vos questions:

1. oui le répertoire de destination est bien ..\Dossier\EXE; le projet joint à mon poste précédent intègre un exe configuré comme tel avec le problème décrit

2. j'ai essayé tout ce qui me passait par la tête pour tenter de résoudre mon problème.

 

Dans mon projet (le vrai), j'utilise des librairies diverses parmi lesquelles du Modbus et Generation Report, et la compilation me ressort plusieurs dossiers en plus de l'exe, contenant des sources de ces librairies lorsque l'option layout Labview 8.x est activée. En la désactivant et en intégrant spécifiquement les librairies à mon projet et à ma distribution (always included), je n'ai plus les différents sous-dossiers, mais je perd aussi la possibilité d'ouvrir des vis dynamiquement. C'est ce point en particulier que je souhaiterais résoudre.

J'a besoin de connaitre le typage d'un chemin d'appel d'un vi dynamique dans un exe sans layout labview 8.x.

 

Merci encore

Francis M
0 Compliments
Message 5 sur 7
2 695 Visites
Solution
Accepté par l'auteur du sujet Cisco

Bonjour Francis,

 

Si les VIs à lancer dynamiquement sont connu à l'avance, il est possible d'utiliser un référence de VI statique. LabVIEW se débrouille de savoir où il a mis son VI, la propriété VI Path de permet de récupérer le chemin, et d'instancier le VI en question, en ré-entrant, en Call and forget, etc.

RefStatique.png

Cette astuce ne permet pas d'adresser des VIs qui seraient "à découvrir" au lancement de l'application, il faut les connaître d'avance. Mais dans ton bout de code, ça fonctionne (première élément du tableu, le chemin qui est utilisé si je ne m'abuse) :

 

StaticRef.png

 

Cordialement,

 

Message 6 sur 7
2 679 Visites

Bonjour Mathieu,

 

Merci pour le tuyau! je n'avais pas pensé à récupérer le chemin ainsi. Cela fonctionne bien!

Pour info, j'ai mis un indicateur sur le chemin fourni, et la bonne syntaxe dans cet exemple est donc:

..\test.exe\Dynamiques\test dyn.vi OU C:\Dossier\EXE\test.exe\Dynamiques\test dyn.vi

 

Bonne journée.

Francis M
0 Compliments
Message 7 sur 7
2 675 Visites