Guia de Practica de Laboratorio 04

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 15

UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR

ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

GUÍA DE PRÁCTICA DE LABORATORIO 04

OBJETIVO: Familiarizarse con el entorno del IDE de OMNeT++, el cual será posteriormente
empleado para realización de simulación de sistema LTE.

REQUISITOS:

- Computador con software OMNeT++ (preferible versión 5.x) instalado

PROCEDIMIENTO:
1. Creación del modelo

a. Iniciar el IDE de OMNeT, escribiendo omnetpp en el terminal.

b. En el IDE seleccionar en el menú File: New -> OMNeT++ Project

c. Cuando aparezca el cuadro de diálogo del asistente, ingresar “Proyectoprueba” como


nombre del proyecto, elija “Empty Project” cuando se le pregunte sobre el contenido
inicial del proyecto, luego haga clic en Finalizar.

d. Verificar que se haya creado el proyecto vacío “Proyectoprueba” 1 en el explorador de


proyectos.

Notas:
- Algunas versiones de OMNeT ++ generarán un archivo package.ned en el proyecto. No lo
necesitamos ahora: elimine el archivo.
- Es preciso indicar que, usar el IDE es completamente opcional. Casi toda la funcionalidad de
OMNeT ++ (a excepción de algunas características muy intensivas en gráficos e interactivas,
como la exploración de gráficos de secuencia y el trazado de resultados) está disponible en la
línea de comandos.

e. Implementar el modelo agregando un archivo NED 2. Para agregar el archivo al proyecto,


haga clic con el botón derecho en el directorio del proyecto en el explorador de
proyectos, a la izquierda, y elija New -> Network Description File (NED) en el menú.
Ingrese tictoc1.ned cuando se le solicite el nombre del archivo.

1
El proyecto contendrá todos los archivos que pertenecen a nuestra simulación. En nuestro ejemplo, el proyecto
consta de un único directorio. Para simulaciones más grandes, el contenido del proyecto generalmente se clasifica en
las carpetas src/ y simulations/, y posiblemente en subcarpetas debajo de ellas.
2
OMNeT ++ usa archivos NED para definir componentes y ensamblarlos en unidades más grandes como redes.
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

f. Una vez creado, el archivo se procede a editar en el Editor NED de OMNeT++, el


cual tiene dos modos, Diseño y Fuente; pudiéndose cambiar entre ellos3.

3
En el modo de diseño, la topología se puede editar gráficamente, utilizando el mouse y la paleta de la derecha, mientras en modo
Fuente, el código fuente NED se puede editar directamente como texto. Los cambios realizados en un modo se reflejarán
inmediatamente en el otro. (Dado que los archivos NED son archivos de texto sin formato, incluso se puede usar un editor de texto
externo para editarlos, aunque se perderá el resaltado de sintaxis, la asistencia de contenido, las referencias cruzadas y otras
características IDE).
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

Explicación:

Se declara Txc1 como un tipo de módulo simple. Los módulos simples son atómicos en el nivel NED.
También son componentes activos, y su comportamiento se implementa en C ++. Asimismo, Txc1
tiene una puerta de entrada nombrada y una puerta de salida nombrada.

Por otro lado, se declara Tictoc1 como una red. Tictoc1 se ensambla a partir de dos submódulos, tic y
toc, ambas instancias del tipo de módulo Txc1. La puerta de salida de tic está conectada a la puerta
de entrada de toc y viceversa. Habrá un retardo de propagación de 100 ms en ambos sentidos.

g. Modifique tictoc1.ned, a fin de que los gráficos se muestren ordenados.

h. Implementar la funcionalidad del módulo simple Txc1 en C ++. Crer un archivo


llamado txc1.cc seleccionando New-> Source File en el menú contextual del
proyecto, e ingrese el siguiente contenido:
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

Explicación:

- El tipo de módulo simple Txc1 está representado por la clase C ++ Txc1. La clase Txc1 necesita
subclasificarse desde la clase cSimpleModule de OMNeT ++, y debe registrarse en OMNeT ++
con la macro Define_Module ().

