Règles de masquage

Présentation

En général, rien dans EcoStruxure Machine Expert ne vous empêche d'utiliser le même identificateur pour différents éléments. Vous pouvez, par exemple, affecter le même nom à une instance de bloc fonction locale et à une fonction.

Dans l'exemple non recommandé ci-dessous, on ne sait pas vraiment si c'est l'instance ou la fonction qui est appelée dans le programme :

FUNCTION YYY : INT
;
END_FUNCTION

FUNCTION_BLOCK XXX
;
END_FUNCTION_BLOCK

PROGRAM PLC_PRG
VAR
    YYY : XXX;
END_VAR
YYY();
END_PROGRAM

Pour ne pas créer de code ambigu, suivez les recommandations suivantes :

  • Respectez les conventions de dénomination, par exemple, en utilisant certains préfixes pour les variables. Pour plus d'informations, consultez la section Recommandations pour la dénomination des identificateurs.

  • Utilisez le composant Analyse de code fourni avec EcoStruxure Machine Expert pour vérifier la dénomination des variables.

  • Utilisez l'attribut qualified_only de manière cohérente pour les énumérations et les listes de variables globales.

  • Utilisez la bibliothèque préfixe d’espace de noms pour accéder à ses éléments.

Compilateur maquant plusieurs déclarations

Le compilateur EcoStruxure Machine Expert ne signale pas d'erreurs si un même identificateur est utilisé pour différents éléments, mais il recherche le code de la déclaration de l'identificateur dans un ordre spécifique. Dès qu'une déclaration est trouvée, la recherche s'interrompt. Les autres déclarations existant dans le code ne sont pas détectées. Elles sont « masquées » pour le compilateur. Le paragraphe suivant décrit les règles de masquage du compilateur, c'est-à-dire l'ordre suivi lors de la recherche des déclarations d'identificateurs. Le paragraphe Accès ambigu et accès qualifié explique comment éviter les accès ambigus et contourner les règles de masquage.

Ordre de recherche dans l'application

Lorsque le compilateur détecte un identificateur dans le code d'une application, il recherche la déclaration correspondante dans l'ordre suivant :

Phase

Description

1

Variables locales d'une méthode.

2

Variables locales dans le bloc fonction, le programme ou la fonction et dans les blocs fonction de base.

3

Méthodes locales du POU.

4

Variables globales dans l'application si l'attribut qualified_only n'est pas défini dans la liste où les variables globales sont déclarées.

5

Variables globales dans l'application parente si l'attribut qualified_only n'est pas défini dans la liste où les variables globales sont déclarées.

6

Variables globales dans les bibliothèques référencées lorsque ni la bibliothèque ni la liste de variables ne requièrent un accès qualifié.

7

Noms de POU ou de type provenant de l'application (comme des noms de liste de variables globales ou de bloc fonction).

8

Noms de POU ou de type provenant d'une application parente.

9

Noms de POU ou de type provenant d'une bibliothèque.

10

Espaces de noms de bibliothèques référencées localement et de bibliothèques publiées par des bibliothèques.

11

Variables globales dans l'arborescence Applications si l'attribut qualified_only n'est pas défini dans la liste où elles sont déclarées.

12

Noms de POU ou de type provenant de l'arborescence Applications (comme des noms de liste de variables globales ou de bloc fonction).

NOTE : Les bibliothèques insérées dans le sous-nœud Gestionnaire de bibliothèques du nœud Global de l'arborescence Outils sont disponibles dans toutes les applications du projet avec la résolution d'espace réservé. Ces bibliothèques forment un espace de noms commun avec les bibliothèques de l'application.

Comme indiqué dans la section Description de l' arborescence des outils, le Gestionnaire de bibliothèques est disponible à deux emplacements différents dans l'arborescence Outils : en tant quqe sous-noeud du noeud Global et en tant que sous-noeud du noeud Application.

NOTE : Si la même bibliothèque a été ajoutée aux deux noeuds du Gestionnaire de bibliothèques, les symboles de la bibliothèque située sous le noeud Application sont utilisés.

Ordre de recherche dans la bibliothèque

Lorsque le compilateur détecte un identificateur dans le code d'une bibliothèque, il recherche la déclaration correspondante dans l'ordre suivant :

Phase

Description

1

Variables locales d'une méthode.

2

Variables locales dans le bloc fonction, le programme ou la fonction et dans les blocs fonction de base.

3

Méthodes locales du POU.

4

Variables globales dans la bibliothèque locale si l'attribut qualified_only n'est pas défini dans la liste où les variables globales sont déclarées.

5

Variables globales dans les bibliothèques référencées lorsque ni la bibliothèque ni la liste de variables ne requièrent un accès qualifié.

6

Noms de POU ou de type provenant de la bibliothèque locale (comme des noms de liste de variables globales ou de bloc fonction).

7

Noms de POU ou de type provenant d'une bibliothèque référencée.

8

Espaces de noms des bibliothèques référencées localement et des bibliothèques publiées par des bibliothèques référencées localement.

Accès ambigu et accès qualifié

Ces ordres de recherche ne peuvent pas éliminer totalement les accès ambigus. L'accès ambigu persiste, par exemple, s'il existe une variable de même nom dans deux listes de variables globales qui ne requièrent pas un accès qualifié. En cas de détection d'un tel cas, le compilateur signale l'erreur : ambiguous use of the name XXX. Pour éviter cela, utilisez l'accès qualifié, notamment en ajoutant le nom de la liste de variables globales (exemple : GVL.XXX).

Utilisez l'accès qualifié pour éviter le phénomène de masquage :

  • Utilisez le nom de la liste de variables globales pour assurer un accès unique à une variable de cette liste.

  • Utilisez le nom d'une bibliothèque pour assurer un accès unique aux éléments de la bibliothèque.

  • Utilisez le pointeur THIS pour offrir un accès unique aux variables d'un bloc fonction, même s'il existe une variable locale de même nom dans une méthode du bloc fonction.

Pour trouver l'emplacement de la déclaration d'un identificateur, exécutez la commande Edition > Parcourir > Atteindre la définition.

Recherche de chemins d'instance

Les ordres de recherche décrits dans les paragraphes précédents ne s'appliquent pas aux :

  • identificateurs qui sont des composants d'un chemin d'instance ;

  • identificateurs utilisés comme entrées dans des appels.

En cas de tentative d'accès à yy.component, l'entité yy détermine l'emplacement où rechercher la déclaration de component.

Si…

Alors…

Si yy trouve une variable avec le type de données structuré type (STRUCT ou UNION),

component est recherché dans l'ordre suivant :

  1. Variables locales du bloc fonction

  2. Variables locales du bloc fonction de base

  3. Méthodes du bloc fonction

  4. Méthodes du bloc fonction de base

Si yy trouve une liste de variables globales ou un programme,

component n'est recherché que dans cette liste.

Si yy trouve un espace de noms d'une bibliothèque,

component est recherché dans cette bibliothèque selon l'ordre décrit dans le paragraphe Ordre de recherche dans la bibliothèque.

Dans la seconde instance, le compilateur détermine si l'accès à l'élément est autorisé (la variable peut n'être accessible que localement ou une méthode peut être privée). Si l'accès n'est pas autorisé, un message d'erreur est généré.