Réentrance : autorisation d'appels simultanés au même sous-VI

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)

Par défaut, quand LabVIEW appelle le même sous-VI à partir de plusieurs emplacements au sein du même VI ou de différents VIs, une seule instance de ce sous-VI peut s'exécuter à la fois. Cette limitation se produit car le sous-VI ne réserve qu'un seul espace mémoire pour stocker ses données ; par conséquent, toutes les instances du sous-VI doivent se relayer pour utiliser cet espace de données. Cependant, si vous configurez le sous-VI pour une exécution réentrante, LabVIEW peut exécuter toutes les instances du sous-VI simultanément. En mode d'exécution réentrante, LabVIEW alloue des copies ou clones de l'espace de données pour que des instances séparées du sous-VI aient des emplacements distincts pour stocker leurs données.

Remarque   (Module FPGA) Les VIs FPGA sont réentrants par défaut.

Types d'exécution réentrante

LabVIEW fournit les types suivants de VIs réentrants :

  • Exécution non réentrante—LabVIEW alloue un seul espace de données qui sera utilisé par toutes les instances du sous-VI.
  • Exécution réentrante avec copies partagées—LabVIEW alloue initialement une copie par processeur sur la machine, créant ainsi un pool de copies à partager entre instances. Lorsqu'une instance d'un sous-VI s'exécute, elle se déclare propriétaire de l'une des copies préallouées, la renvoyant au pool à la fin de son exécution. Si aucune copie n'est disponible lorsqu'une instance doit s'exécuter, LabVIEW alloue une nouvelle copie sur demande, élargissant ainsi le pool de copies.
  • Exécution réentrante avec copies préallouées—LabVIEW alloue une copie séparée à chaque instance du sous-VI.

Pour configurer les paramètres de réentrance d'un VI, reportez-vous à la page Exécution de la boîte de dialogue Propriétés du VI.

Sélection du type d'exécution réentrante à utiliser

Considérations d'utilisation Pas de réentrance Réentrance avec copies partagées Réentrance avec copies préallouées
Capacité de maintenir l'état, tel que dans les registres à décalage non initialisés Maintient un seul état pour toutes les instances. Les sous-VIs non réentrants partagent le même stockage de données pour toutes les instances. Ne maintient pas l'état. Dans la mesure où chaque instance est susceptible d'utiliser une copie différente à chaque fois qu'elle s'exécute, LabVIEW ne peut pas garantir que les données au sein d'une copie particulière appartiennent à la même instance pour tous les appels. Maintient l'état pour chaque instance. Dans la mesure où chaque instance appelle sa propre copie réservée, les données de cette copie appartiennent toujours à cette instance.
Déterminisme pour les VIs appelants multiples et simultanés L'attente dépend des VIs appelants devant s'exécuter — Le temps requis pour qu'une instance d'un sous-VI commence à s'exécuter varie en fonction du nombre d'instances qui doivent s'exécuter avant elle. Risque d'attente — Dans la mesure où LabVIEW alloue des copies sur demande, l'exécution réentrante d'une copie partagée empêche l'exécution déterministe des VIs appelants. Pas d'attente — Toutes les allocations de mémoire se produisent à l'avance, offrant ainsi une utilisation de la mémoire et une vitesse d'exécution déterministes.
Temps système dû aux appels Moyen Le plus élevé Le plus faible
Utilisation de la mémoire Minimal — LabVIEW n'alloue qu'un seul espace de données au sous-VI. Moyen — LabVIEW ne doit allouer des copies qu'au nombre maximum d'instances s'exécutant simultanément. Maximal — LabVIEW doit allouer une copie à chaque instance du sous-VI.
Remarque   (Module FPGA) Les VIs réentrants à copies partagées et à copies préallouées se comportent de la même manière lorsqu'ils sont utilisés dans des VIs FPGA.

Appels asynchrones de plusieurs instances d'un VI réentrant

Reportez-vous à la rubrique Appels asynchrones de plusieurs instances d'un VI pour une exécution en parallèle pour obtenir des informations sur les appels asynchrones de VIs réentrants.

Affichage de la face-avant de la copie d'un VI réentrant

Chaque copie a une face-avant individuelle. Pour afficher la face-avant quand la copie n'est pas en cours d'exécution, double-cliquez sur l'instance du sous-VI pour lequel vous souhaitez afficher la face-avant. Vous pouvez aussi définir le VI réentrant pour qu'il ouvre sa face-avant au cours de l'exécution. La barre de titre de ce sous-VI contient (clone) afin d'indiquer qu'il s'agit d'une copie plutôt que du VI d'origine. Pour accéder au VI d'origine à partir de la copie, sélectionnez Affichage»Parcourir les relations»Éléments réentrants. Vous pouvez également utiliser la méthode Face-avant:Ouvrir au sein du sous-VI pour ouvrir par programmation la face-avant de chaque copie en cours d'exécution. La barre de titre de ce sous-VI contient (clone) afin d'indiquer qu'il s'agit d'une copie du VI source.

Vous pouvez interagir avec la face-avant d'un VI réentrant de la même manière qu'avec la face-avant d'un VI non réentrant, notamment de l'une des manières suivantes :

Exemples d'exécution réentrante

Les deux sections suivantes décrivent des exemples de VIs réentrants qui attendent et ne partagent pas de données.

Exécution simultanée d'instances de sous-VIs

