Projet avec atelier B.docx

Embed Size (px)

Citation preview

aiguillage

2012/2013

Gnration de code C++ du Projet daiguillage avec Latelier B

Raliser par: BOUSFIHA Zaneb ARAB SafiaEncadrer par: Mr Abenihssane

Sommaire

Introduction3Atelier B4Dfinition4Cration de projet4Crer un projet4Ouvrir un projet7Ajouter des composants ce projet7Projet13Gnration du code avant lamlioration13Gnration du code aprs lamlioration18Conclusion29

Introduction

Atelier BDfinition

L'Atelier B est un ensemble d'outils logiciels permettant le dveloppement d'applications suivant la mthode B. Elle assiste le concepteur dans la formalisation de son application :

En excutant automatiquement sur les spcifications et leurs raffinements, un certain nombre d'actions dictes par la mthode.En proposant des services annexes la mthode, mais nanmoins indispensables des dveloppements industriels, comme la gestion, l'analyse et la documentation d'un projet.Et propose un ensemble de commandes permettant :L'analyse syntaxique et le contrle de type des machines d'un projet,La gnration automatique des obligations de preuve (OP),La dmonstration automatique de ces obligations,La dmonstration interactive des OP non dmontres automatiquement,Le contrle du langage d'implantation,La traduction du dernier niveau de raffinement des spcifications vers un langage informatique courant (C via le traducteur livr en standard ComenC).

Cration de projet Afin de dmarrer un dveloppement avec l'Atelier B, vous devez :Crer un projet Ouvrir ce projet Ajouter des composants ce projet 2.1 Crer un projetL'interface principale se prsente de la faon suivante : Depuis cette l'interface principale, l'utilisateur a accs facilement et efficacement la gestion de ses projets B.

Afin de crer un projet depuis l'interface, il suffit de cliquer sur le menu AtelierB -> New Project, ou d'utiliser soit le raccourci CTRL+P, soit le click droit sur l'espace de travail voulu, puis le menuNew -> Project.

L'assistant de cration de projet apparait : il vous faudra choisir entre B-logiciel (SOFTWARE) et B-vnementiel(SYSTEM), Par dfaut, un projet est considr logiciel (SOFTWARE).

Le fait de saisir un nom permet l'interface de dterminer des rpertoires adquats pour la localisation du projet, ce qui sera tout de mme personnalisable sur la deuxime page de l'assistant :

2.2 Ouvrir un projetUne fois la configuration faite et l'assistant termin, le projet nouvellement cr devrait apparatre dans la vue des espaces de travail, et tre automatiquement ouvert, comme le montre la capture d'cran suivante :

2.3 Ajouter des composants ce projetIl existe 3 types de composantes :

La machine abstraite (Machine), Le raffinement (Refinement), Limplmentation.

Machine abstraite.

Pour ajouter un composants (La machine abstraite ) depuis des fichiers existants, bouton droit sur le projet crer et New>Component

S'affiche alors l'assistant suivant : choisir machine.

Une fois le nom du nouveau composant rentr, la slection du type le composant raffin ventuel et le chemin d'accs de destination, cliquez sur (Next). L'assistant vous proposera alors un aperu :

L'Atelier B est livr avec un diteur spcifiquement adapt l'dition de composants B. Celui-ci propose des fonctionnalits comme:

l'auto-compltion de mot-cl, le soulignement en cas d'erreur L'dition des composants, L'dition des fichiers PMM associs aux composants. L'dition des fichiers RMF associs aux composants. L'dition des fichiers PatchProver et PatchRaner. La coloration syntaxique. L'impression. L'auto compltion et l'indentation automatique. La vrification syntaxique du parenthsage. Une navigation par onglets entre les fichiers.

Il inclut en outre un tableau permettant l'insertion aise des symboles B.Ce dernier s'utilise comme un diteur de texte classique et a t conu de faon rendre son utilisation intuitive.

Implmentation. Pour ajouter composent (implmentation) choisir implmentation.

S'affiche alors l'assistant suivant :

Un clik sur ET :

Saffiche lditeur intgr du composant (implmentation), on fait coller le code dimplmentation.

