Développement de classes LabVIEW

Aide LabVIEW 2014

Date d'édition : June 2014

Numéro de référence : 371361L-0114

»Afficher les infos sur le produit
Télécharger l'aide (Windows uniquement)

Les concepts de la programmation orientée objet de LabVIEW sont identiques à ceux des autres langages de programmation orientée objet. Cependant, LabVIEW étant un environnement de programmation graphique de flux de données, il existe des différences notables en ce qui concerne la manipulation et l'interaction entre LabVIEW et les données de classe LabVIEW, et la mise au point du code de classe.

Dans LabVIEW, les objets sont passés par valeur plutôt que par référence. LabVIEW crée des copies de l'objet en suivant les règles utilisées traditionnellement pour les clusters et tableaux.

Constructeurs et destructeurs

Dans la programmation orientée objet LabVIEW, les constructeurs et les destructeurs sont implicites. Vous n'avez pas besoin d'appeler un constructeur pour initialiser des données de classe LabVIEW. LabVIEW appelle un constructeur par défaut à chaque fois qu'il faut initialiser une classe. En général, l'initialisation d'une classe se produit sur une commande de la face-avant ou une constante du diagramme. LabVIEW initialise les valeurs de la classe sur les valeurs par défaut que vous avez définies dans la commande de données privées. Lorsque LabVIEW n'a plus besoin des informations sur la classe LabVIEW, il libère la mémoire comme dans le cas de clusters et de tableaux. Si vous voulez définir une autre valeur pour les données de la classe, vous devez créer un VI membre qui définit la nouvelle valeur. Par exemple, si vous définissez la valeur par défaut de Nombre de vitesses dans la classe Véhicule à 3 lorsque vous créez la classe Véhicule et que vous assignez une autre valeur au paramètre Nombre de vitesses dont la classe Camion hérite, vous devez créer un VI membre qui change la valeur dans la classe Véhicule. Pour définir une nouvelle valeur, vous pouvez créer un VI membre qui n'a pas d'entrées mais qui renvoie une classe avec la valeur que vous voulez assigner à Nombre de vitesses, ce qui crée une constante du type de données de la classe sur le diagramme.

Aplatir ou redresser des données

LabVIEW stocke les données sous forme de données aplaties. Les fonctions Aplatir en chaîne et Redresser à partir d'une chaîne peuvent traiter tous les types de données de classe. LabVIEW aplatit et redresse les données automatiquement. Alors que tous les descripteurs de types conservent le type de données des types de données aplaties dans LabVIEW, les données aplaties de classe LabVIEW conservent elles-mêmes ces informations ainsi que les informations sur la version de la classe. Comme la classe LabVIEW conserve les informations nécessaires à son redressement, LabVIEW ne peut pas redresser les données et renvoie un message d'erreur si vous déplacez ou supprimez la classe et qu'elle devient introuvable. LabVIEW se comporte de la même façon que lorsqu'il ne trouve pas un sous-VI : si vous ouvrez le VI membre, vous pouvez remarquer que la commande qui devrait contenir les données de classe LabVIEW manquantes est grisée. Lorsque vous chargez la classe LabVIEW qui correspond à la commande brisée, les données sont redressées et la commande n'est plus brisée.

Remarque  Vous pouvez aussi utiliser les fonctions Aplatir en XML et Redresser à partir d'XML pour traiter les données de classe.

Mutation des données

Une commande de classe LabVIEW renvoie une mise en garde si les données de la commande sont écrites dans une version de la classe LabVIEW plus récente que celle que LabVIEW a en mémoire. LabVIEW incrémente le numéro de version de la classe LabVIEW à chaque fois que vous modifiez le type de données de la commande de données privées ou l'héritage de la classe. Vous pouvez afficher le numéro de version de la classe LabVIEW dans la boîte de dialogue Propriétés de la classe. LabVIEW incrémente automatiquement le numéro de version de la classe si :

  • l'héritage de la classe LabVIEW est modifié.
  • la commande de données privées de la classe LabVIEW est modifiée. Ces modifications comprennent l'ajout, le remplacement, la réorganisation ou la suppression de commandes ; la modification de la représentation d'une commande ; ou des mises à jour à partir de définitions de type modifiées.
  • la classe LabVIEW est chargée dans une nouvelle version de LabVIEW.
  • vous incrémentez manuellement le numéro de version dans la boîte de dialogue Propriétés de la classe. Vous pourriez le faire pour indiquer une nouvelle révision de la classe.

