Obtention de références à des objets dans un VI cible inconnu en utilisant un script de VI
- Mise à jour2025-08-27
- Temps de lecture : 5 minute(s)
Requiert : Scripts de VI
Vous pouvez utiliser un script de VI pour inspecter ou modifier des VIs cibles dont vous ne connaissez pas le contenu avant l'exécution. Comme pour tout autre application de script de VI, vous devez obtenir des références aux objets que vous voulez manipuler dans le VI cible. Cependant, comme vous ne connaissez pas le contenu du VI cible avant l'exécution, vous ne pouvez pas utiliser la fonction Ouvrir une référence d'objet de VI pour rechercher des objets en utilisant leur étiquette. À la place, vous pouvez utiliser le VI Traversée pour objetG pour identifier les groupes d'objets qui sont membres de la même classe. Vous pouvez alors passer par itérations dans tout le tableau d'objets renvoyé pour déterminer quels objets vous voulez manipuler.
Éléments utilisés
La tâche de création du script de VI requiert les objets suivants :
Comment procéder
Avant de commencer : Ouvrez le VI Obtaining Unknown Object References.vi du répertoire labview\examples\Application Control\VI Scripting\Finding and Modifying Objects pour voir un exemple illustrant chaque étape de la procédure suivante.
-
Obtenez une référence au VI cible qui contient les objets que vous voulez inspecter ou éditer.
Détails de l'exemple
Dans l'exemple, la fonction Ouvrir une référence de VI fournit une référence au VI spécifié par la commande Chemin du VI cible. Cette implémentation permet à l'utilisateur d'appliquer le VI de script à n'importe quel VI cible en spécifiant un chemin de VI différent. De plus, le VI de script peut être converti en sous-VI si l'utilisateur veut l'appliquer à un ensemble de VIs par programmation.
- Déterminez la classe et l'emplacement des objets pour lesquels vous voulez obtenir des références.
- VI conteneur — Câblez cette référence à l'entrée Refnum de VI du VI Traversée pour objetG.
- Emplacement dans le VI — Dans le VI cible, les objets peuvent se situer sur une face-avant, sur un diagramme, dans un cluster, ou dans le diagramme d'une structure comme une boucle For ou une structure Condition. Vous devez spécifier dans lequel de ces emplacements le VI Traversée pour objetG doit effectuer la recherche en créant une constante à partir de l'entrée Cible de la traversée.
Détails de l'exemple
Dans l'exemple, le VI de script doit manipuler des terminaux de commandes, qui sont des objets du diagramme. Par conséquent, le VI de script spécifie BD comme conteneur dans lequel le VI de script doit effectuer la recherche.
Remarque Si les objets qui vous intéressent se trouvent dans un cluster ou dans un diagramme d'une structure, sélectionnez Autre dans la liste de possibilités de type énumération de l'entrée Cible de la traversée Dans les deux cas, câblez la référence du cluster ou diagramme conteneur à l'entrée Autre refnum du VI Traversée pour objetG. - Nom de classe de l'objet — Reportez-vous aux anatomies des objets de VI courants pour déterminer le nom de classe des objets que vous voulez manipuler.
Détails de l'exemple
Dans l'exemple, comme le VI de script obtient des références aux terminaux des commandes, il utilise le nom de classe des terminaux de commandes, TerminalCommande.
- Utilisez le VI Traversée pour objetG pour obtenir des références aux objets désirés en câblant les informations de l'étape 2 au VI Traversée pour objetG.
- Passez par itérations dans le tableau de références renvoyé pour manipuler des objets individuels.
Détails de l'exemple
Dans l'exemple, le VI de script utilise une boucle For pour accéder à chaque élément du tableau Références.
- Utilisez la fonction En une classe plus spécifique pour convertir la classe de chaque référence renvoyée en un classe plus spécifique. Le VI Traversée pour objetG renvoie un tableau de références à des objetG plutôt que des références qui sont membres de la classe spécifiée par l'entrée Nom de classe. Cependant, vous pouvez utiliser la fonction En une classe plus spécifique en toute sécurité pour convertir la classe des références renvoyées dans la classe spécifiée par Nom de classe. Lorsque vous convertissez la classe d'une référence en une classe plus spécifique, vous pouvez appeler des propriétés et des méthodes plus spécifiques sur la référence.
Détails de l'exemple
Dans l'exemple, le VI de script adapte la classe de chaque référence renvoyée à TerminalCommande. Cette adaptation est nécessaire car le but de rendre les étiquettes des terminaux de commandes visibles ne peut être accompli qu'en définissant la propriété TerminalCommande:Étiquette:Visible à VRAI mais que la propriété Étiquette:Visible n'est pas disponible pour les objetG. Cette adaptation ne produit pas d'erreur car le VI Traversée pour objetG a recherché spécifiquement des objets TerminalCommande.
- Câblez la référence à un nœud de propriété ou de méthode pour obtenir ou définir les informations concernant l'objet référencé.
Détails de l'exemple
Dans l'exemple, le VI de script utilise un nœud de propriété pour définir la propriété Étiquette:Visible de chaque référence TerminalCommande à VRAI, ce qui rend visible l'étiquette du terminal de commande correspondant.
- Utilisez la fonction Fermer une référence pour fermer chaque référence d'objet ouverte lorsque vous avez fini de l'utiliser.
Mises en garde et recommandations
-
Vérifiez la classe de chaque référence si nécessaire — Si vous câblez le nom d'une classe parent au VI Traversée pour objetG, vous obtenez un tableau de références qui ont la même classe parent sans être forcément membres de la même classe enfant. Par exemple, si vous utilisez le VI Traversée pour objetG pour rechercher tous les objets membres de la classe Boucle, le VI renvoie des références aussi bien pour les objets de la classe BoucleFor que pour ceux de la classe BoucleWhile. Vous pouvez utiliser une des deux approches suivantes pour vérifier la classe d'une référence :
- Utilisez la fonction En une classe plus spécifique pour essayer de convertir la classe d'une référence en un classe plus spécifique. Si la fonction ne renvoie pas d'erreur, la référence correspond à la classe spécifique.
- Comparez la propriété Nom de classe d'une référence renvoyée au nom de classe désiré.
- Fermez toutes les références que vous avez ouvertes — Un nombre excessif de références ouvertes a un impact négatif sur les performances d'un VI. Lisez les informations sur la fermeture des références aux VIs ou objets de VI pour en savoir plus sur les performances.
Autres exemples
Reportez-vous au VI Using Traverse.vi du répertoire labview\examples\Application Control\VI Scripting\Finding and Modifying Objects pour voir un exemple d'utilisation du VI Traversée pour objetG.