• Aucun résultat trouvé

6.3 Analyse statique

7.1.1 Parser de fichiers mdl

Les fichiers mdl contiennent l’ensemble des informations associ´ees `a un mod`ele Simulink, que cela soit sa repr´esentation graphique ou les param`etres du simulateur. Par cons´equent, ils sont constitu´es d’une grande quantit´e d’informations non pertinentes pour notre analyse statique. De plus, les ´evolutions successives de Simulink, ainsi que les ajouts de nouvelles fonctionnalit´es ou de nouvelles biblioth`eques, induisent des modifications dans les fichiers mdl. La d´efinition usuelle d’un parser `a partir d’un analyseur lexical et d’un analyseur grammatical (par exemple flex/bison) n’est pas souhaitable dans le cas des fichiers mdl. En effet, les modifications du fichier, issues des ´evolutions de Simulink, entraˆıneraient une r´e´ecriture (ou au moins une adaptation) du parser.

Simulink est une extension du logiciel Matlab, donc son int´egration `a Matlab est compl`ete.

Et un ensemble de fonctions1 permet d’obtenir des informations sur les mod`eles Simulink. Par

cons´equent, nous avons opt´e pour l’´ecriture d’un parser de fichier mdl en Matlab2. Notre parser permet de convertir un mod`ele Simulink en un ensemble de fichiers XML et DOT, contenant uniquement les informations n´ecessaires pour notre analyse statique. Et surtout, le parser n’est pas soumis aux modifications des fichiers mdl. XML a ´et´e choisi pour sa capacit´e `a organiser

1Les fonctions de constructions de mod`eles (voir la section 3.2 du manuel de r´ef´erence).

2Le d´eveloppement du parser a ´et´e r´ealis´e par Maxime Lim au cours d’un stage de quatri`eme ann´ee d’´ecole

des donn´ees et, DOT, langage de description de graphes, pour sa simplicit´e syntaxique et son rendu graphique. Ces deux formats sont textuels et par cons´equent, ils facilitent les manipulations ult´erieures.

Informations s´electionn´ees

Chaque bloc poss`ede un ensemble de param`etres qui sont de deux natures. Les param`etres

communs `a tous les blocs, par exemple leur nom (Name), leur identifiant unique (Handle) ou

encore les informations sur les blocs qui leur sont connect´es (PortConnectivity). Les param`etres sp´ecifiques `a chaque bloc, par exemple le bloc Gain poss`ede un param`etre nomm´ee Gain qui donne la valeur de la constante multiplicatrice.

Un mod`ele Simulink a une organisation arborescente qui attribue `a chaque bloc un chemin. Ce chemin d´ecrit la relation d’inclusion des sous-syst`emes dans un mod`ele. Il d´ecrit alors la posi- tion d’un bloc par rapport au syst`eme principal. L’ensemble des chemins d’un mod`ele peut ˆetre r´ecup´er´e grˆace `a la fonction Matlab find system. En appliquant cette fonction sur le mod`ele de la figure 4.2(a), nous obtenons la repr´esentation arborescente de la figure 7.1. Nous ne d´etaillons que le sous-syst`eme S2. A partir de cet arbre, il est possible d’attribuer un chemin unique vers

chaque bloc. Par exemple le chemin S→ S2→ Out1 correspond `a la premi`ere sortie du syst`eme

S2 se trouvant dans le syst`eme S.

S

In1 Add S_1 S_2 S_3 S_4

In1 Sign Out1 Out2 Abs Constant Constant1 Switch Saturation

Fig. 7.1 – Repr´esentation arborescente du syst`eme S de la figure 4.2(a).

La fonction Matlab get param permet de r´ecup´erer la valeur d’un param`etre d’un bloc en connaissant son chemin dans l’arborescence. Par exemple, l’application de cette fonction avec le

chemin S→ S1→ Constant1 et le param`etre Constant retourne la valeur −1.

Afin de faciliter la prise en compte de blocs dans notre parser, nous d´efinissons une structure de donn´ees en Matlab r´ef´eren¸cant les blocs que nous voulons prendre en compte. Cette structure de donn´ees liste ´egalement les param`etres associ´es `a ces blocs. Nous notons B la liste des blocs et de leurs param`etres composant les mod`eles Simulink que l’analyse statique traitera.

Un mod`ele Simulink poss`ede des param`etres propres qui sont, en g´en´eral, li´es au moteur de simulation. Par exemple, le type d’algorithme d’int´egration num´erique est associ´e au param`etre

du mod`ele nomm´e Solver o`u le temps de fin de simulation est donn´e par la variable StopTime.

Nous conservons la liste des param`etres de mod`ele et nous la notons P .

G´en´eration des fichiers XML et DOT

