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.

Discussions au sujet de NI LabVIEW

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

Programmation : comment créer un cluster dynamiquement ?

Hello world,

 

J'espère que tout le monde va bien.

J'ai une question programmation LabVIEW : est-il possible de créer un cluster dynamiquement à partir de 2 arrays de même taille (un contenant des booléens et un autre contenant les captions de ces booléens) ?

Comme une image vaut 1000 mots, voici un schéma de ce que je souhaite coder.

Bilsix_0-1594212945031.png

 

Je sèche un peu, ça me semble déjà à la limite du jouable avec un cluster à taille fixe (en utilisant les références fixes de chacun des éléments du cluster), mais je ne vois pas trop par quel bout prendre le problème si on ajoute que les tailles des arrays sont variables (bien qu'ils aient la même taille, les 2 arrays peuvent être de taille 2 comme de taille 25).

 

J'ai envie de croire que c'est faisable, allez, tout est faisable en LabVIEW !

 

Bonne journée,

 

 

Bilsix
0 Compliments
Message 1 sur 8
2 683 Visites

Bonjour,

 

Hors exécution en Run-Time, c'est à dire, tant que l'on se trouve dans l'environnement de développement LabVIEW, le scripting est une piste à creuser. Il faut l'activer dans les options de LabVIEW (Tools » Options, section VI Server, rubrique VI Scripting).

 

Si cela doit être dynamique dans un exécutable, c'est nettement moins évident. C'est une des limites de LabVIEW, l'outil n'est pas franchement taillé pour gérer la création dynamique d'objet graphiques. Il faut user d'artifices pour obtenir ce genre de comportement. Un tableau de cluster contenant un booléen pour la commande et un contrôle chaîne pour le caption, avec un redimensionnement programmatique des éléments visible pourrait faire l'affaire. Mais ce n'est pas super marrant... Et il y a peut être plus élégant (c'est une idée en passant).

 

Bonne recherches,

Message 2 sur 8
2 675 Visites

Salut Mathieu,

 

Merci pour ta réponse rapide !

Sincèrement, je souhaitais éviter LV Scripting, car ça devient vite une usine à gaz à maintenir, y compris pour les initiés LV. Je n'imagine donc même pas pour ceux qui ne connaissent pas encore le langage. J'ai pu voir qu'on peut plus ou moins créer les clusters qu'on veut (Move Into Control.vi), mais ce n'est pas de tout repos si on veut multiplier la manip n fois, notamment pour la gestion graphique.

 

Je ne savais même pas que le scripting pouvait poser problème pour un exe, je pensais qu'il suffisait de ne pas cocher "Remove Block Diagram" dans l'Application Builder pour que tout se passe bien !

Dans mon cas il s'agit de VIs utilisés par TestStand en dernière instance, donc je ne sais pas trop non plus comment il risque de gérer le scripting.

 

Concernant la solution du tableau de cluster, j'y ai pensé (je l'ai même implémenté à un autre endroit du code), mais le souci de cette solution, c'est qu'il est impossible de "Disable & gray out" un seul élément de la liste ! C'est pourquoi je voulais passer par un cluster...

 

Hmm, c'est dommage. Le plus simple pour moi sera de passer par un tableau de cluster et de parlementer avec les chefs de projet pour les convaincre que "mais si, c'est une bonne opportunité de laisser toutes les checkbox en Enable" 🙂

Bilsix
0 Compliments
Message 3 sur 8
2 662 Visites

Bonjour Bilsix,

 

J'en était venu à la même conclusion que Mathieu, utiliser un tableau de cluster comme plan B (ce n'est pas possible avec LabVIEW de changer/modifier dynamiquement un cluster).

 

Voici un essai rapide pour customiser un tableau de cluster pour le faire ressembler à un cluster.

 

Ben64

Tout télécharger
0 Compliments
Message 4 sur 8
2 661 Visites

Au final, quel est le besoin ? Pourquoi avoir besoin, depuis TestStand, de piloter une liste dynamique d'options à cocher ? Est-ce qu'une approche avec un Tree ou un MulticolumnListbox, en gérant l'affichage des boîtes à cocher (propriété Symbols, images associées à un élément) et leur activation/désactivation ne pourrait pas être une solution ?

 

Pour illustrer le propos, avec un MulticolumnListbox, codé à l'arrache en 10 minutes (mode Proof of Concept) :

 

MCListbox.png

 

Tout télécharger
Message 5 sur 8
2 654 Visites

Je pense que la proposition de Mathieu va dans la bonne direction.

 

Précision pratique :  les cases à cocher font partie des symboles standards, pas besoin d'importer des images!

 

Walker34_0-1594279310762.png

 

Walker34_1-1594279342488.png

 

Walker34_2-1594279353367.png

 

 

Message 6 sur 8
2 602 Visites

Bien vu pour les symboles par défaut ! Je n'avais pas pris le temps de les parcourir, et la dernière fois que j'avais eu besoin de ce genre de manip, les symboles par défaut ne répondait pas au besoin.

0 Compliments
Message 7 sur 8
2 599 Visites

Ça semble effectivement la bonne direction à prendre. Petite question, pour quelle raison tiens-tu à désactiver et griser certaines lignes (c'est possible avec un listbox mais un peu casse-tête à gérer)?

 

Ce que je fais habituellement c'est de créer des séquences de test dans un fichier XML et sélectionner la séquence voulue pour le type d'unité / étape de test. On peu alors cocher/décocher pour effectuer un sous-ensemble de test. La création d'un menu clic-droit select all/unselect all est un ajout précieux si la liste est longue!

 

Voici un exemple de UI, j'utilise également le MCL pour indiquer le status (évidemment comme rien n'est connecté tout est en erreur, je n'ai pas changé les paramètres pour utiliser le mode simulation).

 

MCL Test Selection.png

 

Ben64

0 Compliments
Message 8 sur 8
2 578 Visites