▼
Scroll to page 2
of
100
EcoStruxure Machine Expert Machine Code Analysis Guide utilisateur Traduction de la notice originale EIO0000004079.02 10/2020 www.se.com Mentions légales La marque Schneider Electric et toutes les marques de commerce de Schneider Electric SE et de ses filiales mentionnées dans ce guide sont la propriété de Schneider Electric SE ou de ses filiales. Toutes les autres marques peuvent être des marques de commerce de leurs propriétaires respectifs. Ce guide et son contenu sont protégés par les lois sur la propriété intellectuelle applicables et sont fournis à titre d'information uniquement. Aucune partie de ce guide ne peut être reproduite ou transmise sous quelque forme ou par quelque moyen que ce soit (électronique, mécanique, photocopie, enregistrement ou autre), à quelque fin que ce soit, sans l'autorisation écrite préalable de Schneider Electric. Schneider Electric n'accorde aucun droit ni aucune licence d'utilisation commerciale de ce guide ou de son contenu, sauf dans le cadre d'une licence non exclusive et personnelle, pour le consulter tel quel. Les produits et équipements Schneider Electric doivent être installés, utilisés et entretenus uniquement par le personnel qualifié. Les normes, spécifications et conceptions sont susceptibles d'être modifiées à tout moment. Les informations contenues dans ce guide peuvent faire l'objet de modifications sans préavis. Dans la mesure permise par la loi applicable, Schneider Electric et ses filiales déclinent toute responsabilité en cas d'erreurs ou d'omissions dans le contenu informatif du présent document ou pour toute conséquence résultant de l'utilisation des informations qu'il contient. ©2021 Schneider Electric. Tous droits réservés. Machine Code Analysis Table des matières Consignes de sécurité ................................................................................7 A propos de ce manuel ...............................................................................8 Introduction .............................................................................................. 11 Informations générales sur le composant Machine Code Analysis ............................................................................................. 11 Concept de base de Machine Code Analysis.........................................13 Éditeurs d'analyse de code........................................................................17 Tableau des conventions .....................................................................17 Tableau des conventions ...............................................................17 Tableau des mesures ..........................................................................18 Tableau des mesures ....................................................................18 Vue de dépendance ............................................................................20 Vue de dépendance (présentation) .................................................20 Vue de dépendance (filtres) ...........................................................20 Vue de dépendance (graphe de dépendance) .................................21 Vue de dépendance (commandes du menu contextuel du graphe de dépendance) ............................................................................22 Vue de dépendance (groupes) .......................................................23 BlockList ............................................................................................25 Liste de blocage............................................................................25 Gestionnaire d'analyse de code .................................................................27 Tableau de bord ..................................................................................27 Configuration......................................................................................28 Connexion au cloud ............................................................................29 Gestionnaire de requêtes d'analyse de code...............................................31 Rule Sets ..........................................................................................31 Référentiels de requêtes .....................................................................32 Éditeur de requêtes.............................................................................35 Éditeur de paramètres de chaînes de requête .......................................36 Éditeur de paramètres.........................................................................37 Connexion au cloud ............................................................................37 Commandes du menu contextuel...............................................................38 Commandes de menu contextuel des navigateurs.................................38 Instructions Pragma pour Machine Code Analysis.......................................39 Instructions Pragma pour Machine Code Analysis .................................39 Interface de création de scripts Python .......................................................41 Interface de création de scripts ............................................................41 Extensions des objets de script ............................................................41 Objets de script (API d'analyse de code)...............................................42 Comment ajouter des éditeurs d'analyse de code .......................................47 Comment avoir un aperçu rapide de l'application via le Tableau de bord ...................................................................................................47 Comment obtenir des résultats détaillés sur les métriques de votre application..........................................................................................48 Comment obtenir des résultats détaillés sur les conventions de votre application..........................................................................................49 Comment afficher les dépendances de votre application avec des requêtes prédéfinies dans la vue de dépendance ..................................50 EIO0000004079.02 3 Machine Code Analysis Comment explorer étape par étape les dépendances de votre application dans la vue de dépendance ................................................51 Annexes .....................................................................................................53 Requêtes de dépendance (filtre) ................................................................54 Requêtes de dépendance (filtre) ..........................................................54 Requêtes de dépendance (sélection) .........................................................56 Requêtes de dépendance (sélection) ...................................................56 Métriques.................................................................................................60 Métrique : taille de l'application (code) ..................................................60 Métrique : taille de l'application (code+données) ...................................61 Métrique : taille de l'application (données).............................................61 Métrique : Call In ................................................................................62 Métrique : Call Out ..............................................................................62 Métrique : taux de variables commentées (toutes) .................................62 Métrique : taux de variables commentées (entrée+sortie +globale)............................................................................................63 Métrique : Cyclomatic Complexity ........................................................63 Métrique : Extended By .......................................................................65 Métrique : Extends ..............................................................................65 Métrique : Fan In.................................................................................66 Métrique : Fan Out ..............................................................................66 Métrique : Halstead Complexity............................................................67 Métrique : Implemented By ..................................................................70 Métrique : Implements.........................................................................71 Métrique : Lines Of Code (LOC) ...........................................................72 Métrique : Memory Size (Data).............................................................72 Métrique : Number Of Actions ..............................................................73 Métrique : Number Of GVL Usages ......................................................74 Métrique : nombre de lignes de commentaire en en-tête ........................74 Métrique : Number Of Instances...........................................................75 Métrique : Number Of Library References .............................................75 Métrique : Number Of Messages..........................................................76 Métrique : Number Of Methods ............................................................76 Métrique : nombre de commentaires multilignes ....................................77 Métrique : Number Of Properties..........................................................77 Métrique : Number Of Reads ...............................................................78 Métrique : Number Of Tasks ................................................................78 Métrique : Number Of Transitions.........................................................79 Métrique : Number Of Variables ...........................................................79 Métrique : Number Of Writes................................................................80 Métrique : Number Of FBD Networks....................................................80 Métrique : taux de commentaires dans le code source ...........................80 Métrique : Stack Size ..........................................................................81 Conventions.............................................................................................83 Requêtes de convention......................................................................83 Convention : messages de compilation.................................................86 Convention : POU complexe avec faible taux de commentaires..............86 Conventions : Vérifications des noms de types complexes .....................87 Conventions : Limite de profondeur d'héritage.......................................87 Convention : vérification de lecture de variable d'entrée .........................88 Convention : vérification du type de variable d'entrée.............................89 4 EIO0000004079.02 Machine Code Analysis Convention : vérification d'écriture de variable d'entrée ..........................89 Convention : utilisation de commentaires multilignes .............................90 Convention : absence de commentaire en en-tête .................................91 Conventions : Nombre limite de méthodes ............................................91 Conventions : Nombre limite de propriétés............................................91 Convention : vérification de lecture de variable de sortie ........................92 Convention : vérification du type de variable de sortie ............................93 Convention : vérification d'utilisation de variables PERSISTENT.............93 Convention : vérification d'utilisation de variables RETAIN .....................93 Convention : variable non commentée (toutes)......................................94 Convention : variable non commentée (entrée+sortie+globale)...............94 Conventions : Vérification des variables inutilisées ................................94 Conventions : Vérification des noms de variable....................................95 Conventions : Vérification de la longueur des noms de variable ..............96 Index ...........................................................................................................97 EIO0000004079.02 5 Consignes de sécurité Machine Code Analysis Consignes de sécurité Informations importantes Lisez attentivement ces instructions et examinez le matériel pour vous familiariser avec l'appareil avant de tenter de l'installer, de le faire fonctionner, de le réparer ou d'assurer sa maintenance. Les messages spéciaux suivants que vous trouverez dans cette documentation ou sur l'appareil ont pour but de vous mettre en garde contre des risques potentiels ou d'attirer votre attention sur des informations qui clarifient ou simplifient une procédure. La présence de ce symbole sur une étiquette “Danger” ou “Avertissement” signale un risque d'électrocution qui provoquera des blessures physiques en cas de non-respect des consignes de sécurité. Ce symbole est le symbole d'alerte de sécurité. Il vous avertit d'un risque de blessures corporelles. Respectez scrupuleusement les consignes de sécurité associées à ce symbole pour éviter de vous blesser ou de mettre votre vie en danger. ! DANGER DANGER signale un risque qui, en cas de non-respect des consignes de sécurité, provoque la mort ou des blessures graves. ! AVERTISSEMENT AVERTISSEMENT signale un risque qui, en cas de non-respect des consignes de sécurité, peut provoquer la mort ou des blessures graves. ! ATTENTION ATTENTION signale un risque qui, en cas de non-respect des consignes de sécurité, peut provoquer des blessures légères ou moyennement graves. AVIS AVIS indique des pratiques n'entraînant pas de risques corporels. Remarque Importante L'installation, l'utilisation, la réparation et la maintenance des équipements électriques doivent être assurées par du personnel qualifié uniquement. Schneider Electric décline toute responsabilité quant aux conséquences de l'utilisation de ce matériel. Une personne qualifiée est une personne disposant de compétences et de connaissances dans le domaine de la construction, du fonctionnement et de l'installation des équipements électriques, et ayant suivi une formation en sécurité leur permettant d'identifier et d'éviter les risques encourus. EIO0000004079.02 7 Machine Code Analysis A propos de ce manuel A propos de ce manuel Objectif du document This document describes the graphical user interface of the Machine Code Analysis and the functions it provides. Champ d'application This document has been updated for the release of EcoStruxureTM Machine Expert V2.0. Related Documents Title of documenation Reference number EcoStruxure Machine Advisor Code Analysis User Guide EIO0000003915 (ENG); EIO0000003917 (FRE); EIO0000003916 (GER); EIO0000003918 (SPA); EIO0000003919 (ITA); EcoStruxure Machine Expert Programming Guide EIO0000002854 (ENG); EIO0000002855 (FRE); EIO0000002856 (GER); EIO0000002858 (SPA); EIO0000002857 (ITA); EIO0000002859 (CHS) 8 EIO0000004079.02 A propos de ce manuel Machine Code Analysis Information spécifique au produit AVERTISSEMENT PERTE DE CONTROLE • Le concepteur d'un système de commande doit envisager les modes de défaillance possibles des chemins de commande et, pour certaines fonctions de commande critiques, prévoir un moyen d'atteindre un état sécurisé en cas de défaillance d'un chemin, et après cette défaillance. Par exemple, l'arrêt d'urgence, l'arrêt en cas de surcourse, la coupure de courant et le redémarrage sont des fonctions de contrôle cruciales. • Des canaux de commande séparés ou redondants doivent être prévus pour les fonctions de commande critique. • Les liaisons de communication peuvent faire partie des canaux de commande du système. Soyez particulièrement attentif aux implications des retards de transmission imprévus ou des pannes de liaison. • Respectez toutes les réglementations de prévention des accidents ainsi que les consignes de sécurité locales.1 • Chaque implémentation de cet équipement doit être testée individuellement et entièrement pour s'assurer du fonctionnement correct avant la mise en service. Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des dommages matériels. 1 Pour plus d'informations, consultez les documents suivants ou leurs équivalents pour votre site d'installation : NEMA ICS 1.1 (dernière édition), « Safety Guidelines for the Application, Installation, and Maintenance of Solid State Control » (Directives de sécurité pour l'application, l'installation et la maintenance de commande statique) et NEMA ICS 7.1 (dernière édition), « Safety Standards for Construction and Guide for Selection, Installation, and Operation of AdjustableSpeed Drive Systems » (Normes de sécurité relatives à la construction et manuel de sélection, d'installation et d'exploitation de variateurs de vitesse). AVERTISSEMENT FONCTIONNEMENT IMPRÉVU DE L'ÉQUIPEMENT • N'utilisez que le logiciel approuvé par Schneider Electric pour faire fonctionner cet équipement. • Mettez à jour votre programme d'application chaque fois que vous modifiez la configuration matérielle physique. Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des dommages matériels. Terminology Derived from Standards Les termes techniques, la terminologie, les symboles et les descriptions correspondantes employés dans ce manuel ou figurant dans ou sur les produits proviennent généralement des normes internationales. Dans les domaines des systèmes de sécurité fonctionnelle, des variateurs et de l'automatisme en général, les termes employés sont sécurité, fonction de sécurité, état sécurisé, défaut, réinitialisation du défaut, dysfonctionnement, panne, erreur, message d'erreur, dangereux, etc. Entre autres, les normes concernées sont les suivantes : EIO0000004079.02 9 Machine Code Analysis A propos de ce manuel Norme Description IEC 61131-2:2007 Automates programmables - Partie 2 : exigences et essais des équipements ISO 13849-1:2015 Sécurité des machines : parties des systèmes de commande relatives à la sécurité. Principes généraux de conception EN 61496-1:2013 Sécurité des machines : équipements de protection électro-sensibles. Partie 1 : Prescriptions générales et essais ISO 12100:2010 Sécurité des machines - Principes généraux de conception Appréciation du risque et réduction du risque EN 60204-1:2006 Sécurité des machines - Équipement électrique des machines - Partie 1 : règles générales ISO 14119:2013 Sécurité des machines - Dispositifs de verrouillage associés à des protecteurs - Principes de conception et de choix ISO 13850:2015 Sécurité des machines - Fonction d'arrêt d'urgence - Principes de conception IEC 62061:2015 Sécurité des machines - Sécurité fonctionnelle des systèmes de commande électrique, électronique et électronique programmable relatifs à la sécurité IEC 61508-1:2010 Sécurité fonctionnelle des systèmes électriques/électroniques/ électroniques programmables relatifs à la sécurité : prescriptions générales. IEC 61508-2:2010 Sécurité fonctionnelle des systèmes électriques/électroniques/ électroniques programmables relatifs à la sécurité : exigences pour les systèmes électriques/électroniques/électroniques programmables relatifs à la sécurité. IEC 61508-3:2010 Sécurité fonctionnelle des systèmes électriques/électroniques/ électroniques programmables relatifs à la sécurité : exigences concernant les logiciels. IEC 61784-3:2016 Réseaux de communication industriels - Profils - Partie 3 : Bus de terrain de sécurité fonctionnelle - Règles générales et définitions de profils. 2006/42/EC Directive Machines 2014/30/EU Directive sur la compatibilité électromagnétique 2014/35/EU Directive sur les basses tensions De plus, des termes peuvent être utilisés dans le présent document car ils proviennent d'autres normes telles que : Norme Description Série IEC 60034 Machines électriques rotatives Série IEC 61800 Entraînements électriques de puissance à vitesse variable Série IEC 61158 Communications numériques pour les systèmes de mesure et de commande – Bus de terrain utilisés dans les systèmes de commande industriels Enfin, le terme zone de fonctionnement utilisé dans le contexte de la description de dangers spécifiques a la même signification que les termes zone dangereuse ou zone de danger employés dans la directive Machines (2006/42/EC) et la norme ISO 12100:2010. NOTE: Les normes susmentionnées peuvent s'appliquer ou pas aux produits cités dans la présente documentation. Pour plus d'informations sur chacune des normes applicables aux produits décrits dans le présent document, consultez les tableaux de caractéristiques de ces références de produit. 10 EIO0000004079.02 Introduction Machine Code Analysis Introduction Informations générales sur le composant Machine Code Analysis Présentation Le composant Machine Code Analysis est intégré dans EcoStruxure Machine Expert et permet d'analyser des applications. Machine Code Analysis remplit les principales fonctions suivantes : • Compréhension de la structure du code source. Les développeurs de logiciels peuvent visualiser les dépendances dans le code et les explorer de façon détaillée, par exemple. • Identification des déficiences du code pour harmoniser et améliorer le code source en fonction des instructions de programmation définies. • Mesure de la qualité du code source et identification des KPI (indicateurs de performance clés). • Transmission des KPI aux développeurs de logiciels pour leur usage personnel. Configuration système requise Les exigences suivantes relatives au matériel et au système d'exploitation s'appliquent à Machine Code Analysis, en plus de la configuration système requise pour EcoStruxure Machine Expert. Configuration minimale : • 4 cœurs de processeur pour l'exécution parallèle des requêtes • 4 Go de RAM Exigences recommandées pour l'analyse de projets : • Windows 64 bits • Au moins 4 cœurs de processeur pour l'exécution parallèle des requêtes • Au moins 8 Go de RAM Installation Pour être utilisé dans EcoStruxure Machine Expert, le composant Machine Code Analysis doit être installé à l'aide de Schneider Electric Software Installer. Machine Code Analysis est protégé par une licence : Fonction Sans licence Avec licence Vue de dépendance Deux diagrammes maximum Aucune limite Tableau des mesures Deux objets et trois requêtes actives maximum Aucune limite Tableau des conventions Deux objets et trois requêtes actives maximum Aucune limite Éditeur de requêtes Non disponible Disponible API CodeAnalysis Python Non disponible Disponible NOTE: Pour plus d'informations sur la licence du produit, contactez votre représentant Schneider Electric. EIO0000004079.02 11 Machine Code Analysis Introduction Éditeurs d'analyse de code EcoStruxure Machine Expert Logic Builder inclut trois éditeurs qui permettent d'analyser du code et d'en interpréter les résultats : • Éditeur, page 17 Tableau des conventions Parties de l'application qui ne respectent pas les conventions de codage définies (basées sur des règles de codage). • Éditeur, page 20 Vue de dépendance Dépendances entre les noms d'espace, les bibliothèques et les objets (blocs fonction, POU, etc.). • Éditeur, page 18 Tableau des mesures Résultats des métriques de qualité du code (lignes de code, complexité, etc.). Il est possible d'ajouter plusieurs objets d'analyse de code sous les dossiers Application ou le Gestionnaire d'analyse de code. Vous pouvez ajouter plusieurs objets d'analyse de code à une application. Si un objet Tableau des conventions ou Tableau des mesures est ajouté sous Application ou Gestionnaire d'analyse de code, l'application entière est considérée par l'analyse. Si ces objets sont ajoutés sous un dossier, seul ce dossier est considéré par l'analyse. Il est donc possible de stocker dans des objets dédiés les résultats d'analyse correspondant à chaque module/dossier d'une application (par exemple). L'ajout d'un objet Tableau des conventions, Vue de dépendance ou Tableau des mesures à une application entraîne l'ajout automatique d'un Gestionnaire d'analyse de code à l'objet Application. BlockList A BlockList object can be added beneath a Code Analysis Manager object. The BlockList object contains elements that will not appear in Conventions Table, Metrics Table, or Dashboard results. This, although, is taken into account when you upload a project snapshot, page 29 into Machine Advisor Code Analysis. Gestionnaire d'analyse de code The Code Analysis Manager provides a quick overview via a dashboard and you can configure analysis depth and the cloud connection. The Code Analysis Manager provides the tabs: • Dashboard tab, page 27 Overview of the analyzed application. • Configuration tab, page 28 Analysis depth of code analysis configuration. • Cloud Connection tab, page 29 Configuration of the connection to the Machine Advisor Code Analysis. Gestionnaire de requêtes d'analyse de code The Code Analysis Query Manager allows you to create and modify customized rule sets, and to manage your metrics and conventions queries. To open the Code Analysis Query Manager click Tools in the menu bar and select Code Analysis Query Manager from the contextual menu. The Code Analysis Query Manager provides the tabs: • 12 Rule Sets EIO0000004079.02 Introduction Machine Code Analysis Rule sets can be created and modified. • Metric Queries tab, page 60 Queries and query chains available in the Metrics Table editor can be created and modified. • Convention Queries tab, page 83 Queries and query chains available in the Conventions Table editor can be created and modified. • Dependency (Filter) Queries tab, page 54 Queries and query chains available in the Filters of the Dependency View editor can be created and modified. • Dependency (Select) Queries tab, page 56 Queries and query chains available in the Select and Add dialog of the Dependency View editor can be created and modified. • Cloud Connection tab, page 37 The connection to Machine Advisor Code Analysis can be configured. Concept de base de Machine Code Analysis Présentation Ce chapitre présente les concepts de base du composant Machine Code Analysis intégré dans EcoStruxure Machine Expert. Composants logiciels de Machine Code Analysis Le schéma suivant propose une vue d'ensemble des principaux composants logiciels de Machine Code Analysis : Ces composants peuvent être classés dans trois catégories : • • EIO0000004079.02 Les composants de l'interface utilisateur qui affichent des données : ◦ Éditeurs permettant d'écrire du code source ◦ Éditeurs permettant de visualiser les résultats concernant les métriques ou les conventions, ou la structure du code source sous forme graphique Les modèles de données utilisés comme entrée ou sortie pour d'autres composants : ◦ Modèle de langage ◦ Modèle de dépendance ◦ Modèle RDF 13 Machine Code Analysis Introduction ◦ • Résultats de requête Les composants qui transforment des données : ◦ Le compilateur de code source (avec modèle de langage en sortie) vérifie la syntaxe du code source et crée le modèle de langage qui permet de générer le code exécuté sur des contrôleurs. ◦ L'analyseur de code source (avec modèle de dépendance en sortie) analyse le modèle de langage, le transforme en modèle de dépendance et met à jour le modèle de dépendance. ◦ Le générateur de modèles RDF (avec modèle RDF en sortie) transforme le modèle de dépendance en modèle RDF pour faire le lien avec les technologies de Web sémantique. ◦ Le moteur d'exécution de requêtes (avec résultats de requête en sortie) exécute des requêtes SPARQL sur le modèle RDF afin d'obtenir les résultats correspondants. Données d'analyse (modèle de dépendance) L'application est analysée et un modèle de dépendance est généré. Le modèle de dépendance est constitué de nœuds connectés via des fronts. Exemples de types de nœuds : Type de nœud Description Bloc fonction Bloc fonction (FB) dans le modèle de dépendance. Créé pour chaque bloc fonction ajouté au projet EcoStruxure Machine Expert. Programme Programme (PRG) dans le modèle de dépendance. Créé pour chaque programme ajouté au projet EcoStruxure Machine Expert. Fonction Fonction (FC) dans le modèle de dépendance. Créé pour chaque fonction ajoutée au projet EcoStruxure Machine Expert. à ... Exemples de types de fronts : Type de front Description Lecture Opération de lecture depuis le code (source) vers un nœud de variable (cible). Écriture Opération d'écriture depuis le code (source) vers un nœud de variable (cible). Appel Appel d'un élément (bloc fonction, méthode, action, programme, etc.) depuis le code (source) vers un nœud cible. Extension Extension d'un type de base. Exemple : extension d'un bloc fonction par un autre bloc. ... ... Phases d'analyse L'analyseur de code source, un des principaux composants de l'analyse de code, transforme le modèle de langage en modèle de dépendance (les données d'analyse). 14 EIO0000004079.02 Introduction Machine Code Analysis Cet analyseur s'appuie sur le concept des phases d'analyse, qui permet de simplifier le processus et d'optimiser les performances (sur le plan de la mémoire et du processeur). Exemple : • L'analyse de code permettant d'obtenir les dépendances d'extension et d'implémentation est plus rapide comparé à celle renvoyant les dépendances d'appel, de lecture ou d'écriture. • Pour obtenir la liste des blocs fonction et des dépendances d'extension et d'implémentation, il suffit d'interrompre l'analyse à un niveau donné. • Si vous avez besoin de plus de détails, augmentez la profondeur de l'analyse pour les éléments souhaités (pour visualiser des blocs fonction spécifiques dans la vue de dépendance, par exemple) ou pour les objets du projet (pour obtenir les résultats sur les métriques, par exemple). Phases d'analyse pertinentes pour l'utilisateur : Les trois approches suivantes sont pertinentes : • Profondeur d'analyse minimale (phases 1+2) : contenu visible dans le projet et les navigateurs d'EcoStruxure Machine Expert ◦ Blocs fonction, programmes, fonctions, DUT, etc. ◦ Propriétés et méthodes Get/Set associées ◦ Méthodes ◦ Actions ◦ Informations structurelles (dossier, etc.) ◦ Références de bibliothèques Avec cette profondeur, l'analyse prend le moins de temps. • Profondeur d'analyse intermédiaire (phases 3+4) : niveau d'informations inférieur dans le code source Par exemple : ◦ Variables ◦ Lecture des dépendances de variable ◦ Écriture des dépendances de variable ◦ Appel des méthodes, fonctions, blocs fonction, programmes, etc. Avec cette profondeur, l'analyse prend beaucoup de temps. • Profondeur d'analyse maximale (phase 5) : informations concernant les métriques basées sur l'implémentation (le code source) Par exemple : ◦ Halstead Complexity ◦ Lines Of Code (LOC) ◦ ... Avec cette profondeur, l'analyse prend le plus de temps. Réservé aux métriques ou aux conventions. Technologies de Web sémantique Ouverte et flexible, la fonction d'analyse de code s'appuie sur plusieurs technologies de Web sémantique, notamment : • Structure Resource Description Framework (RDF) - Modèle RDF Consultez la page https://en.wikipedia.org/wiki/Resource_Description_ Framework. • Base de données RDF (base de données de Web sémantique) - espace Triple Storage RDF Consultez la page https://en.wikipedia.org/wiki/Triplestore. • EIO0000004079.02 Protocole SPARQL et langage de requête RDF - SPARQL 15 Machine Code Analysis Introduction Consultez le document https://en.wikipedia.org/wiki/SPARQL. Synchronisation entre le modèle de dépendance et le modèle RDF Le modèle de dépendance est généré suite à une opération d'analyse de code. Il est synchronisé avec un modèle RDF pour faire le lien avec une fonction d'analyse de code ouverte et flexible qui prend en charge le langage de requête. Triple Storage RDF Pour permettre l'analyse de projets volumineux, le modèle RDF appartient à un processus séparé appelé Triple Storage RDF. Le Triple Storage RDF est utilisé par défaut. Au besoin, il est possible de configurer son comportement à l'aide du Gestionnaire d'analyse de code. SPARQL et RDF La structure Resource Description Framework (RDF) désigne un modèle de données décrivant des ressources ainsi que les relations qui les lient. Exemple : :(Sujet) :(Prédicat) :(Objet) :Car :Weights :1000 kg :Car :ConsistsOf :Wheels :Car :ConsistsOf :Engine SPARQL est l'acronyme de « Sparql Protocol and RDF Query Language ». La spécification SPARQL (https://www.w3.org/TR/sparql11-overview/) définit les langages et protocoles qui permettent d'interroger et de manipuler des graphes RDF (à l'instar des requêtes SQL). Exemple de requête SPARQL simple permettant d'obtenir l'ID de nœud et le nom des blocs fonction d'un modèle RDF : SELECT ?NodeId ?Name WHERE { # Select all FunctionBlocks and their names ?NodeId a :FunctionBlock ; :Name ?Name . } 16 EIO0000004079.02 Éditeurs d'analyse de code Machine Code Analysis Éditeurs d'analyse de code Tableau des conventions Tableau des conventions Présentation With the Conventions Table, you can select conventions that have to be met by your application. Le Tableau des conventions se divise en deux parties : • Conventions (à gauche) Liste des conventions disponibles. Consultez le chapitre Onglet Requêtes de convention, page 83. • Fenêtre des résultats (à droite) Liste des éléments qui ne respectent pas les conventions sélectionnées à gauche. Conventions L'arborescence Conventions répertorie et regroupe les règles de convention disponibles par défaut (avec l'installation d'EcoStruxure Machine Expert) ainsi que celles définies par l'utilisateur à l'aide de l'Éditeur de requêtes. Utilisez les cases à cocher pour activer ou désactiver les règles de convention. Lorsque vous cliquez sur le bouton Activer et commencer l'interrogation dans la barre d'outils de la fenêtre des résultats, des informations supplémentaires s'affichent dans l'arborescence Conventions : Elément Description Filtrer par noms de conventions Entrez le texte permettant de filtrer les conventions par nom. Jeu de règles Sélectionnez un jeu de règles pour filtrer les conventions à afficher. (<Nombre>) après un nom de convention Indique le nombre de résultats créés par cette convention. Si aucune valeur n'apparaît, la requête n'a pas été exécutée. (Demandez) après un nom de convention Cette requête est en cours d'exécution. Barre d'outils Elément Description Analyser le code Cliquez sur ce bouton pour lancer l'analyse de l'application associée à ce Tableau des conventions. Lorsque l'analyse est en cours et à jour, ce bouton est désactivé. Etape: x/y (Obligatoire: z) Informations d'étape associées au bouton Analyser le code : Interrogation • Nombre d'étapes disponibles (y) • Étape actuellement atteinte (x) • Étape à atteindre (z) pour utiliser cet éditeur • Bouton Activer et commencer l'interrogation : Cliquez sur ce bouton pour commencer l'interrogation. • Bouton Désactiver et interrompre l'interrogation : Cliquez sur ce bouton pour interrompre l'interrogation. Cliquez de nouveau sur ce bouton pour relancer l'interrogation à partir de là où vous l'avez arrêtée. EIO0000004079.02 17 Machine Code Analysis Éditeurs d'analyse de code Elément Description Exporter Cliquez sur ce bouton pour exporter la liste affichée au format CSV, HTML ou XML. Portée Affiche le dossier dont le Tableau des conventions fait partie. Seul ce dossier est pris en compte pour l'analyse. Pour un tableau défini comme un sous-noeud du Gestionnaire d'analyse de code, l'application entière est prise en compte par l'analyse. Visible uniquement si un Tableau des conventions est placé dans un dossier. Liste de résultats Elément Description Filtrer par Saisissez du texte pour filtrer les résultats. Le filtre s'applique à toutes les colonnes. Tri d'une colonne Pour trier une colonne, cliquez sur son en-tête : • Convention • Pondération • Nom complet • Message Double-clic sur une entrée du tableau Ouvre l'élément associé dans l'éditeur correspondant. Commandes du menu contextuel d'une entrée de tableau Cliquez avec le bouton droit de la souris sur une entrée du tableau, puis sélectionnez l'une des commandes suivantes dans le menu contextuel : • Atteindre la définition Ouvre l'élément associé dans l'éditeur correspondant. • Ajouter au graphe de dépendance Ajoute l'élément à un graphe de dépendance nouveau ou existant. • Ajouter à la liste de blocage Ajoute l'élément à une liste de blocage et le supprime de tous les Tableaux des conventions jusqu'à ce qu'il soit de nouveau supprimé de cette liste. Tableau des mesures Tableau des mesures Présentation With the Metrics Table, you can select metrics to be executed on an application and filter and list results. Le Tableau des mesures se divise en deux parties : • Métriques (à gauche) Liste des métriques disponibles., page 60 • Fenêtre des résultats (à droite) Liste des résultats correspondant aux métriques. Métriques L'arborescence Métriques répertorie les métriques disponibles par défaut (avec l'installation d'EcoStruxure Machine Expert) ainsi que celles définies par l'utilisateur à l'aide de l'Éditeur de requêtes. Utilisez les cases à cocher pour activer ou désactiver les métriques. 18 EIO0000004079.02 Éditeurs d'analyse de code Machine Code Analysis Lorsque vous cliquez sur le bouton Activer et commencer l'interrogation dans la barre d'outils de la fenêtre des résultats, des informations supplémentaires s'affichent dans l'arborescence Métriques : Elément Description Filtrer par noms de métrique Entrez le texte permettant de filtrer les métriques par nom. Jeu de règles Sélectionnez un jeu de règles pour filtrer les métriques à afficher. (<Nombre>) après un nom de métrique Indique le nombre de résultats créés par cette métrique. Si aucune valeur n'apparaît, la requête n'a pas été exécutée. (Demandez) après un nom de métrique Cette requête est en cours d'exécution. Barre d'outils Elément Description Analyser le code Cliquez sur ce bouton pour lancer l'analyse de l'application associée à ce Tableau des mesures. Si l'analyse a déjà commencé et que son état est à jour, ce bouton est désactivé. Interrogation • Bouton Activer et commencer l'interrogation : Cliquez sur ce bouton pour commencer l'interrogation. • Bouton Désactiver et interrompre l'interrogation : Cliquez sur ce bouton pour interrompre l'interrogation. Cliquez de nouveau sur ce bouton pour relancer l'interrogation à partir de là où vous l'avez arrêtée. Exporter Cliquez sur ce bouton pour exporter la liste affichée au format CSV, HTML ou XML. Portée Affiche le dossier dont le Tableau des mesures fait partie. Seul ce dossier est pris en compte par l'analyse. Pour un tableau défini comme un sous-noeud du Gestionnaire d'analyse de code, l'application entière est prise en compte par l'analyse. Visible uniquement si un Tableau des mesures est placé dans un dossier. Liste de résultats Elément Description Filtrer par Saisissez du texte pour filtrer les résultats. Le filtre s'applique à toutes les colonnes. Tri d'une colonne Pour trier une colonne, cliquez sur son en-tête : • Type • Nom • Nom complet • <Nom de la métrique> Double-clic sur une entrée du tableau Ouvre l'élément associé dans l'éditeur correspondant. Commandes du menu contextuel d'une entrée de tableau Cliquez avec le bouton droit de la souris sur une entrée du tableau, puis sélectionnez l'une des commandes suivantes dans le menu contextuel : • Atteindre la définition Ouvre l'élément associé dans l'éditeur correspondant. • Ajouter au graphe de dépendance Ajoute l'élément à un graphe de dépendance nouveau ou existant. • Ajouter à la liste de blocage Ajoute l'élément à une liste de blocage et le supprime de tous les Tableaux des mesures jusqu'à ce qu'il soit de nouveau supprimé de cette liste. EIO0000004079.02 19 Machine Code Analysis Éditeurs d'analyse de code Vue de dépendance Vue de dépendance (présentation) Présentation With the Dependency View, you can visualize the dependencies of your analyzed application as a dependency graph. You can select the content and the layout of the dependency graph. La Vue de dépendance se divise en trois parties : • Filtres (à gauche), page 20 Vous pouvez filtrer et configurer le graphe de dépendance. • Graphe de dépendance (fenêtre principale), page 21 Le graphe affiché représente les dépendances entre les éléments de l'application analysée. • Groupes (à droite), page 23 Vous pouvez structurer l'application à l'aide de l'arborescence Groupes. Vue de dépendance (filtres) Présentation Elément Description Sélectionnez le filtre pour afficher le graphique Sélectionnez un filtre dans la liste. Les filtres sont définis dans l'onglet Requêtes de dépendance (filtre) du Code Analysis Query Manager. Consultez le chapitre Onglet Requêtes de dépendance (filtre), page 54. Appliquer Cliquez sur ce bouton pour appliquer le filtre au graphe affiché. Types de filtres rapides This tree lists the Edge Types and Node Types based on the content in the Dependency Graph. If you activate / deactivate Edge Types or Node Types in the list, the displayed graph is updated immediately. Options de visualisation local • Afficher les étiquettes locals Active/désactive les étiquettes associées aux fronts dans le Graphe de dépendance. • Afficher les fronts parallèles Active/désactive l'affichage des fronts parallèles. 20 EIO0000004079.02 Éditeurs d'analyse de code Machine Code Analysis Vue de dépendance (graphe de dépendance) Présentation Consultez également la section Commandes du menu contextuel du graphe de dépendance, page 22. Barre d'outils Elément Description Analyser le code Cliquez sur ce bouton pour lancer l'analyse de l'application associée à cette Vue de dépendance. Si l'analyse a déjà commencé et que son état est à jour, ce bouton est désactivé. Pointeur de souris Cliquez sur ce bouton pour passer du mode déplacement au mode sélection, et inversement. Sélectionner et ajouter Une fois l'analyse de code exécutée, cliquez sur ce bouton pour définir les champs Sélectionnez Scope et Sélectionnez la requête. Les portées suivantes sont disponibles : • Projet entier Les résultats attendus sont les objets de l'application, de l'espace POU et des bibliothèques référencées par l'application. NOTE: Un grand nombre d'objets peuvent ainsi être renvoyés. • Application + espace POU Les résultats attendus sont les objets de l'application et de l'espace POU (= éléments de projet visibles dans les navigateurs d'EcoStruxure Machine Expert). Les objets de bibliothèque ne sont pas renvoyés dans les résultats. • Application Les résultats attendus sont les objets définis uniquement dans l'application. • Espace POU Les résultats attendus sont les objets définis uniquement dans l'espace POU. Consultez le chapitre Onglet Requêtes de dépendance (sélection), page 56. Effacer Cliquez sur ce bouton pour supprimer tous les nœuds du graphe affiché. Exporter Cliquez sur ce bouton pour exporter le graphe affiché en tant qu'image (*.jpg, *.png ou *.bmp). Disposition Sélectionnez une disposition prédéfinie pour le graphe affiché. Vous avez le choix entre plusieurs dispositions circulaires, dirigées par la force et en arborescence. Appliquer Cliquez sur ce bouton pour réorganiser les objets sur le graphe affiché en fonction de la disposition sélectionnée. Contrôle de zoom With the zoom control in the lower right corner of the dependency graph window, you can modify the size and the position of the displayed graph. EIO0000004079.02 Type Description Curseur Utilisez le curseur pour effectuer un zoom avant ou arrière. Remplir les limites avec du contenu Cliquez sur ce bouton pour que le contenu remplisse entièrement le graphe de dépendance. 21 Machine Code Analysis Éditeurs d'analyse de code Type Description Centrer le contenu Cliquez sur ce bouton pour que le contenu s'affiche au centre du graphe de dépendance. Fermer Cliquez sur ce bouton pour fermer le contrôle de zoom. Pour le rouvrir, cliquez sur l'icône dans le coin inférieur droit du graphe de dépendance. Pour déplacer le contenu dans la fenêtre du graphe de dépendance, cliquez dans la fenêtre > déplacez le curseur tout en maintenant le bouton gauche de la souris enfoncé. Déplacer des nœuds vers le graphe de dépendance à l'aide de la méthode glisser-déposer Vous pouvez également ajouter des nœuds et des sous-nœuds dans le graphe de dépendance par glisser-déposer. Pour cela, faites glisser le nœud souhaité depuis l'arborescence Application vers la fenêtre du graphe de dépendance. Vue de dépendance (commandes du menu contextuel du graphe de dépendance) Commandes du menu contextuel des nœuds du graphe Commande de menu Description Sélectionner tout Sélectionne les nœuds du graphe. Peut être exécutée n'importe où sur le graphe. Atteindre la définition Ouvre l'éditeur du nœud sélectionné. Peut être exécutée sur tous les nœuds sauf : Application, Espace POU, Tâche, Dossier. Enlever node(s) Supprime le ou les nœuds sélectionnés sur le graphe. Supprimer tout sauf moi Supprime le ou les nœuds du graphe, sauf celui sélectionné. Supprimer tout sauf moi et mes dépendances directes Supprime le ou les nœuds du graphe, sauf celui sélectionné et ses nœuds associés. Peut être exécutée sur tous les nœuds, sauf les groupes. Supprimer les groupes Supprime les groupes sélectionnés de la vue de dépendance et du projet. Les nœuds affectés n'appartiennent plus à un groupe. Peut être exécutée uniquement sur des groupes. Affecter à un groupe nouveau ou existant Affecte les nœuds sélectionnés à un groupe nouveau ou existant. Peut être exécutée sur les nœuds de l'application active, sauf : Action, Méthode, Propriété, Transition, Variable, Bibliothèque. Ajouter tous mes Propriétés et variables Ajoute au graphe les variables et les propriétés définies dans le nœud sélectionné. Peut être exécutée sur : Liste des variables globales, Programme, Bloc fonction, Fonction, Méthode, Transition, Action. 22 Ajouter tous mes enfants de groupe Ajoute au graphe les nœuds et les groupes du groupe sélectionné. Ajouter mon groupe parent Ajoute au graphe le groupe auquel est affecté le nœud sélectionné. Ajouter tous mes Actions Ajoute au graphe les actions définies dans le bloc fonction ou le programme sélectionné. Ajouter tous mes Méthodes Ajoute au graphe les méthodes définies dans le bloc fonction ou le programme sélectionné. Ajouter tous mes Transitions Ajoute au graphe les transitions définies dans le bloc fonction ou le programme sélectionné. Ajouter tous mes Valeurs d'énumération Ajoute les valeurs d'énumération définies dans l'énumération sélectionnée. EIO0000004079.02 Éditeurs d'analyse de code Machine Code Analysis Commande de menu Description Tout ajouter Interfaces Je suis en train de mettre en œuvre Ajoute au graphe les interfaces implémentées par le bloc fonction sélectionné. Tout ajouter FunctionBlocks qui m'étendent Ajoute au graphe les blocs fonction qui étendent le bloc fonction sélectionné. Tout ajouter Interfaces qui m'étendent Ajoute au graphe les interfaces qui étendent l'interface sélectionnée. Tout ajouter FunctionBlocks que j'étends Ajoute au graphe les blocs fonction étendus par le bloc fonction sélectionné. Tout ajouter Interfaces que j'étends Ajoute au graphe les interfaces étendues par l'interface sélectionnée. Tout ajouter Variables et propriétés qui m'instancient Ajoute les variables et les propriétés qui font référence au bloc fonction ou à l'énumération sélectionné(e). Ajouter tous les nœuds appelés par ce/cette XX Ajoute au graphe les nœuds appelés par le nœud sélectionné. Peut être exécutée sur : Programme, Bloc fonction, Fonction, Méthode, Transition, Action. Ajouter tous les nœuds qui appellent ce/cette XX Ajoute au graphe les nœuds qui appellent le nœud sélectionné. Peut être exécutée sur : Programme, Bloc fonction, Fonction, Méthode, Transition, Action. Tout ajouter Variables et Propriétés Je lis ou j'écris Ajoute au graphe les variables et les propriétés lues ou écrites par le nœud sélectionné. Peut être exécutée sur : Programme, Bloc fonction, Fonction, Méthode, Transition, Action, Propriété. Tous nœuds me lisant ou m'écrivant Ajoute au graphe les nœud qui lisent ou écrivent la propriété ou la variable sélectionnée. Ajouter un nœud de type de données Ajoute au graphe le nœud de type de données de la propriété ou de la variable sélectionnée, à condition que ce type ne soit pas un type de base (BOOL, REAL, STRING, etc.). Ajouter mon parent Peut être exécutée sur tous les nœuds, sauf Application et Bibliothèque. Ajouter mon type de retour Ajoute au graphe le nœud de type de retour de la fonction ou de la méthode sélectionnée, à condition que ce type ne soit pas un type de base (BOOL, REAL, STRING, etc.). Ajouter TestManager qui m'exécute Ajoute l'élément TestManager qui exécute l'élément TestCase sélectionné. Ajouter TestCases Je suis en train d'exécuter Ajoute les éléments TestCases exécutés par l'élément TestManager sélectionné. Ajouter Structures que j'utilise Ajoute les structures utilisées pour l'exécution de l'élément TestCase sélectionné. Ajouter TestCases que j'utilise Ajoute les éléments TestCases qui m'utilisent comme structure pour l'exécution. Ajouter TestCases et TestResources qui m'utilisent Ajoute les éléments TestCases et TestResources qui utilisent l'élément TestResource ou TestCase sélectionné. Ajouter TestSets et TestResources J'utilise Ajoute les éléments TestCases et TestResources utilisés par l'élément TestResource ou TestCase sélectionné. Vue de dépendance (groupes) Présentation Les objets d'un graphe de dépendance peuvent être affectés à des groupes, qui peuvent représenter des modules réels de la machine ou autres. Informations à prendre en compte : EIO0000004079.02 23 Machine Code Analysis Éditeurs d'analyse de code • Les objets à affecter à un groupe doivent appartenir à la même application que l'objet Vue de dépendance. • En affectant un bloc fonction ou un programme à un groupe, vous affectez également les méthodes, actions, propriétés et transitions de l'objet au groupe. Ces éléments s'affichent dans l'arborescence Groupes en tant que sous-nœuds du bloc fonction ou du programme. Barre d'outils Elément Description Créer Cliquez sur ce bouton pour créer un groupe vide. Vous pouvez commencer à renommer un groupe en sélectionnant un groupe dans l'arborescence et en cliquant sur la touche ESPACE. Supprimer Cliquez sur ce bouton pour supprimer le groupe sélectionné. Ouvrir Wizard Cliquez sur ce bouton pour ouvrir le Wizard Groupes. Affectation d'objets à des groupes Il existe plusieurs manières d'affecter des objets à des groupes : Elément Description Glisser-déposer Les nœuds et les sous-nœuds d'un objet Application peuvent être affectés à un groupe par glisser-déposer. Lorsque vous faites glisser un dossier, ses sous-nœuds sont affectés au groupe (une invite de confirmation s'affiche). Menu contextuel de l'arborescence Application Les nœuds et les sous-nœuds d'un objet Application peuvent être affectés à un groupe à l'aide de la commande de menu contextuel, page 38 Ajouter au groupe. Menu contextuel du graphe de dépendance de la Vue de dépendance Le ou les éléments sélectionnés dans le graphe de dépendance peuvent être affectés à un groupe nouveau ou existant à l'aide de la commande de menu contextuel, page 38 Ajouter au graphe de dépendance. Wizard Groupes Le Wizard Groupes permet de créer des groupes et de leur affecter des objets à partir d'une recherche sur le nom. Ce Wizard offre la possibilité de filtrer les objets pouvant être affectés à des groupes nouveaux ou existants. Elément Description Filtre de nom d'objet Saisissez un texte simple ou une expression régulière (Regex) afin de filtrer les objets de l'application à ajouter à un groupe. Le filtre ne s'applique pas aux dossiers. Exemples d'expressions Regex : Filtre de type d'objet • [0-9] : filtre les objets dont le nom ne comporte aucun chiffre. • [ _ ] : filtre les objets dont le nom ne comporte aucun trait de soulignement. Cochez les cases pour afficher moins d'objets. La recherche par nom peut être limitée à certains types d'objets : Afficher uniquement les objets non assignés • Bloc fonctionnel • Programme Cochez cette case pour afficher uniquement les objets non affectés à un groupe. Décochez-la pour afficher également les objets déjà affectés. Cette case est cochée par défaut. 24 EIO0000004079.02 Éditeurs d'analyse de code Machine Code Analysis Elément Description Nom de groupe Une suggestion de nom de module est générée sur la base du nom d'objet. Elle peut être modifiée à l'aide d'une expression régulière (Regex) ou d'un nom explicite. Les noms de groupe existants sont répertoriés dans la liste. Lorsque ce champ n'est pas renseigné, le nom de projet d'origine s'applique. Afficher la structure du dossier Cochez cette case pour afficher les objets dans la structure du dossier. Cette case est cochée par défaut. Colonne Nom Cochez les cases en regard des noms pour sélectionner les objets à ajouter au groupe. Lorsque vous sélectionnez un objet avec des sous-nœuds, les cases de ces sous-nœuds sont également cochées. Le nom de groupe des sous-nœuds est remplacé par celui du nœud principal. Colonne Nom de groupe Pour modifier un nom de groupe suggéré, sélectionnez-le et appuyez sur la barre d'espace. Créer Cliquez sur ce bouton pour créer un groupe à partir des objets sélectionnés. BlockList Liste de blocage Présentation A BlockList object can be added beneath a Code Analysis Manager object. The BlockList object contains elements that will not appear in Conventions Table, Metrics Table, or Dashboard results. This, although, is taken into account when you upload a project snapshot, page 29 into Machine Advisor Code Analysis. Pour ajouter un élément à une liste de blocage, cliquez dessus avec le bouton droit de la souris dans l'arborescence du navigateur et sélectionnez Analyse de code > Ajouter à la liste de blocage > Ajouter aux utilisateurs-BlockList ou Ajouter à Projet-BlockList dans le menu contextuel. Ces commandes de menu contextuel sont également disponibles dans les listes de résultats du Tableau des conventions ou du Tableau des mesures. L'éditeur BlockList contient deux onglets : • Conventions Liste des objets ne devant pas figurer dans les résultats du Tableau des conventions et du Tableau de bord. • Métriques Liste des objets ne devant pas figurer dans les résultats du Tableau des mesures et du Tableau de bord. Chaque onglet se divise en deux parties : • Projet Blocklist (à gauche) Contient les éléments bloqués qui sont disponibles pour tous les utilisateurs du projet. • Utilisateurs Blocklist (à droite) Contient les éléments bloqués qui doivent être disponibles uniquement sur votre ordinateur pour ce projet. EIO0000004079.02 25 Machine Code Analysis Éditeurs d'analyse de code Éléments de la liste de blocage Elément Description Élément Icône et nom de l'élément bloqué. Commentaire Commentaire à propos de l'élément bloqué. Sélectionnez la cellule de commentaire et appuyez sur la barre d'espace pour ajouter ou modifier un commentaire. Chemin Chemin de l'élément bloqué. Double-cliquez sur le chemin pour ouvrir l'objet associé dans l'éditeur correspondant. Commandes du menu contextuel d'une entrée de tableau Cliquez avec le bouton droit de la souris sur une entrée du tableau, puis sélectionnez l'une des commandes suivantes dans le menu contextuel : • Atteindre la définition Ouvre l'élément associé dans l'éditeur correspondant. • Supprimer de la liste de blocage Supprime l'élément de la liste de blocage. Double-clic sur une entrée du tableau 26 Ouvre l'élément associé dans l'éditeur correspondant. EIO0000004079.02 Gestionnaire d'analyse de code Machine Code Analysis Gestionnaire d'analyse de code Tableau de bord Présentation The Dashboard provides an application overview. L'onglet Tableau de bord se divise en quatre parties : • Barre d'outils Informations d'horodatage de l'analyse du code. Si le modèle de dépendance est obsolète, une notification s'affiche dans la barre d'outils et l'analyse peut être relancée à l'aide du bouton Analyser le code. Le bouton Vérifier les conventions permet d'analyser également les conventions. • Filtre (à gauche) Vous pouvez filtrer le contenu du Tableau de bord en fonction de types d'objets. By default, all object types are selected. If you modify the filter, the content of the whole dashboard is updated in real time. The (<Number>) behind an object type indicates the total number of objects per type that are included in the code analysis. All object types are included. • Métriques (partie supérieure de la fenêtre principale) Affiche les métriques les plus pertinentes en fonction du filtre appliqué. • Conventions (partie inférieure de la fenêtre principale) Affiche le nombre de violations de code (nombre total, avertissements, erreurs, informations). Métriques Affiche les métriques les plus pertinentes en fonction du filtre appliqué. Element Description Lines of Code Total Total sum of code lines for the objects. Lines of Code Average Lines of Code Total divided by the number of objects with lines of code. Halstead Difficulty Max The maximum value of Halstead Difficulty. Halstead Difficulty Average The sum of the Halstead Difficulty values divided by the number of objects. Displays n/a if the applied filter contains no objects with a Halstead Difficulty value. Below the metrics, two bar charts are displayed: • Lines of Code Top 5 Displays the 5 objects with the highest Lines of Code value. • Halstead Difficulty Top 5 Displays the 5 objects with the highest Halstead Difficulty value. The objects displayed in a bar chart provide additional information via tooltip. Conventions When the code analysis process is finished, the following is displayed: • EIO0000004079.02 A bar chart with the five objects that contain the highest number of code convention violations. 27 Machine Code Analysis Gestionnaire d'analyse de code Each object displayed in the bar chart provides additional information via tooltip. • The total number of code violations. • The total number of code violations with severity Error. • The total number of code violations with severity Warning. • The total number of code violations with severity Info. Le graphique avec les cinq objets contenant le plus grand nombre de violations de convention de code et le Tableau des conventions ne comportent pas les mêmes éléments. Le Tableau de bord résume les violations au niveau du POU, alors que le Tableau des conventions les détaille. Informations du Tableau de bord enregistrées avec le projet Les informations du Tableau de bord sont enregistrées avec votre projet. Elles s'affichent à la prochaine ouverture du projet. Leurs données d'horodatage sont indiquées sous Date/heure de la dernière analyse. Configuration Présentation Une fois que vous avez ajouté un objet Gestionnaire d'analyse de code, une configuration par défaut prenant en charge les principaux cas d'utilisation est appliquée. Dans des cas bien spécifiques, vous pouvez modifier la profondeur de l'analyse de code en fonction de vos exigences. Utilisez les cases à cocher pour définir le contenu à analyser. Elément Description Envisager des méthodes implicites Cette option est désactivée par défaut. Une fois l'option activée, les méthodes implicites générées (comme FB_INIT, FB_EXIT et FB_ REINIT) sont prises en compte lors de l'analyse du code. Le plus souvent, ces méthodes ne permettent pas d'explorer le code source ou ne peuvent pas être ajoutées à la liste des métriques et des conventions. Désactivez cette option pour limiter la quantité de données d'analyse et améliorer les performances. Considérer les fonctions d'accessibilité des propriétés Cette option est désactivée par défaut. Une fois l'option activée, les fonctions d'accessibilité des propriétés générées (comme GetTextProperty(), GetBooleanProperty(), GetNumberProperty(), GetCompany(), GetTextProperty2(), GetTitle(), GetVersion() et GetVersionProperty()) sont prises en compte lors de l'analyse du code. Le plus souvent, ces fonctions ne permettent pas d'explorer le code source ou ne peuvent pas être ajoutées à la liste des métriques et des conventions. Désactivez cette option pour limiter la quantité de données d'analyse, améliorer les performances et faciliter l'utilisation du contenu de la Vue de dépendance ajouté via une requête de sélection. Considérer les fonctions de vérification Cette option est désactivée par défaut. Une fois l'option activée, les fonctions de vérification (comme CheckBounds(), CheckDiv…() et CheckPointer()) sont prises en compte lors de l'analyse du code. Le plus souvent, ces fonctions ne permettent pas d'explorer le code source ou ne peuvent pas être ajoutées à la liste des métriques et des conventions. Cette option permet de limiter la quantité de données d'analyse, d'améliorer les performances et de faciliter l'utilisation de la Vue de dépendance. Envisager l'analyse du code des bibliothèques en profondeur Cette option est désactivée par défaut. Plus le nombre de bibliothèques référencées (directement ou indirectement) et utilisées dans un projet est élevé, plus vous aurez de résultats compilés à analyser. 28 EIO0000004079.02 Gestionnaire d'analyse de code Machine Code Analysis Elément Description En général, les fonctions, les programmes, les blocs fonction et autres objets qui interviennent dans la compilation (parce qu'ils sont appelés, lus, écrits, etc.) sont intégrés dans les résultats compilés peu importe leur origine (application, bibliothèque, espace POU, etc.). Cela nécessite du temps processeur pendant l'analyse de code et aboutit à un modèle de données plus volumineux. Si vous activez cette option, un projet de taille moyenne comportant un grand nombre de bibliothèques référencées peut utiliser plusieurs giga-octets de RAM (entre 8 et 12 Go). Par ailleurs, l'opération de calcul pour analyser les dépendances de lecture, d'écriture et d'appel entre les bibliothèques prendra plus de temps. Vous risquez également de dépasser les délais d'exécution impartis pour obtenir les résultats des conventions et des métriques. Le plus souvent, le contenu d'une bibliothèque (qui n'est pas directement utilisée par l'application via un appel, ou une opération de lecture ou d'écriture) peut être ignoré lors de l'analyse du code. Désactivez cette option pour limiter la quantité de RAM requise. Considérer les périphériques Cette option est désactivée par défaut. Lorsque cette option est activée, tous les équipements sont pris en compte lors de l'analyse du code. L'analyse des équipements ne permet pas d'obtenir des conventions ni des métriques. Elle ne convient pas non plus pour explorer vos fonctions, programmes, blocs fonction et autres objets via la Vue de dépendance. Si vous souhaitez analyser le lien entre ces objets et les équipements ainsi que leurs paramètres, vous devez également considérer les équipements. NOTE: La quantité de RAM supplémentaire requise dépend du nombre d'équipements dans le projet. Cette option est généralement pertinente pour faire glisser un équipement dans la Vue de dépendance, par exemple pour accéder à son instance de bloc fonction et identifier les programmes ou fonctions qui accèdent directement à ses paramètres. Prendre en compte le code et la taille des données (génération de code requise) Cette option est désactivée par défaut. La génération de ces données nécessite de générer du code et augmente le temps de création du modèle de données. Si vous activez cette option, les métriques Taille de l'application (code), Taille de l'application (code+données) et Taille de l'application (données) fournissent des résultats. Connexion au cloud Présentation Cette option vous permet de télécharger le modèle d'analyse (snapshot) sur le cloud Machine Advisor Code Analysis. Connexion au cloud d'analyse de code Etape Action 1 Ouvrez l'onglet Connexion au cloud. 2 Cliquez sur le bouton Connexion. Si vous n'avez pas de compte, suivez les instructions fournies dans le guide de l'utilisateur de EcoStruxure Machine Advisor Code Analysis (voir EcoStruxure, Machine Advisor Code Analysis, Guide de l'utilisateur. Contexte de cloud d'analyse de code Une fois connecté, procédez comme suit : EIO0000004079.02 29 Machine Code Analysis Gestionnaire d'analyse de code Etape Action 1 Cliquez dans le champ Société, puis sélectionnez la société pour laquelle le snapshot doit être téléchargé. 2 Cliquez dans le champ Projet d'analyse, puis sélectionnez le projet dans lequel le snapshot doit être téléchargé. Téléchargement du snapshot Le snapshot n'est pas créé par défaut. Si le snapshot n'est pas disponible ou est obsolète, procédez comme suit : Etape Action 1 Cliquez sur le bouton Analyser le projet pour créer un snapshot. 2 Cliquez sur le bouton approprié pour télécharger le snapshot ou stocker le snapshot dans le système de fichiers. Le snapshot stocké dans le système de fichiers peut être téléchargé manuellement (voir EcoStruxure, Machine Advisor Code Analysis, Guide de l'utilisateur). 30 EIO0000004079.02 Gestionnaire de requêtes d'analyse de code Machine Code Analysis Gestionnaire de requêtes d'analyse de code Présentation Le Code Analysis Query Manager fournit des onglets permettant de créer et modifier des jeux de règles personnalisés et de gérer vos requêtes de métriques et de conventions. Pour ouvrir le Code Analysis Query Manager cliquez sur Outils dans la barre de menus et sélectionnez Code Analysis Query Manager dans le menu contextuel. Rule Sets Présentation La fonctionnalité Rule Sets vous permet de fournir un sous-ensemble de requêtes à utiliser pour analyser le projet. Vous pouvez utiliser des jeux de règles prédéfinis comme modèles pour créer vos propres jeux de règles et les modifier selon vos besoins. Vos nouveaux jeux de règles peuvent également être synchronisés avec Machine Advisor Code Analysis. La fenêtre principale de la fonctionnalité Rule Sets comprend deux parties : • Liste de jeux de règles • Requêtes affectées aux divers jeux de règles. Liste de jeux de règles La liste de jeux de règles affiche les jeux de règles prédéfinis (installés avec EcoStruxure Machine Expert) et les jeux de règles définis par l'utilisateur. Elément Description Nom Nom du jeu de règles. Affectations Nombre d'affectation Etat de synchronisation Statut de la synchronisation avec EcoStruxure Machine Advisor Code Analysis. L'état de synchronisation est visible uniquement si vous êtes connecté à Machine Advisor Code Analysis. Barre d'outils Elément Description Nouveau Cliquez sur ce bouton pour créer un jeu de règles défini par l'utilisateur et entrer son nom. Dupliquer Cliquez sur ce bouton pour dupliquer un jeu de règles sélectionné et entrer le nom du nouveau jeu de règles. Supprimer Cliquez sur ce bouton pour supprimer un jeu de règles sélectionné. Une invite de confirmation s'affiche. Confirmez en cliquant sur Oui ou annulez en cliquant sur Non. Restaurer Cliquez sur ce bouton pour restaurer un jeu de règles sélectionné. Une invite de confirmation s'affiche. Confirmez en cliquant sur Oui ou annulez en cliquant sur Non. Si vous confirmez, le jeu de règles personnalisé retourne à l'état du modèle d'origine utilisé pour la personnalisation. Actualiser EIO0000004079.02 Cliquez sur ce bouton pour lancer la comparaison des jeux de règles entre EcoStruxure Machine Expert et Machine Advisor Code Analysis. 31 Machine Code Analysis Gestionnaire de requêtes d'analyse de code Elément Description Si EcoStruxure Machine Expert n'est pas connecté à Machine Advisor Code Analysis, l'onglet Connexion au cloud s'ouvre pour vous inviter à saisir vos informations d'identification. Téléchargement manquant Cliquez sur ce bouton pour télécharger tous les jeux de règles de Machine Advisor Code Analysis qui ne sont pas disponibles dans EcoStruxure Machine Expert. Si EcoStruxure Machine Expert n'est pas connecté à Machine Advisor Code Analysis, l'onglet Connexion au cloud s'ouvre pour vous inviter à saisir vos informations d'identification. Télécharger la sélection Cliquez sur ce bouton pour télécharger les jeux de règles sélectionnés de Machine Advisor Code Analysis vers EcoStruxure Machine Expert. Si EcoStruxure Machine Expert n'est pas connecté à Machine Advisor Code Analysis, l'onglet Connexion au cloud s'ouvre pour vous inviter à saisir vos informations d'identification. Téléchargement sélectionné Cliquez sur ce bouton pour envoyer et mettre à jour les jeux de règles sélectionnés vers Machine Advisor Code Analysis. Si EcoStruxure Machine Expert n'est pas connecté à Machine Advisor Code Analysis, l'onglet Connexion au cloud s'ouvre pour vous inviter à saisir vos informations d'identification. Détails du jeu de règles sélectionné Elément Description Nom Nom du jeu de règles. Description Description détaillée du jeu de règles. Chaînes de requête attribuées L'arborescence Chaînes de requête attribuées affiche les chaînes de requête de métriques et de conventions disponibles. Vous pouvez ajouter ou supprimer des chaînes de requête dans le jeu de règles en activant/désactivant les cases à cocher correspondant aux chaînes de requête appropriées. Cliquez sur Récapitulatif (dans le coin supérieur droit) pour ouvrir un fichier texte qui indique les chaînes de requête attribuées au jeu de règles. Vous pouvez enregistrer ce fichier pour votre usage. Référentiels de requêtes Présentation Cette description générique est valable pour les référentiels suivants : • Métriques • Conventions • Requêtes de dépendance (filtre) • Requêtes de dépendance (sélection) Pour plus d'informations, consultez les chapitres correspondants. Vous pouvez créer des requêtes et des chaînes de requête, et les organiser, pour toutes les catégories de référentiels. Une chaîne de requête se compose d'une ou plusieurs requêtes. Chaque référentiel propose une liste de requêtes et de chaînes de requête prédéfinies dont l'utilisateur peut se servir comme modèles pour créer ses propres requêtes ou chaînes de requête. Il est également possible de modifier directement les requêtes et chaînes de requête prédéfinies. 32 EIO0000004079.02 Gestionnaire de requêtes d'analyse de code Machine Code Analysis La fenêtre principale d'un référentiel se divise en trois parties : • Chaînes de requêtes (à gauche) Liste des chaînes de requête disponibles. Pour les métriques et les conventions, le statut de synchronisation avec Machine Advisor Code Analysis est fourni. • Requêtes (à droite) Liste des requêtes disponibles. • Résultats (en bas) Résultats pour la chaîne de requête sélectionnée et exécutée. L'éditeur du référentiel situé tout à fait à droite correspond à l'Éditeur de paramètres. Chaînes de requêtes L'arborescence Chaînes de requêtes contient les chaînes de requête disponibles par défaut (avec l'installation d'EcoStruxure Machine Expert) ainsi que celles définies par l'utilisateur à l'aide de l'Éditeur de paramètres de chaînes de requête. Les chaînes de requête prédéfinies fournies par Schneider Electric peuvent être modifiées, mais aussi réinitialisées à leurs valeurs d'origine. Barre d'outils Elément Description Exécuter Cliquez sur ce bouton pour exécuter la chaîne de requête sélectionnée. Le résultat s'affiche dans la fenêtre des résultats en bas de l'écran. Modifier Cliquez sur ce bouton pour modifier la chaîne de requête sélectionnée. Seules les chaînes de requête définies par l'utilisateur sont modifiables. Le bouton Modifier permet d'ouvrir l'Éditeur, page 36 Chaîne de requête. Dupliquer Cliquez sur ce bouton pour dupliquer la chaîne de requête sélectionnée et attribuer un nom à la nouvelle chaîne. Doublecliquez sur la chaîne de requête dupliquée pour ouvrir l'Éditeur de paramètres de chaînes de requête. Nouveau Cliquez sur ce bouton pour ajouter une chaîne de requête. Le bouton Nouveau permet d'ouvrir l'Éditeur de paramètres de chaînes de requête. Supprimer Cliquez sur ce bouton pour supprimer la chaîne de requête sélectionnée. Seules les chaînes de requête définies par l'utilisateur peuvent être supprimées. Restaurer Cliquez sur ce bouton pour restaurer un jeu de règles sélectionné. Une invite de confirmation s'affiche. Confirmez en cliquant sur Oui ou annulez en cliquant sur Non. Si vous confirmez, le jeu de règles personnalisé retourne à l'état du modèle d'origine utilisé pour la personnalisation. Actualiser Cliquez sur ce bouton pour lancer la comparaison des jeux de règles entre EcoStruxure Machine Expert et Machine Advisor Code Analysis. Si EcoStruxure Machine Expert n'est pas connecté à Machine Advisor Code Analysis, l'onglet Connexion au cloud s'ouvre pour vous inviter à saisir vos informations d'identification. Téléchargement manquant Cliquez sur ce bouton pour télécharger tous les jeux de règles de Machine Advisor Code Analysis qui ne sont pas disponibles dans EcoStruxure Machine Expert. Si EcoStruxure Machine Expert n'est pas connecté à Machine Advisor Code Analysis, l'onglet Connexion au cloud s'ouvre pour vous inviter à saisir vos informations d'identification. EIO0000004079.02 33 Machine Code Analysis Gestionnaire de requêtes d'analyse de code Elément Description Télécharger la sélection Cliquez sur ce bouton pour télécharger les jeux de règles sélectionnés de Machine Advisor Code Analysis vers EcoStruxure Machine Expert. Si EcoStruxure Machine Expert n'est pas connecté à Machine Advisor Code Analysis, l'onglet Connexion au cloud s'ouvre pour vous inviter à saisir vos informations d'identification. Téléchargement sélectionné Cliquez sur ce bouton pour envoyer et mettre à jour les jeux de règles sélectionnés vers Machine Advisor Code Analysis. Si EcoStruxure Machine Expert n'est pas connecté à Machine Advisor Code Analysis, l'onglet Connexion au cloud s'ouvre pour vous inviter à saisir vos informations d'identification. Affecter des requêtes à des chaînes et les organiser Elément Description Boutons fléchés Les boutons fléchés entre les listes Chaînes de requête et Requêtes permettent d'ajouter une requête à la chaîne de requête sélectionnée ou de supprimer une requête. Vous pouvez également les utiliser pour modifier l'ordre des requêtes dans la chaîne sélectionnée. Seules les chaînes de requête définies par l'utilisateur sont modifiables. Glisser-déposer Vous pouvez également utiliser la méthode glisser-déposer pour ajouter ou supprimer une requête pour une chaîne de requête définie par l'utilisateur. Requêtes La liste Requêtes répertorie les requêtes disponibles par défaut (avec l'installation d'EcoStruxure Machine Expert) ainsi que celles définies par l'utilisateur. Les requêtes prédéfinies ne peuvent pas être supprimées ni modifiées. Vous pouvez seulement les dupliquer. Barre d'outils Elément Description Modifier Cliquez sur ce bouton pour modifier la requête sélectionnée. Seules les requêtes définies par l'utilisateur sont modifiables. Le bouton Modifier permet d'ouvrir l'Éditeur, page 35 Requête. Dupliquer Cliquez sur ce bouton pour dupliquer la requête sélectionnée et attribuer un nom à la nouvelle requête. Double-cliquez sur la requête dupliquée pour ouvrir l'Éditeur de requêtes. Nouveau Cliquez sur ce bouton pour ajouter une requête. Le bouton Nouveau permet d'ouvrir l'Éditeur de requêtes. Supprimer Cliquez sur ce bouton pour supprimer la requête sélectionnée. Seules les requêtes définies par l'utilisateur peuvent être supprimées. Restaurer Cliquez sur ce bouton pour restaurer une requête sélectionnée. Une invite de confirmation s'affiche. Confirmez en cliquant sur Oui ou annulez en cliquant sur Non. Si vous confirmez, la requête personnalisée retourne à l'état de la requête d'origine. Éditeur de paramètres L'Éditeur de paramètres contient les paramètres de la requête ou de la chaîne de requête sélectionnée. 34 EIO0000004079.02 Gestionnaire de requêtes d'analyse de code Machine Code Analysis Consultez la section Éditeur de paramètres. Éditeur de requêtes Présentation L'Éditeur de requêtes vous permet de modifier ou de créer des requêtes définies par l'utilisateur. La fenêtre principale de l'Éditeur de requêtes se divise en deux parties : • Éditeur SPARQL • Résultats requête L'Éditeur de paramètres s'affiche tout à fait à droite de l'Éditeur de requêtes. Éditeur SPARQL Elément Description Name Modifiez le nom de la requête Éditeur SPARQL Modifiez la requête SPARQL. Messages de validation de la syntaxe Les erreurs de syntaxe SPARQL détectées sont indiquées en bas de l'Éditeur de requêtes. Cliquez sur un message pour accéder à l'erreur correspondante dans l'Éditeur de requêtes. Elément Description Chaîne de requête Une requête ne peut être exécutée que dans une chaîne de requête. Lorsqu'elle est déjà affectée à des chaînes de requête, celles-ci apparaissent dans la liste. La liste propose également une chaîne de requête par défaut sans paramètres. Résultats requête Les résultats de la requête s'affichent dans le tableau Résultats requête. Case à cocher Exécuter Décochez cette case pour désactiver l'exécution automatique de la requête. Bouton Exécuter Cliquez sur ce bouton pour forcer l'exécution. Résultats requête EIO0000004079.02 35 Machine Code Analysis Gestionnaire de requêtes d'analyse de code Éditeur de paramètres L'Éditeur de paramètres contient les paramètres de la requête. Consultez la section Éditeur de paramètres. Éditeur de paramètres de chaînes de requête Présentation L'Éditeur de paramètres de chaînes de requête vous permet de configurer des chaînes de requête définies par l'utilisateur. Les paramètres disponibles dépendent du référentiel auquel appartient la requête. Elément Description Disponibilité Description Description de la chaîne de requête. Tous les onglets de requête Groupe Définit le nom du groupe dans lequel les requêtes doivent s'afficher. • Requêtes de dépendance (sélection) Ce groupe figure dans la boîte de dialogue Sélectionner et ajouter de l'éditeur Vue de dépendance. • Requêtes de convention Ce groupe figure dans l'arborescence Conventions de l'éditeur Tableau des conventions. Code de couleurs Un code de couleurs est disponible pour les requêtes de métrique. Il est possible de surligner des résultats particuliers concernant les métriques à l'aide de couleurs dans le Tableau des mesures. Les règles en matière de code de couleurs reposent sur quatre paramètres : 36 Paramètre Description Valeur Saisissez la valeur à laquelle le résultat de requête de métrique réel est comparé. Comparer Sélectionnez l'opérateur de comparaison des résultats de requête de métrique. • GT (>) • LT (<) • GTE (≥) • LTE (≤) • EQ (=) • NEQ (≠) Type de comparaison Saisissez une valeur fixe ou un pourcentage. 100 % correspond à la valeur la plus élevée pour cette requête de métrique. Couleur Saisissez la valeur hexadécimale de la couleur dans laquelle le résultat de la requête de métrique doit s'afficher lorsque la règle est respectée. EIO0000004079.02 Gestionnaire de requêtes d'analyse de code Machine Code Analysis Éditeur de paramètres Présentation L'Éditeur de paramètres vous permet : • d'afficher les paramètres de la requête ou de la chaîne de requête sélectionnée ; • d'ajouter et de supprimer des paramètres ; • de modifier le nom, la valeur et le type des paramètres associés aux requêtes ou aux chaînes de requête définies par l'utilisateur. Elément Description Nom Nom de la variable Valeur Valeur par défaut Type Types de variables disponibles : • Booléen • Int32 • Double • Chaîne Ajouter Cliquez sur ce bouton pour ajouter un paramètre. Supprimer Cliquez sur ce bouton pour supprimer le paramètre sélectionné. Connexion au cloud Présentation Cette option vous permet de télécharger votre modèle d'analyse (snapshot) vers l'application Web Machine Advisor Code Analysis. Connexion au cloud d'analyse de code Etape Action 1 Ouvrez l'onglet Connexion au cloud. 2 Cliquez sur le bouton Connexion. Si vous n'avez pas de compte, suivez les instructions fournies dans le guide de l'utilisateur de EcoStruxure Machine Advisor Code Analysis (voir EcoStruxure, Machine Advisor Code Analysis, Guide de l'utilisateur. Contexte de cloud d'analyse de code Si vous avez réussi à vous connecter, cliquez dans le champ Société et sélectionnez la société dans laquelle le snapshot doit être téléchargé. Synchronisation des requêtes Pour vérifier si les requêtes de votre ordinateur et de Machine Advisor Code Analysis sont identiques, cliquez sur le bouton Comparer les requêtes. Si tel n'est pas le cas, le bouton Envoyer toutes les requêtes vous permet de télécharger vos requêtes dans Machine Advisor Code Analysis. EIO0000004079.02 37 Machine Code Analysis Commandes du menu contextuel Commandes du menu contextuel Commandes de menu contextuel des navigateurs Présentation Les commandes de menu contextuel suivantes sont disponibles pour tous les objets d'analyse de code sous l'objet Application : • Tout nettoyer • Ajouter au groupe • Ajouter au graphe de dépendance Tout nettoyer Cette commande de menu contextuel permet de supprimer les données d'analyse concernant l'application qui contient l'objet sélectionné. Ajouter au groupe Cette commande de menu contextuel permet d'ajouter l'objet sélectionné à un groupe nouveau ou existant. Ajouter au graphe de dépendance Cette commande de menu contextuel permet d'ajouter l'objet sélectionné à un graphe de dépendance nouveau ou existant. Une fois le code analysé, la Vue de dépendance nouvelle ou existante s'ouvre et les objets sélectionnés sont ajoutés au graphe de dépendance dans le coin supérieur gauche. Vous pouvez également ajouter des variables à un graphe de dépendance. Dans votre code de programme, cliquez avec le bouton droit sur une variable et sélectionnez Analyse de code > Ajouter au graphe de dépendance dans le menu contextuel. 38 EIO0000004079.02 Instructions Pragma pour Machine Code Analysis Machine Code Analysis Instructions Pragma pour Machine Code Analysis Instructions Pragma pour Machine Code Analysis Présentation L'auteur du code source peut utiliser des instructions Pragma pour décider si le code doit être inclus dans l'analyse. Les listes de blocage, elles, permettent d'exclure des éléments une fois l'analyse exécutée. L'effet obtenu est identique. Avec des instructions Pragma, vous pouvez : • marquer les éléments du code source (fonctions, programmes, blocs fonction, variables, etc.) à ignorer lors de l'analyse du code (cas d'utilisation 1) ; • marquer les éléments du code source qui seront filtrés dans les résultats du Tableau des conventions/Tableau des mesures ou dans la Vue de dépendance (cas d'utilisation 2). Voir également le chapitre BlockList, page 25. Cas d'utilisation 1 Le code qui ne doit pas être analysé peut être marqué à l'aide de l'instruction Pragma ignore. Les éléments ainsi marqués ne sont pas inclus dans le modèle de données d'analyse. Attribut {attribute 'code_analyzer' := 'ignore'} attribute 'code_analyzer' := 'public_ only'} Description • Marque un POU ou une variable à ignorer. • Fonctionne en mode récursif (par exemple, les variables du POU ou les méthodes d'un bloc fonction sont également ignorées). • Priorité maximale (comparé à l'attribut 'public_only'). • Marque un POU pour tenir compte uniquement des éléments publics (VarIn, VarOut, VarInOut, propriétés publiques, méthodes publiques). Les autres éléments sont ignorés. • Fonctionne en mode récursif (par exemple, les méthodes d'un bloc fonction sont traitées comme le bloc fonction). Cas d'utilisation 2 Le code non modifiable qui apparaît dans les résultats associés aux conventions et/ou aux métriques peut être marqué afin d'être masqué dans ces listes. Attribut {attribute 'code_analysis_ui' := 'filter_in_results'} {attribute 'code_analysis_ui' := 'filter_in_conventions'} EIO0000004079.02 Description • Marque un POU ou une variable comme étant à filtrer dans les résultats (Tableau des conventions, Tableau des mesures et Vue de dépendance). • Fonctionne en mode non récursif. • Marque un POU ou une variable comme étant à filtrer dans les résultats du Tableau des conventions (via l'interface utilisateur ou l'API de création de scripts). • Fonctionne en mode non récursif. 39 Machine Code Analysis Instructions Pragma pour Machine Code Analysis Attribut {attribute 'code_analysis_ui' := 'filter_in_metrics'} {attribute 'code_analysis_ui' := 'filter_in_dependency_view'} Description • Marque un POU ou une variable comme étant à filtrer dans les résultats du Tableau des mesures (via l'interface utilisateur ou l'API de création de scripts). • Fonctionne en mode non récursif. • Marque un POU ou une variable comme étant à filtrer dans la Vue de dépendance (boîte de dialogue Sélectionner et ajouter). • Fonctionne en mode non récursif. Exemples Ignorer une variable publique METHOD PUBLIC PublicMethod VAR_INPUT {attribute 'code_analyzer' := 'ignore'} i_iPublicButIgnoredVar: INT; i_iPublicVar2: INT; END_VAR VAR iPrivateVar2: INT; END_VAR Tenir compte des éléments publics uniquement {attribute 'code_analyzer' := 'public_only'} FUNCTION_BLOCK FB_PublicOnlyTest1 VAR_INPUT i_iPublicVar: INT; END_VAR VAR iPrivateVar: INT; END_VAR Filtrer (un POU) dans les résultats {attribute 'code_analysis_ui' := 'filter_in_results'} PROGRAM SR_FilterInResultsTest1 VAR END_VAR Filtrer (une variable) dans les résultats associés aux métriques et/ou aux conventions PROGRAM SR_FilterVars VAR {attribute 'code_analysis_ui' := 'filter_in_metrics'} iTestVar1: INT; {attribute 'code_analysis_ui' := 'filter_in_results'} iTestVar2: INT; {attribute 'code_analysis_ui' := 'filter_in_ conventions'} FAILED_iTestVar3: INT; END_VAR 40 EIO0000004079.02 Interface de création de scripts Python Machine Code Analysis Interface de création de scripts Python Interface de création de scripts Présentation Une API de création de scripts est disponible afin d'automatiser l'analyse du code. Elle vous permet d'intégrer cette analyse dans les environnements de gestion du cycle de vie des applications (ALM) et d'intégration continue (CI). Consultez également les rubriques suivantes de l'aide en ligne : • EcoStruxure Machine Expert - Guide de programmation\Annexes\Langage de script Python (voir EcoStruxure Machine Expert, Programming Guide) • Référence d'API du plug-in Script Engine • Bibliothèque de classe Script Engine Extensions des objets de script Application L'objet Application est étendu par la propriété suivante : Propriété Objet/valeur renvoyé(e) Description code_analysis ScriptCodeAnalysis, avec fonctions/propriétés associées L'objet renvoyé permet d'accéder aux fonctions d'analyse de code, comme perform_full_analysis(). Consultez la section Objets de script Python, page 42. Tableau des conventions L'objet Tableau des conventions est étendu par la fonction suivante : Fonction Objet/valeur renvoyé(e) Description conventions_table () ConventionsTableResults, avec fonctions/ propriétés associées Grâce à l'appel de cette méthode, l'analyse de code génère les résultats concernant le Tableau des conventions. L'objet renvoyé permet d'accéder à ces résultats. La convention configurée pour l'objet Tableau des conventions est utilisée. Consultez la section Objets de script Python, page 42. Tableau des mesures L'objet Tableau des mesures est étendu par la fonction suivante : EIO0000004079.02 41 Machine Code Analysis Interface de création de scripts Python Fonction Objet/valeur renvoyé(e) Description metrics_table() MetricsTableResults, avec fonctions/propriétés associées Grâce à l'appel de cette méthode, l'analyse de code génère les résultats concernant le Tableau des mesures. L'objet renvoyé permet d'accéder à ces résultats. La métrique configurée pour l'objet Tableau des mesures est utilisée. Consultez la section Objets de script Python, page 42. Objets de script (API d'analyse de code) Présentation Les extensions d'objets de script, page 41 permettent d'utiliser les objets de script renvoyés pour déclencher une analyse du code ou consulter les résultats concernant les conventions ou les métriques, par exemple. API d'analyse de code Cet objet offre un accès global à l'analyse de code d'un objet Application. Propriété Objet/valeur renvoyé(e) Description metrics MetricsTable, avec fonctions/propriétés associées La propriété metrics permet d'accéder à l'API de création de scripts propre aux métriques. conventions ConventionsTable, avec fonctions/propriétés associées La propriété conventions permet d'accéder à l'API de création de scripts propre aux conventions. configuration Configuration, avec fonctions/propriétés associées La propriété configuration permet d'accéder à l'API de création de scripts propre à la configuration. cloud_connection CloudConnection, avec fonctions/propriétés associées La propriété cloud_connection permet d'accéder au téléchargement de snapshots vers les Triple Storages, ainsi qu'à la configuration de la connexion au cloud. Fonctions Objet/valeur renvoyé(e) Description clear() Aucun(e) Supprime le modèle de dépendance en mémoire. Une autre analyse de code peut être lancée. perform_full_ analysis() Aucun(e) Démarre une analyse de code complète. Le modèle de dépendance est généré et réutilisé (par exemple, par l'API de métriques). store_dependency_ model(filename) Aucun(e) Stocke le modèle de dépendance dans un fichier XML. store_ttl (filename) Aucun(e) Stocke le modèle RDF sur disque dans un fichier TTL. Le langage TTL (Turtle Language) est un format standard de stockage des modèles RDF défini par le W3C (https://www.w3.org). 42 EIO0000004079.02 Interface de création de scripts Python Machine Code Analysis API de métriques Fonctions Objet/valeur renvoyé(e) Description get_all_metrics() string[], avec noms des métriques disponibles Renvoie les noms des requêtes de métrique disponibles. full_metrics_ table() MetricsTableResult, avec fonctions/propriétés associées Génère le Tableau des mesures à partir des requêtes de métrique disponibles. Consultez la section API de résultats du Tableau des mesures. metrics_table() MetricsTableResult, avec fonctions/propriétés associées Génère le Tableau des mesures à partir des requêtes de métrique indiquées. Consultez la section API de résultats du Tableau des mesures. Propriétés Objet/valeur renvoyé(e) Description successful BOOL Renvoie le résultat (réussite). message STRING Renvoie le message de résultat lisible. project_path STRING Renvoie le chemin du projet dont les résultats proviennent. analysis_started_ at STRING Renvoie l'heure de début du processus de génération de ce tableau de résultats. analysis_ finished_at STRING Renvoie l'heure de fin du processus de génération de ce tableau de résultats. analyser_version STRING Renvoie la version de l'analyseur de code qui a servi à générer ce tableau de résultats. columns STRING Renvoie la liste des colonnes de ce tableau de résultats. rows STRING Renvoie le tableau (lignes avec colonnes : [Array] of [Array]) avec les valeurs de résultat. Fonctions Objet/valeur renvoyé(e) Description store_as_xml(…) Aucun(e) Stocke les résultats du Tableau des mesures sur disque dans un fichier XML. store_as_csv(…) Aucun(e) Stocke les résultats du Tableau des mesures sur disque dans un fichier CSV. store_as_html(…) Aucun(e) Stocke les résultats du Tableau des mesures sur disque dans un fichier HTML. API de résultats du Tableau des mesures Indiquez un fichier XSLT pour convertir le format XML en HTML, si besoin. EIO0000004079.02 43 Machine Code Analysis Interface de création de scripts Python API de conventions Fonctions Objet/valeur renvoyé(e) Description get_all_ conventions() STRING[], avec noms des conventions disponibles Renvoie les noms des requêtes de conventions disponibles. full_conventions_ table() ConventionTableResult, avec fonctions/propriétés associées Génère le Tableau des conventions à partir des requêtes de convention disponibles. Consultez la section API de résultats du Tableau des conventions. conventions_table () ConventionTableResult, avec fonctions/propriétés associées Génère le Tableau des conventions à partir des requêtes de convention indiquées. Consultez la section API de résultats du Tableau des conventions. API de résultats du Tableau des conventions Propriétés Objet/valeur renvoyé(e) Description successful BOOL Renvoie le résultat (réussite). message STRING Renvoie le message de résultat lisible. project_path STRING Renvoie le chemin du projet dont les résultats proviennent. analysis_started_ at STRING Renvoie l'heure de début du processus de génération de ce tableau de résultats. analysis_ finished_at STRING Renvoie l'heure de fin du processus de génération de ce tableau de résultats. analyser_version STRING Renvoie la version de l'analyseur de code qui a servi à générer ce tableau de résultats. columns STRING Renvoie la liste des colonnes de ce tableau de résultats. rows STRING Renvoie le tableau (lignes avec colonnes : [Array] of [Array]) avec les valeurs de résultat. Fonctions Objet/valeur renvoyé(e) Description store_as_xml(…) Aucun(e) Stocke les résultats du Tableau des conventions sur disque dans un fichier XML. store_as_csv(…) Aucun(e) Stocke les résultats du Tableau des conventions sur disque dans un fichier CSV. store_as_html(…) Aucun(e) Stocke les résultats du Tableau des conventions sur disque dans un fichier HTML. Indiquez un fichier XSLT pour convertir le format XML en HTML, si besoin. API de configuration 44 Propriété Objet/valeur renvoyé(e) Description triple_storage_ backend_type Énumération TripleStorageBackendTypes Configure le type de backend Triple Storage RDF qui servira à gérer les données d'analyse de code. thresshold_for_ out_proc_backend_ usage INT Configure le seuil de sélection automatique du type de backend de stockage utilisé (en mémoire ou OutProc). EIO0000004079.02 Interface de création de scripts Python Machine Code Analysis Propriété Objet/valeur renvoyé(e) Description max_upload_ triple_count_per_ request INT Configure le nombre de triplets par demande de téléchargement. query_execution_ timeout Long Configure le timeout d'exécution des requêtes. update_execution_ timeout Long Configure le timeout d'exécution de la mise à jour d'une requête. server_uri STRING Configure l'URI de serveur des backends de stockage HTTP. relative_query_ endpoint STRING Configure le point final de requête pour les backends de stockage HTTP (par rapport à l'URL complète de point final de requête). relative_update_ endpoint STRING Configure le point final de mise à jour pour les backends de stockage HTTP (par rapport à l'URL complète de point final de mise à jour). dataset STRING Configure le nom du jeu de données pour les backends de stockage HTTP (par rapport à l'URL de point final). relative_data_ endpoint STRING Configure le point final de données pour les backends de stockage HTTP (par rapport à l'URL de point final). relative_sparql_ endpoint STRING Configure le point final SPARQL pour les backends de stockage HTTP (par rapport à l'URL de point final). graph_name STRING Configure le nom du graphe pour les backends de stockage HTTP (par rapport à l'URL de point final). sparql_endpoint STRING Lecture seule. Permet d'accéder à l'URL complète de point final SPARQL. data_endpoint STRING Lecture seule. Permet d'accéder à l'URL complète de point final de données. query_endpoint STRING Lecture seule. Permet d'accéder à l'URL complète de point final de requête. update_endpoint STRING Lecture seule. Permet d'accéder à l'URL complète de point final de mise à jour. Fonctions Objet/valeur renvoyé(e) Description reset() Aucun(e) Réinitialise la configuration de l'analyse du code. Propriété Objet/valeur renvoyé(e) Description configuration CloudConfiguration, avec fonctions/propriétés associées Permet d'accéder à l'API de création de scripts propre à la configuration cloud. Fonctions Objet/valeur renvoyé(e) Description upload_to_triple_ storage(…) Aucun(e) Démarre le téléchargement du snapshot du modèle RDF dans le Triple Storage RDF configuré. API de connexion au cloud EIO0000004079.02 45 Machine Code Analysis Interface de création de scripts Python API de configuration cloud 46 Propriété Objet/valeur renvoyé(e) Description http_backend_type Énumération HttpBackendTypes Configure le type de backend HTTP (par exemple, générique, Apache Fuseki, Stardog, etc.). Cette valeur est prise en compte à condition que le type de backend Triple Storage soit défini sur « Http ». max_upload_ triple_count_per_ request Integer Configure le nombre de triplets par demande de téléchargement. update_execution_ timeout Long Configure le timeout d'exécution de la mise à jour d'une requête. server_uri String Configure l'URI de serveur des backends de stockage HTTP. relative_query_ endpoint String Configure le point final de requête pour les backends de stockage HTTP (par rapport à l'URI complète de point final de requête). relative_update_ endpoint String Configure le point final de mise à jour pour les backends de stockage HTTP (par rapport à l'URI complète de point final de mise à jour). dataset String Configure le nom du jeu de données pour les backends de stockage HTTP (par rapport à l'URI de point final). relative_data_ endpoint String Configure le point final de données pour les backends de stockage HTTP (par rapport à l'URI de point final). relative_sparql_ endpoint String Configure le point final SPARQL pour les backends de stockage HTTP (par rapport à l'URI de point final). sparql_endpoint String Lecture seule. Permet d'accéder à l'URI complète de point final SPARQL. data_endpoint String Lecture seule. Permet d'accéder à l'URI complète de point final de données. query_endpoint String Lecture seule. Permet d'accéder à l'URI complète de point final de requête. update_endpoint String Lecture seule. Permet d'accéder à l'URI complète de point final de mise à jour. Fonctions Objet/valeur renvoyé(e) Description reset() Aucun(e) Réinitialise la configuration cloud de l'analyse du code. EIO0000004079.02 Comment ajouter des éditeurs d'analyse de code Machine Code Analysis Comment ajouter des éditeurs d'analyse de code Comment avoir un aperçu rapide de l'application via le Tableau de bord Présentation The Dashboard provides an application overview. Consultez la section Tableau de bord, page 27. Ouverture ou création d'un projet Open your preferred project or create a new project with File > New Project > From Project Template > Template Full. Ajout d'un Gestionnaire d'analyse de code L'onglet Tableau de bord est accessible via le Gestionnaire d'analyse de code. Votre première tâche consiste donc à ajouter un Gestionnaire d'analyse de code à votre projet. Etape Action Résultat /Commentaire 1 Cliquez avec le bouton droit de la souris sur le nœud Application dans l'arborescence Équipements. - 2 Sélectionnez Ajouter objet > Gestionnaire d'analyse de code dans le menu contextuel. L'éditeur Ajouter un Gestionnaire d'analyse de code s'affiche. 3 Cliquez sur le bouton Ajouter. • Un objet Gestionnaire d'analyse de code est ajouté sous l'objet Application dans l'arborescence Équipements. • L'onglet Tableau de bord du Gestionnaire d'analyse de code s'affiche. Analyse du code Etape 1 Action Résultat /Commentaire Cliquez sur le bouton Analyser le code de l'onglet Tableau de bord. Le projet est analysé et les métriques s'affichent. Si vous modifiez le filtre à gauche, tout le contenu du Tableau de bord est mis à jour en temps réel. Résumé Element Description Lines of Code Total Total sum of code lines for the objects. Lines of Code Average Lines of Code Total divided by the number of objects with lines of code. Halstead Difficulty Max The maximum value of Halstead Difficulty. Halstead Difficulty Average The sum of the Halstead Difficulty values divided by the number of objects. Displays n/a if the applied filter contains no objects with a Halstead Difficulty value. EIO0000004079.02 47 Machine Code Analysis Comment ajouter des éditeurs d'analyse de code Below the metrics, two bar charts are displayed: • Lines of Code Top 5 Displays the 5 objects with the highest Lines of Code value. • Halstead Difficulty Top 5 Displays the 5 objects with the highest Halstead Difficulty value. The objects displayed in a bar chart provide additional information via tooltip. Ajout de conventions Etape 1 Action Résultat /Commentaire Pour ajouter plus de résultats, cliquez sur le bouton Ajouter des conventions du Tableau de bord. Le projet est analysé (le processus peut prendre du temps) et les résultats associés aux conventions s'affichent. Comment obtenir des résultats détaillés sur les métriques de votre application Présentation With the Metrics Table, you can select metrics to be executed on an application and filter and list results. Consultez la section Tableau des mesures, page 18. Ouverture ou création d'un projet Open your preferred project or create a new project with File > New Project > From Project Template > Template Full. Ajout d'un Tableau des mesures Etape Action Résultat /Commentaire 1 Cliquez avec le bouton droit de la souris sur l'objet Application dans l'arborescence Équipements. - 2 Sélectionnez Ajouter objet > Tableau des métriques d'analyse de code dans le menu contextuel. L'éditeur Ajouter l'objet de la table des métriques d'analyse de code s'affiche. 3 Cliquez sur le bouton Ajouter. • Un objet Tableau des métriques d'analyse de code est ajouté sous l'objet Application dans l'arborescence Équipements. • Le Tableau des mesures s'affiche. Analyse du code Etape 48 Action Résultat /Commentaire 1 Dans la colonne Nom, décochez la case Tout. (Lorsque la case Tout est cochée, l'analyse prend plus de temps). 2 Cochez les cases Halstead Difficulty et Lines Of Code. - 3 Cliquez sur le bouton Analyser le code. Le projet est analysé et les résultats s'affichent. EIO0000004079.02 Comment ajouter des éditeurs d'analyse de code Machine Code Analysis Comment utiliser les résultats Vous pouvez maintenant filtrer les résultats (comme les valeurs Halstead Difficulty) en cliquant sur l'en-tête de colonne et examiner votre projet (en vous concentrant sur les valeurs Halstead Difficulty les plus élevées, par exemple). En double-cliquant sur une entrée du tableau, vous ouvrez l'objet d'application associé dans l'éditeur correspondant. Vous pouvez également utiliser la commande Atteindre la définition dans le menu contextuel d'une entrée du tableau. Pour les objets qui ne doivent pas s'afficher dans les résultats du Tableau des mesures, vous pouvez utiliser la commande Ajouter à la liste de blocage du menu contextuel d'une entrée du tableau. Comment obtenir des résultats détaillés sur les conventions de votre application Présentation With the Conventions Table, you can select conventions that have to be met by your application. Consultez la section Tableau des conventions, page 17. Ouverture ou création d'un projet Open your preferred project or create a new project with File > New Project > From Project Template > Template Full. Ajout d'un Tableau des conventions Etape Action Résultat /Commentaire 1 Cliquez avec le bouton droit de la souris sur l'objet Application dans l'arborescence Équipements. - 2 Sélectionnez Ajouter objet > Tableau des conventions d'analyse de code dans le menu contextuel. L'éditeur Ajouter un objet de table des conventions d'analyse de code s'affiche. 3 Cliquez sur le bouton Ajouter. • Un objet Tableau des conventions d'analyse de code est ajouté sous l'objet Application dans l'arborescence Équipements. • Le Tableau des conventions s'affiche. Analyse du code Etape EIO0000004079.02 Action Résultat /Commentaire 1 Dans la colonne Nom, décochez la case Tout. (Lorsque la case Tout est cochée, l'analyse prend plus de temps). 2 Cochez la case Variable Name Checks (Complex Types). - 3 Cliquez sur le bouton Analyser le code. Le projet est analysé et les résultats s'affichent. 49 Machine Code Analysis Comment ajouter des éditeurs d'analyse de code Comment utiliser les résultats Vous pouvez maintenant cocher la case Variable Name (Array) pour afficher les résultats correspondants, par exemple. Examinez ensuite votre projet en vous concentrant sur ces résultats associés aux conventions. En double-cliquant sur une entrée du tableau, vous ouvrez l'objet d'application associé dans l'éditeur correspondant. Vous pouvez également utiliser la commande Atteindre la définition dans le menu contextuel d'une entrée du tableau. Pour les objets qui ne doivent pas s'afficher dans les résultats du Tableau des conventions, vous pouvez utiliser la commande Ajouter à la liste de blocage du menu contextuel d'une entrée du tableau. Comment afficher les dépendances de votre application avec des requêtes prédéfinies dans la vue de dépendance Présentation With the Dependency View, you can visualize the dependencies of your analyzed application as a dependency graph. You can select the content and the layout of the dependency graph. Consultez la section Vue de dépendance, page 20. Ouverture ou création d'un projet Open your preferred project or create a new project with File > New Project > From Project Template > Template Full. Ajout d'une vue de dépendance Etape Action Résultat /Commentaire 1 Cliquez avec le bouton droit de la souris sur l'objet Application dans l'arborescence Équipements. - 2 Sélectionnez Ajouter objet > Vue de dépendance d'analyse de code dans le menu contextuel. L'éditeur Ajouter l'objet de vue de dépendance d'analyse de code s'affiche. 3 Cliquez sur le bouton Ajouter. • Un objet Vue de dépendance d'analyse de code est ajouté sous l'objet Application dans l'arborescence Équipements. • La Vue de dépendance s'affiche. Analyse du code Etape 1 50 Action Résultat /Commentaire Cliquez sur le bouton Analyser le code. Le projet est analysé. EIO0000004079.02 Comment ajouter des éditeurs d'analyse de code Machine Code Analysis Sélection de la portée et de la requête Etape Action Résultat /Commentaire 1 Cliquez sur le bouton Sélectionner et ajouter. - 2 Sélectionnez Scope espace POU. 3 Sélectionnez la requête 4 Cliquez sur le bouton Appliquer. > Application + > Call Graph. Cette option limite les éléments ajoutés au graphe de dépendance aux nœuds définis uniquement dans le projet. Cette option ajoute les appels de l'application au graphe de dépendance. Le projet est analysé et le graphe de dépendance s'affiche. Comment explorer étape par étape les dépendances de votre application dans la vue de dépendance Présentation Vous pouvez également ajouter des nœuds et des sous-nœuds dans le graphe de dépendance par glisser-déposer. Etape Action Résultat /Commentaire 1 Ajoutez une vue de dépendance au nœud Application. Voir ci-dessus. 2 Dans l'arborescence Équipements, sélectionnez le nœud SR_MainMachine (PRG). Application > TemplateFullProgrammingFramework TaskCalls 3 Faites glisser le nœud vers le nouveau graphe de dépendance. - 4 Cliquez avec le bouton de la souris sur SR_MainMachine dans le graphe de dépendance, puis sélectionnez Ajouter tous mes > Ajouter tous mes actions dans le menu contextuel. Le nœud SR_MainMachine et les actions associées s'affichent de manière désordonnée. 5 Ouvrez la liste Disposition, sélectionnez LinLog, puis cliquez sur Appliquer. Le nœud SR_MainMachine et les actions associées s'affichent sous forme radiale. > NOTE: Il s'agit d'un exemple. Vous pouvez faire glisser tous les objets de votre application vers le graphe de dépendance. EIO0000004079.02 51 Machine Code Analysis Annexes Contenu de cette partie Requêtes de dépendance (filtre)......................................................................54 Requêtes de dépendance (sélection)...............................................................56 Métriques ......................................................................................................60 Conventions ..................................................................................................83 EIO0000004079.02 53 Machine Code Analysis Requêtes de dépendance (filtre) Requêtes de dépendance (filtre) Contenu de ce chapitre Requêtes de dépendance (filtre).....................................................................54 Requêtes de dépendance (filtre) Requêtes de dépendance (filtre) Les requêtes suivantes sont disponibles par défaut (avec l'installation d'EcoStruxure Machine Expert). Nom Description Call Graph Description : cette chaîne de requête permet d'obtenir les fronts d'appel et les nœuds connectés (source ou cible du front). Le résultat est appliqué au contenu actuel d'une vue de dépendance afin d'afficher ou de masquer les nœuds et les fronts. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête Call Graph générée, ce filtre permet d'afficher uniquement les nœuds appelés et les fronts d'appel. Extend Graph Description : cette chaîne de requête permet d'obtenir les fronts d'extension et les nœuds connectés (source ou cible du front). Le résultat est appliqué au contenu de la vue de dépendance afin d'afficher ou de masquer les nœuds et les fronts. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête Extend Graph générée, ce filtre permet d'afficher uniquement les nœuds étendus ou qui étendent d'autres nœuds ainsi que les fronts d'extension. GVL Graph Description : cette chaîne de requête permet d'obtenir les nœuds de GVL. Le résultat est appliqué au contenu de la vue de dépendance afin d'afficher ou de masquer les nœuds. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête GVL Graph générée, ce filtre permet d'afficher uniquement les nœuds de GVL. GVL+Variable Graph Description : cette chaîne de requête permet d'obtenir les nœuds de GVL et de variable et les fronts qui connectent ces nœuds (source ou cible du front). Le résultat est appliqué au contenu de la vue de dépendance afin d'afficher ou de masquer les nœuds et les fronts. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête GVL+Variable Graph générée, ce filtre permet d'afficher uniquement les nœuds de GVL et de variable ainsi que les fronts qui les connectent. Implement Graph Description : cette chaîne de requête permet d'obtenir les fronts d'implémentation et les nœuds connectés (source ou cible du front). Le résultat est appliqué au contenu de la vue de dépendance afin d'afficher ou de masquer les nœuds et les fronts. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête Implement Graph générée, ce filtre permet d'afficher uniquement les nœuds implémentés ou qui implémentent d'autres nœuds ainsi que les fronts d'extension. Implement+Extend Graph Description : cette chaîne de requête permet d'obtenir les fronts d'extension et d'implémentation et les nœuds connectés (source ou cible du front). Le résultat est appliqué au contenu de la vue de dépendance afin d'afficher ou de masquer les nœuds et les fronts. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête Implement+Extend Graph générée, ce filtre permet d'afficher uniquement les nœuds étendus/implémentés ou qui étendent/implémentent d'autres nœuds ainsi que les fronts d'extension et d'implémentation. Library Stack 54 Description : cette chaîne de requête permet d'obtenir les nœuds de bibliothèque. Le résultat est appliqué au contenu de la vue de dépendance afin d'afficher ou de masquer les nœuds et les fronts. EIO0000004079.02 Requêtes de dépendance (filtre) Machine Code Analysis Nom Description Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête Library Stack générée, ce filtre permet d'afficher uniquement les nœuds de bibliothèque et les fronts « uses » qui les connectent. Node Graph Description : cette chaîne de requête permet d'obtenir les nœuds (tous types confondus). Le résultat est appliqué au contenu de la vue de dépendance afin d'afficher ou de masquer les nœuds et les fronts. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête Node Graph générée, ce filtre permet d'afficher tous les types de nœuds et les fronts qui les connectent. POU Graph Description : cette chaîne de requête permet d'obtenir les nœuds de POU. Le résultat est appliqué au contenu de la vue de dépendance afin d'afficher ou de masquer les nœuds et les fronts. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête POU Graph générée, ce filtre permet d'afficher uniquement les nœuds de POU et les fronts qui les connectent. POU+Variable Graph Description : cette chaîne de requête permet d'obtenir les nœuds de POU et de variable et les fronts qui connectent ces nœuds (source ou cible du front). Le résultat est appliqué au contenu de la vue de dépendance afin d'afficher ou de masquer les nœuds et les fronts. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête POU+Variable Graph générée, ce filtre permet d'afficher uniquement les nœuds de POU et de variable ainsi que les fronts qui les connectent. Read Graph Description : cette chaîne de requête permet d'obtenir les nœuds de POU et de variable et les fronts de lecture qui connectent ces nœuds (source ou cible du front). Le résultat est appliqué au contenu de la vue de dépendance afin d'afficher ou de masquer les nœuds et les fronts. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête Read Graph générée, ce filtre permet d'afficher uniquement les nœuds de POU et de variable connectés via des fronts de lecture. Read+Write Graph Description : cette chaîne de requête permet d'obtenir les nœuds de POU et de variable et les fronts d'écriture ou de lecture qui connectent ces nœuds (source ou cible du front). Le résultat est appliqué au contenu de la vue de dépendance afin d'afficher ou de masquer les nœuds et les fronts. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête Read+Write Graph générée, ce filtre permet d'afficher uniquement les nœuds de POU et de variable connectés via des fronts de lecture ou d'écriture. Write Graph Description : cette chaîne de requête permet d'obtenir les nœuds de POU et de variable et les fronts d'écriture qui connectent ces nœuds (source ou cible du front). Le résultat est appliqué au contenu de la vue de dépendance afin d'afficher ou de masquer les nœuds et les fronts. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête Write Graph générée, ce filtre permet d'afficher uniquement les nœuds de POU et de variable connectés via des fronts d'écriture. Device Graph Description : cette chaîne de requête permet d'obtenir les équipements et les fronts qui connectent ces nœuds. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête, page 56 Sélectionner et ajouter Device Graph générée, ce filtre permet d'afficher uniquement les équipements. Test Element Graph Description : cette chaîne de requête permet d'obtenir les éléments de test (TestCase, TestResource, TestSet, etc.) et les fronts qui connectent ces nœuds. Cas d'utilisation : une fois la vue de dépendance dont le contenu correspond à la requête, page 56 Sélectionner et ajouter Test Element Graph générée, ce filtre permet d'afficher uniquement les éléments de test. EIO0000004079.02 55 Machine Code Analysis Requêtes de dépendance (sélection) Requêtes de dépendance (sélection) Contenu de ce chapitre Requêtes de dépendance (sélection)..............................................................56 Requêtes de dépendance (sélection) Requêtes de dépendance (sélection) Les requêtes suivantes sont disponibles par défaut (avec l'installation d'EcoStruxure Machine Expert). Groupe : Misc Nom Description Call Graph Description : cette chaîne de requête génère une vue de dépendance avec les POU appelants ou appelés par un autre POU appartenant à la portée sélectionnée (définie sous l'application, par exemple). Résultats : en supposant qu'une seule tâche soit définie et qu'un seul programme (PRG) soit exécuté, le graphe obtenu est une arborescence de POU connectés via des fronts d'appel. Lorsque plusieurs tâches sont définies ou plusieurs programmes (PRG) sont exécutés, l'implémentation détermine si un POU commun est appelé ou non par les deux programmes. Vous obtenez alors plusieurs diagrammes d'appel dans une même vue de dépendance (sous forme de graphe). Cas d'utilisation : la vue de dépendance permet d'effectuer une analyse graphique du diagramme d'appel, de savoir quels POU sont utilisés par tel ou tel POU, et lesquels sont utilisés plusieurs fois. Lorsqu'un POU est appelé plusieurs fois, le problème est automatiquement résolu au niveau du POU dans les deux diagrammes d'appel. Exemple de code source : fbMyFunctionBlock.TestMethod(); Extend (FunctionBlock) Description : cette chaîne de requête génère une vue de dépendance avec les blocs fonction (FB) appartenant à la portée sélectionnée (définie sous l'application, par exemple) qui étendent un autre bloc fonction. Prenons l'exemple d'un bloc fonction de base appelé FB_DriveBase. Ce bloc fonction peut être étendu par les blocs FB_LXM52 et FB_LXM62. Résultats : vous obtenez un graphe des blocs fonction connectés via des fronts d'extension. À partir d'un bloc fonction dans un sous-nœud (c'est-à-dire un bloc fonction non étendu par un autre bloc tel que FB_LMX62), vous obtenez la chaîne de blocs vers son bloc de base. Pour les blocs fonction d'un projet, vous voyez les blocs fonction frères reposant sur le même bloc de base. Cas d'utilisation : la vue de dépendance permet de visualiser la chaîne étendue de blocs fonction. Vous pouvez savoir si des blocs frères étendent le même bloc de base avec des fonctionnalités identiques et pourraient être remplacés par un autre. Par exemple, vous pouvez utiliser les blocs FB_LXM62 et FB_LXM52 comme argument d'entrée de méthode basé sur FB_ DriveBase. Cette méthode peut prendre en charge les deux types de variateurs. Exemple de code source : FUNCTION_BLOCK FB_MyTest EXTENDS FB_MyTestBase Extend (Interface) Description : cette chaîne de requête génère une vue de dépendance avec les interfaces appartenant à la portée sélectionnée (définie sous l'application, par exemple) qui étendent une autre interface. Prenons l'exemple d'une interface de base appelée IF_DriveBase. Cette interface peut être étendue par les blocs IF_LXM52 et IF_LXM62. Résultats : vous obtenez un graphe des interfaces connectées via des fronts d'extension. À partir d'une interface dans un sous-nœud (c'est-à-dire une interface non étendue par une autre interface telle que IF_LMX62), vous obtenez la chaîne d'interfaces vers son interface de base. Pour les interfaces d'un projet, vous voyez les interfaces sœurs reposant sur la même interface de base. 56 EIO0000004079.02 Requêtes de dépendance (sélection) Nom Machine Code Analysis Description Cas d'utilisation : la vue de dépendance permet de visualiser la chaîne étendue d'interfaces. Vous pouvez savoir si des interfaces sœurs étendent la même interface de base avec des fonctionnalités identiques et pourraient être remplacées par une autre. Par exemple, vous pouvez utiliser les interfaces IF_LXM62 ou IF_LXM52 comme argument d'entrée de méthode basé sur IF_DriveBase. Cette méthode peut prendre en charge les deux types de variateurs. Exemple de code source : INTERFACE IF_MyTest EXTENDS IF_MyTestBase Extend Graph Description : cette chaîne de requête génère une vue de dépendance avec les interfaces et les blocs fonction (FB) appartenant à la portée sélectionnée (définie sous l'application, par exemple) qui étendent une autre interface. Prenons l'exemple d'une interface de base appelée IF_DriveBase. Cette interface peut être étendue par les blocs IF_LXM52 et IF_LXM62 (également valable pour les blocs fonction). Résultats : vous obtenez un graphe des interfaces et blocs fonction connectés via des fronts d'extension. À partir d'une interface/d'un bloc fonction dans un sous-nœud (c'est-à-dire une interface/un bloc non étendu(e) par une autre interface/un autre bloc tel(le) que IF_LMX62), vous obtenez la chaîne d'interfaces/de blocs fonction vers son interface/bloc de base. Pour les interfaces/blocs fonction d'un projet, vous voyez les interfaces sœurs/blocs fonction frères reposant sur la même interface/le même bloc de base. Cas d'utilisation : la vue de dépendance permet de visualiser la chaîne étendue d'interfaces et de blocs fonction. Vous pouvez savoir si des interfaces sœurs/blocs fonction frères étendent la même interface/le même bloc de base avec des fonctionnalités identiques et pourraient être remplacé(e)s par un(e) autre. Par exemple, vous pouvez utiliser les interfaces IF_LXM62 ou IF_ LXM52 comme argument d'entrée de méthode basé sur IF_DriveBase. Cette méthode peut prendre en charge les deux types de variateurs. Exemple de code source : FUNCTION_BLOCK FB_MyTest EXTENDS FB_MyTestBase ou INTERFACE IF_MyTest EXTENDS IF_MyTestBase GVL Graph Description : cette chaîne de requête génère une vue de dépendance avec les listes de variables globales (GVL) définies appartenant à la portée sélectionnée (définie sous l'application, par exemple). Résultats : vous obtenez un graphe des nœuds de GVL, sans les fronts qui les connectent. Cas d'utilisation : cette vue de dépendance permet d'explorer les listes de variables globales. Vous pouvez ainsi ajouter les variables connectées à la liste qui vous intéresse, par exemple. Exemple de code source : VAR_GLOBAL G_iGVLTestVar: INT; END_VAR GVL+Variable Graph Description : cette chaîne de requête génère une vue de dépendance avec les listes de variables globales (GVL) définies appartenant à la portée sélectionnée (définie sous l'application, par exemple) et les variables définies dans ces listes. Résultats : vous obtenez un graphe des nœuds de GVL et de variable, avec leurs dépendances. Lorsque plusieurs listes de variables globales sont définies dans une application, vous voyez des groupes de nœuds (une liste et ses variables). En général, les groupes ne sont pas connectés les uns aux autres. Cas d'utilisation : cette vue de dépendance permet d'explorer les listes de variables globales et les variables du projet. Vous pouvez ajouter des nœuds d'écriture et de lecture, par exemple, pour voir si une variable est utilisée par plusieurs extraits de code ou par un seul nœud à déclarer en local (dans un programme, par exemple). Exemple de code source : VAR_GLOBAL G_iGVLTestVar: INT; END_VAR Implement Graph Description : cette chaîne de requête génère une vue de dépendance avec les blocs fonction (FB) implémentant des interfaces appartenant à la portée sélectionnée (définie sous l'application, par exemple). Résultats : vous obtenez un graphe des blocs fonction et interfaces connectés via des fronts d'implémentation. Pour les blocs fonction d'un projet, vous pouvez également identifier l'autre bloc fonction implémentant les interfaces liées. EIO0000004079.02 57 Machine Code Analysis Nom Requêtes de dépendance (sélection) Description Cas d'utilisation : la vue de dépendance permet de visualiser les dépendances d'implémentation concernant les blocs fonction. Vous pouvez par exemple visualiser les implémentations d'interface manquantes lorsque plusieurs types de blocs fonction doivent respecter la même spécification qui sera utilisée par une méthode. Exemple de code source : FUNCTION_BLOCK FB_MyTest IMPLEMENTS IF_MyTest, IF_MyTest2 Implement+Extend Graph Description : cette chaîne de requête génère une vue de dépendance avec les blocs fonction (FB) et les interfaces appartenant à la portée sélectionnée (définie sous l'application, par exemple), ainsi que leurs connexions. Résultats : vous obtenez un graphe des blocs fonction et interfaces connectés via des fronts d'implémentation ou d'extension. Cas d'utilisation : cette vue de dépendance permet de visualiser en même temps les dépendances d'implémentation et d'extension. Exemple de code source : FUNCTION_BLOCK FB_MyTest EXTENDS FB_MyTestBase IMPLEMENTS IF_MyTest, IF_MyTest2 Library Stack Description : cette chaîne de requête génère une vue de dépendance avec les bibliothèques utilisées dans le projet. Résultats : vous obtenez la pile de bibliothèques sur laquelle repose votre application. Vous voyez les bibliothèques référencées de manière directe et indirecte. Cas d'utilisation : la vue de dépendance permet de visualiser toute la pile de bibliothèques de façon graphique. Vous voyez les couches de bibliothèque. Exemple : Application > Bibliothèques technologiques Bibliothèques système (API de micrologiciel) Node Graph > Bibliothèque PacDrive > Description : cette chaîne de requête génère une vue de dépendance complète des nœuds appartenant à la portée sélectionnée (définie sous l'application, par exemple) et de leurs connexions. Résultats : le graphe obtenu contient tous les nœuds (blocs fonction, programmes, fonctions, variables, bibliothèques, DUT, etc.) et les différents types de fronts qui les connectent. Cas d'utilisation : cette vue de dépendance permet de visualiser le projet complet. N'oubliez pas qu'elle contient de nombreux types de nœuds et de fronts différents et qu'il est impossible d'obtenir une vue spécifique du code (comparé au diagramme d'appel, par exemple). POU Graph Description : cette chaîne de requête génère une vue de dépendance avec les blocs fonction/ fonctions (POU) définis appartenant à la portée sélectionnée (définie sous l'application, par exemple). Résultats : vous obtenez un graphe des nœuds de POU. Lorsque les POU sont liés, via un front d'appel par exemple, ce front s'affiche également. Cas d'utilisation : cette vue de dépendance permet d'explorer les POU. Vous pouvez ainsi ajouter les variables connectées au POU qui vous intéresse, par exemple. POU+Variable Graph Description : cette chaîne de requête génère une vue de dépendance avec les programmes/ blocs fonction/fonctions (POU) définis appartenant à la portée sélectionnée (définie sous l'application, par exemple) et les variables définies dans ces POU. Résultats : vous obtenez un graphe des nœuds de programme et de variable, avec leurs dépendances. Cas d'utilisation : cette vue de dépendance permet d'explorer les POU et les variables du projet. Vous pouvez ajouter des nœuds d'écriture et de lecture, par exemple, pour voir si une variable est utilisée par plusieurs extraits de code ou par un seul nœud à déclarer en local (dans un POU, par exemple). Exemple de code source : PROGRAM SR_MyTest VAR iSRTestVar: INT; END_VAR Read Graph Description : cette chaîne de requête génère une vue de dépendance avec les opérations de lecture appartenant à la portée sélectionnée (définie sous l'application, par exemple) qui concernent les variables. Résultats : vous obtenez un graphe des POU (programmes, fonctions, blocs fonction, etc.) et des variables liées via un front de lecture. Cas d'utilisation : cette vue de dépendance permet d'explorer les opérations de lecture concernant les variables et de déterminer si ces variables sont lues une ou plusieurs fois dans le projet. 58 EIO0000004079.02 Requêtes de dépendance (sélection) Nom Machine Code Analysis Description Exemple de code source : dummy0 := iSRTestVar; Read+Write Graph Description : cette chaîne de requête génère une vue de dépendance avec les opérations de lecture et d'écriture appartenant à la portée sélectionnée (définie sous l'application, par exemple) qui concernent les variables. Résultats : vous obtenez un graphe des POU (programmes, fonctions, blocs fonction, etc.) et des variables liées via un front de lecture ou d'écriture. Cas d'utilisation : cette vue de dépendance permet d'explorer les opérations de lecture et d'écriture concernant les variables et de déterminer si ces variables sont lues une ou plusieurs fois dans le projet, sans jamais être écrites. Exemple de code source : dummy0 := iSRTestVar; iSRTestVar := dummy0; Write Graph Description : cette chaîne de requête génère une vue de dépendance avec les opérations d'écriture appartenant à la portée sélectionnée (définie sous l'application, par exemple) qui concernent les variables. Résultats : vous obtenez un graphe des POU (programmes, fonctions, blocs fonction, etc.) et des variables liées via un front d'écriture. Cas d'utilisation : cette vue de dépendance permet d'explorer les opérations d'écriture concernant les variables et de déterminer si ces variables sont écrites une ou plusieurs fois dans le projet. Exemple de code source : iSRTestVar := dummy0; Device Graph Description : cette chaîne de requête génère une vue de dépendance de l'arborescence d'équipements. Résultats : vous obtenez une arborescence d'équipements avec les instances d'équipement et leurs dépendances de sous-nœud. Cas d'utilisation : cette vue de dépendance permet de visualiser l'arborescence d'équipements et d'explorer les dépendances avec les variables qui représentent ces équipements dans l'application. Test Element Graph Description : cette chaîne de requête génère une vue de dépendance des éléments de test (TestCases, TestResources, TestSets, etc.). Résultats : vous pouvez visualiser les éléments de test et leurs dépendances. Cas d'utilisation : cette vue de dépendance permet d'identifier l'élément TestCase qui réutilise des éléments TestResources ou TestSets, et d'accéder aux différents éléments testés (fonctions, méthodes, blocs fonction, etc.). EIO0000004079.02 59 Machine Code Analysis Métriques Métriques Contenu de ce chapitre Métrique : taille de l'application (code).............................................................60 Métrique : taille de l'application (code+données) ..............................................61 Métrique : taille de l'application (données) .......................................................61 Métrique : Call In ..........................................................................................62 Métrique : Call Out.........................................................................................62 Métrique : taux de variables commentées (toutes) ...........................................62 Métrique : taux de variables commentées (entrée+sortie+globale) ....................63 Métrique : Cyclomatic Complexity ...................................................................63 Métrique : Extended By..................................................................................65 Métrique : Extends ........................................................................................65 Métrique : Fan In ...........................................................................................66 Métrique : Fan Out.........................................................................................66 Métrique : Halstead Complexity ......................................................................67 Métrique : Implemented By ............................................................................70 Métrique : Implements ...................................................................................71 Métrique : Lines Of Code (LOC) .....................................................................72 Métrique : Memory Size (Data) .......................................................................72 Métrique : Number Of Actions ........................................................................73 Métrique : Number Of GVL Usages.................................................................74 Métrique : nombre de lignes de commentaire en en-tête...................................74 Métrique : Number Of Instances .....................................................................75 Métrique : Number Of Library References .......................................................75 Métrique : Number Of Messages ....................................................................76 Métrique : Number Of Methods.......................................................................76 Métrique : nombre de commentaires multilignes ..............................................77 Métrique : Number Of Properties ....................................................................77 Métrique : Number Of Reads..........................................................................78 Métrique : Number Of Tasks ...........................................................................78 Métrique : Number Of Transitions ...................................................................79 Métrique : Number Of Variables......................................................................79 Métrique : Number Of Writes ..........................................................................80 Métrique : Number Of FBD Networks ..............................................................80 Métrique : taux de commentaires dans le code source .....................................80 Métrique : Stack Size.....................................................................................81 Métrique : taille de l'application (code) User Description Les applications écrites en langage de programmation IEC-61131-3 se composent de blocs fonction, de programmes, de fonctions, de listes de variables globales, etc. Lorsqu'elles sont connectées à un contrôleur, le code source est compilé et un exécutable est envoyé au contrôleur. Cet exécutable consiste en sections de code et de données lorsqu'il est chargé dans la mémoire du contrôleur. La taille du code de l'application est la quantité de mémoire nécessaire sur le contrôleur pour gérer le code d'application. NOTE: Cette métrique peut être calculée uniquement lorsque vous activez l'option Prendre en compte le code et la taille des données dans l'onglet Configuration de l'analyseur de code, page 28. Metric Calculation La taille du code d'application est calculée sur la base de la taille du code machine généré pour chaque POU (programme, bloc fonction, fonction). 60 EIO0000004079.02 Métriques Machine Code Analysis Métrique : taille de l'application (code+données) User Description Les applications écrites en langage de programmation IEC-61131-3 se composent de blocs fonction, de programmes, de fonctions, de listes de variables globales, etc. Lorsqu'elles sont connectées à un contrôleur, le code source est compilé (avec génération de code) et un exécutable est envoyé au contrôleur. Cet exécutable consiste en sections de code et de données lorsqu'il est chargé dans la mémoire du contrôleur. La taille du code et des données de l'application est la quantité minimum de mémoire nécessaire sur le contrôleur pour exécuter l'application. NOTE: Cette métrique peut être calculée uniquement lorsque vous activez l'option Prendre en compte le code et la taille des données dans l'onglet Configuration de l'analyseur de code, page 28. Metric Calculation La taille du code d'application est calculée sur la base de la taille du code machine généré pour chaque POU (programme, bloc fonction, fonction). La taille des données de l'application est calculée sur la base de la taille de toutes les variables de l'application. NOTE: La somme de la taille du code d'application et de la taille des données d'application (voir la métrique dédiée) n'est pas exactement égale à la taille d'application code + données (cette métrique) en raison de l'alignement ou de la taille de page de code du matériel contrôleur sous-jacent. Métrique : taille de l'application (données) User Description Les applications écrites en langage de programmation IEC-61131-3 se composent de blocs fonction, de programmes, de fonctions, de listes de variables globales, etc. Lorsqu'elles sont connectées à un contrôleur, le code source est compilé (avec génération de code) et un exécutable est envoyé au contrôleur. Cet exécutable consiste en sections de code et de données lorsqu'il est chargé dans la mémoire du contrôleur. La taille des données d'application est la quantité de mémoire nécessaire sur le contrôleur pour gérer les données nécessaires à l'exécution du code d'application. NOTE: Cette métrique peut être calculée uniquement lorsque vous activez l'option Prendre en compte le code et la taille des données dans l'onglet Configuration de l'analyseur de code, page 28. Metric Calculation La taille des données de l'application est calculée sur la base de la taille de toutes les variables de l'application. EIO0000004079.02 61 Machine Code Analysis Métriques Métrique : Call In User Description La métrique Call In est utilisée pour obtenir des informations sur l'appelant d'une méthode, d'une fonction, d'un bloc fonction, etc. Metric Calculation Chaque appel à une implémentation est pris en compte, mais si le même objet (méthode, fonction...) est appelé deux fois dans la même implémentation, il est compté une seule fois. Exemple Exemple de calcul de la métrique Call In pour du code IEC-61131-3 : METH(); // Some other implementation METH(); Résultat de la métrique Call In (pour la méthode METH) Call In = 1 Métrique : Call Out User Description La métrique Call Out est utilisée pour obtenir des informations sur les autres objets (méthode, fonction, bloc fonction...) appelés par l'implémentation. Metric Calculation Chaque appel à une implémentation est pris en compte, mais si le même objet (méthode, fonction...) est appelé deux fois dans la même implémentation, il est compté une seule fois. Exemple Exemple de calcul de la métrique Call Out pour du code IEC-61131-3 : METH(); // Some other implementation METH(); Résultat de la métrique Call Out (pour la méthode METH) Call Out = 1 Métrique : taux de variables commentées (toutes) User Description Cette métrique calcule taux (unité : %) entre variables commentées et non commentées dans un objet IEC. 62 EIO0000004079.02 Métriques Machine Code Analysis Metric Calculation Pour chaque déclaration de variable dans les objets IEC (fonction (FUN), bloc fonction (FB), type d'unité de données (DUT), liste de variables globales (GVL), etc.), l'analyse vérifie si elle est commentée ou non. Cette métrique fournit le rapport entre les deux valeurs. Exemple Exemple de calcul du taux de variables commentées pour du code IEC-61131-3 : Declaration: 1: PROGRAM SR_Main 2: VAR 3: xCheck1: BOOL;//flag to identify 4: uiMyVariable2: UINT; 5: xFlag: BOOL; 6: END_VAR Taux de variables commentées : 33,33 % Métrique : taux de variables commentées (entrée+sortie+globale) User Description Cette métrique calcule le rapport (unité : %) entre variables commentées et non commentées définies dans VAR_GLOBAL, VAR_INPUT, VAR_OUTPUT ou VAR_ IN_OUT. Metric Calculation Pour chaque déclaration de variable dans les objets IEC (fonction (FUN), bloc fonction (FB), type d'unité de données (DUT), liste de variables globales (GVL), etc.), l'analyse vérifie si elle est commentée ou non. Cette métrique fournit le rapport entre les deux valeurs. Exemple Exemple de calcul du taux de variables commentées (entrée+sortie+globale) pour du code IEC-61131-3 : Declaration: 1: PROGRAM SR_Main 2: VAR_IN 3: i_xCheck1: BOOL;//flag to identify 3: i_uiMyVariable2: UINT; 4: END_VAR 2: VAR 3: xFlag: BOOL; 4: END_VAR Taux de variables commentées (entrée+sortie+globale) : 50 % Métrique : Cyclomatic Complexity User Description La métrique Cyclomatic Complexity est utilisée pour mesurer la complexité d'un programme en comptabilisant le nombre de chemins linéairement indépendants dans le code source. EIO0000004079.02 63 Machine Code Analysis Métriques Metric Calculation La métrique Cyclomatic Complexity est calculée à l'aide du graphique de contrôle de déroulement du programme. Cette mesure de complexité dépend des points de condition et de décision inclus dans ce graphique. Par exemple : • Aucun point de condition ou de décision : complexité = 1 (un seul chemin à travers le code). • Une instruction IF : complexité = 2 (deux chemins à travers le code). • Une instruction IF avec deux conditions : complexité = 3 (trois chemins à travers le code). • … En fonction de l'outil d'analyse utilisé, il existe plusieurs interprétations/ implémentations de la métrique Cyclomatic Complexity. Certains outils ne tiennent pas compte des expressions AND/OR/... dans les instructions IF, REPEAT, WHILE, etc. La métrique McCabe Cyclomatic Complexity est toujours incrémentée de 1. D'autres outils prennent également en compte les expressions du flux de code (hors instruction IF, REPEAT, etc.) mais utilisées ultérieurement dans une instruction IF ou REPEAT, ce qui produit un résultat Cyclomatic Complexity plus élevé. L'implémentation de la métrique Cyclomatic Complexity pour le code IEC-61131-3 dans EcoStruxure Machine Expert tient compte des expressions contenant AND/OR/..., mais pas des expressions précalculées dans le flux du code ou indiquées à un appel de méthode. Exemple Exemple de calcul de la métrique Cyclomatic Complexity pour du code IEC61131-3 : // MCC +1 (Initial Value) // MCC +0 (Pre calculation of condition not considered) a := b OR c; // MCC +0 (Method call with condition not considered in calling implementation) METH4(a); IF a AND b OR c XOR d AND NOT e THEN // MCC +5 (IF with 5 conditions) CASE i OF 1..4: // MCC +1 (CASE range is considered as one condition) FOR i := 1 TO 10 DO // MCC +1 METH1(); END_FOR 10, 11, 12, 13: // MCC +1 (multiple CASE labels considered as one condition) REPEAT // MCC +1 (one condition in REPEAT) WHILE (a = TRUE AND b = FALSE) DO // MCC +2 (two conditions in WHILE) METH2(); END_WHILE 64 EIO0000004079.02 Métriques Machine Code Analysis UNTIL (TRUE) END_REPEAT ELSE // MCC +0 (Default path through CASE statement) METH3(); END_CASE END_IF Résultat de la métrique Cyclomatic Complexity Cyclomatic Complexity (MCC) = 12 Métrique : Extended By User Description La métrique Extended By est utilisée pour obtenir des informations sur la fréquence d'extension d'un bloc fonction ou d'une interface par un autre bloc fonction ou une autre interface. Metric Calculation Un bloc fonction peut étendre exactement un bloc fonction et implémenter plusieurs interfaces. Une interface peut étendre plusieurs interfaces mais ne peut pas implémenter d'autres interfaces. Un bloc fonction ou une interface peut être étendu(e) par zéro ou plusieurs interfaces. Le nombre d'interfaces étendues directes est compté. Exemple Exemple de calcul de Extended By pour du code IEC-61131-3 : FB_Test extends FB_Base implements IF_Test1, IF_Test2 FB_Base implements IF_Test4 IF_Test2 extends IF_Test3, IF_Test5 Résultats du calcul de Implemented By Extended By (FB_Base) = 1 Extended By (IF_Test3) = 1 Extended By (IF_Test5) = 1 Métrique : Extends User Description La métrique Extends est utilisée pour obtenir des informations sur le nombre d'interfaces étendues par un bloc fonction ou une interface. Metric Calculation Un bloc fonction peut étendre exactement un bloc fonction et implémenter plusieurs interfaces. Une interface peut étendre plusieurs interfaces mais ne peut pas implémenter d'autres interfaces. Un bloc fonction ou une interface peut étendre zéro ou plusieurs interfaces. Le nombre d'interfaces étendues directes est compté. Exemple Exemple de calcul de Extends pour du code IEC-61131-3 : FB_Test extends FB_Base implements IF_Test1, IF_Test2 EIO0000004079.02 65 Machine Code Analysis Métriques FB_Base implements IF_Test4 IF_Test2 extends IF_Test3, IF_Test5 Résultats du calcul de Implemented By Extends (FB_Test) = 1 Extends (IF_Test2) = 2 Métrique : Fan In User Description La métrique Fan In est utilisée pour obtenir des informations sur le nombre de dépendances entrantes (lectures, écritures, appels, etc.) vers un noeud du modèle de données d'analyse (modèle de dépendance). Une dépendance entrante signifie, par exemple, qu'un noeud est appelé et qu'un autre noeud en dépend. Metric Calculation Chaque dépendance entrante est prise en compte pour un noeud donné. Un noeud peut être un bloc fonction, un programme, une fonction, une variable, une bibliothèque, une propriété, une méthode, une tâche, etc. Exemple Exemple de dépendance (liste de dépendances) : FunctionBlockA defines MethodA FunctionBlockA defines MethodB FunctionBlockA defines VariableC FunctionBlockA calls MethodA MethodA calls MethodB MethodB reads VariableC Résultats de la métrique Fan In Fan In (FunctionBlockA) = 0 Fan In (MethodA) = 2 Fan In (MethodB) = 2 Fan In (VariableC) = 2 Métrique : Fan Out User Description La métrique Fan Out est utilisée pour obtenir des informations sur le nombre de dépendances sortantes (lectures, écritures, appels, etc.) présentées par un noeud du modèle de données d'analyse (modèle de dépendance). Une dépendance sortante signifie, par exemple, qu'un noeud est appelé et qu'un autre noeud en dépend. Metric Calculation Chaque dépendance sortante est prise en compte pour un noeud donné. Un noeud peut être un bloc fonction, un programme, une fonction, une variable, une bibliothèque, une propriété, une méthode, une tâche, etc. Exemple Exemple de dépendance (liste de dépendances) : FunctionBlockA defines MethodA FunctionBlockA defines MethodB FunctionBlockA defines VariableC 66 EIO0000004079.02 Métriques Machine Code Analysis FunctionBlockA calls MethodA MethodA calls MethodB MethodB reads VariableC Résultats de la métrique Fan Out Fan Out (FunctionBlockA) = 4 Fan Out (MethodA) = 1 Fan Out (MethodB) = 1 Fan Out (VariableC) = 0 Métrique : Halstead Complexity User Description La métrique Halstead Complexity est utilisée pour mesurer la complexité d'un programme logiciel sans l'exécuter. Cette méthode de test statique permet d'identifier et d'évaluer des propriétés mesurables du logiciel. Le code source est analysé et scindé en une suite de jetons, lesquels sont ensuite classés et comptabilisés en tant qu'opérateurs ou opérandes. La métrique Halstead Complexity ne dépend d'aucune langage de programmation et peut être appliquée au code source IEC-61131-3. Les opérateurs et les opérandes sont classés et comptabilisés comme suit : Paramètre Description n1 Nombre d'opérateurs distincts n2 Nombre d'opérandes distinctes N1 Nombre total d'opérateurs N2 Nombre total d'opérandes Plusieurs valeurs de métrique peuvent être calculées pour représenter différents aspects de complexité : • Halstead Difficulty (D) • Halstead Length (N) • Halstead CalculatedLength (Nx) • Halstead Volume (V) • Halstead Effort (E) • Halstead Vocabulary (n) Métrique Halstead Complexity des POU en langage ST (littéral structuré) À l'origine, la métrique Halstead Complexity a été développée pour les langages textuels (C, C++, Pascal…). Elle s'applique aux POU en langage ST. NOTE: La métrique Halstead Difficulty est affichée par défaut. Métrique Halstead Complexity des POU en langage FBD (diagramme à blocs fonction) Le langage FBD est un langage d'implémentation graphique ; il n'est pas basé sur du texte. Un POU se compose de plusieurs réseaux FBD. La métrique Halstead Complexity doit être adaptée pour pouvoir s'appliquer aux langages graphiques. Le concept de base est le même. On considère que les opérandes et les opérateurs, ainsi que leur fréquence (par réseau FBD), sont présentés à l'utilisateur (voir la section Exemple en langage FBD). EIO0000004079.02 67 Machine Code Analysis Métriques Les valeurs Halstead Complexity calculées pour chaque réseau FBD sont agrégées pour tous ces réseaux et associées au niveau du POU (programme, bloc fonction, fonction, méthode ou propriété). NOTE: Les valeurs Halstead calculées (pour chaque réseau FBD) sont FBD Network Halstead Difficulty et FBD Network Halstead Length. Les types d'agrégation suivants sont appliqués aux métriques Halstead (Halstead Difficulty et Halstead Length) de chaque réseau FBD : • Moyenne • Minimum • Maximum • Somme • Cohérence NOTE: Les valeurs agrégées les plus pertinentes sont FBD Halstead Difficulty Network Max, FBD Halstead Difficulty Network Consistency, FBD Halstead Length Network Max et FBD Halstead Length Network Consistency. Les autres combinaisons (minimum, somme et moyenne) sont calculées et associées au modèle, mais ne s'affichent pas par défaut. Metric Calculation Valeur Formule Halstead Difficulty (D) D = (n1 / 2) * (N2 / n2) Halstead Length (N) N = N1 + N2 Halstead CalculatedLength (Nx) Nx = n1 * log2(n1) + n2 * log2(n2) Halstead Volume (V) V = N * log2(n) Halstead Effort (E) E=V*D Halstead Vocabulary (n) n = n1 + n2 NOTE: Une expression contenue dans une instruction IF <expression> THEN ne doit pas avoir de parenthèses. Ces expressions sont considérées comme toujours disponibles dans le code source IEC-61131-3 . Agrégation des valeurs de la métrique Les résultats de la métrique, comme FBD Network Halstead Difficulty et FBD Network Halstead Length, sont agrégés pour tous les réseaux FBD d'un POU. Le paramètre values représente la liste des valeurs d'une métrique (par exemple, FBD Network Halstead Length) pour tous les réseaux d'un POU. La valeur de cohérence est le résultat du coefficient Gini. Ce coefficient est une mesure de la dispersion statistique, qui sert à mesurer l'inégalité entre les valeurs d'une distribution fréquente. Un coefficient Gini de 0 exprime une égalité parfaite (les valeurs sont toutes identiques). Un coefficient Gini de 1 exprime une inégalité maximale entre les valeurs. Exemple en langage ST Exemple de calcul de métrique Halstead pour du code IEC-61131-3 (seule la partie implémentation est prise en compte pour le calcul) : IF (xInit = FALSE) THEN PerformInitialization(); xInit := TRUE; ELSE FOR i := 1 TO 5 DO iAxisId := i + 7; 68 EIO0000004079.02 Métriques Machine Code Analysis sAxisName := Standard.CONCAT('MyAxis ', INT_TO_ STRING(iAxisId)); // Do some math calculations for each axis here udiResult := CalculateStuff(sName := sAxisName, iID := iAxisId); END_FOR END_IF Liste des opérateurs et de leurs fréquences : Operator Frequency ======== ========= (operators) If 1 Then 1 LeftParenthesis 6 RightParenthesis 6 Equal 1 Semicolon 5 Assign 7 Else 1 For 1 EndFor 1 Do 1 Plus 1 Period 1 INT_TO_STRING 1 Colon 2 EndIf 1 (n1) 16 (N1) 37 Liste des opérandes et de leurs fréquences : Operand Frequency ======= ========= (variables/methods/functions) xInit 2 PerformInitialization 1 i 2 iAxisId 3 sAxisName 2 Standard 1 CONCAT 1 udiResult 1 CalculateStuff 1 sName 1 iID 1 (constants) FALSE TRUE INT#1 INT#5 INT#7 'MyAxis ' (n2) 17 (N2) 1 1 1 1 1 1 22 Résultat de la métrique de difficulté Halstead Halstead Difficulty (D = (16/2) * (22/17) = 10.3529411764706 Exemple en langage FBD EIO0000004079.02 69 Machine Code Analysis Métriques Exemple de calcul de la métrique Halstead pour du code IEC-61131-3 en FBD (seule la partie implémentation est prise en compte pour le calcul) : Liste des opérateurs et de leurs fréquences : Operator Frequency ======== ========= (operators) Assign 4 Set2 1 And 1 Negation2 2 Or 1 Eq 1 (n1) 6 (N1) 10 Liste des opérandes et de leurs fréquences : Operand Frequency ======= ========= (variables/methods/functions/constants) xResult 1 TON 1 fbTON 1 xEnable 1 T#1s 1 IN 1 PT 1 Q 1 ET 1 xTray1Empty 1 xTray2Empty 1 xInHomePosition 1 xBeltFull 1 xGroupReady 1 uiMasterStart 1 5 1 (n2) 16 (N2) 16 Résultat de la métrique FBD Network Halstead Difficulty FBD Network Halstead Difficulty (D) = (6/2) * (16/16) = 3 Métrique FBD Network Halstead Length FBD Network Halstead Length (D) = 10 + 16 = 26 Métrique : Implemented By User Description La métrique Implemented By est utilisée pour obtenir des informations sur la fréquence d'implémentation d'une interface par un bloc fonction. 70 EIO0000004079.02 Métriques Machine Code Analysis Metric Calculation Un bloc fonction peut étendre exactement un bloc fonction et implémenter plusieurs interfaces. Une interface peut étendre plusieurs interfaces mais ne peut pas implémenter d'autres interfaces. Une interface peut être implémentée par plusieurs blocs fonction. Le nombre d'interfaces implémentées directes est compté. NOTE: Si un bloc fonction prolonge un autre bloc fonction ou qu'une interface prolonge d'autres interfaces, les interfaces implémentées dérivées ne sont pas prises en compte. Si une interface est implémentée dans le bloc fonction de base et le bloc fonction dérivé, elle est comptée deux fois. Exemple Exemple de calcul de Implemented By pour du code IEC-61131-3 : FB_Test extends FB_Base implements IF_Test1, IF_Test2 FB_Base implements IF_Test4, IF_Test1 IF_Test2 extends IF_Test3, IF_Test5 Résultats du calcul de Implemented By Implemented By (IF_Test1) = 2 Implemented By (IF_Test2) = 1 Implemented By (IF_Test3) = 1 Implemented By (IF_Test4) = 1 Implemented By (IF_Test5) = 1 Métrique : Implements User Description La métrique Implements est utilisée pour obtenir des informations sur le nombre d'interfaces implémentées par un bloc fonction. Metric Calculation Un bloc fonction peut étendre exactement un bloc fonction et implémenter plusieurs interfaces. Une interface peut étendre plusieurs interfaces mais ne peut pas implémenter d'autres interfaces. Un bloc fonction peut implémenter zéro ou plusieurs interfaces. Le nombre d'interfaces implémentées directes est compté. NOTE: Si un bloc fonction prolonge un autre bloc fonction ou qu'une interface prolonge d'autres interfaces, les interfaces implémentées dérivées ne sont pas prises en compte. Exemple Exemple de calcul de Implements pour du code IEC-61131-3 : FB_Test extends FB_Base implements IF_Test1, IF_Test2 FB_Base implements IF_Test4 IF_Test2 extends IF_Test3, IF_Test5 Résultats du calcul de Implements Implements (FB_Test) = 2 Implements (FB_Base) = 1 EIO0000004079.02 71 Machine Code Analysis Métriques Métrique : Lines Of Code (LOC) User Description La métrique LOC compte le nombre de lignes de code source dans un programme. Elle détermine ainsi la taille du programme. Cette métrique peut être utilisée pour estimer la charge représentée par le développement du programme, sa mise en production et la maintenance du logiciel publié. Metric Calculation Chaque ligne d'un objet implémenté textuel (fonction (FUN), bloc fonction (FB), type d'unité de donnée (DUT), liste de variables globales (GVL), etc.) est prise en compte dans la métrique Lines Of Code. Exemple Exemple de calcul de la métrique LOC pour du code IEC-61131-3 : Declaration: 1: PROGRAM SR_Main 2: VAR 3: x: BOOL; 4: END_VAR Implementation: 1: 2: IF (x = TRUE) THEN 3: DoSomething(); 4: END_IF 5: 6: // A nice comment 7: SpecialMethod(); Résultat de la métrique LOC Lines Of Code (LOC) = 11 Métrique : Memory Size (Data) User Description Une application ou une bibliothèque basée sur IEC-61131-3 s'articule autour de types complexes tels que des programmes, des blocs fonction, des listes de variables globales, des méthodes, des actions, des fonctions, des structures, etc. Au sein de chacun de ces types, des variables peuvent être définies. Les types complexes blocs fonction et structures peuvent être instanciés plusieurs fois et placés en bloc dans la mémoire. Chaque définition de type complexe (informations de type et variables), lors de son instanciation, a besoin d'une certaine quantité de mémoire appelée son empreinte. Cette empreinte est utilisée pour obtenir les informations concernant la taille nécessaire dans la mémoire elle-même. Informations sur la quantité de mémoire à gérer, par exemple dans des situations de modification en ligne ou lors de l'utilisation en tant qu'argument d'entrée de méthodes (informations utilisées ensuite comme taille de pile). Elle peut aussi être utilisée pour identifier des types complexes volumineux qui peuvent poser des problèmes s'ils sont souvent instanciés, par exemple dans un tableau (array). Metric Calculation Pour un bloc fonction ou une structure, les tailles des variables sont additionnées. Le type bloc fonction a de plus besoin de mémoire (liste de méthodes, interfaces implémentées, etc.). Selon l'architecture de contrôleur sous-jacente, un 72 EIO0000004079.02 Métriques Machine Code Analysis alignement de mémoire doit également être envisagé. Il s'appuie sur le type et l'ordre des variables. Exemple Exemple de calcul de Memory Size (Data) pour du code IEC-61131-3 : FUNCTION_BLOCK FB_XXX VAR xVar1: BOOL; // 1 bit xVar2: BOOL; // 1 bit xVar3: BOOL; // 1 bit // 5 additional bits for alignment iVar4: INT; // 4 byte (on 32-bit architectures) xVar5: BOOL; // 1 bit // 7 additional bits for alignment fbComplex: FB_Test; // 20 byte END_VAR FUNCTION_BLOCK FB_YYY VAREND_VAR FUNCTION_BLOCK FB_ZZZ VAR iVar1: INT; END_VAR Résultats du calcul de Memory Size (Data) Memory Size (Data) (FB_XXX) = 32 Memory Size (Data) (FB_YYY) = 4 Memory Size (Data) (FB_ZZZ) = 8 Métrique : Number Of Actions User Description La métrique Number Of Actions est utilisée pour obtenir des informations sur le nombre d'actions associées à un programme ou à un bloc fonction. Metric Calculation Toute action associée à un programme ou à un bloc fonction est prise en compte. Les actions non utilisées sont également comptabilisées. Exemple Exemple de calcul de Number Of Actions pour du code IEC-61131-3 : FB_MyAlphaModule - ACT_InitAxis1 (Action) - ACT_InitAxis2 (Action) - UpdateStatus (Method) - Calculate (Method) - Enabled (Property) - Get (Property Get) - Set (Property Set) - Status (Property) - Get (Property Get) - Set (Property Set) - SwitchNextState (Transition) Résultat du calcul de Number Of Actions (pour la variable FB_ MyAlphaModule) Number Of Actions = 2 EIO0000004079.02 73 Machine Code Analysis Métriques Métrique : Number Of GVL Usages User Description La métrique Number Of GVL Usages est utilisée pour obtenir des informations sur le nombre de variables globales utilisées (en lecture ou en écriture) par un objet de programmation (programme, bloc fonction, fonction, méthode, etc.). Metric Calculation Chaque objet de programmation (programme, bloc fonction, fonction, méthode, obtention ou définition de propriété, etc.) est traité individuellement. Exemple Exemple de calcul de Number Of GVL Usages pour du code IEC-61131-3 : FB_MyAlphaModule VAR iMyState : INT; END_VAR iMyState := GVL_IOs.G_iState; if (iMyState = 10) THEN ; END_IF Résultat du calcul de Number Of GVL Usages (pour la variable FB_ MyAlphaModule) Number Of GVL Usages = 1 Métrique : nombre de lignes de commentaire en en-tête User Description Cette métrique compte le nombre de commentaires dans l'en-tête de la section déclarative. Ces commentaires peuvent aider les développeurs à comprendre ce que fait l'objet, à quelle fin et de quelle manière. Metric Calculation Chaque ligne de commentaire apparaissant dans l'en-tête d'une section déclarative au sein d'objets IEC (fonction (FUN), bloc fonction (FB), type d'unité de données (DUT), liste de variables globales (GVL), etc.) est comptabilisée. Exemple Exemple de calcul des commentaires en en-tête pour du code IEC-61131-3 : Declaration: 1: //This PRG is the start point 2: //Methodes: 3: // - .... 4: // - .... 5: PROGRAM SR_Main 6: VAR 7: x: BOOL; 8: END_VAR Nombre de commentaires en en-tête : 4 74 EIO0000004079.02 Métriques Machine Code Analysis Métrique : Number Of Instances User Description La métrique Number Of Instances est utilisée pour obtenir des informations sur la fréquence d'utilisation d'un type complexe (bloc fonction, énumération, structure, etc.) en tant que type variable dans des objets de programmation (programmes, blocs fonction, etc.). Metric Calculation Vous pouvez déclarer des variables dans la section de déclaration. Un type de données (complexe ou élémentaire) est associé à chaque variable. Pour chaque utilisation, le nombre d'instances de ce type de données est augmenté d'une unité. NOTE: Si le type de données de la variable est un tableau (array), le type de données sous-jacent est utilisé et le nombre d'instances est augmenté de 1. La longueur du tableau n'est pas prise en compte. NOTE: Les chemins d'instanciation à travers différents types complexes ne sont pas pris en compte. Par exemple, si un bloc fonction est instancié plusieurs fois, les types complexes inclus ne sont comptés qu'une seule fois. Exemple Exemple de calcul de Number Of Instances pour du code IEC-61131-3 : SR_Main VAR fbMyAlphaModule: FB_MyAlphaModule; END_VAR FB_MyAlphaModule VAR astAxisStructures: ARRAY [1..10] OF ST_MyAxisStructure; fbSubModule: FB_MySubModule; END_VAR FB_MySubModule VAR fbAxis: FB_MyAxis; END_VAR ST_MyAxisStructure VAR iID: INT; fbAxis: FB_MyAxis; END_VAR FB_MyAxis VAR END_VAR Résultats du calcul de Number Of Instances Number Of Instances (FB_MyAlphaModule) = 1 Number Of Instances (FB_MySubModule) = 1 Number Of Instances (ST_MyAxisStructure) = 1 Number Of Instances (FB_MyAxis) = 2 Métrique : Number Of Library References User Description La métrique Number Of Library References est utilisée pour obtenir des informations sur le nombre de bibliothèques référencées directement par un espace d'application ou de POU. EIO0000004079.02 75 Machine Code Analysis Métriques Metric Calculation Toutes les références d'application à bibliothèque ou de bibliothèque à bibliothèque sont prises en compte. Exemple Exemple de calcul de Number Of Library References pour du code IEC-61131-3 : Application --> Library A --> Library B --> Library B --> Library C Résultat du calcul de Number Of Library References (pour l'application) Number Of Library References = 3 Métrique : Number Of Messages User Description La métrique Number Of Messages (simple information, avertissement, erreur détectée, erreur irrécupérable) est utilisée pour obtenir des informations sur le nombre de messages envoyés à la Vue Messages pendant la compilation. Metric Calculation La plupart des messages concernent un objet de programmation (bloc fonction, fonction, etc.). Tout message qui n'est pas lié à un objet de programmation est attaché à l'application (ou à l'espace POU en cas d'analyse de l'espace POU uniquement). NOTE: L'analyse du code est basée sur une application compilable exempte d'erreurs de compilation. Les messages de catégorie erreur et erreur irrécupérable émis pendant la compilation ne peuvent pas se produire dans les données d'analyse. Métrique : Number Of Methods User Description La métrique Number Of Methods est utilisée pour obtenir des informations sur le nombre de méthodes associées à un programme ou à un bloc fonction. Metric Calculation Toute méthode associée à un programme ou à un bloc fonction est prise en compte. Les méthodes non utilisées sont également comptabilisées. Exemple Exemple de calcul de Number Of Methods pour du code IEC-61131-3 : FB_MyAlphaModule - ACT_InitAxis1 (Action) - ACT_InitAxis2 (Action) - UpdateStatus (Method) - Calculate (Method) - Enabled (Property) - Get (Property Get) - Set (Property Set) - Status (Property) - Get (Property Get) - Set (Property Set) 76 EIO0000004079.02 Métriques Machine Code Analysis - SwitchNextState (Transition) Résultat du calcul de Number Of Methods (pour la variable FB_ MyAlphaModule) Number Of Methods = 2 Métrique : nombre de commentaires multilignes User Description Cette métrique compte les commentaires multilignes dans un objet IEC. L'utilisation de commentaires multilignes n'est pas une bonne pratique car le début et la fin de ces commentaires risquent de se perdre lors d'une fusion. Par exemple, un code source isolé en commentaire peut être accidentellement réinséré dans le programme. Metric Calculation Exemple Exemple de calcul des commentaires multilignes pour du code IEC-61131-3 : Declaration: 1: (*This is a multiline 2: comment in header*) 3: PROGRAM SR_Main 4: VAR 5: xCheck1: BOOL;(*not needed 6: uiMyVariable2: UINT;*) 7: xFlag: BOOL; 8: END_VAR Nombre de commentaires multilignes : 2 Métrique : Number Of Properties User Description La métrique Number Of Properties est utilisée pour obtenir des informations sur le nombre de propriétés associées à un programme ou à un bloc fonction. Metric Calculation Toute propriété associée à un programme ou à un bloc fonction est prise en compte. Les propriétés non utilisées sont également comptabilisées. Exemple Exemple de calcul de Number Of Properties pour du code IEC-61131-3 : FB_MyAlphaModule - ACT_InitAxis1 (Action) - ACT_InitAxis2 (Action) - UpdateStatus (Method) - Calculate (Method) - Enabled (Property) - Get (Property Get) - Set (Property Set) - Status (Property) - Get (Property Get) - Set (Property Set) - SwitchNextState (Transition) EIO0000004079.02 77 Machine Code Analysis Métriques Résultat du calcul de Number Of Properties (pour la variable FB_ MyAlphaModule) Number Of Properties = 2 Métrique : Number Of Reads User Description La métrique Number of Reads est utilisée pour obtenir des informations sur les variables qui ont été lues. Metric Calculation Chaque lecture d'une variable dans une implémentation est prise en compte, mais si une même variable est lue deux fois dans une implémentation, elle est comptée une seule fois. Exemple Exemple de calcul de Number Of Reads pour du code IEC-61131-3 : METH(iMyVariable); // Some other implementation METH(iMyVariable); Résultat du calcul de Number Of Reads (pour la variable iMyVariable) Number Of Reads = 1 Métrique : Number Of Tasks User Description La métrique Number Of Tasks est utilisée pour obtenir des informations sur le nombre de tâches actuellement définies dans une application. Metric Calculation Les tâches ne peuvent être définies que dans des applications. La métrique renvoie le nombre de tâches définies dans une application. Exemple Exemple de calcul de Number Of Tasks pour du code IEC-61131-3 : Application - SR_Main (Program) - FB_Test1 (FunctionBlock) - FB_Test2 (FunctionBlock) - TaskConfiguration - TASK_SR_Main (Task) - TASK_Visu (Task Résultat du calcul de Number Of Tasks (pour l'application) Number Of Tasks = 2 78 EIO0000004079.02 Métriques Machine Code Analysis Métrique : Number Of Transitions User Description La métrique Number Of Transitions est utilisée pour obtenir des informations sur le nombre de transitions associées à un programme ou à un bloc fonction. Metric Calculation Toute transition associée à un programme ou à un bloc fonction est prise en compte. Les transitions non utilisées sont également comptabilisées. Exemple Exemple de calcul du nombre de transitions pour du code IEC-61131-3 : FB_MyAlphaModule - ACT_InitAxis1 (Action) - ACT_InitAxis2 (Action) - UpdateStatus (Method) - Calculate (Method) - Enabled (Property) - Get (Property Get) - Set (Property Set) - Status (Property) - Get (Property Get) - Set (Property Set) - SwitchNextState (Transition) Résultat du calcul de Number Of Transitions (pour la variable FB_ MyAlphaModule) Number Of Properties = 2 Métrique : Number Of Variables User Description La métrique Number Of Variables est utilisée pour obtenir des informations sur le nombre de variables définies dans la section de déclaration de programmes, blocs fonction, fonctions, méthodes, commandes Get ou Set de propriétés, transitions, listes de variables globales, etc. Metric Calculation Toute variable définie dans une section de déclaration est prise en compte. Les variables non utilisées sont également comptabilisées. Exemple Exemple de calcul de Number Of Variables pour du code IEC-61131-3 : FB_MyAlphaModule VAR i: INT; END_VAR VAR_INPUT i_iCommand: INT; i_lrPosition: LREAL; END_VAR VAR_OUTPUT q_iStatus: INT; END_VAR Résultat du calcul de Number Of Variables (pour la variable FB_ MyAlphaModule) Number Of Variables = 4 EIO0000004079.02 79 Machine Code Analysis Métriques Métrique : Number Of Writes User Description La métrique Number Of Writes est utilisée pour obtenir des informations sur les variables qui ont été écrites. Metric Calculation Chaque écriture d'une variable dans une implémentation est prise en compte, mais si une même variable est écrite deux fois dans une implémentation, elle est comptée une seule fois. Exemple Exemple de calcul de Number Of Writes pour du code IEC-61131-3 : iMyVariable := 1; // Some other implementation iMyVariable := 2; Résultat du calcul de Number Of Writes (pour la variable iMyVariable) Number Of Writes = 1 Métrique : Number Of FBD Networks User Description La métrique Number of Function Block Diagram (FBD) Networks est utilisée pour obtenir des informations sur le nombre de réseaux disponibles dans un programme, un bloc fonction, une fonction, une méthode ou une propriété implémentés en FBD. Metric Calculation Chaque réseau FBD disponible dans le programme, le bloc fonction, la fonction, la méthode ou la propriété est pris en compte. Exemple Exemple de calcul de la métrique Number Of FBD Networks : FB_MyAlphaModule (FB) - implemented in FBD - FBD Network 1 - FBD Network 2 - FBD Network 3 Résultat de la métrique Number Of FBD Networks (pour la variable FB_ MyAlphaModule) Number Of FBD Networks = 3 Métrique : taux de commentaires dans le code source User Description Les commentaires peuvent aider les développeurs à comprendre ce que fait le code, à quelle fin et de quelle manière. Cette métrique calcule le rapport (unité : %) entre CLOC (Comment Lines Of Code) et SLOC (Source Lines Of Code) dans la section d'implémentation d'un objet IEC. 80 EIO0000004079.02 Métriques Machine Code Analysis CLOC : nombre de lignes de commentaire, y compris les lignes combinant code source et commentaire. SLOC : nombre de lignes sans commentaire et de lignes vides, y compris les lignes combinant code source et commentaire. Metric Calculation Chaque ligne d'un objet implémenté textuel (fonction (FUN), bloc fonction (FB), type d'unité de données (DUT), programme (PRG), etc.) est analysée pour vérifier si elle contient un commentaire ou du code source. Cette métrique fournit le rapport entre les deux valeurs. Exemple Exemple de calcul du taux de commentaires du code source pour du code IEC61131-3 : 1: 2: IF (x = TRUE) THEN 3: DoSomething();//This is very important and hard to understand 4: END_IF 5: 6: // A nice comment 7: SpecialMethod(); Taux de commentaires dans le code source : 50 % Métrique : Stack Size User Description Une application ou une bibliothèque basée sur IEC-61131-3 s'articule autour de types complexes tels que des programmes, des blocs fonction, des listes de variables globales, des méthodes, des actions, des fonctions, des structures, etc. Au sein de chacun de ces types, des variables peuvent être définies. Lorsqu'un type complexe est appelé, par exemple une fonction, une méthode, une action, une opération Get ou Set de propriété ou une transition, l'exécution nécessite la mémoire de la pile. Les informations de taille de pile peuvent être utilisées pour identifier le type complexe qui consomme une quantité trop importante de mémoire de la pile. NOTE: La mémoire de pile disponible par tâche est limitée et définie par le contrôleur utilisé. Une consommation importante de la taille de la pile peut entraîner des exceptions. NOTE: Si un type de bloc fonction est utilisé comme type de variable d'entrée de méthode (appel par valeur), la taille mémoire du type complexe est nécessaire (voir Données de taille mémoire, page 72). L'appel par valeur ne doit pas être utilisé pour les types complexes tels que les entrées de méthode ou de fonction. Metric Calculation Pour un type complexe tel qu'une fonction ou une méthode, les tailles des variables s'additionnent. Lors de l'appel du type complexe, la taille mémoire est allouée par dessus la pile et les valeurs d'entrée y sont copiées. Pendant l'exécution du code de la fonction ou de la méthode, ces valeurs de mémoire sont utilisées. NOTE: Chaque appel de méthode ou de fonction a sa propre mémoire et aucun conflit ne se produit si une méthode est appelée en parallèle par une autre tâche. Exemple EIO0000004079.02 81 Machine Code Analysis Métriques Exemple de calcul de Stack Size pour du code IEC-61131-3 : FUNCTION_BLOCK FB_XXX VAR fbComplex: FB_Test; // 20 byte END_VAR // method call of FB_XXX Meth1(TRUE); METHOD Meth1 VAR_INPUT xTest1: BOOL; END_VARVAR iTest2: INT; END_VAR METHOD METH2 VAR_INPUT fbComp: FB_XXX; END_VAR Résultats du calcul de Stack Size Stack Size (METH1) = 8 Stack Size (METH2) = 32 82 EIO0000004079.02 Conventions Machine Code Analysis Conventions Contenu de ce chapitre Requêtes de convention ................................................................................83 Convention : messages de compilation ...........................................................86 Convention : POU complexe avec faible taux de commentaires ........................86 Conventions : Vérifications des noms de types complexes ...............................87 Conventions : Limite de profondeur d'héritage .................................................87 Convention : vérification de lecture de variable d'entrée ...................................88 Convention : vérification du type de variable d'entrée .......................................89 Convention : vérification d'écriture de variable d'entrée ....................................89 Convention : utilisation de commentaires multilignes........................................90 Convention : absence de commentaire en en-tête............................................91 Conventions : Nombre limite de méthodes ......................................................91 Conventions : Nombre limite de propriétés ......................................................91 Convention : vérification de lecture de variable de sortie...................................92 Convention : vérification du type de variable de sortie ......................................93 Convention : vérification d'utilisation de variables PERSISTENT .......................93 Convention : vérification d'utilisation de variables RETAIN ................................93 Convention : variable non commentée (toutes) ................................................94 Convention : variable non commentée (entrée+sortie+globale) .........................94 Conventions : Vérification des variables inutilisées...........................................94 Conventions : Vérification des noms de variable ..............................................95 Conventions : Vérification de la longueur des noms de variable ........................96 Requêtes de convention Requêtes de convention Les requêtes suivantes sont disponibles par défaut avec l'installation d'EcoStruxure Machine Expert. Groupe : Comment Checks Nom Complex POU With Low Comment Ratio Multiline Comments Usage No Header Comment Uncommented Variable (All) Uncommented Variable (In+Out+Global) Groupe : Complex Type Name Checks EIO0000004079.02 • Vérifiez que les objets définis par l'utilisateur respectent les règles configurées. • Par exemple, les énumérations doivent commencer par ET_ (exemple : ET_ MyTestEnumeration). Nom Préfixe Complex Type Name (Enumeration) ET_ Complex Type Name (Function) FC_ Complex Type Name (Function block) FB_ Complex Type Name (Interface) IF_ Complex Type Name (Program) SR_ 83 Machine Code Analysis Conventions Nom Préfixe Complex Type Name (Struct) ST_ Complex Type Name (TestCase) TC_ Complex Type Name (TestResource) TR_ Complex Type Name (TestSeries) TS_ Complex Type Name (TestSet) TS_ Complex Type Name (Union) UT_ Groupe : Messages Nom Compile Messages Groupe : Variable Name Checks (Complex Types) et Variable Name Checks (Elementary Types) 84 • La portée (local, entrée, sortie, entrée/sortie, etc.) et le type de données doivent être indiqués comme préfixes dans les noms de variables. Exemple : q_ pour les variables d'entrée et ar pour les variables de type tableau -> q_ arMyVariable. • Les guides de style de codage recommandent d'ajouter des préfixes aux variables. Nom Préfixe Variable Name (Array) ar Variable Name (Enumeration) et Variable Name (FunctionBlock) fb Variable Name (Interface) if Variable Name (Pointer) p Variable Name (Reference) r Variable Name (Struct) st Variable Name (TestCase) tc Variable Name (Union) ut Nom Préfixe Variable Name (BIT) x Variable Name (BOOL) x Variable Name (BYTE) b Variable Name (DATE) dat Variable Name (DINT) di Variable Name (DT) dt Variable Name (DWORD) dw Variable Name (INT) i Variable Name (LINT) li Variable Name (LREAL) lr Variable Name (LTIME) ltim Variable Name (LWORD) lw EIO0000004079.02 Conventions Machine Code Analysis Nom Préfixe Variable Name (REAL) r Variable Name (SINT) si Variable Name (STRING) s Variable Name (TOD) tod Variable Name (UDINT) udi Variable Name (UINT) ui Variable Name (ULINT) uli Variable Name (USINT) usi Variable Name (WORD) w Variable Name (WSTRING) ws Groupe : Threshold Checks Nom Description Inheritance Depth Limit Description : cette requête permet de vérifier, pour chaque interface ou bloc fonction, que la profondeur d'héritage ne dépasse pas la limite fixée. Cas d'utilisation : vous pouvez vérifier la limite de profondeur d'héritage pour éviter d'avoir des structures trop complexes ou trop profondes qui seraient impossibles à gérer. Exemple : le bloc fonction 1 étend le bloc 2, qui étend le bloc 3, lequel étend le bloc 4. Variable Length Check Description : cette requête permet de vérifier, pour chaque variable, que la longueur ne dépasse pas la limite suggérée. Cas d'utilisation : vous pouvez vérifier la longueur des noms de variables pour rendre le code source plus lisible et facile à gérer. Exemple à suivre : iCounterVariable1 Exemple à proscrire : iAnotherToLengthCounter1Variable Number Of Method Limit Description : cette requête permet de vérifier, pour un bloc fonction par exemple, que le nombre de méthodes définies ne dépasse pas la limite suggérée. Cas d'utilisation : lorsqu'un bloc fonction contient trop de méthodes, il convient de le remanier pour n'implémenter qu'une seule fonction. Number Of Properties Limit Description : cette requête permet de vérifier, pour un bloc fonction par exemple, que le nombre de propriétés définies ne dépasse pas la limite suggérée. Cas d'utilisation : lorsqu'un bloc fonction contient trop de propriétés, il convient de le remanier pour n'implémenter qu'une seule fonction. Groupe : Usage Checks Nom Description Input Variable Read Check Description : cette requête permet de vérifier, pour chaque variable d'entrée, si elle est lue depuis l'extérieur du POU. Cas d'utilisation : les guides de style de codage déconseillent de lire une variable d'entrée d'un POU. Input Variable Type Check Description : cette requête permet de vérifier, pour chaque variable d'entrée, si elle est de type bloc fonction. Cas d'utilisation : les guides de style de codage déconseillent d'utiliser des variables d'entrée de type bloc fonction. Input Variable Writes Check Description : cette requête permet de vérifier, pour chaque variable d'entrée, si elle est écrite à partir du POU dans lequel elle est définie. Cas d'utilisation : les guides de style de codage déconseillent d'écrire dans une variable d'entrée depuis un POU. Output Variable Read Check EIO0000004079.02 Description : cette requête permet de vérifier, pour chaque variable de sortie, si elle est lue à partir du POU. 85 Machine Code Analysis Nom Conventions Description Cas d'utilisation : les guides de style de codage déconseillent de lire une variable de sortie à partir d'un POU. Output Variable Type Check Description : cette requête permet de vérifier, pour chaque variable de sortie, si elle est de type bloc fonction. Cas d'utilisation : les guides de style de codage déconseillent d'utiliser des variables de sortie de type bloc fonction. Persistant Usage Check Description : cette requête permet de vérifier, pour chaque variable, si elle est de type PERSISTANT et si elle est déclarée dans un bloc fonction. Cas d'utilisation : les guides de style de codage déconseillent d'utiliser des variables PERSISTANT dans les blocs fonction. Retain Usage Check Description : cette requête permet de vérifier, pour chaque variable, si elle est de type RETAIN et si elle est déclarée dans un bloc fonction. Cas d'utilisation : les guides de style de codage déconseillent d'utiliser des variables RETAIN dans les blocs fonction. Unused Variables Check Description : cette requête permet de vérifier si certaines variables ne sont ni lues, ni écrites dans le projet entier (-> variable inutilisée). Cas d'utilisation : vous pouvez détecter les variables inutilisées et générer un rapport les concernant, nettoyer le projet et améliorer ainsi la qualité du code. Convention : messages de compilation User Description Lors de la compilation d'une application basée sur IEC-61131-3, le compilateur signale au développeur les erreurs irrécupérables et les erreurs détectées, des conseils (avertissements) et diverses informations utiles. Les erreurs irrécupérables et les erreurs détectées doivent être résolues par le développeur pour que l'application puisse fonctionner sur un contrôleur. Les avertissements à titre de conseil doivent aussi être traités par le développeur. Leur nombre doit être aussi proche de zéro que possible pour une application dont la publication est déjà planifiée. Les messages simplement informatifs servent notamment à tenir le développeur au courant de l'évolution de l'application compilée ou de ses besoins en taille mémoire. NOTE: Il n'est possible de procéder à une analyse de code que sur une application exempte d'erreurs irrécupérables. Seuls les messages de compilation sont pris en compte lors d'une analyse de code. Les messages d'erreur ne sont pas disponibles. Convention Verification Rule Pour la vérification des conventions, les messages de compilation disponibles (données d'analyse complètes) sont pris en compte et signalés. La gravité des messages de compilation est utilisée comme pondération de la violation de convention. Convention : POU complexe avec faible taux de commentaires User Description Cette convention dresse la liste de tous les objets IEC complexes à faible taux de commentaires. 86 EIO0000004079.02 Conventions Machine Code Analysis Contrairement à d'autres métriques qui ne s'intéressent qu'au rapport entre CLOC (Comment Lines Of Code) et SLOC (Source Lines Of Code), cette convention permet de filtrer les objets IEC présentant une grande complexité et un faible taux de commentaires. Cette convention se concentre uniquement sur la partie implémentation d'un objet IEC. Conventions : Vérifications des noms de types complexes User Description Coding style is a set of rules or guidelines applied when writing source code. Following a specified coding style helps: • To read and understand the source code. • To avoid and find programming issues. • To easy maintenance of source code. Sur la base des instructions de programmation (conventions de nom (voir EcoStruxure Machine Expert, Programming Guide), préfixes (voir EcoStruxure Machine Expert, Programming Guide)) de Schneider Electric pour le code source IEC-61131-3, il existe des interrogations de conventions pour vérifier les noms de types complexes suggérés pour chaque type. Convention Verification Rule Pour la vérification de convention, le type complexe est combiné avec le nom d'objet. Préfixes de nom en fonction des types complexes : • Bloc fonction : préfixe FB_ • Programme : préfixe SR_ • Enumération : préfixe ET_ • Structure : préfixe ST_ • ... Exemple FB_MyAxisWrapper ST_MyDataStruct ET_MyEnumeration SR_Main ... Conventions : Limite de profondeur d'héritage User Description La norme IEC-61131-3 fournit des fonctionnalités de langage pour étendre des blocs fonction ou implémenter des interfaces. On parle alors d'héritage, et il peut se former des héritages en chaîne. En théorie, la profondeur d'héritage n'est pas limitée. En pratique, les imbrications peuvent devenir trop complexes pour permettre une bonne compréhension de l'arbre généalogique des interfaces et des blocs fonction. Pour faciliter la maintenance des applications, il est possible d'appliquer et de signaler une limite de profondeur d'héritage à l'aide de règles de violation de convention. EIO0000004079.02 87 Machine Code Analysis Conventions Convention Verification Rule Le mot-clé extends est utilisé entre blocs fonction ou entre interfaces pour vérifier la longueur de la chaîne. Exemple La profondeur d'héritage est 6 pour cet exemple. FB_Test1 extends FB_Test2 FB_Test2 extends FB_Test3 FB_Test3 extends FB_Test4 FB_Test4 extends FB_Test5 FB_Test5 extends FB_Test6 FB_Test6 extends FB_Test7 Convention : vérification de lecture de variable d'entrée User Description In the declaration part of a program, function block, method, or function, input variables can be defined. When objects of this type are called, input values must be specified. When a method or a function is called, the input values are copied to the stack. These values (memory area) are only used by the method or function call. Compared to programs where exactly one instance exists in memory (or function blocks which are instantiated multiple times in memory), the programs or function blocks can be called multiple times, by multiple tasks, and the same memory location for the input variable is used (in parallel). Pour garantir la stabilité d'exécution des applications, une variable d'entrée ne doit pas être lue depuis l'extérieur du programme ou du bloc fonction (implémentation du corps). NOTE: Gardez à l'esprit que l'accès à une variable d'entrée depuis une méthode définie sous un bloc fonction est également considéré comme un accès depuis l'extérieur de ce bloc fonction. En effet, le corps du bloc fonction n'est pas nécessairement appelé au moins une fois avant l'appel d'une méthode depuis l'extérieur de ce bloc fonction et l'affectation du contenu correct aux variables d'entrée. La violation de la convention Variable Read Check d'entrée peut être un faux positif si le développeur, par exemple, vérifie par révision du code que la variable d'entrée est correctement initialisée avant de l'utiliser dans une méthode. Convention Verification Rule Chaque accès en lecture à une variable d'entrée depuis l'extérieur de l'implémentation du corps du bloc fonction ou du programme lui-même est signalé en tant que violation de convention. Exemple SR_Main VAR fbTest: FB_Test; END_VAR // call of FB method without calling FB (Body) before fbTest.Meth(); FB_Test VAR_INPUT i_lrCurrentAxisPosition: LREAL; 88 EIO0000004079.02 Conventions Machine Code Analysis END_VAR METHOD Meth() VAR i_lrVar1: LREAL; END_VAR // potential access to not properly initialized variable i_lrVar1 := i_lrCurrentAxisPosition; Convention : vérification du type de variable d'entrée User Description Des variables d'entrée peuvent être définies dans la section déclarative d'un POU. Lorsque ce POU est appelé, des valeurs d'entrées doivent être spécifiées. Ces valeurs d'entrée sont copiées par valeur (copie mémoire). Pour assurer la stabilité d'exécution de l'application, la variable d'entrée ne doit pas être de type bloc fonction. Convention Verification Rule Toute variable d'entrée de type bloc fonction est signalée comme violation de convention. Exemple SR_Main VAR fbTest: FB_Test; fbArg: FB_MyArg; END_VAR // call of FB method without calling FB (Body) before fbTest(i_fbMyArg := fbArg); FB_MyArg VAR_INPUT END_VAR FB_Test VAR_INPUT i_fbMyArg: FB_MyArg; END_VAR Convention : vérification d'écriture de variable d'entrée User Description In the declaration part of a program, function block, method, or function, input variables can be defined. When objects of this type are called, input values must be specified. When a method or a function is called, the input values are copied to the stack. These values (memory area) are only used by the method or function call. Compared to programs where exactly one instance exists in memory (or function blocks which are instantiated multiple times in memory), the programs or function blocks can be called multiple times, by multiple tasks, and the same memory location for the input variable is used (in parallel). EIO0000004079.02 89 Machine Code Analysis Conventions Pour assurer la stabilité d'exécution des applications, la variable d'entrée doit être écrite uniquement par le demandeur (de l'extérieur) du programme ou du bloc fonction. NOTE: La catégorie des variables d'entrée signifie que les données sont envoyées vers la structure considérée, qu'il s'agisse d'un programme, d'un bloc fonction, d'une méthode ou d'une fonction. Les résultats de l'appel sont de la catégorie sortie. Les variables d'entrée doivent se limiter à celles transmises à la structure et les entrées ne doivent pas être lues ni écrites depuis l'extérieur de cette structure. Convention Verification Rule Chaque accès en écriture à une variable d'entrée depuis l'intérieur du bloc fonction (implémentation du corps) lui-même est signalé en tant que violation de convention. Exemple SR_Main VAR fbTest: FB_Test; END_VAR // call of FB method without calling FB (Body) before fbTest (TRUE); FB_Test VAR_INPUT i_xEnable: BOOL; END_VAR // potential violation. Now the input value has changed its value. i_xEnable := FALSE; Convention : utilisation de commentaires multilignes User Description Cette convention vérifie si des commentaires multilignes sont utilisés dans les objets IEC. L'utilisation de commentaires multilignes n'est pas une bonne pratique car le début et la fin de ces commentaires risquent de se perdre lors d'une fusion. Par exemple, un code isolé en commentaire peut être accidentellement réinséré dans le programme. Exemple Exemple de calcul des commentaires multilignes pour du code IEC-61131-3. Déclaration : 1: (*This is a multiline 2: comment in header*) 3: PROGRAM SR_Main 4: VAR 5: xCheck1: BOOL;(*not needed 6: uiMyVariable2: UINT;*) 7: xFlag: BOOL; 8: END_VAR 90 EIO0000004079.02 Conventions Machine Code Analysis Convention : absence de commentaire en en-tête User Description De nombreux guides de style de codage préconisent la présence d'une description générale de l'action et du fonctionnement d'un POU dans l'en-tête de la section déclarative. Exemple Toutes les variantes de commentaires sont comptablisées pour cette vérification : - //my comment - ///my doc comment - (*my multi line comment*) Conventions : Nombre limite de méthodes User Description IEC-61131-3 propose des fonctionnalités de langage pour organiser les applications en programmes et blocs fonction. Aux fins de simplification et de prise en charge de l'orientation objet, chacun de ces éléments peuvent être fractionnés en morceaux de code pouvant être appelés et réutilisés plusieurs fois. Cela produit des méthodes, actions, propriétés etc. attachées à des programmes ou à des blocs fonction. Pour faciliter la maintenance des applications, il existe des principes de base concernant l'organisation du code. Par exemple, limitez chaque bloc fonction ou méthode à une tâche. L'application de règles de conception de code peut notamment permettre de détecter que trop de méthodes sont rattachées au même bloc fonction et, par conséquent, d'inciter à fractionner ce bloc fonction en plusieurs morceaux de code. Convention Verification Rule Cette métrique permet de vérifier si le nombre limite de méthodes rattachées à un bloc fonction ou un programme est dépassé. Conventions : Nombre limite de propriétés User Description IEC-61131-3 fournit des fonctionnalités de langage pour organiser une application en programmes, blocs fonction et listes de variables globales (GVL). Pour réduire la complexité et prendre en charge l'orientation objet, des propriétés peuvent être jointes. Chaque propriété fournit un accès fonctionnel aux informations qu'elle recouvre. Un nombre excessif de propriétés jointes : • Est difficile à gérer, voire à comprendre, pour le développeur. • Peut entraîner des conflits de noms. • Peut être le signe qu'un programme ou un bloc fonction réalise plusieurs tâches. Le résultat de cette convention peut être utilisé comme une incitation à fractionner un programme/bloc fonction en plusieurs programmes/blocs fonction exécutant chacun une seule tâche. EIO0000004079.02 91 Machine Code Analysis Conventions La maintenance des applications peut s'en trouver facilitée. Convention Verification Rule Le nombre de propriétés attachées à un bloc fonction, un programme ou une liste de variables globales (GVL) est utilisé pour vérifier si la limite est dépassée. Convention : vérification de lecture de variable de sortie User Description Dans la section de déclaration d'un programme, d'un bloc fonction, d'une méthode ou d'une fonction, il est possible de définir des variables de sortie. Lorsque des objets de ce type sont appelés, des valeurs cibles de sortie peuvent être spécifiées. Lors de l'appel d'une méthode ou d'une fonction, les valeurs de sortie sont copiées dans la pile. Ces valeurs (zone de mémoire) sont attribuées uniquement par l'appel de méthode ou de fonction et elles sont réutilisées par l'appelant. Compared to programs where exactly one instance exists in memory (or function blocks which are instantiated multiple times in memory), the programs or function blocks can be called multiple times, by multiple tasks, and the same memory location for the input variable is used (in parallel). Pour assurer la stabilité d'exécution des applications, la variable de sortie doit être lue uniquement par le demandeur (de l'extérieur) du programme ou du bloc fonction. NOTE: La lecture d'une variable de sortie à partir d'une implémentation peut être un faux positif, par exemple si le développeur vérifie par révision du code que la variable de sortie est correctement écrite avant de l'utiliser ultérieurement dans le code. Convention Verification Rule Chaque accès en lecture à une variable de sortie depuis l'intérieur du bloc fonction (implémentation du corps) lui-même est signalé en tant que violation de convention car il n'est pas possible de vérifier qu'une valeur correcte a été affectée antérieurement. Exemple SR_Main VAR xResult: BOOL; fbTest: FB_Test; END_VAR // call of FB method without calling FB (Body) before fbTest (q_xEnable => xResult); FB_Test VAR_OUTPUT q_xEnable: BOOL; END_VAR // potential violation. Now the input value has changed its value. IF (q_xEnable) THEN ; // Violation. Unclear value of output variable. END_IF 92 EIO0000004079.02 Conventions Machine Code Analysis Convention : vérification du type de variable de sortie User Description Des variables de sortie peuvent être définies dans la section déclarative d'un POU. Lorsque ce POU est appelé, des valeurs de sortie peuvent être affectées. Ces valeurs de sortie sont copiées par valeur (copie mémoire). Pour assurer la stabilité d'exécution de l'application, la variable de sortie ne doit pas être de type bloc fonction. Convention Verification Rule Toute variable de sortie de type bloc fonction est signalée comme violation de convention. Exemple SR_Main VAR fbTest: FB_Test; fbArg: FB_MyArg; END_VAR // call of FB method without calling FB (Body) before fbTest(q_fbMyArg => fbArg); FB_MyArg VAR_INPUT END_VAR FB_Test VAR_OUTPUT q_fbMyArg: FB_MyArg; END_VAR Convention : vérification d'utilisation de variables PERSISTENT User Description Si vous déclarez une variable en tant que PERSISTENT dans un bloc fonction, toute l'instance de ce bloc fonction est enregistrée dans la plage persistante (toutes les données du bloc), mais seule la variable PERSISTENT déclarée est restaurée. Cette consommation accrue de mémoire et les autres contraintes de gestion des variables persistantes peuvent entraîner des problèmes de performance. NOTE: Le compilateur traite une déclaration VAR PERSISTENT comme une déclaration VAR PERSISTENT RETAIN ou VAR RETAIN PERSISTENT. Convention : vérification d'utilisation de variables RETAIN User Description Si vous déclarez une variable en tant que RETAIN dans un bloc fonction, toute l'instance de ce bloc fonction est enregistrée dans la plage conservée (toutes les données du bloc), mais seule la variable RETAIN déclarée est restaurée. Cette consommation accrue de mémoire et les autres contraintes de gestion des variables conservées peuvent entraîner des problèmes de performance. EIO0000004079.02 93 Machine Code Analysis Conventions Convention : variable non commentée (toutes) User Description Cette convention vérifie s'il existe des variables non commentées dans un objet IEC. Exemple Exemple de variables non commentées pour du code IEC-61131-3. Déclaration : 1: PROGRAM SR_Main 2: VAR 3: xCheck1: BOOL;//flag to identify 4: uiMyVariable2: UINT; 5: xFlag: BOOL; 6: END_VAR Les variables uiMyVariable2 et xFlag ne sont pas commentées. Une violation de convention est donc créée. Convention : variable non commentée (entrée+sortie+globale) User Description Cette convention vérifie s'il existe dans le code source des variables non commentées définies dans VAR_GLOBAL, VAR_INPUT, VAR_OUTPUT ou VAR_ IN_OUT. Exemple Exemple de variable non commentée pour du code IEC-61131-3. Déclaration : 1: PROGRAM SR_Main 2: VAR_IN 3: i_xCheck1: BOOL;//flag to identify 3: i_uiMyVariable2: UINT; 4: END_VAR 2: VAR 3: xFlag: BOOL; 4: END_VAR i_uiMyVariable2 n'est pas commentée. Une violation de convention est donc créée. Conventions : Vérification des variables inutilisées User Description Dans la section de déclaration d'un programme, d'un bloc fonction, d'une méthode ou d'une fonction, il est possible de définir des variables. Normalement, ces variables sont utilisées à l'intérieur du code. Si une variable définie n'est pas utilisée (lue ou écrite) dans le code, elle consomme de la mémoire. Convention Verification Rule Chaque variable ne présentant aucun accès en lecture ou en écriture est signalée comme une violation de convention. 94 EIO0000004079.02 Conventions Machine Code Analysis Exemple SR_Main VAR xMyUnusedVariableResult: BOOL; fbTest: FB_Test; END_VAR // call of FB method but output is not assigned to intended result variable. fbTest(q_xEnable => ); Conventions : Vérification des noms de variable User Description Coding style is a set of rules or guidelines applied when writing source code. Following a specified coding style helps: • To read and understand the source code. • To avoid and find programming issues. • To easy maintenance of source code. Sur la base des instructions de programmation (conventions de noms (voir EcoStruxure Machine Expert, Programming Guide), préfixes (voir EcoStruxure Machine Expert, Programming Guide)) de Schneider Electric pour le code source IEC-61131-3, il existe des interrogations de conventions pour vérifier le nom de variable suggéré par type de données et par portée (domaine de validité). Convention Verification Rule Pour la vérification de convention, le nom de la variable est combiné avec le type de données associé et le domaine de validité dans lequel la variable est définie. Portées : • Portée de variable locale : pas de préfixe de portée spécial (VAR ... END_ VAR) • Portée de variable d'entrée : préfixe i_ (VAR_INPUT ... END_VAR) • Portée de variable de sortie : préfixe q_ (VAR_OUTPUT ... END_VAR) • Portée de variable d'entrée/sortie : préfixe iq (VAR_IN_OUT_ ... END_VAR) • Portée de variable globale : préfixe G_ • Portée de constante globale : préfixe Gc_ • ... Préfixes de nom de variable en fonction du type de données : • INT : préfixe i • DINT : préfixe di • UDINT : préfixe udi • REAL : préfixe r • LREAL : préfixe lr • Bloc fonction : préfixe fb • POINTER TO : préfixe p • ... Exemple VAR iMyVariable1: INT; EIO0000004079.02 95 Machine Code Analysis Conventions uiMyVariable1: UINT; rMyVariable1: REAL; piMyVariable7: POINTER TO INT; END_VAR VAR_INPUT i_iMyVariable2: INT; i_uiMyVariable2: UINT; i_rMyVariable2: REAL; END_VAR VAR_IN_OUT iq_iMyVariable3: INT; iq_uiMyVariable3: UINT; iq_rMyVariable3: REAL; END_VAR VAR_OUTPUT iq_iMyVariable2: INT; iq_uiMyVariable2: UINT; iq_rMyVariable2: REAL; END_VAR Conventions : Vérification de la longueur des noms de variable User Description Coding style is a set of rules or guidelines applied when writing source code. Following a specified coding style helps: • To read and understand the source code. • To avoid and find programming issues. • To easy maintenance of source code. Pour des raisons de lisibilité du code, il existe des suggestions concernant les noms de variable et leur longueur. La longueur des variables peut être vérifiée par rapport à une limite définie par l'utilisateur. Convention Verification Rule La longueur d'un nom de variable est comparée à un seuil limite. Exemple iMyVariable OK iSpecialAndVeryLongAndHardToReadVariable Not OK 96 // length 11 --> // length 20 --> EIO0000004079.02 Machine Code Analysis Index A absence de commentaire en en-tête conventions .......................................................91 analyse de code commandes de menu contextuel (navigateurs).....38 objets de script ..................................................42 analyse du code extensions des objets de script ...........................41 Instructions Pragma ...........................................39 interface de création de scripts............................41 analyse du code machine concept de base ................................................13 généralités ........................................................ 11 C call in métriques ..........................................................62 call out métriques ..........................................................62 code analysis editors liste de blocage..................................................25 commandes de menu contextuel (navigateurs) analyse de code.................................................38 comment afficher les dépendances via la vue de dépendance vue de dépendance............................................50 comment ajouter éditeurs d'analyse de code .................................47 comment avoir un aperçu rapide tableau de bord..................................................47 comment explorer étape par étape les dépendances de votre application vue de dépendance............................................51 comment obtenir des résultats détaillés sur les conventions tableau des conventions .....................................49 comment obtenir des résultats détaillés sur les métriques tableau des mesures ..........................................48 concept de base analyse du code machine ...................................13 configuration gestionnaire d'analyse de code ...........................28 connexion au cloud gestionnaire d'analyse de code ...........................29 gestionnaire de requêtes d'analyse de code.........37 conventions absence de commentaire en en-tête....................91 limite de profondeur d'héritage ............................87 Machine Advisor Code Analysis ..........................83 messages de compilation ...................................86 nombre limite de méthodes.................................91 nombre limite de propriétés.................................91 POU complexe avec faible taux de commentaires ..................................................86 utilisation de commentaires multilignes ................90 variable non commentée (entrée+sortie +globale) .........................................................94 variable non commentée (toutes) ........................94 vérification d'écriture de variable d'entrée.............89 vérification d'utilisation de variables PERSISTENT ..................................................93 vérification d'utilisation de variables RETAIN ........93 vérification de la longueur des noms de variable...96 EIO0000004079.02 vérification de lecture de variable d'entrée............88 vérification de lecture de variable de sortie...........92 vérification des noms de variable.........................95 vérification des variables inutilisées .....................94 vérification du type de variable d'entrée ...............89 vérification du type de variable de sortie...............93 vérifications des noms de types complexes..........87 cyclomatic complexity métriques ..........................................................63 E éditeur de paramètres gestionnaire de requêtes d'analyse de code.........37 éditeur de paramètres de chaînes de requête gestionnaire de requêtes d'analyse de code.........36 éditeur de requêtes gestionnaire de requêtes d'analyse de code.........35 éditeurs d'analyse de code.....................................17 comment ajouter ................................................47 présentation (vue de dépendance) ......................20 tableau des conventions .....................................17 tableau des mesures ..........................................18 vue de dépendance (commandes du menu contextuel).......................................................22 vue de dépendance (filtres).................................20 vue de dépendance (graphe de dépendance) ......21 vue de dépendance (groupes).............................23 extended by métriques ..........................................................65 extends métrique............................................................65 extensions des objets de script analyse du code.................................................41 F fan in métriques ..........................................................66 fan out métriques ..........................................................66 G généralités analyse du code machine ................................... 11 gestionnaire d'analyse de code ..............................27 configuration......................................................28 connexion au cloud ............................................29 tableau de bord..................................................27 gestionnaire de requêtes d'analyse de code ............31 connexion au cloud ............................................37 éditeur de paramètres ........................................37 éditeur de paramètres de chaînes de requête.......36 éditeur de requêtes ............................................35 jeux de règles ....................................................31 référentiels de requêtes ......................................32 requêtes de convention ......................................83 requêtes de dépendance (filtre)...........................54 requêtes de dépendance (sélection)....................56 graphe de dépendance ajouter une variable............................................38 H Halstead complexity métriques ..........................................................67 97 Machine Code Analysis I implemented by métriques ..........................................................70 implements métriques ..........................................................71 instructions Pragma analyse du code.................................................39 interface de création de scripts analyse du code.................................................41 J jeux de règles gestionnaire de requêtes d'analyse de code.........31 L limite de profondeur d'héritage conventions .......................................................87 lines of code métriques ..........................................................72 liste de blocage éditeurs d'analyse de code .................................25 M Machine Advisor Code Analysis conventions .......................................................83 métriques ..........................................................60 memory size métriques ..........................................................72 messages de compilation conventions .......................................................86 métrique call out ..............................................................62 extends .............................................................65 métriques call in ................................................................62 cyclomatic complexity.........................................63 extended by.......................................................65 fan in.................................................................66 fan out...............................................................66 Halstead complexity ...........................................67 implemented by .................................................70 implements........................................................71 lines of code ......................................................72 Machine Advisor Code Analysis ..........................60 memory size ......................................................72 nombre de commentaires multilignes...................77 nombre de lignes de commentaire en en-tête .......74 number of actions ..............................................73 Number Of FBD Networks ..................................80 number of GVL usages.......................................74 number of instances ...........................................75 number of library references ...............................75 number of messages..........................................76 number of methods ............................................76 number of properties ..........................................77 number of reads.................................................78 number of tasks .................................................78 number of transitions..........................................79 number of variables............................................79 number of writes ................................................80 stack size ..........................................................81 taille de l'application (code) .................................60 taille de l'application (code+données) ..................61 taille de l'application (données) ...........................61 98 taux de commentaires dans le code source..........80 taux de variables commentées (entrée+sortie +globale) .........................................................63 taux de variables commentées (toutes)................62 N nombre de commentaires multilignes métriques ..........................................................77 nombre de lignes de commentaire en en-tête métriques ..........................................................74 nombre limite de méthodes conventions .......................................................91 nombre limite de propriétés conventions .......................................................91 number of actions métriques ..........................................................73 Number Of FBD Networks métriques ..........................................................80 number of GVL usages métriques ..........................................................74 number of instances métriques ..........................................................75 number of library references métriques ..........................................................75 number of messages métriques ..........................................................76 number of methods métrique............................................................76 number of properties métriques ..........................................................77 number of reads métriques ..........................................................78 number of tasks métriques ..........................................................78 number of transitions métriques ..........................................................79 number of variables métriques ..........................................................79 number of writes métriques ..........................................................80 O objets de script analyse de code.................................................42 P POU complexe avec faible taux de commentaires conventions .......................................................86 présentation (vue de dépendance) éditeurs d'analyse de code .................................20 R référentiels de requêtes gestionnaire de requêtes d'analyse de code.........32 requêtes de convention gestionnaire de requêtes d'analyse de code.........83 requêtes de dépendance (filtre) gestionnaire de requêtes d'analyse de code.........54 requêtes de dépendance (sélection) gestionnaire de requêtes d'analyse de code.........56 EIO0000004079.02 Machine Code Analysis S stack size métriques ..........................................................81 T tableau de bord comment avoir un aperçu rapide .........................47 gestionnaire d'analyse de code ...........................27 tableau des conventions comment obtenir des résultats détaillés sur les conventions .....................................................49 éditeurs d'analyse de code .................................17 tableau des mesures comment obtenir des résultats détaillés sur les métriques ........................................................48 éditeurs d'analyse de code .................................18 taille de l'application (code) métriques ..........................................................60 taille de l'application (code+données) métriques ..........................................................61 taille de l'application (données) métriques ..........................................................61 taux de commentaires dans le code source métriques ..........................................................80 taux de variables commentées (entrée+sortie+globale) métriques ..........................................................63 taux de variables commentées (toutes) métriques ..........................................................62 comment explorer étape par étape les dépendances de votre application ..........................................51 vue de dépendance (commandes du menu contextuel) éditeurs d'analyse de code .................................22 vue de dépendance (filtres) éditeurs d'analyse de code .................................20 vue de dépendance (graphe de dépendance) éditeurs d'analyse de code .................................21 vue de dépendance (groupes) éditeurs d'analyse de code .................................23 U utilisation de commentaires multilignes conventions .......................................................90 V variable au graphique de dépendance ....................38 variable non commentée (entrée+sortie+globale) conventions .......................................................94 variable non commentée (toutes) conventions .......................................................94 vérification d'écriture de variable d'entrée conventions .......................................................89 vérification d'utilisation de variables PERSISTENT conventions .......................................................93 vérification d'utilisation de variables RETAIN conventions .......................................................93 vérification de la longueur des noms de variable conventions .......................................................96 vérification de lecture de variable d'entrée conventions .......................................................88 vérification de lecture de variable de sortie conventions .......................................................92 vérification des noms de variable conventions .......................................................95 vérification des variables inutilisées conventions .......................................................94 vérification du type de variable d'entrée conventions .......................................................89 vérification du type de variable de sortie conventions .......................................................93 vérifications des noms de types complexes conventions .......................................................87 vue de dépendance comment afficher les dépendances via la vue de dépendance.....................................................50 EIO0000004079.02 99 Schneider Electric 35 rue Joseph Monier 92500 Rueil Malmaison France + 33 (0) 1 41 29 70 00 www.se.com Les normes, spécifications et conceptions pouvant changer de temps à autre, veuillez demander la confirmation des informations figurant dans cette publication. © 2020 – Schneider Electric. Tous droits réservés. EIO0000004079.02