- Se redefinen 2 métodos desde cSimpleModule: initialize () y handleMessage (). Se invocan


desde el núcleo de simulación: el primero solo una vez, y el segundo cada vez que llega un
mensaje al módulo.

- En initialize () se crea un objeto de mensaje (cMessage), el cual se envía a la puerta de salida.


Dado que esta puerta está conectada a la puerta de entrada del otro módulo, el núcleo de
simulación entregará este mensaje al otro módulo, después de un retraso de propagación de
100 ms asignado al enlace en el archivo NED. El otro módulo simplemente lo devuelve (otro
retraso de 100 ms), por lo que dará como resultado un ping-pong continuo.

- Los mensajes (paquetes, marcos, trabajos, etc.) y los eventos (temporizadores, tiempos de
espera) están representados por objetos cMessage (o sus subclases) en OMNeT ++. Después
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

de enviarlos o programarlos, el núcleo de simulación los retendrá en la lista de "eventos


programados" o "eventos futuros" hasta que llegue su momento y se entreguen a los módulos a
través de handleMessage ().

- Se debe tener en cuenta que no hay una condición de detención integrada en esta simulación:
continuaría para siempre. Se podrá detener desde la GUI.

i. Crear un archivo omnetpp.ini para poder ejecutar la simulación. 4 Para ello


acceder al menú File y seleccionar New -> Inicialization File (INI). El nuevo
archivo se abrirá en un Editor de archivos Ini, el cual tiene dos modos: Forma y
Fuente, que editan el mismo contenido. El primero es más adecuado para
configurar el núcleo de simulación, y el segundo para ingresar los parámetros del
módulo.

j. En el modo Fuente, ingresar lo siguiente:

[General]

network = Tictoc1

Con este paso se culmina la creación del modelo, el cual está listo para
compilarlo y ejecutarlo, siendo sus fuentes: tictoc1.ned, txc1.cc y omnetpp.ini. Se
debe guardar los cambios.

2. Ejecución de simulación

4
omnetpp.ini le dice al programa de simulación qué red desea simular (ya que los archivos NED pueden contener
varias redes), asimismo, puede pasar parámetros al modelo.
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

Una vez que complete los pasos anteriores, puede iniciar la simulación seleccionando
omnetpp.ini (en el área del editor o en el Explorador de proyectos) y presionando el
botón Run.

El IDE construirá su proyecto automáticamente. Si hay errores de compilación, debe


rectificarlos hasta que obtenga una compilación y un enlace sin errores.

Por otro lado, se puede activar manualmente una compilación presionando eligiendo
Project -> Build todo en el menú, o presionando Ctrl + B.

3. Depuración (Debugging) de simulación

La simulación es un programa de C ++ y, a menudo necesita depurarse mientras se está


desarrollando.
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

La simulación se puede iniciar en modo de depuración haciendo clic en el botón Depurar


en la barra de herramientas principal del IDE.

Esto hará que el programa de simulación se inicie bajo un depurador (generalmente


gdb). El IDE también cambiará a “Debug Perspective” (Perspectiva de depuración), es
decir, reorganizará sus diversos paneles y vistas a un diseño que sea más adecuado
para la depuración. Puede finalizar la sesión de depuración con el botón “Terminate” (un
cuadrado rojo) en la barra de herramientas.

 Errores de tiempo de ejecución

La depuración se necesita con mayor frecuencia para rastrear errores de tiempo de


ejecución. Para verificar ello, se procede en txc1.cc, a duplicar la línea send () dentro de
handleMessage (), para que el código se vea así:
void Txc1::handleMessage(cMessage *msg)
{
//...
send(msg, "out"); // send out the message
send(msg, "out"); // THIS SHOULD CAUSE AN ERROR
}

Al ejecutar la simulación en modo normal ocurre lo siguiente:


UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

Ahora, ejecute la simulación en modo de depuración. Debido a que la opción de


depuración de errores está habilitada de forma predeterminada, el programa de
simulación se detendrá en el depurador. Puede localizar el error examinando el
seguimiento de la pila (la lista de llamadas a funciones anidadas) en la vista Depuración.

