Débuter avec LabVIEW cours complet
...
Labview est un langage de programmation graphique dont les programmes sont appelés Instruments Virtuels plus communément VI pour Virtual Instruments. Ces VIs comportent 3 composants : la Face Avant, la Fenêtre Diagramme et l’Icône et ses connecteurs.
Il existe de nombreuses fonctions définies dans labview sous forme de bibliothèques de VIs, aussi labview permettra de développer des applications complexes utilisant des fonctions mathématiques, de traitement de signal, d’analyse de données, et les moyens de communications actuels avec les instruments ( DAQ, GPIB, RS232, Ethernet, USB ...).
Le but de ce manuel est de vous aider à comprendre l’architecture de labview et de ses composants : outils (palettes, Vis intégrés), Face Avant (FA) et diagramme, options ... et d’être capable de réaliser à court terme des projets utilisant les principales capacités de programmation du logiciel, c'est-à-dire :
n travailler avec des tableaux, clusters et les différentes structures
n créer des Sub-Vis (sous programmes ou fonctions)
n construire une application utilisant l’acquisition de données (DAQ) ou la communication avec un ou des instruments.
Double cliquer sur le raccourci Labview sur le bureau s’il est présent sinon :
→ Démarrer
→ Programmes
→ National Instruments
→ Labview
Une fenêtre apparaît. Celle-ci vous permet de créer un nouveau VI ou un projet, d’ouvrir
un VI, de configurer Labview ou de rechercher de l’aide.
Figure 1 : Fenêtre ouverture
n Cliquer sur VI à partir d’un modèle : une nouvelle fenêtre s’ouvre :
Figure 2 : Nouveau VI
A partir de cette fenêtre vous pouvez choisir quel type de VI vous allez créer, il existe différents modèles de VIs suivant le type de programme que vous voulez créer. Une description vous permet de comprendre le modèle. Dans ce manuel nous ne travaillerons pas à partir de modèles.
n Fermer la fenêtre et développer le menu ‘Outils’.
Dans ce menu, l’utilisateur peut lancer Measurement and Automation eXplorer (MAX) qui est le logiciel «drivers» des cartes NI, pour l’instant cliquer sur Options Labview.
Les différentes options de labview peuvent être modifiées ici, notamment la représentation des palettes d’outils, le choix de visualiser ou non sous forme d’icônes les terminaux, le routage automatique.
Figure 3 : Fenêtre Option
n Fermer la fenêtre et aller sur ‘Exemples’ ‘Recherche d’exemples’.
Une partie intéressante de labview est l’intégration d’une bibliothèque d’exemples. Cliquer sur Recherche d’exemples.
Figure 4 : Fenêtre Recherche d’exemples
Depuis cette fenêtre de nombreuses options s’offrent à vous, recherche d’exemples en parcourant divers types de programmes, recherche d’exemples par mots clés avec la possibilité d’inclure une recherche sur le site de NI et de soumettre vos exemples à NI. En programmation labview n’hésiter donc pas à rechercher des exemples pour les inclure dans vos programmes afin d’éviter une perte de temps dans la création d’un programme existant.
2.2. Nouveau VI
Ouvrir un VI vide : pour cela fermez l’outil de recherche d’exemple, aller sur ‘VI vide’. 2 fenêtres s’ouvrent, suivant les options choisies elles peuvent se superposer. Une des fenêtres est la Face Avant (FA) c'est-à-dire la fenêtre que verra l’utilisateur lorsque le programme fonctionnera, elle contient les Contrôles (Entrée utilisateur) et les Indicateurs (Sorties du code), ceux-ci se retrouvent sur le diagramme qui contient le code et les composants reliés entre eux par des «Fils».
Figure 5 : Face-avant et diagramme
Figure 6 : Bouton de commande du diagramme
Suivant la fenêtre sur laquelle vous vous trouvez 2 palettes sont disponibles : palette de contrôles pour la FA et palette de fonctions et d’outils pour le diagramme.
Figure 7 : Palettes de Fonctions - Contrôles et outils
La visualisation de ces palettes est différente suivant les options définies. Si les palettes ne sont pas visibles, click droit de la souris dans les fenêtres. (La palette présentée ici est la palette de la version 7 vous permettant de faire la relation entre icônes et fonctions), la version 8 apparaît comme l’utilisateur le veut.
Figure 8 : Palette de Fonctions
2.3. Règles de connexion
Au niveau du diagramme quelques règles de connexion seront à respecter notamment en essayant de croiser le moins possible les câbles et à compacter le plus possible le code.
Figure 9 : connexion
Pour comprendre comment nous pouvons programmer sous labview nous allons étudier un exercice qui est le suivant :
Créer un VI simulant une prise de température à partir d’un capteur à sortie analogique linéaire 0-10Volts pour -15°C et 150°C. Ce VI affichera la température en °C, °F et K. (rappel : °F=°C*(9/5)+32).
L’algorithme sera le suivant :
Début
Lecture commande V
Tc=16.5 * V - 15 Tf=Tc * (9/5) + 32 Tk=Tc + 273.15
Fin
Il existe plusieurs façons de réaliser ce programme. De nombreuses fonctions sont disponibles, vous serez amenés à faire des choix basés sur votre connaissance des différentes fonctions.
Faire un click droit sur la face avant afin de créer une commande numérique, de la même façon placer 3 indicateurs numériques.
Figure 10 : Placement de commandes et indicateurs
Maintenant plusieurs méthodes s’offrent à vous, utilisez dans un premier temps les outils simples numériques, les nœuds d’expression puis la boite de calcul (la boite de calcul se situe dans les Structures).
Figure 14 : Code 3
Vous avez remarqué que les commandes ou indicateurs peuvent être de différentes couleurs ; sous Labview à chaque type est associée une couleur (se référer à la plaquette de ressource d’aide).
A ce stade nous pouvons penser que le programme est fini, nous simulons un capteur, or celui-ci est défini entre 0 et 10 V, pourtant l’utilisateur peut rentrer une commande inférieure à 0V et supérieure à 10V. Chaque commande possède des propriétés dont certaines sont directement accessibles à l’aide d’un click droit sur la commande.
n Modifier les paramètres de la commande sortie capteur afin que l’utilisateur n’entre pas de données hors gamme.
→ Click droit sur la commande ou → Click droit sur la commande
→Propriétés →Gamme des données
→Gamme
En programmation Labview ayez toujours l’aide contextuelle ouverte, cela vous facilitera la compréhension des fonctions. (CTRL+H).
3.2. Sous VI
Un sous VI est équivalent à un sous programme ou fonctions d’autres langages de programmation. Il permet l’utilisation d’un code récurrent dans le programme principal, de plus il requiert moins de mémoire, les sous VIs permettent de déboguer plus facilement un programme et peuvent être utilisés par plusieurs programmes. Ils permettent aussi de simplifier le diagramme.
Pour construire un sous VI, 2 solutions s’offrent à vous : (ne faites rien pour l’instant)
n Sélectionnez la partie de code à mettre en sous programme puis Edition – Créer un sous - VI, le sous - VI est créé à l’intérieur du code avec ses connexions. Attention le sous - VI n’est pas enregistré.
Ces solutions sont à utiliser suivant votre façon de programmer. Si vous êtes dans votre partie principale et vous vous apercevez que du code va être répétitif utilisez la première méthode. Si par contre dès le départ une fonction sera utilisée à de nombreuses reprises alors créez votre sous - VI comme un VI et reliez les connecteurs.
Les sous VI peuvent être des programmes à part entière, la différence réside dans le fait qu’un connecteur est créé. En double cliquant sur l’icône vous pouvez modifier la représentation de celui-ci.
n Créer un sous VI à partir de votre programme. Sélectionnez la partie à mettre en sous programme : puis Edition - Créer un sous - VI
Figure 15 : Création Sous VI à partir du diagramme VI principal
Une des particularités de labview est qu’il est multitâche, c'est-à-dire que plusieurs parties de code peuvent s’exécuter en même temps. Nous pouvons placer ce même sous VI plusieurs fois en parallèle dans le code pour qu’ils s’exécutent en même temps. Pour cela nous devons modifier une propriété d’exécution.
Figure 16 : Propriétés d’un VI ou sous VI
Le sous VI sera mis en Exécution réentrante ainsi plusieurs instances de celui-ci s’exécuteront en même temps si le code le demande.
Nous pourrons visualiser en même temps les 3 sorties températures.
Figure 18 : Palette des Structures
4.1. While :repeat until
Même boucle que les autres langages de programmation tout en ayant des particularités supplémentaires : registre à décalage et indexation.
n Reprendre votre programme et sélectionner la boucle pour entourer votre code.
Figure 19 : Boucle While
L’algorithme est le suivant :
Début
Repeat
Lecture capteur
Calcul des températures et affichage
Until Stop=true
Fin
Figure 20 : Actions mécaniques de boutons
Si vous ouvrez le gestionnaire des tâches Windows pendant que votre VI est en exécution vous vous apercevez que 100% du CPU est utilisé (si monocoeur) du fait que Labview teste à chaque tour de boucle le plus rapidement possible le bouton STOP. Afin de libérer quelques ressources incluez dans la boucle une temporisation de 10 ms et observez le gestionnaire des tâches. Il serait intéressant d’avoir après la fin de la boucle toutes les valeurs de température, pour cela reliez vos indicateurs à la boucle While, un carré plein apparaît sur la boucle (tunnel), faites un click droit puis Activez l’indexation.
Figure 21 : Indexation
Vous avez directement un tableau de toutes vos valeurs en sortie. Remarquez l’épaisseur du fil reliant le tableau. (Remarquez le carré plein devient un carré dans lequel se trouve des crochets indiquant que nous sommes en présence d’un tableau).
Figure 22 : Tableau en sortie d’indexation
Une autre particularité intéressante est le registre à décalage : click droit sur la boucle While, Créer un registre à décalage.
Réalisez le code suivant :
Figure 23 : Registre à décalage
Le registre à décalage nous permet ici de faire une moyenne sur les 3 dernières valeurs. Attention à initialiser les registres à décalage si nécessaire.
Figure 24 : Explication registre à décalage
Attention à la condition d’arrêt qui est traitée avant la fonction de la boucle, à l’appui sur le bouton Stop conduit à la fin de l’exécution en cours et à une autre exécution, ce comportement n’est pas un comportement souhaitable, pour résoudre ce problème nous utiliserons une structure If pour tester le bouton et permettre ou non l’exécution de la fonction.
Figure 25 : Condition d’arrêt
Attention aussi aux boucles infinies provoquées par une mauvaise compréhension du flux de données.
Figure 26 : Boucle infinie
4.2. FOR
n Réaliser le code suivant :
Figure 27 : Boucle For et propriétés
Création des tableaux :
→ diagramme
→fonctions tableaux
→ constante tableau
→ fonctions numériques
→ commande ou indicateur numérique suivant le cas.
Observez bien le résultat des indicateurs.
Conclusion : l’indexation sur les boucles For est prioritaire si N > au nombre de lignes des tableaux, le plus petit des tableaux est prioritaire sur les autres. Le nœud de rétroaction s’arrête à N-2 tandis que le registre à décalage à N-1.
N est le terminal de décompte qui indique combien de fois le diagramme doit être répété.
i est le terminal d’itération qui indique le nombre de fois que la boucle s’est exécutée.
4.3. Condition
La structure peut être considérée comme un IF ou un CASE, elle n’est pas limitée à un seul type de données, par contre vous devez définir un choix par défaut si toutes les conditions ne sont pas implémentées dans la structure.
Figure 28 : Condition
4.4. Séquence
La structure Séquence permet de séparer des parties de code qui devront s’exécuter séquentiellement, mais aussi de simplifier le code en superposant ces parties. 2 types de séquence existent depuis la version 7 : séquence empilée (ancienne version) et séquence déroulée. Afin de faire passer des variables d’une séquence à une autre il est possible de créer ce qui est appelé une variable locale de séquence (click droit sur la séquence Créer une variable locale de séquence).
Figure 29 : Types de Séquence
4.5. Structure événement
Elle se présente ainsi :
Figure 30 : Structure événement
Le sablier en haut à gauche sert de temps d’attente avant de passer dans l’événement «timeout», si aucun temps n’est imposé la structure attend jusqu’à ce qu’un événement se produise.
Afin d’ajouter des conditions évènement click droit sur la structure – ajouter une condition d’évènement.
Figure 31 : Ajouter une condition
Figure 32 : Editer les événements
Vous voyez que certains événements sont en double, il existe pour certains événement une possibilité de filtrage (flèche rouge et ?) c'est-à-dire que vous avez la possibilité d’annuler l’événement en cours. Vous pouvez ou non verrouiller la Face Avant tant que l’exécution du diagramme de l’événement n’est pas terminée mais dans ce cas certaines commandes ne répondront plus à l’utilisateur.
Chaque structure événement possède une file d’attente, chaque événement sera exécuter l’un après l’autre, si un événement permis a lieu alors qu’un diagramme d’un autre événement est en exécution il sera mis en file d’attente. Il n’est pas possible de supprimer cette file d’attente.
Exercice : utilisez la structure évènement dans votre programme capteur de sorte que l’utilisateur ferme la FA, une boite de dialogue s’ouvre demandant si nous voulons fermer ou pas la fenêtre. (boite de dialogue dans fonction Temps et Dialogue)
Figure 33 : Utilisation structure événement
Dans l’exercice si l’utilisateur répond NON alors la fenêtre ne se ferme pas.
Il existe plusieurs méthodes d’utilisation des structures événement qui ne seront pas développées ici, mais qui peuvent être vues grâce aux exemples. Il faudra absolument éviter d’utiliser 2 structures évènement dans la même boucle.
Attention :
Si vous ne verrouillez pas Face Avant alors des événements pourront être mis en queue et s’exécuteront un par un une fois le code de chaque événement exécuté.
Cette structure événement peut gérer des événements dynamiques, les événements dynamiques vous laissent maître de décider quels événements seront générés, vous pouvez aussi modifier la génération d’événements ou supprimer des enregistrement d’événement. (Se référer à l’exemple «Enregistrement d’événement dynamique»).
Il est possible aussi de générer des événements utilisateur par programmation. (Se référer à l’exemple «Programmatically Fire Events»).
Il existe plusieurs types de graphes : déroulant, XY, simple, déroulant d’intensité, d’intensité, numérique et 3D. Tous ces graphes ont des particularités différentes mais sont tous paramétrables par un click droit (notamment la modification des axes, l’ajout d’échelle, modification de couleur ....).
Figure 34 : Graphe et légende
Figure 35 : Graphe déroulant
Figure 36 : Graphe simple 1 courbe
Figure 37 : Graphe simple 2 courbes
Figure 38 : Graphe XY
Exercice : Ajoutez un graphe déroulant à l’intérieur de la boucle afin de visualiser les 3 températures. Puis ajoutez des échelles pour les 3 courbes; après la sortie de boucle affichez un graphe XY de l’évolution de la température en fonction du temps
Figure 39 : Insertion graphe déroulant
Figure 40 : Graphe XY en sortie de boucle
6.1. Tableaux
Les tableaux sont un groupement ordonné d’éléments de même type, le type peut-être booléen, chaîne, waveform, cluster ... Ils sont de une à plusieurs dimensions et jusqu’à 2^31-1 éléments par dimension. (L’indexation commence à 0 et se termine à N-1, N étant le nombre d’élément.)
Figure 41 : Palette Tableau
Vous avez pu remarquer que nous avons déjà utilisé une fonction importante des tableaux : construire un tableau.
6.2. Chaîne de caractères
Figure 42 : Palette de Chaîne
Comme le nom l’indique ce sont des commandes ou des indicateurs où vous retrouvez une chaîne de caractères. Une des particularités est que nous pouvons afficher la chaîne d’une manière normale, ou bien avec ses codes (\s espace, \n retour à la ligne...), style mot de passe, et en hexadécimal, tout ceci trouve son utilité dans la gestion de commande d’instruments, des «login» avec mot de passe etc...
De plus encore une fois il existe une panoplie de fonctions sur les chaînes de caractères que vous retrouverez souvent dans les Vis de commandes d’instruments.
Certains exemples sur les chaînes vous montrent comment utiliser les fonctions principales.
6.3. Clusters
Figure 43 : Palette Clusters
Les clusters peuvent être comparés aux ensembles en mathématiques (record en Pascal, et struct en C), ce sont des ensembles pouvant englober tout type de donnée, c'est-à-dire des valeurs numériques, booléennes, chaîne de caractères mais aussi des tableaux, des graphes ...
Ainsi donc les clusters seront très utiles pour transférer de nombreuses données d’une partie du code à une autre ou d’un VI à un autre.
Des fonctions existent sur les clusters notamment pour les créer et pour désassembler les données du cluster.
Une panoplie de fonctions plus ou moins évoluées est à votre disposition pour les entrées sorties sur fichiers, aussi bien des fichiers de types ASCII que binaire.
Attention aux fonctions de bas niveau qui regroupe à l’intérieur des fonctions avancées.
Figure 44 : Palette Entrée Sortie sur Fichier
Ouvrir la fonction «Ecrire dans un fichier tableur» :
Double click sur ‘écrire une chaine..’
Figure 45 : Ecrire dans un Fichier Tableur
Pourquoi ? Le fait d’ouvrir et de fermer un fichier de chaînes de caractères peut être plus ou moins long suivant la taille de ce fichier, aussi on préfèrera dans une boucle utiliser les fonctions avancées, on ouvrira le fichier avant la boucle et le fermera à la fin de la boucle.
Si la vitesse ainsi que la taille du fichier sont primordiales, nous utiliserons les fichiers binaires.
8.2. Variables locales et globales
Un objet de face avant possède qu’un seul terminal au niveau du code mais vous auriez besoin de lire ou de mettre à jour cet objet en différents endroits du code. En utilisant les variables locales vous pouvez avoir accès à cet objet en différents endroits du code et transmettre des données entre différentes structures qui ne peuvent pas être connectées par un câble.
Placer sur le diagramme 2 boucles «While» qui stopperont à l’appui de la même commande Stop.
Figure 46 : Variable Locale
Variable locale : fonction structure - variable locale ou click droit sur la commande puis créer variable locale (diagramme).
Attention à la commande STOP, en variable locale certaines actions mécaniques ne sont pas possibles. Ici dans ce VI un seul bouton nous permet de gérer 2 séquences. Toute action qui retourne à la position initiale ne peut être utilisée en utilisant les variables locales.
Une variable globale est une variable pouvant être utilisée simultanément par plusieurs Vis. Je ne parlerai pas des variables globales sous labview car celles-ci peuvent amener des bugs difficiles à discerner. Il faut donc préférer utiliser des variables globales VI.
Pour réaliser une variable globale par programmation, nous allons utiliser le registre à décalage non initialisé, ce qui permet de récupérer la valeur mise en mémoire dans le registre (ce sera la lecture de la variable), pour l’écriture il faudra mettre dans le registre la nouvelle valeur.
Figure 47 : Variable Globale
Transformez ce VI en sous - VI, vous venez d’écrire une variable globale par programmation, vous pouvez soit écrire une valeur soit la lire. Essayez d’utiliser cette variable globale dans un VI. Par cette méthode la mémoire utilisée lors de l’écriture ou la lecture de cette variable est immédiatement libérée après avoir été utilisée. Bien sûr cette méthode est plus longue à mettre en œuvre mais le gain de mémoire peut être très important.
8.3. Nœuds de propriété et de méthode
Le nœud de propriété permet de modifier l’apparence d’un objet de la FA. Par exemple changer la couleur d’un indicateur, faire clignoter un autre ... On peut créer un nœud de propriété à partir du terminal de la commande en faisant click droit – créer nœud de propriété, sur ce nœud créé vous pouvez choisir la ou les propriétés à lire ou écrire toujours à l’aide du click droit.
Exercice : prendre une commande réservoir et placer la en FA, une commande LED (appelez-la visible - invisible) et une commande Boite de couleur (palette numérique).
Faites un code qui permette de rendre invisible ou visible le réservoir et de changer la couleur de remplissage.
Figure 48 : nœuds de propriétés
Suivant les commandes les propriétés sont différentes.
Le nœud de méthode permet de la même manière d’avoir accès à des «méthodes», fort utile pour par exemple, appeler à exécuter un VI par le code d’un autre VI etc ...
Dans ce programme intégrez un nœud de méthode pour visualiser l’image du réservoir dans une boîte image.