Telechargé par anya.naitdjoudi

TP02

publicité
Université Mouloud Mammeri Tizi Ouzou
Faculté de Genie Electrique et d’Informatique
Département d’Informatique
RMSE M1 : Module Réseau Mobile (Simulateur Omnet++)
TP2: Running the simulation
Dans cette partie, nous allons voir comment exécuter une simulation débogage et comment
afficher le fichier journal .ajouter des icones, déclarer une variable d’états. etc.
La simulation peut être démarrée en mode débogage en cliquant sur le bouton Déboguer dans la
barre d'outils principale de l’IDE.
Cela entraînera le lancement du programme de simulation sous un débogueur (généralement
gdb). L'EDI basculera également dans la «perspective de débogage», c'est-à-dire réorganisera
ses différents volets et vues en une mise en page mieux adaptée au débogage. Vous pouvez
terminer la session de débogage avec le bouton Terminer (un carré rouge) dans la barre
d'outils.
1.Erreurs d'exécution :
Le débogage est le plus souvent nécessaire pour découvrir les erreurs d'exécution. Essayons!
D'abord, introduisez une erreur dans le programme. Dans txc1.cc, dupliquez la ligne send ()
dans handleMessage (), de sorte que le code ressemble à ceci:
void Txc1::handleMessage(cMessage *msg)
{
//...
send(msg, "out");
send(msg, "out");
}
A. Exécution au mode Normale : Lorsque vous lancez la simulation en mode normal
(bouton Exécuter) et que vous tentez de l'exécuter, vous obtenez un message d'erreur
comme celui-ci:
Université Mouloud Mammeri Tizi Ouzou
Faculté de Genie Electrique et d’Informatique
Département d’Informatique
B. Exécution au mode débogage : Maintenant, lancez la simulation en mode débogage.
En raison de l'activation par défaut d'une option de débogage sur erreurs, le
programme de simulation s'arrête dans le débogueur. Vous pouvez localiser l'erreur en
examinant la trace de la pile (la liste des appels de fonction imbriqués) dans la vue de
débogage:
Exercice : Tester avec d’autres erreurs : envoyer le message sans l’initialiser ;
2.. Points d'arrêt( Breakpoints)
Vous pouvez également placer manuellement des points d'arrêt dans le code. Les points d'arrêt
arêtent l'exécution et vous permettent d'examiner les variables, d'exécuter le code ligne par ligne ou
de reprendre l'exécution (jusqu'au prochain breakpint).
Un point d'arrêt peut être placé sur une ligne spécifique du code source en double-cliquant sur la
gouttière de gauche dans l'éditeur ou en choisissant Toggle Breakpoint dans le menu contextuel. La
liste des points d'arrêt actifs (et inactifs) peut être examinée dans la vue Points d'arrêt.
Exercice: Placez un point d'arrêt au début de la fonction de méthode handleMessage () et
exécutez la simulation. Utilisez les boutons appropriés de la barre d'outils pour effectuer un seul
pas, continué l'exécution jusqu'à la prochaine fois que le point d'arrêt est atteint, et ainsi de suite.
3. journal d'événements : Le noyau de simulation OMNeT ++ peut enregistrer les échanges
de messages pendant la simulation dans un fichier journal d'événements. Pour activer
l'enregistrement du journal des événements, cochez la case Enregistrer le journal des
événements dans la boîte de dialogue de configuration du lancement. Alternativement, vous
pouvez spécifier record-eventlog = true dans omnetpp.ini, ou même, utiliser le bouton
Enregistrer dans l'environnement d'exécution graphique Qtenv après le lancement,
Université Mouloud Mammeri Tizi Ouzou
Faculté de Genie Electrique et d’Informatique
Département d’Informatique
Le fichier journal peut être analysé plus tard avec l'outil Sequence Chart dans l'EDI. Le répertoire
de résultats dans le dossier du projet contient le fichier .elog(dans le repertoire Results). Doublecliquer dessus dans l'IDE OMNeT ++ ouvre l'outil Sequence Chart, et l'onglet journal des
événements en bas de la fenêtre.
Université Mouloud Mammeri Tizi Ouzou
Faculté de Genie Electrique et d’Informatique
Département d’Informatique
4.Associer des icones et couleurs aux différents modules :
Pour rendre le modèle de simulation plus joli, Nous associons des icones en couleurs aux
modules, pour cela, nous manipulons le fichier . NED en ajoutant des chaines d’affichage :
L'étiquette i = dans la chaîne d'affichage spécifie l'icône.
@display("i=la chaine d’affichage ");
Exemple:
@display("i=block/routing"); // ajouter icone exécution elle est dans le //rep block
@display("i=,cyan");
package titocexo1;
simple Txc1
{
parameters:
@display("i=block/routing");
gates:
input in;
output out;
}
network Tictoc1
{ submodules:
tic: Txc1 {
parameters:
@display("i=,red");
}
toc:Txc1 {
parameters:
Université Mouloud Mammeri Tizi Ouzou
Faculté de Genie Electrique et d’Informatique
Département d’Informatique
@display("i=,yellow");
}
connections:
tic.out --> { delay = 100ms; } --> toc.in;
tic.in <-- { delay = 100ms; } <-- toc.out;
}
1. Ecrire dans le fichier log
Omnet++ offre une fonction qui permet d’écrire dans le fichier log , cette fonction est
utilisée dans le fichier .cc (code c++)
EV<< " je suis le nœud tic \n " ;
Exemple :
void Txc1::initialize()
{
if (strcmp("tic", getName()) == 0) {
EV << "je ss le noeud TIC\n";
cMessage *msg = new cMessage("tictocMsg");
send(msg, "out");
}
}
void Txc1::handleMessage(cMessage *msg)
{
EV << "recevoir le message " << msg->getName() << " et
send(msg, "out");// send out the message
}
l'envoyer";
Université Mouloud Mammeri Tizi Ouzou
Faculté de Genie Electrique et d’Informatique
Département d’Informatique
Remarque :
Vous pouvez également ouvrir des fenêtres de sortie séparées pour tic et toc en cliquant avec
le bouton droit de la souris sur leurs icônes et en sélectionnant Journal des composants dans
le menu. Cette fonctionnalité sera utile lorsque vous avez un grand nombre de modèle et que
vous êtes intéressé uniquement par les messages de journal d’un module spécifique.
5.Ajouter une variable d’état
Dans cette étape, nous ajoutons un compteur au module et nous supprimons le message
après dix échanges .
class Txc1 : public cSimpleModule
{
private:
int counter; // Déclarer le compteur ici
protected:
Nous initialisons la variable counter à 10 dans initialize () et nous décrémenterons dans
handleMessage (), c'est-à-dire à chaque arrivée de message. Lorsque counter =0 , la
simulation sera à court d'événements et se terminera.
class Txc1 : public cSimpleModule
{
int counter;
protected:
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
};
Define_Module(Txc1);
void Txc1::initialize()
{
counter = 10;
WATCH(counter);
Université Mouloud Mammeri Tizi Ouzou
Faculté de Genie Electrique et d’Informatique
Département d’Informatique
if (strcmp("tic", getName()) == 0) {
cMessage *msg = new cMessage("tictocMsg");
send(msg, "out");
}
}
void Txc1::handleMessage(cMessage *msg)
{
counter--;
if (counter == 0) {
EV << getName() << "'s counter reached zero, deleting message\n";
delete msg;
}
else {
EV << getName() << "'s counter is " << counter << ", sending back message\n";
send(msg, "out");
}
}
Remarque :
WATCH(counter);
Cette ligne , permet de voir la valeur du compteur dans l'environnement d'exécution
graphique.
Si vous cliquez sur l'icône du tic, la fenêtre de l'inspecteur dans le coin inférieur gauche de la
fenêtre principale affichera des détails sur le tic. Assurez-vous que le mode Enfants est
sélectionné dans la barre d'outils en haut. L'inspecteur affiche maintenant la variable de
compteur.
Université Mouloud Mammeri Tizi Ouzou
Faculté de Genie Electrique et d’Informatique
Département d’Informatique
Téléchargement