Règles pour l'utilisation de MathScript LabVIEW dans des applications temps réel (module MathScript RT)

Aide du module LabVIEW 2012 MathScript RT

Date d'édition : June 2012

Numéro de référence : 373123C-0114

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

Vous pouvez déployer des VIs qui comportent des nœuds MathScript LabVIEW dotés de fonctions définies par l'utilisateur et de certaines fonctions MathScript intégrés sur des cibles RT. Cependant, selon les fonctions, les types de données et la syntaxe utilisés, il se pourrait que LabVIEW exécute du code pendant l'exécution susceptible d'augmenter le jitter et d'engendrer des durées d'exécution sans limites dans l'application temps réel. S'il est important que l'application soit déterministe, utilisez les règles basées sur les tests de National Instruments et énoncées dans les sections suivantes afin de réduire le jitter et d'obtenir des durées d'exécution limitées pour les applications temps réel qui comportent des nœuds MathScript.

Outre ces règles MathScript, suivez les recommandations techniques visant à réduire le jitter dans les applications LabVIEW. De plus, vous pouvez utiliser les fonctions MathScript de la classe rt pour mettre au point et isoler les sources de jitter sur les cibles RT.

Configuration de nœuds MathScript

Placez les nœuds MathScript dans un VI temps critique ou une structure cadencée.

Détails

Vous devez placer les nœuds MathScript dans un VI temps critique ou une structure Boucle cadencée ou Structure cadencée pour assurer qu'ils s'exécutent avec la priorité qui convient. La priorité critique des VIs est la plus élevée. De même, les structures cadencées vous permettent de contrôler la priorité avec laquelle le nœud MathScript s'exécute par rapport aux autres structures cadencées du diagramme. Vous pouvez aussi placer un sous-VI doté d'un nœud MathScript dans une structure cadencée.

Si vous placez un nœud MathScript dans une structure cadencée, vous devez configurer la structure afin qu'elle préalloue des clones pour les instances du nœud MathScript appelées dans la structure. Cliquez avec le bouton droit sur la structure cadencée et sélectionnez Allocation de clones partagés»Préallouer dans le menu local pour activer la préallocation de clone. La structure Boucle cadencée ou Séquence cadencée affiche l'icône pour indiquer que LabVIEW préalloue des clones à chaque VI réentrant dans la structure. Si vous placez un sous-VI doté d'un nœud MathScript dans une structure cadencée, vous devez utiliser la page Exécution de la boîte de dialogue Propriétés du VI pour configurer le sous-VI et tous les autres VIs de la hiérarchie de sorte qu'ils soient réentrants. Par exemple, si vous placez un sous-VI dans une structure cadencée et que ce sous-VI appelle un autre sous-VI qui comporte un nœud MathScript, vous devez configurer les deux VIs pour qu'ils soient réentrants.

Désactivez les options non essentielles, comme la mise au point, pour les VIs qui contiennent des nœuds MathScript.

Détails

Dans un VI doté d'un nœud MathScript, sélectionnez Fichier»Propriétés du VI pour afficher la boîte de dialogue Propriétés du VI, puis Exécution dans le menu déroulant Catégorie. Désélectionnez les options Autoriser la mise au point et Gestion automatique des menus au lancement. Vous pouvez aussi cliquer avec le bouton droit sur un VI dans la fenêtre de l'Explorateur de projet et sélectionner Propriétés dans le menu local pour ouvrir la boîte de dialogue Propriétés du VI. Lorsque ces options sont désactivées, le VI utilise moins de mémoire, se compile plus vite et produit moins de jitter.

Évitez les points de coercition sur les terminaux de sortie des nœuds MathScript.

Détails

LabVIEW détermine les types de données des variables dans les nœuds MathScript lors de l'édition. Si vous configurez manuellement le terminal de sortie d'une variable en utilisant un autre type de données que celui qui est déterminé par LabVIEW, LabVIEW contraint si possible la valeur au type de données que vous avez sélectionné et place un point de coercition sur le terminal de sortie. Les points de coercition peuvent indiquer les endroits où le code utilise davantage de mémoire et augmente son temps d'exécution.