Le diagramme suivant alerte l'utilisateur quand son Heure du déjeuner et son Heure de pause arrivent. Cependant, le paramètre de réentrance du VI Alarm Timer est critique pour produire des résultats précis.

L'utilisateur spécifie une Heure du déjeuner et une Heure de pause. Dans le contexte de cet exemple, considérons que l'Heure du déjeuner est 12h00 et l'Heure de pause est 10h00.
Le VI Alarm Timer attend jusqu'à l'heure spécifiée en entrée. Dans la mesure où les instances du VI Alarm Timer apparaissent dans des parties parallèles du diagramme, il est impossible de prédire quelle instance s'exécute en premier. Dans le contexte de cet exemple, considérons que le chronomètre Heure du déjeuner s'exécute en premier.

Si le VI Alarm Timer est configuré pour une exécution non réentrante, le chronomètre Heure de pause ne peut pas démarrer son exécution avant 12h00 car il doit attendre que le chronomètre Heure du déjeuner finisse son exécution. Ce délai empêche le chronomètre Heure de pause de déclencher une alarme à 10h00. Par conséquent, pour s'assurer que les deux instances du sous-VI puissent s'exécuter simultanément et déclencher leur alarme à l'heure appropriée, vous pouvez configurer le VI Alarm Timer pour qu'il utilise l'un des types d'exécution réentrante.

Stockage des données entre divers appels de chaque instance d'un sous-VI

Si vous appelez plusieurs fois chaque instance d'un sous-VI qui stocke des données, vous devez utiliser une exécution réentrante avec copies préallouées. Par exemple, vous créez un sous-VI MoyExp, qui calcule une moyenne exponentielle courante de quatre points de données.

Un autre VI utilise le sous-VI MoyExp pour calculer la moyenne glissante de deux voies d'acquisition de données. Le VI surveille la tension à deux points d'un processus et affiche la moyenne exponentielle glissante sur un graphe déroulant. Le diagramme du VI contient deux instances du sous-VI MoyExp. Les appels se font en alternance : un pour la voie 0, puis un pour la voie 1. Supposons que la voie 0 s'exécute en premier. Si le sous-VI MoyExp n'est pas réentrant, l'appel pour la voie 1 utilise la moyenne calculée par l'appel pour la voie 0, et l'appel pour la voie 0 utilise la moyenne calculée par l'appel pour la voie 1. En transformant le sous-VI MoyExp en sous-VI réentrant, chaque appel peut s'exécuter indépendamment sans partager de données.

Redéfinition des paramètres de réentrance de sous-VIs dans des structures cadencées

(Real-Time, Windows) Vous pouvez configurer LabVIEW pour préallouer ou partager des copies d'un VI réentrant à clones partagés dans une structure boucle cadencée ou séquence cadencée. Par exemple, si vous placez un VI réentrant à clones partagés dans une structure boucle cadencée ou séquence cadencée, vous pouvez définir la structure pour qu'elle préalloue les copies aux instances du VI réentrant que vous appelez dans la structure. Les instances du VI réentrant que vous appelez en dehors de la structure continuent de partager les copies. Pour définir l'allocation d'un VI dans une boucle cadencée ou une structure Séquence cadencée, faites un clic droit sur la structure, sélectionnez Allocation de clones partagés et sélectionnez une des options suivantes :

  • Automatique — LabVIEW décide si la structure doit être définie à Préallouer ou Allouer selon les besoins en fonction du contexte de la structure. LabVIEW se charge d'ajouter l'élément du menu contenant le texte qui indique le paramètre choisi. Par exemple, si LabVIEW choisit Préallouer, l'élément du menu sera Automatique (Préallouer).
  • Préallouer — LabVIEW crée un VI clone pour chaque appel au VI réentrant à l'intérieur de la structure. La boucle cadencée ou la structure Séquence cadencée affiche une icône pour indiquer que LabVIEW préalloue des clones à chaque VI réentrant de la structure.
  • Allouer selon les besoins — LabVIEW ne crée le VI clone que lorsque vous appelez le VI réentrant dans la structure. La boucle cadencée ou la structure Séquence cadencée affiche une icône pour indiquer que LabVIEW partage les clones entre tous les VIs réentrants de la structure.

Mise au point de VIs réentrants

Pour procéder à la mise au point d'un VI réentrant, sélectionnez Fichier»Propriétés du VI pour afficher la boîte de dialogue Propriétés du VI, sélectionnez ensuite Exécution dans le menu déroulant et cochez la case Autoriser la mise au point.

Pour mettre au point une instance spécifique d'un VI ayant des copies préallouées, ouvrez l'instance du sous-VI. Bien que vous ne puissiez pas modifier la copie du VI, vous pouvez utiliser le diagramme de cette copie à des fins de mise au point. Par exemple, vous pouvez placer des points d'arrêt, utiliser des sondes, activer l'animation de l'exécution et exécuter le VI en mode pas à pas.

Pour mettre au point une instance d'un VI qui partage des copies, placez des points d'arrêt, des sondes et l'animation de l'exécution au sein du VI source, et non dans la copie du VI. Les copies de VIs ne conservent pas ces paramètres entre appels.

Remarque  Quand vous mettez au point des applications et des bibliothèques partagées, vous ne pouvez pas mettre au point des faces-avant réentrantes qui ont été créées par la fonction Ouvrir une référence de VI. De même, vous ne pouvez pas mettre au point des faces-avant réentrantes qui servent de points d'entrée à des bibliothèques partagées LabVIEW.

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

Pas utile