• No results found

3.2 System design and implementation

4.1.1 Experiment Description

INIT, NO_SIGNAL, CONN_REQ, CHECK_BTS, CHECK_BTS_ACK, MOVE_MS, CALL_END, APAGADO, /…/

A continuación se definen los tipos de acceso a la red que una MS puede hacer. El estado NONE es aquel en el cual la MS no desea realizar ninguna petición sobre la red. PAGRES corresponde a un acceso a la red como consecuencia de la llegada de un mensaje de PAGING desde la BTS que indica una llamada entrante o un deseo de establecer comunicación con el terminal por parte de la red. LUREQ corresponde a un caso en el cual la MS necesita actualizar su posición dentro de la red. CMSREQ indica el deseo de establecer una llamada y SMSREQ se usará para indicar el deseo de enviar un mensaje.

enum {

NONE, // NINGUNA ACCIÓN, NO ESTABLECE CANAL

PAGRES, // PARA RESPUESTA A UN PAGING

LUREQ, // PARA ACTUALIZACIÓN DE POSICIÓN

CMSREQ, // PARA LLAMADA ORIGINADA EN MS

SMSREQ, // PARA ENVÍO DE MENSAJE ORIGINADO EN MS

HANDOVER // PARA TRASPASO

};

8.2.4 El fichero “ms.cpp”

8.2.4.1 Atributos

149

connected: indica el estado del móvil. Si es -1 desconectado, 0 conectado a canal de señalización, y 1 conectado a canal de tráfico.

num_ms: número total de MS en la red.

num_bts: número total de BTS en la simulación.

number_bts_connected: identificador de BTS a la que se encuentra conectada. Si es -1 está desconectada.

Counter_bts: contador de BTS.

counterRetry: contador para la espera de un nuevo intento de llamada cuando se ha producido un bloqueo.

pathType: tipo de trayectoria.

xc: double que almacena la posición de la MS en el eje X.

yc: double que almacena la posición de la MS en el eje Y.

vmod: almacena el módulo de velocidad.

angle: almacena el ángulo del vector velocidad.

xcLimit: límite de movimiento en el eje X. .

ycLimit: límite de movimiento en el eje X.

param_n: parámetro exponencial de perdidas.

L0: Pérdidas en el primer metro.

Vect_NoBTS: Vector de enteros para almacenar los números identificadores de BTS a la hora de calcular las potencias. Actúa de índice para el resto de vectores. Si por ejemplo se quiere conocer el valor de potencia de la BTS 5, busca el valor 5 en el vector y guarda la posición. A continuación va a la posición guardada en el vector de potencias y obtiene el valor.

Vect_NoBTS_Rx: Vector de enteros para almacenar los números identificadores de BTS a la hora de calcular las potencias.

Vect_X: Vector double que almacena la posición de la BTS en el eje X.

Vect_Y: Vector double que almacena la posición de la BTS en el eje Y.

Vect_Radius: Vector double que almacena los radios de cobertura.

Vect_Watt: Vector double que almacena las potencias.

InfoPwr: Vector double que almacena las potencias.

tiempo_llamada: tiempo de llamada. Valor aleatorio asignado según una distribución exponencial.

inicio_llamada: instante en que se inicia una llamada, controla que este valor más el de tiempo de llamada no sea superior al valor de tiempo devuelto por la función simTime().

150

marca_tiempo: instante de tiempo.

marca_interarrival: instante de tiempo para realizar esperas entre llamadas.

velVctrInit: instante de tiempo en que se modifico el vector velocidad.

velVctrLifeTime: tiempo de vida del vector velocidad.

retryCall: tiempo en volver a realizar una llamada.

lastTry: instante de tiempo en que se produjo la última llamada. 8.2.4.2 Atributos de salida

iMissedCalls: llamadas perdidas o bloqueadas por la red.

iCalls: llamadas realizadas por la estación móvil.

iBroken: llamadas caídas durante la duración de la llamada debido a fallos de cobertura.

iHandover: número de traspasos que soporta una MS. 8.2.4.3 Métodos

virtual void initialize(): Realiza la inicialización de los parámetros de cada objeto de la clase MS. Además inicializa las variables para la impresión de los datos de salida.

virtual void handleMessage(cMessage *msg): Es la función que se encarga de tratar y manipular los mensajes de tipo cMessage. Para ello lo que hace es a partir de los tipos de mensajes llamar a la función correspondiente que se encarga de tratarlo.

virtual void finish(): Es la función de finalización. Cuando es llamada además de finalizar todas las variables, escribe en un fichero los datos escalares. Borra el tamaño y el contenido de los vectores pertenecientes al objeto.

virtual bool call_query (): Es la función que permite que un objeto MS realice la simulación de una llamada según un valor devuelto por una variable aleatoria con una distribución exponencial.

virtual bool sms_query (): Es la función que permite que un objeto de la clase MS realice el envío de un mensaje.

151

virtual bool lureq_query (int &status): Permite que la MS actualice su posición de forma periódica o cada vez que se enciende.

virtual bool turnon_terminal(): Función que enciende el terminal móvil.

virtual void order_vector(): Función que ordena los vectores de potencia en función de la potencia de mayor valor a menor.

virtual void func_movems (cMessage * msg): Función de tratamiento del mensaje MOVE_MS. Este tipo de mensaje es un mensaje especial de la simulación. Se envía cada módulo a sí mismo con la función Schedule. Dentro del código se realizan diferentes operaciones en función del estado del móvil. Si esta apagado se llama a la función turnon_terminal para que se encienda con una probabilidad.

virtual void func_checkbtsack (cMessage * msg): Función que emplea la MS ante la llegada de un mensaje CHECK_BTS_ACK, para que pueda pedir un canal de señalización para conectarse con la BTS.

virtual void func_immassign (cMessage * msg): Función para tratar los mensajes de asignación inmediata de un canal de señalización.

virtual void func_asscmdbtsms (cMessage * msg): función para tratar los mensajes de asignación de un canal de tráfico.

virtual void func_measrep (cMessage * msg): Función que se encarga del tratamiento y envío de los mensajes de informe de medidas. Cada vez que se llama a esta función, se envía un mensaje hacia el módulo aire con las potencias de las seis estaciones base que recibe con mayor potencia. Éstas son ordenadas de mayor a menos potencia con la función order_vector().

virtual void func_pagreq (cMessage * msg): Es la función que se encarga de analizar los mensajes de tipo paging que vienen desde la MSC.

152

virtual void func_hocmd (cMessage * msg): Es la función que se encarga de tratar un mensaje de tipo handover command para que se realice una petición de handover.

virtual void func_chanrel (cMessage * msg): función para petición de liberación de canal.

virtual double CalculateWatt(double dblMSX,double dblMSY,double BTSradius): método para calcular las potencias que detecta cada estación móvil de las antenas que tiene a su alrededor. Para ello se le pasa como parámetros la coordenada en el eje X de la posición de la MS, y la del eje Y. También se le pasa el radio de cobertura de la BTS.

virtual void func_immassignrej (cMessage * msg): función para que rechaza la asignación de un canal.

virtual void func_luacc (cMessage * msg): función que recoge un mensaje de aceptación de actualización de posición.