Paramètres de projet - Analyse statique Light

Présentation

L'analyse statique dans EcoStruxure Machine Expert signifie qu'avant qu'un projet puisse être téléchargé dans le système cible sans erreur de compilation, le code source est analysé pour rechercher d'éventuelles différences avec certaines directives de codage. A cet effet, vous pouvez configurer un ensemble de règles dans les paramètres du projet. Chaque code généré fera l'objet d'une vérification automatique par rapport à ces règles.

NOTE : Vous pouvez exclure des lignes de code de l’analyse statique en marquant ce code avec le pragma {analysis ...} ou le pragma.

Les résultats de cette analyse sont affichés en tant qu'erreurs dans la vue Messages avec le préfixe SA.

NOTE : L'analyse porte uniquement sur le code d'application du projet. Les bibliothèques ne sont pas concernées. S'agissant des variables GVL (liste de variables globales), si le projet compte plusieurs applications, seuls les objets sous l'application active sont analysés. S’il n’y a qu’une application, les objets de la collection commune de POU sont analysés.

Variables inutilisées (SA0033) :

Détectez des variables, déclarées mais non utilisées dans le code de programme compilé.

Zones de mémoire chevauchées (SA0028) :

Détectez une allocation de plusieurs variables au même emplacement de mémoire.

Cela se produit notamment en présence des déclarations var1 AT %QB21: INT et var2 AT %QD5: DWORD. Dans ce cas, les deux variables utilisent l'octet 21, c'est-à-dire les zones de la mémoire où les variables se chevauchent.

Accès en écriture de plusieurs tâches (SA0006):

Détectez les variables inscrites par plusieurs tâches.

Exemple (SA0006) :

FUNCTION_BLOCK ADD_FB
g_iTemp1 := g_iTemp1 + INT#1;
PROGRAM PLC_PRG  //controlled by MainTask
g_iTemp1 := g_iTemp1 + INT#2;
g_xTemp2 := g_iTemp1 > INT#10;
PROGRAM PLC_PRG_1  //controlled by SubTask
g_iTemp1 := g_iTemp1 - INT#3;
g_xTemp2 := g_iTemp1 < INT#-10;

Accès en écriture multiple sur la sortie (SA0004) :

Détectez les sorties inscrites à plusieurs positions.

Exemple (SA0004) :

VAR_GLOBAL
    g_xVar AT %QX0.0 : BOOL ; 
    g_iTest AT %QW0 : INT ;
END_VAR
PROGRAM PLC_PRG
IF iCondition < INT#0 THEN
    g_xVar := TRUE;
    g_iTest := INT#12;
END_IF
CASE iCondition OF
    INT#1:
        g_xVar := FALSE;
    INT#2:
        g_iTest := INT#11;
    ELSE
        g_xVar := TRUE;
        g_iTest := INT#9;
END_CASE

Usage multiple du nom (SA0027) :

Détectez des utilisations multiples d'un nom/identifiant pour une variable ou un objet (POU) dans le cadre d'un projet.

Les cas suivants sont détectés :

  • Le nom d'une constante d'énumération est identique à celui utilisé dans une autre énumération au sein de l'application ou d'une bibliothèque incluse.

  • Le nom d'une variable est identique à celui d'un objet dans l'application ou dans une bibliothèque incluse.

  • Le nom d'une variable est identique à celui d'une constante d'énumération dans l'application ou dans une bibliothèque incluse.

  • Le nom d'un objet est identique à celui d'un objet dans l'application.

  • Le nom d’une variable est identique à celui d’une méthode.

  • Le nom d’un objet est identique à celui d’un objet supérieur (objet parent).

Exemple (SA0027) :

PROGRAM PLC_PRG
VAR
ton : INT;     // error SA0027
END_VAR

La bibliothèque Standard.library est incluse dans le projet et fournit le bloc fonction TON qui génère plusieurs utilisations d'un nom.

Report temporary Function Block instances (SA0167) :

Ce test signale les instances de blocs fonction qui sont déclarés en tant que variables temporaires. Cela concerne les instances déclarées dans une méthode ou une fonction, ou encore en tant que VAR_TEMP, et qui par conséquent sont réinitialisées lors de chaque cycle de traitement et pour chaque appel du POU.

Exemple (SA0167) :

PROGRAM PLC_PRG
VAR
END_VAR
VAR_TEMP
    yafb: AFB;
END_VAR
FUNCTION Fun : INT
VAR_INPUT
END_VAR
VAR
    funafb: AFB;
END_VAR
METHOD METH : INT
VAR_INPUT
END_VAR
VAR
    methafb: AFB;
END_VAR
NOTE : AFB est un bloc fonction.