le 04-26-2016 04:28 AM
Bonjour,
J'ai pas mal cherché pour cette question et je n'ai malheureusement rien trouvé donc j'éspère que vous pourrez m'aider car je commence un petit peu à désespérer ^^
Au fait l'idée est la suivante : pouvoir effectuer rapidement une opération booléenne à partir d'un tableau d'entrées et ressortir cette condition par exemple sur une LED en l'écrivant sur une commande chaîne et non en câblant tout les fils pour des conditions qui peuvent des fois être monstrueuses et prendre facile un écran entier ...
Exemple :
J'ai un tableau de 4 entrées d'indices 0, 1, 2, 3 et je tape par exemple la commande 0.(1x2+-3) x désignant OU EXCLUSIF, le signe - désignant le NON et le . désignant le ET donc ici 0 ET( 1XOR2 ou NON 3 )
Donc l'idée est la suivante ; en tapant la ligne de commande, que l'opération associée se fasse, l'ennui, c'est que de multiples possibilités et/ou problèmes peuvent apparaître et j'éspèrais que vous pourriez peut-être m'aider ou m'indiquer la route à prendre 😕
J'ai joint mes essais en zip ; dans le VI EcritureCondition (mon premier essai), j'ai essayé quelque chose avant de me rendre compte que ça ne fonctionnait que dans certains cas et pas d'autres ; le VI EstUnNombre est un simple sous-VI pour alléger un petit peu le diagramme de EssaiTraitement où j'ai déjà essayé de "ranger" le tableau pour qu'il détecte les indices au milieu des points. Le tableau que j'en retire est fonctionnel mais je ne vois pas trop par où commencer hélas 😕
J'éspère que vous pourrez éclairer ma lanterne Merci de votre attention
le 04-26-2016 05:42 AM
J'ai mis un compliment, désolé mais je me suis trompé ... je voulais simplement répondre.
Le compliement sera peut-être "mérité" un peu plus tard
bon ... C'est un " interpréteur " que tu veux faire là !
Définir une syntaxe sans aucune ambiguïté (mini langage), scanner la chaine et exécuter les opérations.
Ce n'est pas un problème simple à résoudre ! Le problème des imbrications se posent immédiatement.
Problème intéressant mais complexe (plus qu'il ne peut y paraître à première vue)
Comme architecture globale, je vois bien une machine à état (probablement avec Queue)
Pour la suite ... pas assez de temps pour m'attaquer à ce type de "bête".
Pour arriver à un résultat fiable, abouti, au point ... c'est un Projet à part entière.
le 04-26-2016 07:28 AM
D'accord donc l'idée n'est pas bête mais pas si simple que ça donc.
Et une autre idée peut-être mais si on crée une fonction en langage C à partir de cette commande chaîne, si on l'enregistre dans ce format et si l'on fait ensuite l'appel d'une DLL ; penses-tu que ça pourrait le faire ?
Ca fait beaucoup de "si" et mes connaissances en "c" sont fort limitées mais je pense que je n'ai pas été le seul à avoir ce genre de problème auparavant mais je peine ne serait-ce à trouver de la documentation sur le sujet ...
le 04-26-2016 08:27 AM
si on crée une fonction en langage C ... etc ...
en LabVIEW ... ou en C dans une dll (en Fortran, ou en Cobol ) .. ou comme tu veux ..(note que l'on peut faire une dll avec LV)
cela revient au même, il faut programmer "la chose" ... le langage, ce n'est qu'un outil pour arriver au même résultat ... un code compilé (en langage machine)
je peine ne serait-ce à trouver de la documentation sur le sujet
humm ... je pense que tu vas devoir la créer toi même .... et jouer à Indiana Jones sur le sujet.
D'accord donc l'idée n'est pas bête
non, pas du tout ... même intéressante ... ce n'est pas un truc que l'on peut implémenter avec 3 portes et 2 shift registres
Si je n'avais rien d'autres à faire, c'est même un 'sujet' qui pourrait me plaire.
le 04-26-2016 09:10 AM
Salut,
Regarde chez un petit VI, qui initie déjà ta problématique, sans tenir compte, de l'imbricaiton par contre.
Cela peut te donner un point de départ.
le 04-27-2016 06:08 AM
😕 L'ennui c'est que l'on aurait besoin de ça pour programmer un automate car on a pas mal d'E/S
Et en utilisant le tableau que je sors afin de créer éventuellement un fichier C pour ensuite appeller une fonction d'une dll, cela marcherait ?
Je m'explique :
1) J'ai la chaine de condition : 0 ET( 1XOR2 ou NON 3 )
2) Je récupère éléments après éléments grâce à ma première ébauche et je traite la chaine dans Labview pour la changer en : tab[0] & (( tab[1] ^tab[2] ) | ! tab[3] ) telle qu'on l'écrirait en C
3) J'enregistre ensuite la chaîne comme un fichier C
4) J'éxécute le fichier C
Faisable à votre avis ou complexe ? L'idée, c'est vraiment que la condition de switch puisse être changée depuis la face-avant plutôt que par le diagramme.
J'éspère que vous pourrez m'aider ^^
le 04-27-2016 06:29 AM
Gérer de l'encapsulation de données , et toujours faisable, après gérer tous les cas de figure, oui c'est complexe.
Voilà un petit lien qui te montre un peu une façon d'approcher cette notion, avec un exemple arithmétique.
https://en.wikipedia.org/wiki/Reverse_Polish_notation
le 04-27-2016 06:55 AM
Ah ca c'est une mine d'or et ça me permet d'y voir vraiment nettement plus clair, je te remercie grandement pour tout ça et je vais essayer du coup d'implémenter cet algorithme en Labview ; retranscrire la chaîne en "Reverse Notation" ne devrait pas être un problème ; c'est l'algorithme je pense le problème.
Quelle structure utiliserait-tu pour implémenter cet algorithme ? Machine d'états ?
le 04-27-2016 02:37 PM
J'ai essayé d'implémenter l'algorithme RPN (Reverse Polish Notation) avec des booléens et non des nombres sur Labview. Le VI est en pièce jointe avec le sous-VI nécessaire.
J'ai essayé sur deux trois expressions dans deux trois cas, ca fonctionnait bien.
J'ai donc voulu tester tous les cas automatiquement avec une autre expression en simulant mes "Inputs" directement par un octet, j'ai donc imbriqué le tout dans une for qui comptait pour toutes mes valeurs possibles. Seulement voilà, il y a des cas où ça ne fonctionne pas et après avoir pataugé la soirée dessus, je vous avoue que je ne suis pas plus avancé ni n'aie trouvé mon erreur, peut être dans l'utilisation de mon registre à décalage, je ne sais pas ...
Convention d'écriture pour la commande chaîne : x pour XOR / + pour OR / . pour AND
L'algorithme est expliqué ici dans "Description de l'algorithme de conversion" : https://fr.wikipedia.org/wiki/Notation_polonaise_inverse
En éspèrant que vous pourrez m'aider, je vous remercie pour l'aide apportée qui a déjà permis de pas mal avancer sur le projet.