Discussions au sujet de NI LabVIEW

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

Condition booléenne écrite

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 Smiley clignant de l'œil

 

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 Smiley heureux Merci de votre attention

Message 1 sur 9
4 416 Visites

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  Smiley heureux

 

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.

0 Compliments
Message 2 sur 9
4 408 Visites

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 ...

0 Compliments
Message 3 sur 9
4 397 Visites

si on crée une fonction en langage C ... etc ...

en LabVIEW  ... ou en C dans une dll (en Fortran, ou en Cobol  Smiley clignant de l'œil ) .. 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  Smiley heureux

Si je n'avais rien d'autres à faire, c'est même un 'sujet' qui pourrait me plaire.

 

 

 

0 Compliments
Message 4 sur 9
4 391 Visites

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.

 

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
Tout télécharger
0 Compliments
Message 5 sur 9
4 386 Visites

😕 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 ^^

0 Compliments
Message 6 sur 9
4 367 Visites

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

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
0 Compliments
Message 7 sur 9
4 362 Visites

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 ?

0 Compliments
Message 8 sur 9
4 354 Visites

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.

Tout télécharger
0 Compliments
Message 9 sur 9
4 341 Visites