Pour éliminer les points de coercition, cliquez avec le bouton droit sur le terminal de sortie et sélectionnez Choisir le type de données»Sélection automatique du type dans le menu local pour configurer le terminal avec le type de données déterminé par LabVIEW. Si LabVIEW ne peut déterminer le type de données d'une variable qu'à l'exécution, l'option Sélection automatique du type est grisée pour indiquer que le type de données de la variable ne convient pas aux applications déterministes.

Écriture de scripts MathScript

Placez un point-virgule à la fin de chaque ligne de script.

Détails

Lorsque vous placez un point-virgule après une ligne de script, MathScript n'affiche pas la sortie de cette commande. Le fait de ne pas utiliser de point-virgule cause des durées d'exécution sans limites pour le script.

Remarque Remarque  Vous n'avez pas besoin de mettre de point-virgule après les premières lignes des boucles For et des instructions Switch et If-Else, ni après else et end dans ces constructions.
Utilisez la syntaxe recommandée pour rédiger les scripts et les fonctions définies par l'utilisateur que vous utilisez dans des VIs temps critique et des structures cadencées.

Détails

National Instruments a testé un sous-ensemble de la syntaxe possible dans MathScript LabVIEW, comme les opérations de matrices et les boucles, et déterminé que cette syntaxe s'exécute typiquement dans une durée limitée lorsqu'elle est utilisée en suivant les règles énoncées dans cette rubrique. Toute autre syntaxe risque d'engendrer une augmentation du jitter et des durées d'exécution sans limites dans l'application.

Assurez-vous que les entrées des opérateurs ont le plus petit type de données possible. Lorsque vous remplacez une partie d'un vecteur ou d'une matrice par d'autres valeurs, assurez-vous aussi que ces valeurs ont la plus petite forme possible.

Détails

Pour certaines opérations, LabVIEW risque de ne pas renvoyer le plus petit type de données possible. Par exemple, si vous multipliez un vecteur ligne par un vecteur colonne, LabVIEW risque de renvoyer une matrice à un élément comme résultat plutôt qu'un nombre scalaire car le résultat de la multiplication de deux vecteurs peut être une matrice. Indexez le résultat scalaire à partir de la matrice comme le montre l'exemple suivant :

a = ones(1, 3);
b = ones(3, 1);
c = a * b;
d = c(1) + 1.5;

Pour afficher le type de données d'une variable, activez la mise en évidence du type de données ou cliquez en dehors du nœud MathScript puis placez le curseur sur une variable du script pour afficher le type de données dans la fenêtre d'Aide contextuelle.

Préallouez les tableaux que vous définissez dans une boucle et évitez de redimensionner les tableaux à l'intérieur de boucles.

Détails

Ne changez pas la taille des tableaux qui se trouvent dans des boucles For ou While. Par exemple, évitez les syntaxes qui redimensionnent les tableaux pendant les itérations d'une boucle, comme dans l'exemple suivant :

a = [];
for i = 1:5
     a = [a, i];
end

Au lieu de construire un tableau dans une boucle, utilisez les fonctions ones ou zeros pour préallouer le nombre maximum d'éléments dont vous pensez avoir besoin, puis remplacez les éléments comme le montre l'exemple suivant :

a = zeros(1, 5);
for i = 1:5
     a(i) = i;
end

Si vous devez créer un tableau dans une boucle, n'utilisez pas le tableau en dehors de la boucle ou pendant une itération ultérieure de la boucle. Par exemple, dans le script suivant, temp est défini à la première itération de la boucle For puis utilisé lors des deuxième et troisième itérations :

a = zeros(2, 5);
for i = 1:3
     if i == 1
          temp = [2; 2];
     else
          temp = 2 * temp;
          a(:, i) = temp;
     end
end

Cependant, vous pouvez utiliser une syntaxe similaire à l'exemple suivant, dans lequel temp est défini et utilisé à chaque itération de la boucle, et le même tableau n'est pas réutilisé par plusieurs itérations.

