Post on 26-Feb-2021
Exo - my fifth VI
LabVIEW
ME 2e semestre r13.1
Christophe Salzmann���
Phot
o M
artin
Klim
as
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
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.
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.
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.
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).
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
Event loop
8 Selectionnez Edit Events Handled by this Case… pour ouvrir l'editeur d'Events.
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.
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.
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.
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