Discussions au sujet de NI LabVIEW

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

Fonction "Référence statique de VI" et réservation...

Résolu !
Accéder à la solution

Bonjour à tous,

 

Je viens de lire l'aide Labview correspondant à la fonction "Référence de VI statique" et j'ai un peu de mal avec les concepts abordés, notamment celui de "réservation". J'ai copié-collé ci-dessous le passage qui me pose problème.

Ce que j'ai compris à peu près :

- Lorsqu'on place une fonction "Référence de VI statique" dans un diagramme, ça charge le sous-VI correspondant en mémoire, que la référence soit stricte ou non

- On ne peut pas câbler une référence stricte au noeud "Exécuter un VI"

Ce que je n'ai pas compris : le concept de réservation. Si j'ai un programme "Main" VI_0 contenant une fonction "référence de VI statique" de type strict (avec l'étoile sur l'icône) pointant sur le VI_1, alors si j'appelle VI_1 ou un de ses sous-VI (de façon normale en plaçant l'icône du sous-VI dans le diagramme correspondant) au sein de VI_0 ou au sein d'un autre sous-vi VI_2, ça va planter ?

 

Merci d'avance pour vos lumières...

____________________________________________________

 

Utilisez une référence de VI de type strict si vous voulez appeler le VI référencé avec le nœud Appeler par référence ou le nœud Démarrer un appel asynchrone. Lorsque vous créez une référence de VI de type strict, vous ne pouvez pas câbler référence au VI à la méthode Exécuter le VI. Vous ne pouvez pas utiliser la méthode Exécuter le VI pour exécuter un VI qui est déjà réservé pour être exécuté par un autre VI. Une référence de VI statique de type strict réserve aussi tous les sous-VIs lorsqu'un VI de niveau principal est réservé, ce qui le rend inéligible pour la méthode Exécuter le VI. Reportez-vous à la méthode Exécuter le VI pour obtenir de plus amples informations.

LabVIEW charge le VI référencé en mémoire lorsque vous chargez le VI de niveau principal. Lorsque la fonction Référence de VI statique renvoie une référence de VI de type strict, LabVIEW réserve le VI référencé tant que le VI de niveau principal s'exécute. LabVIEW ferme cette référence lorsque le VI de niveau principal n'est plus en mémoire. Il n'est pas nécessaire de fermer explicitement la référence renvoyée par cette fonction.

0 Compliments
Message 1 sur 14
6 610 Visites

Bonjour JL,

 

Non cela ne plantera pas. D'après mes essais, tu peux tout à fait utiliser un VI en parallèle de la fonction "Appeler par référence". En utilisant cette fonction tu empêche seulement d'éxécuter le VI cible ou tous ses sous-VIs par la méthode "Exécuter le VI".

 

Je te joins une exemple de code qui devrait être parlant.

Maxime L
Certified LabVIEW Architect
National Instruments
Message 2 sur 14
6 559 Visites

Du coup je ne trouve pas les explications de l'aide très claires. Que veulent-ils dire ?

et qu'est-ce que "réserver" un VI ?

Ecrire un programme qui ne plante pas c'est une chose, mais j'aimerais bien comprendre le concept qui est derrière 

0 Compliments
Message 3 sur 14
6 548 Visites
Solution
Accepté par l'auteur du sujet JL7

Hello,

 

La question porte juste sur le principe de réservation ?

Je ne sais pas bien quel niveau d'explication il faut ici, alors je vais la jouer "simple" pour commencer 🙂