Si vous renommez une classe, LabVIEW considère qu'il s'agit d'une nouvelle classe, supprime l'historique de mutation de la classe et réinitialise le numéro de version à 1.0.0.0. LabVIEW renomme la classe dans les cas suivants :

  • Vous renommez la classe en sélectionnant Fichier»Enregistrer sous dans le menu local.
  • Vous déplacez la classe pour la mettre dans une bibliothèque propriétaire.
  • Vous déplacez la classe pour l'extraire d'une bibliothèque propriétaire.
  • Vous renommez le fichier .lvclass sur le disque.
Remarque  Si vous décidez de restaurer le nom d'origine de la classe sans effectuer d'autre modification, la classe ne sera pas identique à la classe d'origine car l'historique de mutation n'existe plus. Par exemple, si vous renommez la classe Véhicule "Véhicule 1", puis que vous restaurez le nom Véhicule, la classe Véhicule n'est plus identique à la classe d'origine

Le suivi du numéro de version de la classe LabVIEW est pratique pour les utilisateurs de classes LabVIEW qui développent des applications avec des classes LabVIEW. Supposons, par exemple, que vous ayez une classe LabVIEW dans une application qui utilise un entier 32 bits non signé dans la commande de données privées de la classe. Un développeur de classes LabVIEW peut vous envoyer une version de la classe LabVIEW qui change la commande numérique de la commande de données privées en nombre à virgule flottante double précision. Comme LabVIEW effectue un suivi des modifications de version et peut aplatir et redresser les données de toutes les classes LabVIEW, vous pouvez remplacer l'ancienne version de la classe LabVIEW par la nouvelle et exécuter le programme sans le modifier.

Remarque  Si vous essayez de redresser des donnée à partir d'une version ultérieure de la classe LabVIEW, LabVIEW renvoie une erreur. Par exemple, cette erreur peut survenir si les données ont le numéro de version 1.0.0.3 alors que la classe LabVIEW en mémoire a le numéro de version 1.0.0.2.

Lorsque LabVIEW rencontre une version antérieure de la classe LabVIEW, LabVIEW gère la mutation de données d'une des façons suivantes :

  • Si vous supprimez des classes de la hiérarchie de classes LabVIEW, LabVIEW supprime les données aplaties de la classe supprimée. Par exemple, la classe C hérite de la classe B, qui hérite de la classe A. Si vous modifiez l'héritage de la classe C de sorte qu'elle hérite directement de la classe A, LabVIEW supprime les données aplaties de la classe B dans cette instance.
  • Si vous ajoutez des niveaux dans la hiérarchie de classes LabVIEW, LabVIEW insère les données par défaut de la classe que vous insérez. Par exemple, la classe C hérite de la classe A. Si vous modifiez l'héritage de la classe C de sorte qu'elle hérite de la classe B, qui hérite de la classe A, LabVIEW insère les données par défaut de la classe B.
  • Si vous ajoutez un élément au cluster de données privées de la classe à la fin de l'ordre de tabulation, LabVIEW redresse les anciennes données et ajoute les données par défaut de la classe à la fin.
  • Si vous supprimez un élément du cluster de données privées de la classe sans ajouter de nouveaux éléments, LabVIEW redresse les anciennes données et supprime les informations concernant l'élément.
  • Si vous modifiez l'ordre de tabulation du cluster de données privées de la classe, LabVIEW réorganise les données redressées en conséquence.
  • Si vous ajoutez, supprimez, remplacez ou réorganisez le cluster de données privées de la classe dans la même session d'édition, LabVIEW crée et exécute une procédure pour muter correctement les anciennes données en combinant les étapes précédentes.

LabVIEW applique toujours les mutation sur plusieurs versions en série, de 1.0.0.2 à 1.0.0.6, par exemple.

Remarque  Vous ne pouvez pas restaurer une classe LabVIEW si sa version a été incrémentée. LabVIEW n'a pas assez d'informations pour annuler les modifications apportées aux données des commandes et indicateurs d'une classe LabVIEW. Pour annuler les modifications en cours, ne les enregistrez-pas. Déchargez la classe et tous les VIs qui font référence à la classe puis rechargez-les à partir du disque.

Reportez-vous au document de support suivant sur ni.com pour en savoir plus sur la façon dont LabVIEW transforme des données quand vous éditez une classe LabVIEW.

Conversion de type des classes LabVIEW

Vous pouvez convertir des classes en un type plus générique en utilisant la fonction En une classe plus générique et en un type plus spécifique avec la fonction En une classe plus spécifique. Vous pouvez aussi utiliser ces fonctions pour les types de données refnum dotés d'une hiérarchie d'héritage, comme Refnums de commandes de VI Serveur ; les fonctionnalités sont les mêmes. L'utilisation de la fonction En une classe plus générique ne modifie pas les données mais change le type du fil de liaison qui transfère les données. Cependant, la fonction n'a aucun effet lorsque le VI s'exécute. La fonction En une classe plus générique est surtout utilisée pour éliminer les points de coercition lorsqu'une convention de code stricte empêche ces conversions de données.

