Chacune des sections suivantes décrit une construction commune utilisée dans la programmation LabVIEW pour accomplir une tâche spécifique. Une bonne connaissance de ces constructions de base vous permettra de reconnaître et de comprendre plus facilement leur utilisation au sein d’une application LabVIEW.
Définitions de type
Les définitions de type (souvent abrégées en « typedefs ») vous permettent de spécifier un type de données qui sera défini de manière cohérente dans l’ensemble de votre application. Voici, par exemple, la définition du type cluster :
Lorsque vous déposez cette typedef sur une face avant ou un diagramme, elle apparaîtra comme un cluster, mais avec un triangle noir dans le coin supérieur gauche sur ses terminaux et de ses constantes :
Les typedefs sont particulièrement utiles pour définir des types cohérents dans l’ensemble de votre application. Pour illustrer cela, regardez ce qui se passe si nous ajoutons un nouveau paramètre (dans ce cas, un chemin de configuration) à la typedef :
En modifiant la typedef à un seul emplacement (le fichier source typedef .ctl), ce changement se propage automatiquement dans l’ensemble de l’application :
Si le cluster n’était pas une typedef, chaque instance du cluster (sur les faces avant et les diagrammes) dans l’ensemble de votre application devrait être mise à jour manuellement. À de rares exceptions près, vous devriez définir la typedef de tous les clusters et des types énumérés que vous créez lors de l’écriture de vos applications LabVIEW.
En utilisant des typedefs, vous améliorez la maintenabilité de votre code en utilisant un seul type de données partagées.
Ressources supplémentaires
Structure Évènement
La structure Évènement permet de répondre aux évènements de l’interface utilisateur et aux évènements de programmation sur un diagramme LabVIEW. Vous pouvez, par exemple, enregistrer un diagramme d’évènement qui s’exécutera chaque fois que la valeur d’une commande du panneau avant changera. Vous pouvez aussi vous abonner à des évènements générés par programmation sur un diagramme à l’aide de la fonction Générer un évènement utilisateur.
Une structure Évènement est généralement placée à l’intérieur d’une boucle While pour que le code puisse répondre à plusieurs évènements tout au long de l’exécution du code. Configurez la structure Évènement afin d’avoir des cadres différents pour les différents évènements que vous voulez détecter. Chaque cadre d’évènement contient le code de gestion qui s’exécute à chaque fois que l’évènement en question se produit.
Ressources supplémentaires
Consultez les projets suivants, fournis avec LabVIEW, pour obtenir plusieurs exemples illustrant les évènements de l’interface utilisateur et les évènements de programmation :
- <LabVIEW 20xx>\examples\Structures\Event Structure\Event Structure.lvproj
- <LabVIEW 20xx>\examples\Dialog and User Interface\Events\Events.lvproj
Variable globale fonctionnelle
La variable globale fonctionnelle (également appelée « VGF », « LabVIEW 2 Style global » ou « Action Engine ») est un mécanisme de stockage de données. La VGF stocke des données dans un registre à décalage ou un nœud de rétroaction non initialisé et permet d’accéder à ces données n’importe où (c’est-à-dire « globalement ») au sein d’une application. Le diagramme d’une VGF VI de base est représenté ci-dessous et contient des Données d’entrée et des Données en sortie, ainsi qu’un enum Opération avec deux actions (« Définir » et « Obtenir ») :
La fonctionnalité offerte par cette simple VGF obtenir/définir revient à utiliser une variable globale. En pratique, votre VGF effectuera probablement d’autres fonctions que « définir » et « obtenir ».
Vous pouvez utiliser la VGF pour stocker des références et effectuer des opérations plus sophistiquées. Vous pouvez, par exemple, observer la VGF d’entrée/de sortie sur fichier ci-dessous (qui illustre l’utilisation d’un registre à décalage non initialisé au lieu d’un nœud de rétroaction). Cette VGF stocke la référence du fichier entre des appels successifs et effectue différentes actions (ouvrir, lire, écrire et fermer) dans un seul VI.
Notez que les VGF sont tout aussi sensibles aux situations de compétition que les variables globales. En règle générale, vous devez éviter d’écrire des données globales à plus d’un emplacement dans votre code.
Ressources supplémentaires
Faces avant secondaires
Une face avant secondaire est une commande de face avant qui peut afficher la face avant d’un autre VI. L’utilisation d’une face avant secondaire vous permet de concevoir une interface utilisateur dynamique dans laquelle vous pouvez intervertir des sections entières de votre interface utilisateur en spécifiant un autre VI à afficher dans la face avant secondaire. La face avant secondaire facilite également le développement d’applications modulaires, où des groupes logiques d’éléments de la face avant peuvent être contenus dans des VI distincts. Avec cette conception, vous pouvez modifier des VI individuels qui s’affichent dans des faces avant secondaires sans modifier le code d’autres VI d’affichage ou du VI principale de l’application.
L’exemple ci-dessous analyse un dossier à la recherche de plug-ins VI et remplit un menu déroulant texte avec ces plug-ins. Lorsque vous sélectionnez un élément dans le menu déroulant texte, le plug-in VI correspondant est inséré dans la face avant secondaire du VI principal. Cette construction vous permet d’ajouter de nouveaux plug-ins VI sur le disque sans apporter de modifications au VI principal.
Ressources supplémentaires
Exécutez l’exemple suivant, fourni avec LabVIEW, afin de vous familiariser avec les faces avant secondaires :
- <LabVIEW 20xx>\examples\Controls and Indicators\Containers\Multiple VIs in a Subpanel.vi
VI réentrants
Par défaut, les VI dans LabVIEW ne sont pas réentrants. Cela signifie simplement qu’une seule instance d’un VI peut s’exécuter à la fois. Ainsi, dans le diagramme suivant, l’une des instances sous-VI de « Process.vi » doit attendre que l’autre se termine.
Si vous voulez que plusieurs instances d’un VI puissent s’exécuter en parallèle, vous devez rendre le VI réentrant. Pour ce faire, allez dans Fichier > Propriétés du VI > Exécution et définissez le paramètre « Réentrance » sur Exécution réentrante du clone partagé ou sur Exécution réentrante du clone préalloué.
Une fois que vous avez modifié un VI pour qu’il soit réentrant, plusieurs instances peuvent s’exécuter en parallèle :
Pensez à rendre vos VI réentrants dans les situations suivantes :
- Plusieurs instances du même VI doivent s’exécuter en parallèle afin d’améliorer les performances de l’application
- Plusieurs instances de la face avant du même VI doivent être affichées pour l’affichage des interfaces utilisateur sophistiquées
Notez que les Variables globales fonctionnelles seront presque toujours non réentrantes, car elles traient des données d’état globales que l’ensemble de l’application doit partager.
Ressources supplémentaires
Exécutez l’exemple suivant, fourni avec LabVIEW, afin de vous familiariser avec les VI réentrants :
- <LabVIEW 20xx>\examples\Performance\VI Properties\Reentrant VI Execution.vi
Processus asynchrones
La plupart du temps, lorsque vous sollicitez un VI à partir d’un autre VI, vous utilisez un appel de sous-VI. Lorsque vous appelez un sous-VI, le diagramme appelant doit attendre que le sous-VI ait fini de s’exécuter avant de pouvoir continuer. Il s’agit d’un exemple d’un appelsynchrone.
Cependant, dans certaines situations, une application peut vous demander de lancer un sous-VI, mais de poursuivre l’exécution du VI appelant pendant que le sous-VI continue de s’exécuter. Il s’agit d’un exemple d’un appelasynchrone. Avec les appels de VI asynchrones, vous pouvez exécuter dynamiquement n’importe quel nombre de VI en parallèle. De plus, l’utilisation de VI réentrants vous permet de générer un nombre arbitraire d’instances du même VI et de les exécuter de manière asynchrone.
Dans l’exemple ci-dessous, le VI appelant appelle plusieurs instances du VI Process réentrant de manière asynchrone. Chaque VI s’exécute indépendamment et renvoie des données au VI appelant lorsqu’il a terminé. Le VI appelant peut exécuter d’autres codes du diagramme en parallèle et ne pas attendre que les instances du VI Process se terminent.
Ressources supplémentaires
Consultez le projet suivant, fourni avec LabVIEW, pour obtenir plusieurs exemples illustrant plus en détail les appels de VI asynchrones :
- <LabVIEW 20xx>\examples\Application Control\VI Server\Asynchronous Call By Reference\Asynchronous Call By Reference.lvproj
Programmation orientée objet
La programmation orientée objet est facilitée dans LabVIEW par les classes LabVIEW. La programmation orientée objet LabVIEW utilise des concepts d’autres langages de programmation orientés objet comme C++ et Java, notamment la structure de classes, l’encapsulation et l’héritage. Vous pouvez utiliser ces concepts pour créer un code plus simple à maintenir et à modifier sans affecter d’autres sections de code au sein de l’application. Il existe de nombreux modèles de conception orientés objet pouvant être appliqués à LabVIEW. Ceux-ci sont décrits dans le document Application de modèles de conception communs orientés objet (OO) à LabVIEW.
Ressources supplémentaires
Consultez les projets du dossier suivant, fourni avec LabVIEW, pour obtenir plusieurs exemples illustrant les bases de la programmation avec les classes LabVIEW :
- <LabVIEW 20xx>\examples\Object-Oriented Programming