a = zeros(2, 5);
for i = 1:3
     temp = [i; i + 1];
     a(:, i) = temp;
end

Ne définissez les matrices qu'avec des éléments scalaires. N'utilisez pas de vecteurs ou d'autres matrices pour définir une matrice.

Détails

Par exemple, si vous décalez l'ordre des colonnes d'une matrice, ne redéfinissez pas la matrice avec les vecteurs colonne de la matrice d'origine, comme le montre l'exemple suivant :

a = [1, 4, 7; 2, 5, 8; 3, 6, 9];
a = [a(:, 2:3), a(:, 1)];

Par contre, vous pouvez indexer les colonnes de la matrice d'origine pour reformer la matrice, comme le montre l'exemple suivant :

a = [1, 4, 7; 2, 5, 8; 3, 6, 9];
temp = a(:, 1);
a(:, 1:2) = a(:, 2:3);
a(:, 3) = temp;

Lorsque vous spécifiez une gamme début:fin pour indexer un vecteur ou une matrice, définissez explicitement la gamme plutôt que de la définir dans une variable.

Détails

Par exemple, n'utilisez pas la syntaxe suivante pour renvoyer la gamme d'éléments du deuxième au quatrième éléments du vecteur :

a = [1, 4, 8, 3, 9, 12];
b = 2:4;
a(b);

À la place, utilisez une syntaxe comme a(2:4) ou l'exemple suivant pour renvoyer la même gamme de trois éléments du vecteur :

a = [1, 4, 8, 3, 9, 12];
b = 2;
a(b:b + 2);

Évitez les opérations d'indexation logique.

Détails

Par exemple, n'utilisez pas la syntaxe suivante, qui remplace toutes les valeurs de la matrice inférieures à 5 par 1 :

a = [1, 4, 8; 3, 9, 12];
a(a < 5) = 1;

À la place, utilisez la syntaxe suivante pour réaliser la même opération sans indexation logique :

a = [1, 4, 8; 3, 9, 12];
[n, m] = size(a);
for(i = 1:(n * m))
     if(a(i) < 5)
          a(i) = 1;
     end
end

Ne redimensionnez pas les matrices lors des opérations de remplacement d'indexation.

Détails

N'étendez pas la taille d'une matrice en indexant la matrice au-delà de sa taille. Par exemple, évitez la syntaxe suivante, qui ajoute une quatrième colonne à une matrice de type (3, 3) existante :

a = zeros(3, 3);
a(:, 4) = 0;

En outre, n'utilisez pas l'opérateur [] pour réduire la taille d'une matrice. Évitez toute syntaxe semblable à la suivante, qui supprime la deuxième ligne d'une matrice existante :

b = [4, 2; 7, 3];
b(2, :) = [];

Utilisation des fonctions MathScript intégrées

Dans les VIs temps critique et les structures cadencées, n'appelez que des fonctions MathScript appropriées pour les applications déterministes et utilisez des valeurs dont le type de données convient aux entrées des fonctions.

Détails

National Instruments a testé un sous-ensemble des fonctions MathScript LabVIEW et déterminé que les fonctions s'exécutent typiquement dans une durée limitée lorsqu'elles sont utilisées en suivant les règles énoncées dans cette rubrique. Pour que LabVIEW ne contraigne pas les valeurs en entrée, assurez-vous que les entrées de ces fonctions ont le type de données recommandé dans la rubrique d'aide de la fonction.

Évitez d'utiliser certaines fonctions qui engendrent des durées d'exécution sans limite sur les cibles RT.

Détails

Bien qu'il soit possible de déployer certaines fonctions sur des cibles RT, l'exécution de ces fonctions pendant l'exécution du programme risque d'augmenter le jitter et de provoquer des temps d'exécution sans limite dans l'application temps réel. Évitez d'utiliser ces fonctions dans les nœuds MathScript et les fonctions définies par l'utilisateur.

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

Pas utile