La fonction En une classe plus spécifique ne modifie les données que si une erreur survient. Si les données sur le fil de liaison à l'exécution ne sont pas celles de la classe plus spécifique, la fonction renvoie une erreur et les données en sortie sont les valeurs par défaut du type du fil de liaison. La fonction En une classe plus spécifique est surtout utilisée pour tester le type d'une valeur d'une classe parente. Il arrive souvent que les programmeurs connectent le fil de liaison d'une classe parente à plusieurs appels de la fonction En une classe plus spécifique, chaque appel étant connecté à une classe plus spécifique différente, puis qu'ils exécutent du code différent selon la fonction En une classe plus spécifique qui ne renvoie pas d'erreur. Ceci n'est vraiment pas efficace. Si vous pensez utiliser cette méthode de test et que vous êtes autorisé à modifier la classe parente, vous devriez écrire un VI membre dynamique sur la classe parente et le faire redéfinir par chaque classe enfant avec la fonctionnalité appropriée à chacune des classes enfants.

Si, lors de l'exécution, LabVIEW détecte que vous avez câblé un objet d'une classe enfant à un sous-VI qui accepte un objet d'une classe parente, LabVIEW peut convertir la sortie du sous-VI en objet de classe enfant automatiquement. Il n'est pas nécessaire que vous utilisiez la fonction En une classe plus spécifique pour effectuer la conversion automatique en un type plus spécifique. Toutefois, la conversion automatique en un type plus spécifique ne peut avoir lieu que si LabVIEW peut garantir que l'objet de la classe que vous câblez au sous-VI est compatible avec l'entrée que le sous-VI accepte. Par exemple, si vous stockez un objet de classe dans un variant et que vous câblez les données du variant à un sous-VI, LabVIEW ne peut pas garantir que le sous-VI contient des données qui appartiennent à la même classe que les données stockées par le variant à l'origine. Pour aider LabVIEW à vérifier que l'objet de la classe que vous câblez au sous-VI est compatible avec l'objet de la classe que le sous-VI accepte, utilisez la fonction Préserver la classe à l'exécution. Si les deux objets sont incompatibles, la fonction renvoie une erreur et définit la classe des données en sortie à la classe parente que le sous-VI accepte. Vous pouvez aussi utiliser cette fonction avec des références de valeurs de données. Le nœud de bordure Lire / Écrire une référence de valeur de données doit préserver le type à l'exécution. Vous pouvez utiliser la fonction Préserver la classe à l'exécution pour vous assurer que l'objet de la classe que vous câblez au nœud Écrire une référence de valeur de données est compatible avec l'objet de classe que vous avez câblé au nœud de bordure Lire une référence de valeur de données.

Remarque  LabVIEW ne peut pas convertir automatiquement les sous-VIs récursifs vers un type plus spécifique. La conversion automatique vers un type plus spécifique brise les VIs appelants s'ils appellent des sous-VIs récursifs sur le diagramme de VIs de dispatch dynamique ou dans des structures Élément en place pour des références de valeurs de données. Utilisez la fonction Préserver la classe à l'exécution sur le diagramme du sous-VI récursif pour vérifier que l'objet de classe que vous câblez au sous-VI est compatible avec l'objet de classe accepté par le sous-VI. Si les objets de classe sont compatibles, les VIs appelants se trouvant hors du cycle récursif ne se brisent pas.

Verrouillage et déverrouillage des classes LabVIEW

Vous pouvez verrouiller les classes LabVIEW pour que les utilisateurs de classes LabVIEW ne puissent pas voir les VIs membres qui font partie de l'implémentation interne de l'application. En verrouillant une classe LabVIEW, vous empêchez l'accès aux VIs membres privés, minimisant ainsi le risque d'introduction d'erreurs dans l'application. Tout comme pour les bibliothèques de projet, l'ajout d'une protection par mot de passe pour les classes LabVIEW n'ajoute pas de protection par mot de passe pour les VIs membres. Vous devez protéger individuellement les VIs membres par mot de passe.

