Acquérir et analyser des signaux avec LabVIEW Real-Time.

National Instruments

Apprenez à acquérir des données de manière déterministe et à les analyser avec les bibliothèques prêtes à l'emploi intégrées à LabVIEW.

Les commentaires et les suggestions d'amélioration sont les bienvenus, alors, après votre lecture, n'hésitez pas. Commentez

- Titre : Acquérir et analyser des signaux avec LabVIEW Real-Time.

- Auteur : National Instruments

- Parution : 27 octobre 2014

- Licence : Copyright ® 2014 National Instruments. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Commencer un nouveau projet dans LabVIEW et ajouter une cible temps réel

- III. Développer un VI LabVIEW Real-Time

- IV. Ressources supplémentaires

- V. Téléchargement

I - Introduction

Apprenez à acquérir des données de manière déterministe et à les analyser avec les bibliothèques prêtes à l'emploi intégrées à LabVIEW. Vous pouvez suivre ce tutoriel ou parcourir la solution proposée.

II - Commencer un nouveau projet dans LabVIEW et ajouter une cible temps réel

Créez tout d'abord un nouveau projet LabVIEW pour gérer votre code et les ressources matérielles.

1. Créez un nouveau projet LabVIEW en sélectionnant Fichier » Créer un projet. Sélectionnez ensuite un Projet vide.

2. L'arborescence du projet par défaut contient le Poste de travail, où vous pouvez développer du code qui s'exécutera sur la machine de développement Windows. Notez qu'une cible temps réel dispose d'un processeur qui exécute un système d'exploitation temps réel ; il s'agit donc d'un autre ordinateur à part entière. Pour développer du code qui s'exécutera sur cet ordinateur, vous devez ajouter une nouvelle cible à votre projet. Cliquez avec le bouton droit sur l'élément Projet au sommet de l'arborescence et sélectionnez Nouveau » Cibles et périphériques…

3. Dans la boîte de dialogue, vous pouvez visualiser les systèmes déjà présents sur votre réseau ou en ajouter un nouveau. Comme vous êtes seulement en train d'évaluer le logiciel, sélectionnez Nouvelle cible ou nouveau périphérique. LabVIEW répertorie les périphériques disponibles en fonction des pilotes installés. Étant donné que vous avez installé le pilote NI-RIO avec votre logiciel d'évaluation, sélectionnez et développez l'élément Real-Time CompactRIO, puis sélectionnez cRIO-9068.

4. Si un système existe au préalable, LabVIEW essaiera de détecter les E/S présentes et de les ajouter automatiquement au projet LabVIEW. Étant donné que vous avez ajouté un nouveau système, vous devez ajouter manuellement un module d'E/S de la Série C. Pour cela, cliquez avec le bouton droit sur l'élément Chassis, qui désigne le fond de panier de la cible CompactRIO, et sélectionnez Nouveau » C Series Modules…

5. Comme pour la cible, étant donné que vous ne disposez pas de matériel physique, sélectionnez Nouvelle cible ou nouveau périphérique et C Series Module, puis cliquez sur OK.

6. Dans la boîte de dialogue qui s'affiche, sélectionnez un module de thermocouple NI 9211 comme Mod1 puis cliquez sur OK.

7. Vous êtes maintenant prêt à commencer la programmation et à accéder aux E/S de votre cible temps réel. Naviguez jusqu'à Fichier » Enregistrer pour sauvegarder votre projet sous le nom Real-Time Evaluation.lvproj. Cliquez sur OK. Vous remarquerez que vous communiquez avec votre cible après avoir entré son adresse IP, et après l'avoir correctement configurée sur le même réseau que votre ordinateur de développement.

III - Développer un VI LabVIEW Real-Time

Cette section décrit la création d'une application de contrôle temps réel basique sur un CompactRIO. Vous devriez à présent avoir un projet LabVIEW contenant votre système CompactRIO et un module d'E/S de la Série C. Bien que ce tutoriel exploite un module d'entrée de thermocouple NI 9211, le même processus peut être employé pour quasiment n'importe quel module d'entrée analogique.

1. Ce projet ne contient qu'un seul VI, qui correspond à l'application LabVIEW Real-Time qui s'exécute sur le processeur temps réel embarqué. Créez ce VI en cliquant avec le bouton droit sur le contrôleur temps réel CompactRIO dans l'arborescence du projet et en sélectionnant Nouveau » VI. Enregistrez-le sous le nom RT.vi.

2. Faites un double-clic sur le VI RT.vi pour l'ouvrir. Un VI se compose de deux fenêtres : la face-avant, en gris, qui sert d'interface utilisateur, et le diagramme, en blanc, où le code est développé.

3. L'opération de base de cette application consiste en une initialisation puis en deux tâches parallèles. La meilleure méthode pour vous assurer que l'initialisation se produira en premier dans le flux de données consiste à utiliser une structure Séquence déroulée. Dans la fenêtre du diagramme, cliquez avec le bouton droit dans un espace libre pour afficher la Palette des fonctions, puis sélectionnez Programmation » Structures » Structure Séquence déroulée.

