le 05-26-2016 06:50 AM
Bonjour à tous !
Dans le cadre d'un projet, mon programme contient un nombre important de constantes (utilisée pour afficher des warnings de valeur seuil sur des données d'acquisition) répartit dans plusieurs sous-VI de droite et de gauche.
Ces constantes sont sujet à modification (rare mais possible), et donc, pour faciliter la "maintenance" je me suis dit que ce serait bien de toutes les regroupés.
L'idéal aurait été de faire un peu comme pour une machine à état, à savoir une "Type Def constante Enum", mais au lieu que Data0 soit à 0, Data1 à 1 ... Data0 soit à 458 et Data1 à 173,224 ! Mais je ne sais pas si c'est possible ! Une idée ?
Comme ça, l'utilisateur, en modifiant uniquement la commande, pourrait moifier les valeurs partout ! et d'un point de vue propreté du code, ce serait mieux je pense !
Si cela ne marche pas, j'ai peut-etre d'autres idées :
- Un cluster de constantes, mais je n'arrive pas à donner un nom à la constante, pour que, lors du désassemblage, je sache qui correspond à quoi ! (et non pas afficher juste l'étiquettes).
- Un tableau, mais bon ... l'indice ...
- lecture d'un fichier texte, mais j'ai peur que ce soit complexe. Surtout si je veux que ce soit facile à entrer pour l'utilisateur ! Après, d'un point de vue maintenance, c'est peut etre le plus facile, mais je ne sais pas si je peux lire par exemple, que la deuxième colonne ...
Cela est plus d'un point de vue maintenance, à savoir que ces constantes changeront peut etre 2-3 fois par an, donc je ne veux pas faire un VI pour l'utilisateur !
Si vous avez des idées ou une solution à me proposer, je suis preneur ! Je n'ai pas encore trouvé mon bonheur !
Merci beaucoup
Erwan
Résolu ! Accéder à la solution.
le 05-26-2016 06:59 AM
J'ai cherché toute la journée en vain, puis la, d'un coup, 5min après avoir posté je trouve la solution !
--> Rings !
Désolé pour le post ! Il peut etre supprimé !
le 05-26-2016 07:09 AM
Bonjour,
Il serait intéressant que tu fournisses ta réponse. Il existe plusieurs méthodes pour réaliser cela.
Pour ma part, je privilégie généralement le fichier de configuration au format INI qui permet grace au section et au clé d'avoir un fichier compréhensible et modifiable hors labview.
Je profite de ce poste aussi pour signaler qu'il faut faire attention lors de l'utilisation d'une définition de type.
Cette définition ne porte que sur la "structure de la commande", i.e. c'est un tableau, une chaine, un cluster.... , en aucun cas cela propage sa valeur par défaut.
NI préconise d'ailleurs lors d'utilisation de cluster en définition de type de mettre les valeurs par défaut grace à la fonction assembler par nom, et pas en utilisant une constante, car en cas de mise à jour de la définition de type, il faut retoucher toutes les valeurs par défaut, même s'il s'agissait juste de rajouter un élément dans le cluster, ce qui n'impacte pas le noeud assemblé par nom.
Cdt,
Michael
le 05-26-2016 07:19 AM
Salut Michael.C
Alors, ce que j'ai trouvé, c'est que si l'on veut créer une constante Enum, mais ne pas avoir de valeurs séquentielles (0,1,2,3 ...), on peut utiliser un(e) "rings" ! Cela permet en décochant la case de valeur séquentielle de définir sois-meme ses valeurs !
En revanche, le fichier de configuration INI est encore plus sur ! C'est plus dans ce que je cherchais à la base ! Et c'est plus comme ceci que je pense faire en fin de compte, surtout vis à vis de tes avertissements sur les Type Def !
Je vous tiens au courant de la suite !
05-26-2016 08:11 AM - modifié 05-26-2016 08:30 AM
J'ai pu faire une première approches des fichier INI ! En effet, c'est un peu comme si je lisais un fichier texte bien ecrit !
Donc cela semble etre une bonne solution dans mon cas, en revanche, quand je récupère la valeur d'une clef, si je veux la mettre dans un cluster, je ne peux pas l'assembler par nom .... (je suis novice avec les clusters), je trouve qu'il faut un peu magouiller le sytème pour y arriver, c'est moins "pratique", surtout si par la suite on veut ajouter une constante !
L'objectif serait de desassembler le cluster et de cabler la bonne constante devant chaque VI necessitant une constante ! Mais j'aimerais que le nom s'affiche quand je creer le" cable de connexion Cluster-VI"
Ou alors, mais je ne sais pas si c'est le mieux, cela me semble plus lourd : à chaque fois que j'ai besoin d'un constante je lis mon fichier de configuration ! Vous pensez que c'est le mieux ?
(je pense que niveau clareté on a connu mieux )
Merci !
le 05-26-2016 08:34 AM
Tu pourrais fournir un bout de code en exemple, car je n'arrive pas à comprendre clairement ton explication 😄
05-26-2016 11:33 AM - modifié 05-26-2016 11:42 AM
tu peux éventuellement lire une constante dans un sous vi
....
pas clair
tu créer un sous vi ds lequel tu mets une cte de ta def de type
chaque fois que tu appelles le sous vi tu accèdes à ta constante
le 05-27-2016 01:29 PM
Bonsoir à tous !
Ouais c'était pas très clair, je le confirme mais dans cette explication pas clair, j'ai creusé le truc, et j'ai trouvé la solution en faisant comme ci-dessous :
- je creer un cluster ou je met tout mes indicateur avec des noms
- je creer une constantes "cluster"
-je creer un "assembleur par nom"
-je déconnecte la constante du cluster et je la lie a l'assembleur par nom
-je relie mes constantes avec l'assembleur !
Rien de fou, mais c'était pas du tout évident pour moi !
Au final, je n'ai plus qu'a invoquer mon sous-vi et désassembler par nom quand j'ai besoin d'une constante !
Et je n'ai qu'a changer les constantes dans le fichier INI très simplement !
(après, l'ajout d'une constante necessite un tout petit peu de boulot)
le 05-30-2016 02:46 AM
Tout à fait.
Et si tu ne veux pas multiplier les accès ton fichier, tu peux transformer ton VI en vgf avec deux cases "init" et "get".
Si tu fournis ton code, je te montre comment faire en 2 minutes.
Cdt,
Michael
le 05-30-2016 06:00 AM
Ah oui en effet je veux bien voir comment on peut faire !
Merci