LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris...

12
Exo - my fifth VI LabVIEW ME 2 e semestre r13.1 Christophe Salzmann Photo Martin Klimas

Transcript of LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris...

Page 1: LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris Created Date 4/14/2013 7:55:01 PM ...

Exo - my fifth VI

LabVIEW

ME 2e semestre r13.1

Christophe Salzmann���

Phot

o M

artin

Klim

as

Page 2: LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris Created Date 4/14/2013 7:55:01 PM ...

My fifth VI

But: Interaction avec l'interface utilisateur, i.e. le front panel Gestion des clics sur la grille du TicTacToe

Etapes:

–  Solution avec 2 boucles imbriquées –  Utilisation d'une boucle de gestion d'événements

2

Page 3: LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris Created Date 4/14/2013 7:55:01 PM ...

Deux boucles imbriquées

Dessinez le programme suivant et testez-le.

Qu'observez-vous?

-  Quand Indicator G. est-il mis à jour?

-  Quand ligne G. et colonne G. sont-ils mis à jour?

-  Comment faire pour que STOP arrête le VI en tout temps?

-  Quelle est la séquence d'opérations pour stopper complètement le VI?

-  Quelle est la charge de votre processeur ? Pourquoi?Comment faire pour la diminuer ?

VI started Essayez de répondre à ces questions avant de passer aux slides suivants avec les réponses.

Page 4: LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris Created Date 4/14/2013 7:55:01 PM ...

Deux boucles imbriquées

VI started

Le VI ci-dessus ne compile pas (flèche brisée) car il y a encore un problème avec la manière dont le bouton STOP est lu. Par défaut il est en "latch when released" mode. Ce qui veut dire que le bouton remonte (état de True à False) automatiquement quand il est lu dans le diagram.

L'ajout d'une variable locale1 du bouton STOP, fait qu'il y a 2 endroits possible dans le diagram où peut être lu le bouton STOP. Le premier endroit qui le lit remet le bouton à ca valeur par défaut. Pour éviter cela, sélectionnez le mode "switch when

pressed" dans le front panel.

1 Une variable locale permet de lire ou d'écrire dans un control ou un indicator du front panel. Nous verrons les variables locales en détail dans le cours de la semaine prochaine.

Page 5: LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris Created Date 4/14/2013 7:55:01 PM ...

Deux boucles imbriquées

Comment faire pour pouvoir ajouter l'option d'annulation à l'option de validation ?

-  Si l'utilisateur appuie sur le bouton Valider, les valeurs de ligne et colonne sont copiées dans ligne G. et colonne G.

-  Si l'utilisateur appuie sur le bouton Annuler, les valeurs de ligne G. et colonne G. ne sont pas modifiées

-  Les valeurs de ligne et colonne doivent être initialisées aux valeurs de ligne G. et colonne G.

-  Le bouton STOP arrête le VI et les valeurs de ligne G. et colonne G. ne sont pas mise à jour

Essayez de répondre à ces questions avant de passer aux slides suivants avec les réponses.

Page 6: LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris Created Date 4/14/2013 7:55:01 PM ...

Deux boucles imbriquées

Par exemple l'appel à votre code C++

La solution des boucles imbriquées est difficile à mettre en œuvre lorsque le programme devient complexe. De plus l'emplois de variables locales peut prétériter l'exécution du VI (plus à ce sujet la semaine prochaine).

Page 7: LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris Created Date 4/14/2013 7:55:01 PM ...

Event loop Comme beaucoup d'autres langagues LabVIEW a un méchanisme pour géréer les événements: l'Event-structure Au travers de cette strucutre, il est possible de recevoir et traiter de manière séquentielle, les événements reçus par LabVIEW. Une événement est par exemple le clic de la souris sur un bouton. Pour le jeux du Tic-Tac-Toe, nous désirons connaître l'endroit de la grille où l'utilisateur a cliqué. Une solution alternative aux deux boucles imbriquées est l'emplois d'une Event-structure pour filtrer les clics (mouse up) de l'utilisateur sur la grille. L'Event-structure doit obligatoirement se trouver à l'intérieur d'une boucle while. La structure contient une frame par événement. Un événement est en général lié à un objet du front panel.

Note: nous reviendrons plus en détails sur les Event-structure dans le cours de la semaine prochaine.

7

Page 8: LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris Created Date 4/14/2013 7:55:01 PM ...

Event loop

8 Selectionnez Edit Events Handled by this Case… pour ouvrir l'editeur d'Events.

Page 9: LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris Created Date 4/14/2013 7:55:01 PM ...

Event loop – ajouter un événement

9

L'événement qui nous intéresse est le relachement de la souris sur la grille du TicTacToe. Pour cela il faut sélectionner la grille pour la source des événements et ensuite sélectionner Mouse Up come événement. Une fois le dialogue fermé, la boucle d'évéement affichiera l'Event avec les informations relatives disponibles, dont les coordonnées Coords qui nous intéresse. Note: les coordonnées sont définies en pixel avec le (0,0) en haut à gauche de la fenêtre du VI.

Page 10: LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris Created Date 4/14/2013 7:55:01 PM ...

Event loop

10

Il faut aussi créer un événement pour le bouton STOP. Cette fois l'événement qui nous intéresse est le changement de la valeur du bouton. Nous aurions aussi pu nous intéresser aux clics de souris sur le boutons. Mais dans ce cas, nous aurions du gérer la valeur du boolean, alors que dans le cas de l'événement Value Change, la boucle d'événement le fait pour nous.

Glissez également le bouton STOP à l'intérieur de la grille pour qu'il ne soit lu que d'un endroit.

Page 11: LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris Created Date 4/14/2013 7:55:01 PM ...

Event loop

11

Il faut maintenant convertir la clic de la souris sur la grille en une position sur la grille. Pour cela nous allons convertir les coordonnées globales de la fenêtre en coordonnées locales à la grille en soustrayant la position de la grille (Position). Notez la soustraction qui opère sur les deux coordonnées à la fois.

Ensuite il faut convertir les coordonnées locales en ligne/colonne. Pour cela les coordonnées locales sont divisées par la taille d'une case de la grille (ArrElem.Bounds). Vous noterez les deux points rouges sur la division. Cela veut dire qu'il y a une conversion int->double puis double->int lors de l'affichage dans Raw/Col. L'arrondis se fera donc selon la norme IEEE 754, ce qui n'est pas ce que nous voulons. Pour forcer la conversion désirée, il faut ajouter un arrondi forcé vers le bas . Ex. raw: 0.6 ->1, mais nous voulons raw 0.6 -> 0 d'ou la conversion forcée.

Page 12: LabVIEW - École Polytechnique Fédérale de Lausanne...Exo.2013.Week8-MyFifthVI.pptx Author Chris Created Date 4/14/2013 7:55:01 PM ...

Event loop

12

A vous d'écrire le VI Update qui met à jours la grille en fonction des coordonnées reçues. Inspirez vous de la gestion des tableaux vue au cours, spécialment de Index Array et Replace Array Element. Pour acceder aux éléments du cluster de coordonnées, employez Unbundle by name