4. Ajoutez à présent une boucle cadencée (cliquez avec le bouton droit et sélectionnez Programmation » Structures » Structures cadencées » Boucle cadencée) à droite de la structure Séquence déroulée. Vous pouvez synchroniser le code de manière déterministe à l'intérieur des boucles cadencées avec différentes bases de temps et l'exécuter en continu jusqu'à ce que la condition d'arrêt soit remplie.

Avec votre souris, étirez le rectangle où vous souhaitez que la boucle apparaisse, puis relâchez-le.

5. Pour configurer la boucle cadencée, faites un double-clic sur l'icône en forme d'horloge sur le noeud d'entrée à gauche.

6. Dans la section Source de cadencement de ma boucle, sélectionnez Synchroniser avec le moteur de balayage. Cliquez sur OK. Cela lance une exécution du code dans la boucle cadencée, immédiatement après le balayage de chaque E/S, afin de garantir que les valeurs d'E/S utilisées dans la boucle cadencée sont les plus récentes. Avec le moteur de balayage NI, vous pouvez également accéder à des modules d'E/S directement dans LabVIEW Real-Time sur une cible CompactRIO sans programmation sous LabVIEW FPGA. Laissez toutes les autres options par défaut.

7. L'étape précédente a permis de configurer la boucle cadencée afin qu'elle soit synchronisée avec le moteur de balayage. Configurez à présent la période du moteur de balayage lui-même en cliquant avec le bouton droit sur l'élément RT CompactRIO Target dans l'arborescence du projet LabVIEW et en cliquant sur Propriétés.

8. Sélectionnez Moteur de balayage parmi les catégories dans la colonne de gauche et définissez la Période de balayage à 100 ms. Cela permet la mise à jour de toutes les E/S du système CompactRIO toutes les 100 ms (10 Hz). Vous pouvez également définir la période de publication sur réseau depuis cette fenêtre, ce qui permet de contrôler la fréquence à laquelle les valeurs des E/S sont publiées sur le réseau dans le cadre d'opérations de surveillance et de mise au point à distance. Cliquez sur OK.

9. Maintenant que vous avez configuré la fréquence de balayage des E/S, il est temps d'ajouter la lecture des E/S à votre application de contrôle. Lorsque vous utilisez le mode balayage du CompactRIO, vous pouvez simplement glisser les variables d'E/S depuis le projet LabVIEW et les déposer dans le diagramme temps réel. Étendez l'élément Chassis du CompactRIO et le module d'E/S. Sélectionnez AI0, cliquez dessus puis glissez-le et déposez-le dans la boucle cadencée dans le diagramme de votre VI RT.vi, comme l'indique la figure ci-dessous. Déposez également l'élément AI1 dans la boucle cadencée.

10. Ajoutez ensuite la fonction d'analyse qui s'exécute sur la cible dans le programme. Cliquez avec le bouton droit dans le diagramme pour ouvrir la Palette des fonctions, puis cliquez sur le bouton Recherche dans le coin supérieur droit de la palette.

11. Recherchez le mot-clé « moyenne », puis sélectionnez Moyenne PPP.vi dans la palette Signal Processing. Déposez-en deux instances dans la boucle cadencée de votre diagramme et câblez vos E/S comme le montre l'image ci-dessous. Créez une constante en cliquant avec le bouton droit sur le terminal d'entrée longueur d'échantillon et donnez-lui la valeur 100.

12. En toute logique, la prochaine étape devrait consister à écrire les données sur l'interface utilisateur ; cependant, il vaut mieux distinguer l'acquisition haute priorité de la présentation ou de l'enregistrement de données. De cette façon, le jitter est limité, la boucle cadencée peut atteindre des performances « temps réel » et ainsi finir toujours dans les temps. Vous pouvez augmenter l'efficacité de l'unité centrale en exécutant des tâches dans des boucles distinctes et à des fréquences différentes, puisque chaque tâche n'est exécutée qu'en cas de nécessité.

Transférez les derniers résultats du calcul de la moyenne venant de la boucle cadencée haute priorité vers une boucle While comprenant une FIFO temps réel. Cela crée un buffer entre les deux boucles. La boucle cadencée s'exécute, synchronisée avec le balayage des E/S, et écrit à chaque fois les derniers résultats du calcul de la moyenne sur le buffer. La boucle While lit les données sur le buffer et les écrit sur l'interface utilisateur, de sorte que les données de température sont visibles au moment de l'exécution. Placez une boucle While en dessous de la boucle cadencée (Structures » boucle While).

13. Ensuite, créez des variables partagées pour transférer les valeurs entre la boucle cadencée haute priorité et la boucle While basse priorité. Pour ce faire, cliquez avec le bouton droit sur votre cible CompactRIO RT dans l'arborescence du projet LabVIEW et sélectionnez Nouveau » Bibliothèque. Faites un clic droit sur la nouvelle bibliothèque et sélectionnez Enregistrer » Enregistrer. Donnez à votre bibliothèque un nom facilement identifiable comme « RTComm » pour l'enregistrer sur disque, puis cliquez sur OK.

