le 02-05-2012 04:21 PM
Bonjour à tous,
2 façons de réaliser une même fonction.
la fonction:
commander un afficheur 7 segments.
input: a) un nombre de 0 à 15
b) la commande indépendante du "point" (de l'afficheur)
output: un afficheur 7 segments + point (cluster de 7+1 booléens)
méthode A
via une structure case ... à chaque fois 7 booléens.
J'ajoute le point, je forme un cluster et j'affiche.
Cette méthode avec la structure case fonctionne tip top.
Mais moi, en assembleur, je n'aurais pas utilisé ce type d'approche.
J'aurais utilisé un tableau .. plus de "data" mais un code plus simple.
donc j'ai essayé avec un tableau.
méthode B
via un array de cluster ... chaque cluster contient 7 booléens
J'indexe, je décompresse pour pouvoir ajouter le point,
je reforme un cluster de 8, et j'affiche.
Quelle méthode est la meilleure ... au sens de Labview ?
Je débute avec Labview, vos "avis d'anciens" m'intéressent
Merci à tous.
le 02-06-2012 03:18 AM
Bonjour Ouadji,
Un moyen simple à mettre en oeuvre pourrait être la mesure du temps d'execution de votre programme.
Vous pourriez par exemple utiliser les VIs de la palette "infos temporelles" rangée dans la rubrique programmation.
En soustrayant l'heure de fin avec l'heure de début, vous aurez par exemple le temps écoulé durant l'execution de votre programme.
En éspérant que ceci pourra vous aider,
Cordialement,
Vincent.O
National Instruments France
Été de LabVIEW 2014
12 présentations en ligne, du 30 juin au 18 juillet
02-06-2012 04:23 AM - modifié 02-06-2012 04:24 AM
Chose faite ... les résultats sont étonnants.
1.000.000 d'itérations
3 afficheurs 7 segments.
mesure du "Tick count" avant et après, et différence.
avec le code basé sur une structure Case : une moyenne de 5825
avec le code basé sur un tableau (array de clusters) : moyenne 689
Le code basé sur le tableau de clusters est en moyenne 8,5 fois plus rapide.
(ce qui est logique, mais je ne m'attendais pas à une telle différence ... quoique)
merci NIF_Vincent.O pour cette suggestion (lumineuse)
le 02-06-2012 05:06 AM
Erreur magistrale de mesure.
Cette fois j'ai appris plus sur les mesures de temps que sur mon afficheur 7 segments.
origine de l'erreur : j'ai laissé un sous-VI ouvert, un des sous-VI utilisé dans le code dont je mesure le temps.
Cela fausse totalement la mesure (bien entendu)
résultats corrigés : pas de différences significatives
entre 688 et 694 pour les 2 méthodes (mêmes conditions)
désolé pour l'erreur, je ne l'oublierai pas de si tôt.
le 02-06-2012 05:12 AM
Ouadji,
Il est vrai que la différence mesurée parraissait énorme.
Au vu du code présenté, il semble normal que les temps d'executions soient similaires (pas de longue boucle ou de VI très lourds).
Vous pouvez éventuellement différencer ces deux méthode sur la consommation en ressources CPU et RAM (par exemple via le gestionnaire de taches de Windows).
Cordialement,
Vincent.O
National Instruments France
Été de LabVIEW 2014
12 présentations en ligne, du 30 juin au 18 juillet
le 02-06-2012 06:18 AM
Bonjour ouadji,
Au delà de l'aspect performances, je pense que dans ce genre de problématique il peut être bénéfique considérer les trois principes d'une bonne programmation: la lisibilité, l'évolutivité et la maintenance. Dans les deux solutions présentées, je te préconiserais la seconde avec le tableau de cluster (que j'aurais défini en définition de type). L'interêt est que si un jour tu souhaites modifier l'affichage, une simple modification de ton tableau de cluster (de la d"éfinition de type) se répercutera sur toutes les instances de ton application. On pourrait imaginer d'afficher des lettres et non des chiffres ou juste la lettre "E" en cas d'erreur. Bref cela pourra t'épargner du travail et du temps si une modification est à apporter. Dans le cas de la solution B, la seule chose à gérer sera donc l'indice du caractère que tu souhaites afficher.
Cordialement,
02-06-2012 10:22 AM - modifié 02-06-2012 10:23 AM
Merci Jérémy pour votre intervention.
J'ai placé l'afficheur 7 segments dans un fichiers ".ctl" et en type def, (custom indicator)
mais je ne savais pas que l'on pouvait également définir "du code" en définition de type.
J'ai simplement placé le code (Case ou Tableau) en sous-VI.
Etant donné qu'un afficheur est indissociable de son convertisseur,
J'aimerais placer l'ensemble "convertisseur + afficheur" dans un Xcontrol.
Je nomme "convertisseur" le code de la structure Case ou le code avec tableau.
J'aurais alors un Xcontrol avec 2 entrées, un nombre et un booléen.
Mais là ... je découvre les Xcontrol, et ce n'est pas simple.
Juste la lettre "E"... oui, en effet,
Dans les deux cas, structure case ou tableau, mon code permet d'afficher aussi les lettres
A,b,C,d,E,F (hexa) ... du mieux que l'on puisse faire avec 7 segments.
A propos "du code" avec définition de type, auriez-vous un lien de départ qui me permettrait d'appronfondir ensuite.
A l'avance je vous en remercie.
le 02-09-2012 02:06 AM
Bonjour,
Un petit commentaire sur les clusters:
tu utilises un cluster de 7 éléments que tu désassemble puis réassemble en 8 éléments
Une meilleure méthode est d'utiliser le même cluster type def en entrée et en sortie. Dans tes différents états (1,2,3..) tu laisse toujours le point à faux par exemple, puis une fois ton cluster sélectionné tu utilises Bundle by name pour remplacer une valeur.
Si ce n'est pas très clair je te ferais un exemple
le 02-09-2012 03:28 AM
Merci SimonD.
C'est limpide, je vois bien la manip.
Pour un supplément minime de données, on gagne du code.
En en prime, un diagramme plus compact. (d'autres avantages ? perso je ne vois pas)
Ok, encore merci, je vais tester ça.
le 02-09-2012 05:24 AM