Un mod`ele Simulink est repr´esent´e par un diagramme en blocs dont les ´el´ements sont des op´erations ´el´ementaires (par exemple une addition ou une int´egration), ou un sous-syst`eme, c’est- `

a-dire un ´el´ement repr´esentant un autre diagramme en blocs (par exemple le syst`eme de la fi- gure 4.2(a)). La repr´esentation arborescente de la figure 7.1 fait apparaˆıtre une forme de r´ecurrence dans la repr´esentation des mod`eles. Nous exploitons cela pour r´ecup´erer des informations les

concernant. Plus particuli`erement, nous allons parcourir l’arbre des chemins pour recueillir les informations sur les blocs des mod`eles Simulink.

La g´en´eration des fichiers XML et DOT suit l’algorithme 3. Cet algorithme applique un par- cours en profondeur d’abord de l’arbre des chemins d’un mod`ele Simulink. Pour chaque syst`eme Simulink, grˆace `a la fonction find system et les param`etres ad´equats, nous r´ecup´erons la liste des blocs d’un niveau n de l’arbre. Pour chaque bloc b, si b est un sous-syst`eme alors nous l’ajoutons dans la liste S des sous-syst`emes `a visiter et, dans tous les cas, nous r´ecup´erons les valeurs de ses pa- ram`etres (Information(B, b)) grˆace `a la liste des blocs B. Dans le mˆeme temps, nous r´ecup´erons la liste de ses successeurs (Successeur (b)) afin de g´en´erer le graphe de d´ependance. Une fois toutes les informations collect´ees nous g´en´erons les fichiers XML et DOT. Puis le traitement se poursuit avec les sous-syst`emes contenus dans S.

Algorithme 3 G´en´eration des fichiers XML et DOT d’un mod`ele Simulink.

Entr´ee(s): B la liste des blocs et param`etres g´er´es ; C le chemin d’un syst`eme d’un mod`ele M I :=∅ {liste des informations des blocs}

G :=∅ {liste d’adjacence}

S :=∅ {liste des sous-syst`emes de N} L := f ind system(C, ′SearchDepth, 1)

{la liste des chemins des blocs contenus dans M}

pour toute bloc b∈ L faire

si b est un sous-syst`eme alors S := S∪ b fin si si b∈ B alors I(b) := Information(B, b) G(b) := Successeur(b) sinon Erreur fin si fin pour g´en´erer XML(I) g´en´erer DOT(G)

pour toute s∈ S faire {Parcours des sous-syst`emes}

Appliquer l’algorithme 3 sur s fin pour

Le fichier XML du syst`eme S est donn´e `a la figure 7.2, il est compos´e de trois parties : – la liste des blocs et leurs param`etres (In1 et Add) ;

– la liste des sous-syst`emes (S1, S2, S3 et S4) ; – le nom du fichier DOT (S.dot).

Le graphe de d´ependance des blocs de S est donn´e `a la figure 7.3. Il a ´et´e obtenu `a partir du fichier DOT suivant : d i g r a p h ”S” { ” In1 ” −> ”Add” [ l a b e l = ” ( 1 , 1 ) ” ] ; ”Add” −> ” S 1 ” [ l a b e l = ” ( 1 , 1 ) ” ] ; ” S 3 ” −> ” S 4 ” [ l a b e l = ” ( 1 , 1 ) ” ] ; ” S 1 ” −> ” S 2 ” [ l a b e l = ” ( 1 , 1 ) ” ] ; ” S 4 ” −> ”Add” [ l a b e l = ” ( 1 , 2 ) ” ] ; ” S 2 ” −> ” S 3 ” [ l a b e l = ” ( 1 , 2 ) ” ] ; ” S 2 ” −> ” S 3 ” [ l a b e l = ” ( 2 , 1 ) ” ] ; }

Les ´etiquettes (label ) sur les arcs du graphe de d´ependance permettent de connaˆıtre l’ordre des arguments d’un syst`eme. Par exemple, les arcs entre S2 et S3 identifient que la premi`ere sortie de S2 est reli´ee `a la seconde entr´ee de S3 et que la seconde sortie de S2 est connect´ee `a la premi`ere

<?xml v e r s i o n =”1.0” e n c o d i n g=”UTF−8”?> <s i m u l i n k >

<system name=”S”> <b l o c k s l i s t >

<b l o c k name=”In1 ” type=”I n p o r t ”>

<parameter name=”Path ” v a l u e=”S/ In1”></parameter>

<parameter name=”Handle ” v a l u e =”4.000977 e+00”></parameter> <parameter name=” D e s c r i p t i o n ” v a l u e=””></parameter>

<parameter name=”Port ” v a l u e =”1”></parameter> </b l o c k >

<b l o c k name=”Add” type=”Sum”>

<parameter name=”Path ” v a l u e=”S/Add”></parameter>

<parameter name=”Handle ” v a l u e =”5.000977 e+00”></parameter> <parameter name=” D e s c r i p t i o n ” v a l u e=””></parameter>

<parameter name=”I n p u t s ” v a l u e=”+−”></parameter> </b l o c k >

</ b l o c k s l i s t > <s u b s y s t e m s l i s t >

<subsystem name=”S 3 ” f i l e =”S 3 . xml”></subsystem> <subsystem name=”S 1 ” f i l e =”S 1 . xml”></subsystem> <subsystem name=”S 4 ” f i l e =”S 4 . xml”></subsystem> <subsystem name=”S 2 ” f i l e =”S 2 . xml”></subsystem> </ s u b s y s t e m s l i s t >

<graph name=”S” f i l e =”S . dot”></graph> </system>

</s i m u l i n k >

Fig. 7.2 – Contenu du fichier S.xml.

entr´ee de S3.

Au final, notre parser g´en`ere un couple de fichier XML/DOT pour chaque syst`eme d’un mod`ele Simulink. De plus, il engendre un fichier XML contenant les param`etres du mod`ele, `a partir de P , et le nom du syst`eme principal. Pour le mod`ele du r´egulateur de papillon des gaz, nous obtenons les fichiers :

S_model.xml S.dot S_1.dot S_2.dot S_3.dot S_4.dot

S.xml S_1.xml S_2.xml S_3.xml S_4.xml