14. Cliquez à présent avec le bouton droit sur votre nouvelle bibliothèque et sélectionnez Nouveau » Variable. La fenêtre Propriétés de la variable partagée s'ouvre. Renommez votre variable Data Buffer et sélectionnez Un processus dans le menu déroulant Type de variable, comme le montre l'image ci-dessous. Sélectionnez Tableau de DBL comme Type de données. Cela crée une variable locale (non publiée sur réseau) contenant un tableau de nombres à virgule flottante double précision.

15. Sélectionnez l'option FIFO RT dans le menu à gauche et cochez la case Activer la FIFO RT. Sélectionnez ensuite Un seul élement comme Type de FIFO, puis définissez le Nombre d'éléments à 2 (ce chiffre peut varier en fonction du nombre de voies d'E/S surveillées). La variable est ainsi configurée pour se comporter comme une variable globale capable de répondre aux exigences de cadencement tout en servant de buffer de données entre les tâches de priorité haute et basse. Cliquez sur OK.

16. Créez une nouvelle variable partagée à un processus dans la même bibliothèque. Cette variable servira à la commande Stop de l'interface utilisateur qui, une fois actionnée, arrêtera les deux boucles du programme. Elle devra être configurée comme suit :

- Nom : Stop ;

- Type de variable : Un processus ;

- Type de données : Booléen ;

- FIFO RT : Activée et Type de FIFO : Un seul élément.

17. Suite à cela, votre projet devrait ressembler à l'image ci-dessous.

18. Retournez maintenant à la structure Séquence pour initialiser ces variables ainsi qu'un tableau pour les données. Déposez une instance des deux variables depuis l'arborescence du projet à l'intérieur de la structure.

19. Cliquez avec le bouton droit sur chaque variable et sélectionnez Mode d'accès » Écriture.

20. Cliquez avec le bouton droit sur le terminal d'entrée de chaque variable et sélectionnez Créer » Constante. Laissez les valeurs Faux et zéro par défaut.

21. Placez un VI Initialiser un tableau.vi dans la structure (appelez la Palette des fonctions ou naviguez jusqu'à Programmation » Tableau » Initialiser un tableau). Cliquez avec le bouton droit sur le terminal élément puis cliquez sur Créer » Constante. Définissez sa valeur à 0. Faites de même pour le terminal d'entrée taille de la dimension et définissez la valeur constante à 2, puisque vous devez écrire deux voies de données de température dans le tableau. Câblez ensuite la sortie tableau initialisé à travers la structure Séquence jusqu'au bord de la boucle cadencée comme indiqué ci-dessous.

22. Insérez maintenant les valeurs moyennes dans le tableau. Déposez deux instances du VI Insérer dans un tableau.vi (Programmation » Tableau » Insérer dans un tableau) dans la boucle cadencée et câblez la sortie moyenne au terminal nouvel élément comme le montre la figure ci-dessous.

Déposez un VI Insérer un tableau.vi derrière le précédent pour construire le tableau, et câblez la sortie tableau en sortie à l'entrée tableau. Le premier point de données de la moyenne sur la voie AI0 est stocké par défaut au niveau de l'indice 0. Créez une constante de valeur 1 à l'entrée indice du deuxième VI Insérer un tableau.vi pour placer le point de données de la moyenne sur la voie AI1 dans l'indice suivant.

23. Déposez une instance des variables Data Buffer et Stop depuis l'arborescence du projet dans la boucle cadencée. Câblez la sortie tableau en sortie dans la variable FIFO Data Buffer pour transférer les données dans la boucle While. Câblez ensuite la variable Stop au terminal condition de boucle comme indiqué ci-dessous.

24. Terminez l'application en créant une interface utilisateur pour visualiser les données de température et arrêtez l'application en cours d'exécution. Cliquez avec le bouton droit sur la face-avant pour appeler la Palette des commandes et sélectionnez Argent » Graphe » Graphe déroulant. Sélectionnez ensuite Argent » Booléen » Bouton Stop. Disposez les éléments de la face avant comme indiqué ci-dessous.

25. Terminez le câblage de la boucle While basse priorité. Déposez une instance des variables Data Buffer et Stop dans la boucle. Câblez la sortie du Data Buffer au graphe déroulant, et la valeur de la commande du bouton Stop à la variable Stop afin de vous assurer que les deux boucles s'arrêteront au même moment. Câblez également la valeur Stop à la condition de boucle.

26. Placez un VI Attendre (ms).vi pour appliquer un cadencement à cette tâche. Cliquez avec le bouton droit sur le terminal d'entrée, sélectionnez Créer » Constante, puis entrez une valeur de 200 afin que l'exécution soit plus lente que celle de la boucle While haute priorité. Enfin, faites un double-clic sur l'étiquette Graphe déroulant pour la sélectionner et donnez-lui un nom facilement identifiable comme Température.

27. Votre application d'acquisition et d'analyse est maintenant terminée. Une fois votre matériel CompactRIO connecté, vous pouvez exécuter le code sur la cible.

IV - Ressources supplémentaires

Est-ce que j'ai besoin d'un système temps réel ?

Utiliser le mode de balayage NI CompactRIO avec le logiciel NI LabVIEW

V - Téléchargement

Téléchargez LabVIEW par ici !