A partir de entonces, debe buscar una función que le resulte familiar, es decir, una que
forme parte del modelo. En la imagen mostrada, esa es la línea "Txc1 :: handleMessage
() en txc1.cc:34". Al seleccionar esa línea, se mostrará el código fuente correspondiente
en el área del editor y se permitirá examinar los valores de las variables en la vista
Variables. Esta información ayuda a determinar la causa del error y corregirlo.

Rastrear bloqueos, es decir, los valores predeterminados es similar. Por ejemplo,


deshacer la edición anterior del código fuente (elimine la línea duplicada send ()) e
introduzca otro error: Suponer que se olvidó crear el mensaje antes de enviarlo, y
cambiemos las siguientes líneas en initialize ()
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

cMessage *msg; //= new cMessage("tictocMsg");

Cuando se ejecuta la simulación, se bloqueará.

Si se vuelve a iniciar la simulación, esta vez en modo “debug”, el bloqueo llevará al


depurador. Una vez allí, se podrá ubicar el error en la vista “Debug” y examinar las
variables, que ayudarán a identificar y corregir el error.

 Gráfico de secuencia

El núcleo de simulación OMNeT ++ puede registrar los intercambios de mensajes


durante la simulación en un archivo de registro de eventos. Para habilitar la grabación del
registro de eventos, marque la casilla de verificación Record eventlog en el cuadro de
diálogo de configuración de lanzamiento.

También, se puede usar el botón Record en el entorno de tiempo de ejecución gráfico


Qtenv después del lanzamiento.
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

El archivo de registro se puede analizar más tarde con la herramienta Sequence Chart
en el IDE. El directorio de resultados en la carpeta del proyecto contiene el archivo .elog.
Al hacer doble clic en el archivo .elog contenido en la carpeta del proyecto, en el IDE de
OMNeT++, se abre la herramienta Sequence Chart y la pestaña de Event Log en la
parte inferior de la ventana.
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

4. Personalización de íconos y avisos de eventos

a. Crear un nuevo archivo NED en el proyecto “Proyectoprueba”, nombrándolo como


tictoc2.ned. Editar dicho archivo como se indica a continuación:

b. Crear un nuevo archivo fuente en el proyecto “Proyectoprueba”, nombrándolo como


txc2.cc. Este archivo fuente permitirá mostrar un aviso de evento cuando se envía un
mensaje inicial al comenzar la simulación, asimismo mostrará otro aviso de evento cada
vez que “tic” o “toc” reciban un mensaje. Para ello, se edita, conforme se indica a
continuación:
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

#include <string.h>
#include <omnetpp.h>
using namespace omnetpp;

class Txc2 : public cSimpleModule


{
protected:
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
};

Define_Module(Txc2);

void Txc2::initialize()
{
if (strcmp("tic", getName()) == 0) {
// el objeto EV trabaja parecido a cout
EV << "Enviando mensaje inicial\n";
cMessage *msg = new cMessage("tictocMsg");
send(msg, "out");
} }

void Txc2::handleMessage(cMessage *msg)


{
//msg2->getName() is el nombre del objeto msg2, aquí éste será el "tictocMsg"
EV << "Mensaje recibido `" << msg->getName() << "', Enviando este nuevamente\n";
send(msg, "out"); // envía el mensaje (hacia la salida)
}

c. Modificar el archivo omnetpp.ini, conforme se señala:S

[General]
# nothing here

[Config Tictoc1]
network = Tictoc1

[Config Tictoc2]
network = Tictoc2

d. Ejecutar la simulación de la red Tictoc2.

5. Variables de estado
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

a. Crear un archivo NED denominado tictoc3.ned, el cual tendrá el mismo contenido que
tictoc2.ned. (Txc3)

b. Crear un archivo fuente denominado txc3.cc, el cual contiene el siguiente código:

#include <stdio.h>
#include <string.h>
#include <omnetpp.h>

using namespace omnetpp;