Une fois ces tapes accomplies on peut commencer appliquer la mthode B sur nos composants, il est possible de :1. Effectuer l'analyse syntaxique et le contrle de types.2. Gnrer les obligations de preuve.3. Dmontrer automatiquement une partie de ces obligations de preuve.4. Afficher les obligations de preuve.5. Utiliser le prouveur interactif pour dmontrer les obligations de preuve restantes.

TC: Pour faire l'analyse syntaxique et le contrle de types (OK signifi que le contrle est pass avec succs).PO: Gnrer les obligations de preuve.{fo, f1, fr , up}: Dmontrer automatiquement une partie dobligations de preuve.Ip: Dmontrer les obligations de preuve avec le prouveur interactif.

I. Projet1. Gnration du code C++ avant lamlioration Switch.h/******************************************************************************

File Name : switch.h

Date : 23/11/2012 12:05:12

Author : user

Atelier-B Version : 4.0

C Translator Version : b2c V1.0 (08/08/2007)

B Project Name : aguillage

******************************************************************************/

#ifndef _switch_h#define _switch_h

/*-------------------------- Added by the Translator --------------------------*/#include /*------------------------------- SETS Clause: enumerated sets -------------------------------*/typedef enum { switch__NULL, switch__NOR, switch__RENVERSE} switch__POS;

/*------------------------ INITIALISATION Clause ------------------------*/extern void switch__INITIALISATION(void);

/*-------------------- OPERATIONS Clause --------------------*/extern void switch__estimate( switch__POS switch__m1, switch__POS switch__m2, switch__POS switch__m3, switch__POS *switch__pos);

#endif

Switch.c/******************************************************************************

File Name : switch.c

Date : 23/11/2012 12:05:12

Author : user

Atelier-B Version : 4.0

C Translator Version : b2c V1.0 (08/08/2007)

B Project Name : aguillage

******************************************************************************/

/*-------------------------- Added by the Translator --------------------------*/#include #include "switch.h"

/*------------------------ INITIALISATION Clause ------------------------*/void switch__INITIALISATION(void) {}

/*-------------------- OPERATIONS Clause --------------------*/void switch__estimate( switch__POS switch__m1, switch__POS switch__m2, switch__POS switch__m3, switch__POS *switch__pos) { if (((switch__m1 == switch__NOR) && (switch__m2 == switch__NOR)) && (switch__m3 == switch__NOR)) { *switch__pos = switch__NOR; } else if (((switch__m1 == switch__RENVERSE) && (switch__m2 == switch__RENVERSE)) && (switch__m3 == switch__RENVERSE)) { *switch__pos = switch__RENVERSE; } else { *switch__pos = switch__NULL; }}

Main.c

#include #include #include "switch.h"int main(int argc, char** argv) {switch__POS m1,m2,m3;m1= switch__RENVERSE; m2= switch__RENVERSE; m3= switch__RENVERSE;switch__POS res;switch__estimate(m1,m2,m3,&res);printf("Les 3 capteurs sont en position RENVERSE\n");switch (res){case switch__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch__RENVERSE :printf("Position de l'aiguillage : RENVERSE\n"); break;}switch__POS m7,m8,m9;m7= switch__NOR; m8= switch__NOR; m9= switch__NOR;switch__POS res3;switch__estimate(m7,m8,m9,&res3);printf("----------------------------------\n3 capteurs en NORMAL\n");switch (res3){case switch__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch__RENVERSE :printf("Position de l'aiguillage : RENVERSE\n"); break;}switch__POS m4,m5,m6;m4= switch__NOR; m5= switch__RENVERSE; m6= switch__RENVERSE;switch__POS res2;switch__estimate(m4,m5,m6,&res2);printf("----------------------------------\n1 capteur en NORMAL et 2 autres en RENVERSE\n");switch (res2){case switch__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch__RENVERSE :printf("Position de l'aiguillage : RENVERSE\n"); break;}switch__POS m10,m11,m12;m10= switch__NULL; m11= switch__NULL; m12= switch__NULL;switch__POS res4;switch__estimate(m10,m11,m12,&res4);printf("----------------------------------\n3 capteurs en NULL\n");switch (res4){case switch__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch__RENVERSE :printf("Position de l'aiguillage : RENVERSE\n"); break;}