Si vous verrouillez une classe LabVIEW, seul le type de données apparaît dans la fenêtre d'Aide contextuelle lorsque vous faites passer le curseur sur le fil de liaison de la classe. Si vous faites passer le curseur sur le fil de liaison d'une classe LabVIEW qui n'est pas verrouillée, la fenêtre d'Aide contextuelle affiche les données privées de la classe ou celles de toutes les classes parentes non verrouillées. Ce comportement est similaire à l'affichage des informations des sondes génériques. Reportez-vous à la section Utilisation de sondes dans les classes LabVIEW pour obtenir des informations sur l'utilisation de sondes génériques avec les classes LabVIEW.

Remarque  Notez que les fenêtres d'Aide contextuelle du fil de liaison et de la commande de la classe LabVIEW affichent des informations différentes. La commande de classe LabVIEW affiche des informations descriptives sur la classe pour les utilisateurs finaux, alors que le fil de liaison de classe LabVIEW affiche des informations supplémentaires sur le type de données pour l'utilisateur de la classe LabVIEW.

Les utilisateurs de classes LabVIEW ne peuvent afficher que les informations que vous fournissez sur la classe ; prenez soin de documenter suffisamment la classe LabVIEW que vous développez. Vous pouvez ajouter des descriptions de classe dans la boîte de dialogue Propriétés de la classe et ajouter des descriptions de VIs membres dans la boîte de dialogue Propriétés du VI.

Utilisation de sondes dans les classes LabVIEW

Vous pouvez utiliser des sondes génériques et des sondes personnalisées pour mettre au point des classes LabVIEW.

Vous pouvez utiliser des sondes génériques sur les fils de liaison des classes LabVIEW. Une sonde générique placée sur le fil de liaison d'une classe LabVIEW affiche le nom de la classe à l'exécution, ainsi que les données privées de la classe et de toutes les classes parentes. Si vous utilisez la sonde générique sur une classe LabVIEW verrouillée, elle n'affiche que le nom de la classe à l'exécution et les données privées non verrouillées de la hiérarchie de la classe. Dans l'illustration suivante, la classe Véhicule, à gauche, est verrouillée et LabVIEW n'affiche pas les données privées de la classe : Nombre de vitesses, Nombre de portes, Couleur, Marque et Modèle. La classe Camion n'est pas verrouillée et LabVIEW affiche ses données privées. Notez que LabVIEW n'affiche pas les données privées héritées de la classe Véhicule dans la sonde générique de la classe Camion car la classe Véhicule est verrouillée.

Il est utile de créer des sondes par défaut personnalisées pour les classes LabVIEW. Vous ne pouvez utiliser une sonde personnalisée que sur un fil de liaison de classe LabVIEW qui a exactement le même type de classe que le fil de liaison de la classe ou d'une classe ancêtre. Le développeur d'une classe LabVIEW peut créer des sondes personnalisées membres de la classe capables d'afficher directement les données privées de la classe. Un utilisateur de classes LabVIEW peut créer une sonde par défaut personnalisée capable d'afficher toutes les informations disponibles en utilisant les méthodes publiques de la classe.

Un développeur de classes peut définir une sonde personnalisée comme sonde par défaut pour un utilisateur de classes LabVIEW. La sonde générique d'une classe LabVIEW verrouillée ne permet pas à l'utilisateur de classes LabVIEW d'accéder aux informations sur la valeur des données car les données sont privées. En créant une sonde personnalisée et en la définissant comme sonde par défaut pour une classe LabVIEW, le développeur de la classe fournit à l'utilisateur de la classe LabVIEW une sonde par défaut qui affiche les données appropriées une fois la classe verrouillée. La sonde personnalisée doit être membre de la classe LabVIEW pour que le développeur LabVIEW puisse la définir comme sonde par défaut.

Distribution d'une classe LabVIEW à d'autres développeurs et utilisateurs

Vous pouvez distribuer la classe LabVIEW que vous développez à d'autres développeurs de classes LabVIEW et à des utilisateurs de classes LabVIEW. Il existe plusieurs façons de distribuer une classe ; vous devez donc choisir celle qui répond le mieux à vos besoins. Vous pouvez utiliser l'Application Builder pour créer un fichier zip afin de distribuer une ou plusieurs classes. Vous pouvez aussi verrouiller la classe LabVIEW avant de la distribuer pour que les utilisateurs de classes LabVIEW n'aient pas accès aux données privées et aux VIs membres. En verrouillant la classe, vous évitez que les utilisateurs n'introduisent des erreurs dans l'application.

Astuce  Vous pouvez aussi accéder aux classes LabVIEW via un assembly Interop .NET. LabVIEW peut générer une classe .NET pour les classes LabVIEW que vous spécifiez, et vous pouvez accéder à ces classes .NET via un assembly .NET.

CET ARTICLE VOUS A-T-IL ÉTÉ UTILE ?

Pas utile