/**
* En esta clase se añade un contador, y se elimina el mensaje después de 10
intercambios.
*/
class Txc3 : public cSimpleModule
{
private:
int counter; // Contador

protected:
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
};

Define_Module(Txc3);

void Txc3::initialize()
{
// El contador disminuye en 1 por cada intercambio
// se elimina el mensaje cuando contador sea cero
counter = 10;

// La siguiente declaración WATCH () permitirá examinar la variable en Tkenv.


// Después de realizar algunos pasos en la simulación, haga doble clic en 'tic' o
'toc',
// seleccione la pestaña Contenido en el cuadro de diálogo que aparece y encontrará
// "contador" en la lista.

WATCH(counter);

if (strcmp("tic", getName()) == 0) {
EV << "Enviando mensaje inicial\n";
cMessage *msg = new cMessage("tictocMsg");
send(msg, "out");
}
}

void Txc3::handleMessage(cMessage *msg)


{
// Disminuye contador y verifica si es cero.
if (counter == 0) {
// Si el contador es cero, se elimina el mensaje
EV << getName() << "tiene contador igual a 0, eliminando \n";
delete msg;
}
else {
EV << getName() << "tiene contador igual a " << counter << ", enviando mensaje
de retorno\n";
send(msg, "out");
}
counter--;
}
En el código mostrado, se agrega un contador al módulo y se elimina el mensaje
después de diez intercambios. El contador se agrega como miembro de la clase.

c. Modificar el archivo omnetpp.ini a fin de incluir la red Tictoc3.

d. Ejecutar la simulación
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

6. Parámetros de estado

a. Crear un archivo NED denominado tictoc4.ned y un archivo txc4.cc, conforme se indica a


continuación:

txc4.cc
#include <stdio.h>
#include <string.h>
#include <omnetpp.h>

using namespace omnetpp;

/* Añadir parámetros a la simulación


* Cambiar el "número mágico" 10 en un parámetro*/
class Txc4 : public cSimpleModule
{
private:
int counter;

protected:
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
};

Define_Module(Txc4);

void Txc4::initialize()
{
// Inicializar el contador con el parámetro de módulo "limit", declarado
// en el archivo NED (tictoc4.ned).
counter = par("limit");

// cuando se envía un mensaje inicial


if (par("sendMsgOnInit").boolValue() == true) {
EV << "Enviando mensaje inicial\n";
cMessage *msg = new cMessage("tictocMsg");
send(msg, "out");
}
}

void Txc4::handleMessage(cMessage *msg)


{
if (counter == 0) {
EV << getName() << " tiene contador igual a 0, eliminando mensaje\n";
delete msg;
}
else {
EV << getName() << " tiene contador igual a " << counter << ", enviando mensaje\n";
send(msg, "out");
}
counter--;
UNIVERSIDAD NACIONAL TECNOLOGICA DE LIMA SUR
ESCUELA PROFESIONAL DE INGENIERÍA ELECTRÓNICAY TELECOMUNICACIONES

Se está procediendo a agregar parámetros de entrada a la simulación: se convierte el


"número mágico" 10 en un parámetro y se agrega un parámetro booleano para decidir si
el módulo debe enviar el primer mensaje en su código de inicialización.

Los parámetros del módulo se declaran en el archivo NED. El tipo de datos puede ser
numérico, string, bool o xml (este último es para facilitar el acceso a los archivos de
configuración XML), entre otros.

También se modifica el código C ++ para leer el parámetro en initialize () y asignarlo al


contador.

Se modifica el archivo omnetpp.ini, a efectos de establecer el valor del parámetro “limit”.

b. Modificar el archivo omnetpp.ini a fin de incluir la red Tictoc4, y establecer el valor del
parámetro “limit”, conforme se indica a continuación:

[General]
# nothing here

[Config Tictoc1]
network = Tictoc1

[Config Tictoc2]
network = Tictoc2

[Config Tictoc3]
network = Tictoc3

[Config Tictoc4]
network = Tictoc4
Tictoc4.*.limit = 5

c. Ejecutar la simulación

Linkografía

1. https://docs.omnetpp.org/

También podría gustarte