From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

priorité d'execution de Vi

J'ai un Vi Menu qui appelle un autre Vi Acquisition, qui fait des acquisitions de données sur un multimetre HP par liaison RS232. L'orsque les acquisitions sont terminées, le Vi Acquisition se ferme et je reviens donc au Vi Menu pour faire un autre choix ou une nouvelle application.

En gros dans mon Vi Menu:
C'est une boucle While qui comporte 2 boutons : Exit ou Lancer acquisition
- Si on clique sur exit on quitte le programme
- Si on clique sur Lancer acquisition: le Vi Acquisition se lance (dans les proriété du Vi Acquisition j'ai mis faire apparaitre la face avant lors de l'appel et fermer après execution)

Le Vi Acquisition c'est aussi une boucle while dans laquelle je communique avec le multimetre avec Visa.read et Visa.write



Le probleme c'est que les deux Vi s'executent donc en meme temps et je ne sais pas trop comment sont gérés les 2 executions de VI simultané.
Ce qui serai bien c'est que le Vi Menu soit momentanement arrété pendant que le Vi Acquisition tourne et qu'il reprenne lorsque le Vi Acquisition a terminé. Je ne sais pas comment faire. faut il mettre priorité haute pour le Vi Acquisition et minimum pour le Vi Menu?

Ci joint les 2 Vi (épurés pour la comprehension)
0 Kudos
Message 1 of 3
(2,890 Views)
Je n'arrive pas a ouvrir le fichier puisque j'utilise L7.0
Pour modifier les priorité tu peux aller dans VI properties en cliquant en haut a droite de la fenêtre du VI ouvert et tu vas dans "execution".
je ne peux pas t'aider plus 😉
 
Manu
labview 7.0
0 Kudos
Message 2 of 3
(2,885 Views)
Bonjour,
 
LabVIEW exécute ses diagrammes suivant le principe du flux de données. Ceci signifie qu'un noeud du diagramme (fonction, structure, sousVI) ne fournit ses sorties que lorsque toutes les entrées du noeud sont fournies et que si le code relatif au noeud a finit de s'exécuter. Lorsque un sous-VI est appelé par un VI principal, le flux de données "rentre" au niveau du sous-VI. Seul le sousVI est exécuté, le VI appelant est en sommeil jusqu'à ce que le noeud (le VI appelé) ait finit son exécution. Le flux de données reprend au niveau du VI appelant une fois le noeud exécuté.
 
En checkant ton VI, il n'y a pas de code qui s'exécute en parallèle avec le sous-VI (la boucle While est bloquée tant que le sous-VI n'a pas finit son exécution). Si il y avait une seconde boucle While en parallèle avec la première, LabVIEW exécuterait les 2 boucles dans 2 threads différents et partagerait le temps processeur entre les 2 boucles afin de switcher d'un thread à un autre et de donner une apparence d'exécution en parallèle.
 
Dans ton VI, ce n'est pas le cas, une fois le sous-VI appelé, le VI principal est bloqué et ne fait plus rien tant que le sous-VI n'a pas terminé son exécution. Le sous-VI est appelé de manière synchrone. On peut dans LabVIEW appeler un sous-VI sans bloquer le VI appelant avec la technologie VI Server (appel asynchrone)...mais ceci est un autre sujet.
 
Cordialement.
 
Matthieu G.
National Instruments

Message Edité par Kerouac le 07-07-2005 10:49 AM

0 Kudos
Message 3 of 3
(2,875 Views)