system("PAUSE");}

Lexcution

2. Gnration du code C++ aprs lamlioration

Switch1.h

/******************************************************************************

File Name : switch1.h

Date : 22/12/2012 13:03:13

Author : user

Atelier-B Version : 4.0

C Translator Version : b2c V1.0 (08/08/2007)

B Project Name : AMELIORATION

******************************************************************************/

#ifndef _switch1_h#define _switch1_h

/*-------------------------- Added by the Translator --------------------------*/#include /*------------------------------- SETS Clause: enumerated sets -------------------------------*/typedef enum { switch1__NULL, switch1__NOR, switch1__RENVERSE1, switch1__RENVERSE2} switch1__POS;

/*------------------------ INITIALISATION Clause ------------------------*/extern void switch1__INITIALISATION(void);

/*-------------------- OPERATIONS Clause --------------------*/extern void switch1__estimate( switch1__POS switch1__m1, switch1__POS switch1__m2, switch1__POS switch1__m3, switch1__POS switch1__m4, switch1__POS *switch1__pos);

#endif

Switch.c

/******************************************************************************

File Name : switch1.c

Date : 22/12/2012 13:03:13

Author : user

Atelier-B Version : 4.0

C Translator Version : b2c V1.0 (08/08/2007)

B Project Name : AMELIORATION

******************************************************************************/

/*-------------------------- Added by the Translator --------------------------*/#include #include "switch1.h"

/*------------------------ INITIALISATION Clause ------------------------*/void switch1__INITIALISATION(void) {}

/*-------------------- OPERATIONS Clause --------------------*/void switch1__estimate( switch1__POS switch1__m1, switch1__POS switch1__m2, switch1__POS switch1__m3, switch1__POS switch1__m4, switch1__POS *switch1__pos) { if ((((switch1__m1 == switch1__NOR) && (switch1__m2 == switch1__NOR)) && (switch1__m3 == switch1__NOR)) && (switch1__m4 == switch1__NOR)) { *switch1__pos = switch1__NOR; } else if ((((switch1__m1 == switch1__RENVERSE1) && (switch1__m2 == switch1__RENVERSE1)) && (switch1__m3 == switch1__RENVERSE1)) && (switch1__m4 == switch1__RENVERSE1)) { *switch1__pos = switch1__RENVERSE1; } else if ((((switch1__m1 == switch1__RENVERSE2) && (switch1__m2 == switch1__RENVERSE2)) && (switch1__m3 == switch1__RENVERSE2)) && (switch1__m4 == switch1__RENVERSE2)) { *switch1__pos = switch1__RENVERSE2; } else { *switch1__pos = switch1__NULL; }}