Une référence statique permet d'avoir accès à la référence d'un VI bien connu et identifié (celui qui est associé à la référence - on l'a choisi). Ca a pour conséquence de créer un lien entre le VI appelant et le VI pointé par la référence statique, sauf que dans ce cas (contrairement à un sous-VI normal), on ne fait que "réserver" le VI pour son exécution future. En somme, on sait qu'on va vouloir l'exécuter à un moment, mais ça sera décidé par l'utilisateur (alors qu'un sous-VI est chargé en mémoire avec son appelant) grâce aux noeuds mentionnés plus haut dans ton premier post.

 

En gros, c'est comme sur Amazon. On peut réserver un objet en l'achetant en ligne - il n'est alors normalement plus dispo pour les autres, mais cet objet n'est pas utilisé/appartient à son propriétaire jusqu'à ce qu'il l'ait entre les mains.

 

Cdt,

Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.

Message 4 sur 14
6 483 Visites

Bonjour,

Ok pour la notion de réservation, si je comprends bien cela créé un lien entre le VI appelant et le VI référencé. 

Par contre qu'est ce qu'on apporte de plus en cochant type strict? 

Merci d'avance

JG

0 Compliments
Message 5 sur 14
6 462 Visites

Bonjour,

 

Ok, Reference statique réserve le VI. 

Mais le fait de cocher "type strict" qu'est ce que cela apporte? Pourquoi ne peut on pas l'utiliser avec "Executer un VI" ? 

Dans quel cas met on type strict et dans quel cas on ne le met pas?

Merci d'avance

0 Compliments
Message 6 sur 14
5 534 Visites

sujet un rien pointu, je risque ... Smiley tirant la langue

Concernant la spécificité d'une Ref stricte, une Ref stricte transmet en plus le "connector pane" du VI et les types de données associées. Une Ref stricte s'utilise exclusivement avec les noeuds "Call By Reference" et "Start Asynchronous Call". Quant au noeud "Run VI" il ne peut effectivement pas recevoir une Ref stricte. Je pense que cela vient du fait que "Run VI" ne peut pas lancer un VI qui a déjà été réservé ... et je pense qu'une Ref stricte "réserve". (pas certain du terme)

 

Je laisse à Eric, Mentor dans le domaine (et bien d'autres Smiley heureux ) de clarifier les choses.

0 Compliments
Message 7 sur 14
5 514 Visites

À quoi ça sert que je forme les gens s'ils ont encore besoin de moi après ? ^^

 

ouadji a donné l'essentiel de la réponse, une référence de type stricte est un "typedef de référence" (sans avoir besoin de .ctl). Or le type d'une référence de VI est son connecteur.

Quant à l'utilisation de RunVI, et bien c'est une conséquence directe. Pour charger un VI strict en mémoire il faut charger son type, qui fait partie de son espace de données propre. Charger l'espace de données d'un VI le réserve et RunVI ne fonctionne pas sur des VI déjà réservés !

 

Utilisation agréable d'une référence de VI stricte : si je change le connecteur du VI derrière la réf statique, ce diagramme ne se brise pas.

StrictVI.PNG

 

--Eric

Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.

Message 8 sur 14
5 497 Visites

Merci !

0 Compliments
Message 9 sur 14
5 483 Visites

@Eric.M : "À quoi ça sert que je forme les gens s'ils ont encore besoin de moi après ?"

 

désolé pour le "retard". (petit soucis perso)

On aura toujours besoin de toi Eric ... au delà de tes connaissances encyclopédiques de LV, tu as en plus une particularité qui n'a pas de prix (oui, ta gentillesse, mais il y en a une autre) ... tu as une connaissance intrinsèque de LV. Tu connais le "comment" des choses (accessible à tous), mais aussi le "pourquoi" (l'auditoire est déjà beaucoup plus restreint) ... mais "la fleur", tu connais aussi le "parce que" (le trèfle à 4 feuilles). Donc, nous espérons bien que tu continueras encore longtemps à "former", même si tu as parfois le sentiments que la parole biblique a été assimilée. Cette bible est tellement vaste qu'il n'est pas possible d'imaginer qu'il puisse exister une fin à son enseignement. Tu écris par exemple ceci : "Charger l'espace de données d'un VI le réserve" ... je n'en doute pas une seule seconde, c'est tellement simple que cela en devient beau ... on dit beaucoup de choses dans la doc LV, mais pour trouver cette phrase de façon explicite, il faut chercher  Smiley heureux  Aussi ... trouver une doc qui dit "explicitement" que l'info connector-pane et donc son type, est mémorisé dans l'espace de données du VI ... il faut chercher aussi. Oui, par déduction, on se dit que "ça doit être là" (où d'autres ? ... quoi que moi, je veux bien imaginer 36 autres scénarios, juste une question de choix de développement) . La doc de LV est immense, il n'est pas toujours facile de "tout mémoriser" et parfois d'extrapoler pour en déduire les infos cléfs. (je préfère avec un "f" ... vieille école)

0 Compliments
Message 10 sur 14
5 457 Visites