main.c#include #include #include "switch1.h" int main(int argc, char** argv) {switch1__POS m1,m2,m3,m4;m1= switch1__RENVERSE1; m2= switch1__RENVERSE1; m3= switch1__RENVERSE1; m4= switch1__RENVERSE1;switch1__POS res1;switch1__estimate(m1,m2,m3,m4,&res1);printf("Les 4 capteurs sont en position RENVERSE1\n");switch (res1){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;}switch1__POS m5,m6,m7,m8;m5= switch1__NOR; m6= switch1__NOR; m7= switch1__NOR; m8= switch1__NOR;switch1__POS res2;switch1__estimate(m5,m6,m7,m8,&res2);printf("----------------------------------\n Les 4 capteurs en NORMAL\n"); switch (res2){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;}switch1__POS m9,m10,m11,m12;m9= switch1__RENVERSE2 ; m10= switch1__RENVERSE2; m11= switch1__RENVERSE2; m12= switch1__RENVERSE2;switch1__POS res3;switch1__estimate(m9,m10,m11,m12,&res3);printf("----------------------------------\n 4 capteur en RENVERSE2\n");switch (res3){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;}switch1__POS m13,m14,m15,m16;m13= switch1__NOR ; m14= switch1__RENVERSE1; m15= switch1__RENVERSE1; m16= switch1__RENVERSE1;switch1__POS res4;switch1__estimate(m13,m14,m15,m16,&res4);printf("----------------------------------\n 1 capteur en NORmal et 3 capteur en RENVERSE1\n");switch (res4){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;}switch1__POS m17,m18,m19,m20;m9= switch1__NOR ; m10= switch1__RENVERSE2; m11= switch1__RENVERSE2; m12= switch1__RENVERSE2;switch1__POS res5;switch1__estimate(m17,m18,m19,m20,&res5);printf("----------------------------------\n 1 capteur en NORmal et 3 capteur en RENVERSE2\n");switch (res5){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;}switch1__POS m21,m22,m23,m24;m21= switch1__NOR ; m22= switch1__NOR; m23= switch1__RENVERSE1; m24= switch1__RENVERSE1;switch1__POS res6;switch1__estimate(m21,m22,m23,m24,&res6);printf("----------------------------------\n 2 capteur en NORmal et 2 capteur en RENVERSE1\n");switch (res6){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;}switch1__POS m25,m26,m27,m28;m25= switch1__NOR ; m26= switch1__NOR; m27= switch1__RENVERSE2; m28= switch1__RENVERSE2;switch1__POS res7;switch1__estimate(m25,m26,m27,m28,&res7);printf("----------------------------------\n 2 capteur en NORmal et 2 capteur en RENVERSE2\n");switch (res7){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;}switch1__POS m29,m30,m31,m32;m29= switch1__NOR ; m30= switch1__NOR; m31= switch1__NOR; m32= switch1__RENVERSE1;switch1__POS res8;switch1__estimate(m29,m30,m31,m32,&res8);printf("----------------------------------\n Les 3 capteur en NORmal et 1 capteur en RENVERSE1\n");switch (res8){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;}switch1__POS m33,m34,m35,m36;m33= switch1__NOR ; m34= switch1__NOR; m35= switch1__NOR; m36= switch1__RENVERSE2;switch1__POS res9;switch1__estimate(m33,m34,m35,m36,&res9);printf("----------------------------------\n Les 3 capteur en NORmal et 1 capteur en RENVERSE2\n");switch (res9){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;}switch1__POS m37,m38,m39,m40;m37= switch1__NOR ; m38= switch1__RENVERSE1; m39= switch1__RENVERSE1; m40= switch1__RENVERSE2;switch1__POS res10;switch1__estimate(m37,m38,m39,m40,&res10);printf("----------------------------------\n 1 capteur en NORmal et 2 capteur en RENVERSE1 et 1 capteur en RENVERSE2\n");switch (res10){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;}switch1__POS m41,m42,m43,m44;m41= switch1__NOR ; m42= switch1__RENVERSE2; m43= switch1__RENVERSE2; m44= switch1__RENVERSE1;switch1__POS res11;switch1__estimate(m41,m42,m43,m44,&res11);printf("----------------------------------\n 1 capteur en NORmal et 2 capteur en RENVERSE2 et 1 capteur en RENVERSE1\n");switch (res11){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;}switch1__POS m45,m46,m47,m48;m45= switch1__NOR ; m46= switch1__NOR; m47= switch1__RENVERSE1; m48= switch1__RENVERSE2;switch1__POS res12;switch1__estimate(m45,m46,m47,m48,&res12);printf("----------------------------------\n Les 2 capteur en NORmal et 1 capteur en RENVERSE1 et 1 capteur en RENVERSE2\n");switch (res12){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;}switch1__POS m49,m50,m51,m52;m49= switch1__NULL; m50= switch1__NULL; m51= switch1__NULL; m52= switch1__NULL;switch1__POS res13;switch1__estimate(m49,m50,m51,m52,&res13);printf("----------------------------------\n Les 4 capteurs en NULL\n");switch (res13){case switch1__NULL :printf("Position de l'aiguillage : NULL\n"); break;case switch1__NOR :printf("Position de l'aiguillage : NORMAL\n"); break;case switch1__RENVERSE1 :printf("Position de l'aiguillage : RENVERSE1\n"); break;case switch1__RENVERSE2 :printf("Position de l'aiguillage : RENVERSE2\n"); break;

}

system("PAUSE");

}

Lexcution

II. Conclusion

6