Está en la página 1de 0

Anexos 150

ANEXOS.
A.1 Modelo de sistema de prueba
Como modelo de prueba del funcionamiento del programa de simulacin, se
presenta a continuacin una red caracterstica y un procedimiento para la simulacin de la
misma, la cual incluye todas las funciones y opciones de funcionamiento del programa de
simulacin SIMSTELCOM.
Este modelo representa una red que inicialmente se encuentra dentro de los
parmetros correctos de funcionamiento, esto quiere decir que no se presentan
inconvenientes de funcionamiento como saturacin de elementos, congestin, etc.
El archivo que contiene esta red de prueba se encuentra ubicado en el CD de
instalacin del programa de simulacin SIMSTELCOM, dentro de la carpeta llamada Red
Modelo. Al ejecutar el programa y cargar la red llamada RedModelo.SIM, se dibuja la red
mostrada en la figura A1.1.

Figura A1.1Red modelo empleada para probar el programa de simulacin.
En esta red se han cargado valores de los parmetros de cada elemento de manera
que no se produzca saturacin alguna en ningn punto del sistema, esto para la primera
parte del proceso con la red de prueba, por lo tanto, si se calculan sus parmetros de red y
se inicia el proceso de simulacin, la red no presentar signos de congestin o saturacin,
tal y como se lo describe en la seccin 5.2.4, y su funcionamiento estar dentro de los
parmetros ptimos.
Como primer paso, se debe ejecutar la simulacin sobre esta red y comprobar sus
Anexos 151
resultados. Para asegurar de que no se ha producido ninguna congestin en la red, se debe
visualizar los resultados de la simulacin como ha sido descrito anteriormente, y verificar
que la casilla de Congestin indique NO.
Ahora, para poder observar el proceso de control de congestin que tiene el
programa, se deben modificar algunos parmetros de los elementos que conforman la red
para producir este acontecimiento. Para esto, se cambia el valor de capacidad de
procesamiento de uno de los nodos al valor 1.5 Mbps y adems se verifica que la casilla de
Control de Congestin en la ventana del programa est seleccionada para que se le ordene
al programa que ejecute la subrutina de control de congestin en el caso de que se presente
la misma.
Ahora que se ha generado una congestin se procede a iniciar el proceso de
simulacin, pero primero sedeshabilita la casilla que indica que est activa la subrutina de
Control de Retardo en la red para observar el comportamiento del programa ante la
congestin nicamente y adems observar el valor que debera existir dentro de los
parmetros del nodo para que no se produzca la congestin. Este proceso est descrito en la
seccin 5.2.4. Ahora, para observar la manera como el programa maneja la situacin de que
exista un retardo grande en la red, se selecciona la casilla de Control de Retardo y se inicia
el proceso de simulacin nuevamente y luego se comprueban los resultados obtenidos con
esta opcin seleccionada. Estos procedimientos ayudan a interpretar y a disear de una
mejor manera la red o sistema analizado.
A.2 Modelo de resultados obtenidos
En esta seccin se muestran todos los resultados que se obtuvieron al realizar las
simulaciones respectivas en la seccin anterior para poder interpretarlos y poder encontrar
conclusiones que ayuden a un mejor diseo para optimizar el funcionamiento de las redes
de telecomunicaciones. Por medio de la interpretacin de los resultados se pueden detectar
las falencias y debilidades de la red que est siendo analizada por medio del programa de
simulacin y as solucionarla para mejorar el desempeo que tiene actualmente la red o
aplicacin.
Los resultados de la primera parte de la simulacin de la red de prueba se puede
observar en la ventana de visualizacin de resultados como la mostrada en la figura 5.19, en
donde se observa que hay varios valores numricos y literales que aportan informacin muy
Anexos 152
importante acerca de la manera de comportarse la red ante las situaciones presentadas por el
usuario, estos valores representan lo siguiente:
1. Nmero de Abonados: Este valor indica cuntos puntos de terminacin de red
existen en toda la red, y por lo tanto el nmero de abonados que reciben los
beneficios de una red de telecomunicaciones.
2. Nmero de Nodos: Representa la cantidad de centros de procesamiento de trfico
de informacin que es generada por cada uno de los puntos de terminacin de red
que estn presentes en el sistema analizado.
3. Nmero de Enlaces: Indica el nmero de canales de enlace que se encargan de
llevar la informacin entre dos nodos y por lo tanto entre los puntos de terminacin
de red que son los abonados.
4. Retardo Total de la red: Este parmetro es talvez el ms importante y a la vez el
ms crtico en el momento de disear y analizar una red, representa el tiempo que se
demora un mensaje desde que sale del punto de terminacin de red origen hasta que
llega a su destino.
5. Retardo en el Vaco: Este es un valor que indica el retardo que sufren los mensajes
desde que salen de su punto de origen hasta que llegan a su destino pero cuando la
red no presenta una carga de trfico, este valor da una referencia del
comportamiento de la red ante el trfico medio ofrecido, sin que este llegue a
valores altos en los que ya no se puede considerar como vaco o sin carga.
6. Trfico Interno: Indica la cantidad de informacin que la red o el sistema se
encuentran transportando en su interior, es la cantidad de trfico de informacin que
se encuentra en curso, este valor va a ser siempre cambiante debido a la naturaleza
aleatoria del comportamiento del trfico dentro de la red, este valor estar
relacionado ntimamente con el retardo que existe en cada canal y por lo tanto con
el retardo total que experimenta la red al manejar esa cantidad de trfico.
7. Capacidad Total de los enlaces: Este valor da una referencia sobre la cantidad
terica de trfico que se puede manejar internamente en la red, es un valor de
referencia porque el porcentaje de aprovechamiento de los canales depende del tipo
de transmisin que se emplee, por ejemplo, si se emplea una transmisin de radio
digital con modulacin 8QAM, por el canal se podr pasar ms informacin que con
Anexos 153
una modulacin FSK, por lo tanto se debe tener muy en cuenta estos parmetros
para conocer el desempeo real de la red.
8. Punto de Saturacin de la red: Como en el caso anterior, este tambin es un valor
referencial del punto en el que se supone se producir un congestionamiento en la
red con su consecuente aumento de retardo, se debe cuidar de que no se sobrepase
este valor de trfico interno porque dar como resultado un aumento grande en el
valor de retardo de la red, pudiendo llegar a valores intolerables,
9. Nmero de Saltos: Indica un nmero promedio de saltos o pasos que debe dar el
mensaje para llegar a su destino, este valor representa una mtrica de la red para
medir su longitud y retardo, se trata de mantener este valor lo ms pequeo posible
para disminuir el retardo que va aumentando al pasar el mensaje por los nodos, ya
que estos introducen un retardo asociado con el tiempo de procesamiento de la
informacin que se est manejando.
10. Congestin / Saturacin: Este indicador literal indica si se ha producido una
congestin o saturacin dentro de la red o sistema durante cualquier momento del
proceso de simulacin, si no se ha producido mostrar un NO, de caso contrario,
aparecer un SI.
11. Control de Congestin: Es un indicador que dice si se ha habilitado la funcin de
monitorizacin de congestin o saturacin en los elementos de la red.
12. Control de Retardo: Este indicador avisa si se ha activado la funcin de
monitorizacin de retardo para que no sobrepase los valores tolerables por la red.
En la red modelo que se presenta se han obtenido los resultados de simulacin
mostrados en la figura A2.1 despus de permanecer en funcionamiento durante 15 minutos
y en el estado en el que la red no sufrir ningn tipo de congestin, segn lo indicado
anteriormente en esta seccin.
Para visualizar la ventana de resultados de simulacin de la red analizada,
nicamente hay que presionar las teclas Control +R, de esta forma se podr analizar cada
uno de los parmetros del sistema que se encuentra bajo modelacin.
Anexos 154

Figura A2.1Resultados de la simulacin de la red modelo.
Segn los resultados obtenidos se puede observar en primer lugar el parmetro ms
importante que se debe tener en cuenta al modelar un sistema que es el de Retardo Total en
la red, el cual, en este caso, proporciona una clara idea de que no se existe ningn tipo de
problemas con respecto a congestin o saturacin, pues, como se observa, el retardo de la
red en el instante en que se pidieron los resultados ha sido de 7.20486474822E-07
segundos, que es un retardo muy pequeo y cercano a cero.
Para ratificar este resultado se ve que el indicador de congestin o saturacin en la
ventana de resultados muestra que NO se ha producido una situacin de congestin o
saturacin a lo largo de todo el proceso de simulacin. Ahora, para la segunda parte de la
prueba sobre la red, se ha producido deliberadamente una situacin de congestin en uno de
los nodos, esto se logr reduciendo significativamente el valor de capacidad de
procesamiento de datos al valor indicado en el anexo A.1, adems, para mostrar este
fenmeno de una mejor manera, no se ha seleccionado el monitor de control de congestin,
los resultados que se obtuvieron fueron los mostrados en la figura A2.2

Figura A2.2, Resultados de la simulacin de una red saturada.
Anexos 155
La primera cantidad que se observa que tiene un valor que no est dentro de los
valores tolerables de funcionamiento normal de una red es la que indica el retardo que
experimenta la red, el retardo registrado despus de un tiempo prudencial de simulacin es
de 46.7 segundos, el cual representa un valor que representa una red o sistema totalmente
saturado, que es lo que se pretenda lograr en esta segunda parte de la prueba, lo cual es
reiterado por el indicador de control de congestin que indica SI. Ahora, si se activa la
casilla de Control de Congestin se ve que el nodo saturado se pinta de color rojo indicando
la situacin de alarma, y luego de un tiempo de simulacin, se observa que el retardo ya
vuelve a caer dentro de valores tolerables, es por la razn que el algoritmo de control de
congestin ha encontrado un valor para la capacidad del nodo en la que no se satura, estos
resultados se pueden ver a continuacin en la figura A2.3

Figura A2.3 Resultados de una red saturada que tiene control de congestin
Para conocer cul ha sido el valor mnimo que debe tener el nodo como capacidad,
simplemente se verifica por medio de la herramienta de cambio de parmetros y se
selecciona el nodo que est alarmado.
La seal de que se ha producido una congestin se encuentra en la misma ventana
de resultados indicada por un SI en la casilla de Congestin / Saturacin.
Por ltimo, se debe activar la casilla de Control de Retardo para que se lleve al
programa a calcular los valores de los parmetros de los elementos para que el retardo de la
red se encuentre dentro de ciertos valores tolerables de funcionamiento, el proceso es el
mismo que se realiza para verificar los valores de los elementos luego de que se ha
producido una congestin y se ha activado el procedimiento de control de congestin.

Cdigo del Programa 1
A continuacin se presenta el cdigo de programacin de SIMSTELCOM, que es el
programa de simulacin del trfico de informacin de los sistemas de telecomunicaciones.
El formato de presentacin del cdigo del programa es el siguiente:
El programa fue desarrollado mediante el lenguaje de programacin Visual Basic
6.0, por lo tanto se deben definir primero los formularios que contienen todos los comandos
y opciones que aparecen en cada una de la ventanas que se van mostrando a lo largo del
proceso de simulacin.
Los grficos se refieren a cada uno de los formularios del programa, en los cuales se
pueden identificar los elementos a los que se hace referencia en el cdigo de programacin.
El cdigo correspondiente a cada uno de los formularios est debidamente
documentado con la explicacin de lo que hace cada seccin de cdigo y para que se la
utiliza. Toda la documentacin del programa se la puede identificar fcilmente ya que antes
de cualquier lnea de explicacin hay un apstrofe, el cual indica que se trata de un
comentario que no se considera como cdigo, es decir, no se lo utiliza como instrucciones
del programa, adems toda la documentacin esta de color rojo.


Cdigo del Programa 2
'botn "calcular parmetros"
'Esta subrutina calcula los parmetros iniciales para iniciar el proceso
'de simulacin, realiza el clculo interno de parmetros
Private Sub cmdCalcularParametros_Click()
On Error GoTo puntoerror 'Si se produce un error, se ejecuta el cdigo indicado
Saturacion =False 'Se inicializan los parmetros iniciales
cmdSimula.Enabled =True 'Habilita el botn Simulacin
cmdReiniciar.Enabled =True 'Habilita el botn Reiniciar
mnuSimulaRed.Enabled =True 'Habilita la opcin de inicio de simulacin de la barra de herramientas
cmdDetener.Enabled =False 'Deshabilita el botn de Detener
mnuMostResul.Enabled =False 'Deshabilita la opcin de visualizacin de resultados
'Declaracin de variables
Dim Temp As Double
Dim Temp1 As Double
Dim Temp2 As Double
Dim Temp3 As Double
Dim Temp4 As Double
Dim Temp5 As Double
Dim i As Integer
Dim j As Double
Dim Factor_Mayor As Double
'se inicializan los mdulos y se cargan los valores iniciales
Temp =0
Temp1 =0
Temp2 =0
Temp3 =0
Temp4 =0
Temp5 =0
Retardo_Total_Red =0
Traf_Int_Total =0
Retardo_Vacio =0
Factor_Mayor =0
Num_Abonados_Total =0
Num_Abonados_Total =0
Capacidad_Total_Enlaces =0
'Encero todos los valores en cada nodo y dems parmetros que lo requieren
For i =1 To Num_Nodos - 1
Matriz_Nodos(i).Traf_Ext_Nodo =0
Next i
'se calcula el nmero de abonados total en la red
For i =1 To Num_Nodos - 1
Temp =Matriz_Nodos(i).Num_Abonados
Num_Abonados_Total =Num_Abonados_Total +Temp
Next i
'se calcula el trfico que recibe cada nodo
For i =1 To Num_Nodos - 1
Matriz_Nodos(i).Traf_Int_Nodo =0.9 * Matriz_Nodos(i).Num_Abonados * Traf_Abonados_Voz +0.1
* Matriz_Nodos(i).Num_Abonados * Traf_Abonados_Datos
Next i
'se calcula la capacidad total de los enlaces conectados al nodo
For i =1 To Num_Enlaces - 1
Temp1 =Matriz_Enlaces(i).Capacidad_Canal
Capacidad_Total_Enlaces =Capacidad_Total_Enlaces +Temp1
Next i
'se calcula el trfico total estimado que soportar tericamente la red en base
'al nmero de abonados
Cdigo del Programa 3
Traf_Total_Red =0.9 * Num_Abonados_Total * Traf_Abonados_Voz +0.1 * Num_Abonados_Total *
Traf_Abonados_Datos
'se obtiene una capacidad en % para cada enlace
For i =1 To Num_Enlaces - 1
Matriz_Enlaces(i).Capacidad_porcentual =(Matriz_Enlaces(i).Capacidad_Canal) /
(Capacidad_Total_Enlaces)
Next i
'Tericamente se calcula el trfico que soportar cada enlace basndose en su capacidad
For i =1 To Num_Enlaces - 1
Matriz_Enlaces(i).Traf_Canal =Traf_Total_Red * Matriz_Enlaces(i).Capacidad_porcentual
Next i
'se calcula el retardo en cada canal
For i =1 To Num_Enlaces - 1
Matriz_Enlaces(i).Retardo_Canal =1 / (Matriz_Enlaces(i).Flujo_Canal *
Matriz_Enlaces(i).Capacidad_Canal - Matriz_Enlaces(i).Traf_Canal)
Next i
'se calcula el retardo de toda la red en vaco,e s decir, sin carga de trfico aleatorio
For i =1 To Num_Enlaces - 1
Temp2 =(Matriz_Enlaces(i).Traf_Canal / Traf_Total_Red) * Matriz_Enlaces(i).Retardo_Canal
Retardo_Total_Red =Retardo_Total_Red +Temp2
Next i
If Retardo_Total_Red <0 Then
Retardo_Total_Red =0
End If
'se convierte el trfico a bps y se calcula el trfico que es cursado internamente por la red
For i =1 To Num_Enlaces - 1
Matriz_Enlaces(i).Flujo_Bits_Canal =Matriz_Enlaces(i).Traf_Canal / Matriz_Enlaces(i).Flujo_Canal
Next i
For i =1 To Num_Enlaces - 1
Temp3 =Matriz_Enlaces(i).Traf_Canal
Traf_Int_Total =Traf_Int_Total +Temp3
Next i
'se calcula el nmero de saltos promedio de cada mensaje que cursa la red y el retardo que experimenta la
red en estado de reposo
Num_Saltos =Num_Enlaces / Num_Nodos
For i =1 To Num_Enlaces - 1
Temp4 =(Matriz_Enlaces(i).Traf_Canal / Traf_Int_Total) / (Matriz_Enlaces(i).Flujo_Canal *
Matriz_Enlaces(i).Capacidad_Canal)
Retardo_Vacio =Retardo_Vacio +Temp4
Next i
'se determina en que factor o % se est usando un enlace
For i =1 To Num_Enlaces - 1
Matriz_Enlaces(i).Factor_Utilizacin =Matriz_Enlaces(i).Traf_Canal /
(Matriz_Enlaces(i).Capacidad_Canal)
If Matriz_Enlaces(i).Factor_Utilizacin >Factor_Mayor Then
Factor_Mayor =Matriz_Enlaces(i).Factor_Utilizacin
End If
Next i
'se calcula el punto terico en el que la red se satura
Punto_Satura =Traf_Total_Red / Factor_Mayor
'se calcula el trfico que recibe externamente cada nodo
For i =1 To Num_Nodos - 1
If Matriz_Nodos(i).Clase_Nodo =1 Then
For j =1 To Matriz_Nodos(i).Num_Enlaces_Nodo
'solo se toma en cuenta a los enlaces de llegada al nodo porque slo ellos
'proporcionan trfico de informacin
Cdigo del Programa 4
If Matriz_Nodos(i).lee1(j) =1 Then 'comprueba que sean de llegada
Temp5 =0.7 * Matriz_Enlaces(Matriz_Nodos(i).lee(j)).Traf_Canal
End If
If Matriz_Nodos(i).lee1(j) =0 Then
Temp5 =0
End If
Matriz_Nodos(i).Traf_Ext_Nodo =Matriz_Nodos(i).Traf_Ext_Nodo +Temp5
Next j
End If
'dependiendo si es un nodo principal o secundario se calculan los valores correspondientes
If Matriz_Nodos(i).Clase_Nodo =2 Then
For j =1 To Matriz_Nodos(i).Num_Enlaces_Nodo
If Matriz_Nodos(i).lee1(j) =1 Then
Temp5 =0.3 * Matriz_Enlaces(Matriz_Nodos(i).lee(j)).Traf_Canal
End If
If Matriz_Nodos(i).lee1(j) =0 Then
Temp5 =0
End If
Matriz_Nodos(i).Traf_Ext_Nodo =Matriz_Nodos(i).Traf_Ext_Nodo +Temp5
Next j
End If
Next i
'se actualizan los valores de simulacin y se muestran en la pantalla
TxtNumAbonTot.Text =Num_Abonados_Total
TxtNumNodos.Text =Num_Nodos - 1
TxtNumEnlaces.Text =Num_Enlaces - 1
TxtTraTotRed.Text =Traf_Total_Red
TxtRetTotRed.Text =Retardo_Total_Red
TxtTrafIntTot.Text =Traf_Int_Total
TxtNumSaltos.Text =Num_Saltos
TxtRetVacio.Text =Retardo_Vacio
TxtPuntoSatur.Text =Punto_Satura
TxtCapTotEnl.Text =Capacidad_Total_Enlaces
'se emplea el algoritmo de Gerla para encontrar una distribucin del trfico
'que reduzca el retardo total de la red
AlgoritmoGerla
Exit Sub 'Se emplea para que salga de la subrutina y no ejecute el procedimiento
'de error en el funcionamiento normal
puntoerror: 'cdigo que se ejecuta al producirse un error
MsgBox "No se ha abierto o creado ninguna aplicacin"
cmdSimula.Enabled =False
cmdReiniciar.Enabled =False
End Sub
Private Sub cmdCreaEnlace_Click()
'crea una nueva instancia del objeto enlace
'crea un nuevo enlace con todos sus parmetros
Set Matriz_Enlaces(Num_Enlaces) =New ClsEnlace
'se declaran las variables necesarias
Dim a As Double
Dim b As Double
'se indica los puntos de origen y destino de los enlaces
Matriz_Enlaces(Num_Enlaces).Enlace_Activo =1 'indica que el elemento est activo
Matriz_Enlaces(Num_Enlaces).Nodo_Origen =EnlOrg
Matriz_Enlaces(Num_Enlaces).Nodo_Destino =EnlDest
'toma los valores seleccionados para dibujar el enlace
Matriz_Enlaces(Num_Enlaces).X1 =X1lin
Cdigo del Programa 5
Matriz_Enlaces(Num_Enlaces).X2 =X2lin
Matriz_Enlaces(Num_Enlaces).Y1 =Y1lin
Matriz_Enlaces(Num_Enlaces).Y2 =Y2lin
'calcula el punto medio del enlace para indicar la direccin del enlace
Xmed =(Matriz_Enlaces(Num_Enlaces).X1 +Matriz_Enlaces(Num_Enlaces).X2) / 2
Ymed =(Matriz_Enlaces(Num_Enlaces).Y1 +Matriz_Enlaces(Num_Enlaces).Y2) / 2
'se determina la probabilidad de conexin o de empleo de los enlaces
'en base a que tipo de nodos est enlazando
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =1 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =1 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.3
End If
End If
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =1 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =2 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.7
End If
End If
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =2 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =1 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.7
End If
End If
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =2 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =2 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.7
End If
End If
'se muestra el formulario de ingreso de parmetros necesarios para el nodo
frmDatosEnlaces.Show 1
'se cargan estos valores a sus propiedades correspondientes de cada enlace
Matriz_Enlaces(Num_Enlaces).AnchodeBanda =AnchoBanda
Matriz_Enlaces(Num_Enlaces).Capacidad_Canal =CapEnl * AnchoBanda
Matriz_Enlaces(Num_Enlaces).CapacidadMod =CapEnl
Matriz_Enlaces(Num_Enlaces).Tipo_tx =TipoTx
'se seleccina el tipo e Tx y su probabilidad de error
Select Case Matriz_Enlaces(Num_Enlaces).Tipo_tx
'ENLACE RADIO DIGITAL
Case 1
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 2
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 3
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 4
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 5
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 6
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 7
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 8
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 9
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Cdigo del Programa 6
'ENLACE SATELITAL
Case 10
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 11
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 12
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 13
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 14
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 15
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 16
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 17
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 18
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
'ENLACE DE FIBRA OPTICA
Case 19
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 20
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 21
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 22
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
Case 23
Matriz_Enlaces(Num_Enlaces).Prob_Error =0.000001
End Select
Matriz_Enlaces(Num_Enlaces).Flujo_Canal =1
'se actualiza la matriz que guarda el estado y localizacin de cada elemento de la red
a =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).guarda(Matriz_Nodos(Matriz_Enlaces(Num_E
nlaces).Nodo_Origen).Num_Canal, Num_Enlaces, 0)
b =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).guarda(Matriz_Nodos(Matriz_Enlaces(Num_
Enlaces).Nodo_Destino).Num_Canal, Num_Enlaces, 1)
'incremento un contador de enlaces en cada nodo que interviene el enlace creado
'y se actualiza la matriz de la conexin de nodos y enlaces en cada nodo
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Num_Canal =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Num_Canal +1
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Num_Canal =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Num_Canal +1
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Num_Enlaces_Nodo =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Num_Enlaces_Nodo +1
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Num_Enlaces_Nodo =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Num_Enlaces_Nodo +1
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Num_Enlaces_Llegada =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Num_Enlaces_Llegada +1
Num_Enlaces =Num_Enlaces +1
End Sub
Private Sub cmdCreaNodo_Click()
'se crea una nueva instancia o un nodo nuevo
Set Matriz_Nodos(Num_Nodos) =New ClsNodo
Cdigo del Programa 7
Matriz_Nodos(Num_Nodos).Nodo_Activo =1 'quiere decir que est activo, 0 =inactivo
'Se carga el tipo de nodo principal o secundario
Matriz_Nodos(Num_Nodos).Clase_Nodo =Principal
'indica el nmero de canales o enlaces que posee el nodo
Matriz_Nodos(Num_Nodos).Num_Canal =1
'muestra el formulario de ingreso de parmetros para el nodo y los carga en cada propiedad respectiva
frmDatosNodos.Show 1
'carga los valores ingresados en cada nodo
Matriz_Nodos(Num_Nodos).Capacidad_Nodo =CapNodo
Matriz_Nodos(Num_Nodos).Num_Abonados =NumAbon
Matriz_Nodos(Num_Nodos).Num_Nodo =Num_Nodos
Matriz_Nodos(Num_Nodos).X1 =X1nod
Matriz_Nodos(Num_Nodos).Y1 =Y1nod
Num_Nodos =Num_Nodos +1
End Sub
'Subrutina que detiene el proceso de simulacin
Private Sub cmdDetener_Click()
Detener =True 'se activa el indicador de detencin
cmdReiniciar.Enabled =True 'habilita el botn Reiniciar
End Sub
'Esta rutina reinicializa la pantalla luego de haber iniciado ya el proceso de simulacin
Private Sub cmdReiniciar_Click()
Saturacion =False 'se resetea el indicador de saturacin a su estado inactivo
mnuGuardar1_Click 'guarda temporalmente el estado de la red
mnuAbrir1_Click 'abre la red guardada en el paso anterior
cmdSimula.Enabled =False 'deshabilita el proceso de simulacin
cmdDetener.Enabled =False 'deshabilita el botn Detener
mnuMostResul.Enabled =False 'Deshabilita la visualizacin de resultados
End Sub
'Esta rutina realiza realiza la simulacin y muestreo de la red
Private Sub cmdSimula_Click()
Saturacion =False 'se inicia con el indicador de saturacin deshabilitado
cmdDetener.Enabled =True 'habilito la detencin del proceso
cmdReiniciar.Enabled =False 'Se deshabilita el botn Reiniciar
mnuMostResul.Enabled =True 'Se activa la visualizacin de resultados
Detener =False 'Inicia con el indicador de detencin desactivado
'inicio el proceso de simulacin
While Detener =False 'continua el proceso hasta que se presione Detener
Simulacin_Muestreo 'llamo al procedimiento que realiza la simulacin y el muestreo de la red
'Se actualizan los valores de simulacin y se muestran los resultados
TxtNumAbonTot.Text =Num_Abonados_Total
TxtNumNodos.Text =Num_Nodos - 1
TxtNumEnlaces.Text =Num_Enlaces - 1
TxtTraTotRed.Text =Traf_Total_Red
TxtRetTotRed.Text =Retardo_Total_Red
TxtTrafIntTot.Text =Traf_Int_Total
TxtNumSaltos.Text =Num_Saltos
TxtRetVacio.Text =Retardo_Vacio
TxtPuntoSatur.Text =Punto_Satura
TxtCapTotEnl.Text =Capacidad_Total_Enlaces
DoEvents 'indica que se pueden producitr otros eventos mientras se realiza la simulacin
Wend 'termina el bucle de simulacin
End Sub
'subrutina de cargado del formulario principal y parmetros inciales
Private Sub Form_Load()
'se inicializan los mdulos y solo se habilitan los necesarios (botones
Cdigo del Programa 8
'y comandos del men de herramientas)
Sale =True
cmdCalcularParametros.Enabled =False
mnuCalculaParametros.Enabled =False
cmdReiniciar.Enabled =False
cmdSimula.Enabled =False
mnuSimulaRed.Enabled =False
cmdDetener.Enabled =False
OptEjecucion.Enabled =False
OptNodp.Enabled =False
OptNodo.Enabled =False
OptEnlace.Enabled =False
OptSel.Enabled =False
mnuMover.Enabled =False
OptBorrar.Enabled =False
mnuBorrar.Enabled =False
OptCambiar.Enabled =False
mnuModPar.Enabled =False
optCambProb.Enabled =False
mnuCambProb.Enabled =False
mnuMostResul.Enabled =False
Num_Nodos =1
Num_Enlaces =1
'se cargan los valores constantes de los parmetros de simulacin y visualizacin
Traf_Abonados_Voz =11 'valor de trfico promedio de un abonado de voz
Traf_Abonados_Datos =110 '3.5 Kbps es el trfico promedio de un abonado de datos con mensajes deuna
longitud promedio de 32 bits
Valor_Error =0.0000000002 'valor promedio de error (valor aceptable)
NO =4.002E-21
ContClick =0
Me.Width =15105 'valores del tamao de la ventana del programa
Me.Height =10170
Me.Left =500
Me.Top =10
End Sub
Public Sub AlgoritmoGerla()
'esta subrutina realiza una redistribucin del trfico en la red para
'disminuir el retardo de los mensajes que cursan la red
'declaracin de variables e inicializacin de las mismas
Dim n As Integer
Dim valerror As Double
Dim Temp1 As Double
Dim Temp2 As Double
Dim Temp3 As Double
Dim Sensib_baja
Dim a As Double
Dim i As Integer
Dim contador As Integer
Dim contador1 As Integer
contador =0
contador1 =0
valerror =1
Temp1 =0
Temp2 =0
Temp3 =0
Sensib_baja =0.000000000000001
Cdigo del Programa 9
n =0
Tasa_Inc_Costos =0
Tasa_Costos_Nueva =0
'se ejecuta este cdigo mientras se alcance un valor bajo de error
While valerror >Valor_Error
contador1 =contador1 +1
'se calcula la sensibilidad para cada enlace y la tasa incremental de costos
For i =1 To Num_Enlaces - 1
Matriz_Enlaces(i).Sensib_Canal =Matriz_Enlaces(i).Capacidad_Canal / (Traf_Total_Red *
(Matriz_Enlaces(i).Capacidad_Canal - Matriz_Enlaces(i).Flujo_Bits_Canal) ^2)
Next i
For i =1 To Num_Enlaces - 1
Temp1 =Matriz_Enlaces(i).Sensib_Canal * Matriz_Enlaces(i).Flujo_Bits_Canal
Tasa_Inc_Costos =Tasa_Inc_Costos +Temp1
Next i
'para los enlaces con baja sensibilidad se aumenta la probabilidad de transmisin
'debido a que la mtrica del canal es pequea
'se calcula una nueva tasa de costos con las nuevas probabilidades
For i =1 To Num_Enlaces - 1
If Matriz_Enlaces(i).Sensib_Canal <Sensib_baja Then
Matriz_Enlaces(i).Capacidad_porcentual =1.05 * Matriz_Enlaces(i).Capacidad_porcentual
End If
'se calculan nuevos trficos de canales , flujso nuevos y tasa de costos nueva
Matriz_Enlaces(i).Traf_Canal_Nuevo =Traf_Total_Red * Matriz_Enlaces(i).Capacidad_porcentual
Matriz_Enlaces(i).Flujo_Bits_Nuevo =Matriz_Enlaces(i).Traf_Canal_Nuevo /
Matriz_Enlaces(i).Flujo_Canal
Temp2 =Matriz_Enlaces(i).Sensib_Canal * Matriz_Enlaces(i).Flujo_Bits_Nuevo
Tasa_Costos_Nueva =Tasa_Costos_Nueva +Temp2
Next i
'se valora el error
valerror =Tasa_Inc_Costos - Tasa_Costos_Nueva
'se verifica si el error es aceptable en funcin de la tasa de costos
If Tasa_Inc_Costos >Tasa_Costos_Nueva Then
If valerror <Valor_Error Then 'si el error es aceptable se cargan los nuevos valores
For i =1 To Num_Enlaces - 1
Matriz_Enlaces(i).Flujo_Bits_Canal =Matriz_Enlaces(i).Flujo_Bits_Nuevo
Matriz_Enlaces(i).Traf_Canal =Matriz_Enlaces(i).Flujo_Bits_Canal *
Matriz_Enlaces(i).Flujo_Canal
Next i
' sale del algoritmo
End If
End If
If valerror >Valor_Error Then
Retardo_Nuevo_Red =10000 'forzo a la red a encontrar un valor bajo de retardo
While Retardo_Nuevo_Red >Retardo_Total_Red
contador =contador +1
Randomize 'genero un nmero aleatorio que modifique el trfico en la red
a =1 * Rnd
'verifico que con los nuevos valores disminuya el retardo total en la red
For i =1 To Num_Enlaces - 1
'con el valor aleatorio de a verifico una disminucin del retardo
Matriz_Enlaces(i).Flujo_Bits_Canal =(1 - a) * Matriz_Enlaces(i).Flujo_Bits_Canal +
Matriz_Enlaces(i).Flujo_Bits_Nuevo
Matriz_Enlaces(i).Traf_Canal =Matriz_Enlaces(i).Flujo_Bits_Canal /
Matriz_Enlaces(i).Flujo_Canal
Cdigo del Programa 10
Matriz_Enlaces(i).Retardo_Canal =1 / (Matriz_Enlaces(i).Flujo_Canal *
Matriz_Enlaces(i).Capacidad_Canal - Matriz_Enlaces(i).Traf_Canal)
Next i
'se calcula el nuevo retardo de la red
For i =1 To Num_Enlaces - 1
Temp3 =(Matriz_Enlaces(i).Traf_Canal / Traf_Total_Red) * Matriz_Enlaces(i).Retardo_Canal
Retardo_Nuevo_Red =Retardo_Nuevo_Red +Temp3
Next i
'si no se encuentra un valor que mejore el retardo en 1000 iteraciones
'se forza al algoritmo a salir con los valroes iniciales
If contador >1000 Then
Retardo_Nuevo_Red =0
End If
Wend
'actualizo los valores de red nuevos encontrados con este algoritmo
Retardo_Total_Red =Retardo_Nuevo_Red
If Retardo_Total_Red <0 Then
Retardo_Total_Red =0
End If
End If
If contador >1000 Then
valerror =Valor_Error
End If
Wend
End Sub
Public Sub Simulacin_Muestreo()
'esta subrutina realiza un muestreo aleatorio del trfico e inicia la simulacin
'se declaran e inicializan las variables
Dim Sensib_Menor As Double
Dim Temp As Double
Dim Temp2 As Double
Dim Temp3 As Double
Dim Temp4 As Double
Temp =0
Temp2 =0
Temp3 =0
Temp4 =0
Retardo_Total_Red =0
Traf_Int_Total =0
Sensib_Menor =5000000
Dim i As Integer
Dim j As Double
Dim numealeat As Double
For i =1 To Num_Enlaces - 1 'para todos los enlaces de la red
'genero un nmeo aleatorio para el muestreo
Matriz_Enlaces(i).Num_Aleat =Matriz_Enlaces(i).GenAleat
'si est dentro de la probabilidad de conexin que tiene el enlace
'se envia el mensaje, de lo contrario no
If Matriz_Enlaces(i).Num_Aleat >Matriz_Enlaces(i).Prob_Conexin Then
Matriz_Enlaces(i).Num_Aleat =0 'no se envia el mensaje
End If
If Matriz_Enlaces(i).Num_Aleat <=Matriz_Enlaces(i).Prob_Conexin Then
Matriz_Enlaces(i).Num_Aleat =Matriz_Enlaces(i).GenAleat 'si se envia
End If
'se realiza una aproximacin a una distribucin exponencial
'ya que esta es la que mejor representa el comportamiento del trfico
Cdigo del Programa 11
Matriz_Enlaces(i).Num_Exp_Aleat =Log(-1 / (Matriz_Enlaces(i).Num_Aleat - 1)) /
Matriz_Enlaces(i).Flujo_Canal
'se modifica el trfico, retardo y factor de utilizacin del enlace
Matriz_Enlaces(i).Traf_Canal =Matriz_Enlaces(i).Num_Exp_Aleat *
Matriz_Enlaces(i).Capacidad_Canal
Matriz_Enlaces(i).Retardo_Canal =1 / (Matriz_Enlaces(i).Flujo_Canal *
Matriz_Enlaces(i).Capacidad_Canal - Matriz_Enlaces(i).Traf_Canal)
Matriz_Enlaces(i).Factor_Utilizacin =Matriz_Enlaces(i).Traf_Canal /
(Matriz_Enlaces(i).Capacidad_Canal)
Next i
'se modifica el trfico de la red de acuerdo a la probabilidad de error de cada enlace
For i =1 To Num_Enlaces - 1
Matriz_Enlaces(i).Traf_Canal =Matriz_Enlaces(i).Traf_Canal * Matriz_Enlaces(i).Prob_Error +
Matriz_Enlaces(i).Traf_Canal
Next i
For i =1 To Num_Nodos - 1
'se calculan los flujos de bits internos y externos en bps
Matriz_Nodos(i).Flujo_bps_Ext =Matriz_Nodos(i).Traf_Ext_Nodo / 1
Matriz_Nodos(i).Flujo_bps_Int =Matriz_Nodos(i).Traf_Int_Nodo / 1
For j =1 To Matriz_Nodos(i).Num_Enlaces_Nodo
If Matriz_Nodos(i).lee1(j) =1 Then
Temp =Matriz_Enlaces(Matriz_Nodos(i).lee(j)).Capacidad_Canal
End If
If Matriz_Nodos(i).lee1(j) =0 Then
Temp =0
End If
'se consideran solo los enlaces de llegada al nodo porque estos son los que aportan con trfico
Matriz_Nodos(i).Cap_Tot_Enlaces_Nodo =Matriz_Nodos(i).Cap_Tot_Enlaces_Nodo +Temp
Next j
Matriz_Nodos(i).Flujo_Llegada_Nodo =Matriz_Nodos(i).Flujo_bps_Ext +
Matriz_Nodos(i).Flujo_bps_Int
'el % de serv solo se considera el nmero de enlaces de llegada en lugar del num_enlaces_nodo
Matriz_Nodos(i).Porcentaje_Serv_Nodo =1
'se calcula la tasa de llegada de mensajes al nodo
Matriz_Nodos(i).Pocentaje_Llegada_Nodo =Matriz_Nodos(i).Flujo_Llegada_Nodo /
Matriz_Nodos(i).Capacidad_Nodo
'se calcula el retardo que genera el nodo al procesar los mensajes
Matriz_Nodos(i).Retardo_Cola =Matriz_Nodos(i).Cola_Espera(Matriz_Nodos(i).Flujo_Llegada_Nodo,
Matriz_Nodos(i).Porcentaje_Serv_Nodo, Matriz_Nodos(i).Num_Nodo)
If chkRetardo.Value =1 Then 'se activa slo si est habilitado el control de retardo
If Matriz_Nodos(i).Retardo_Cola >3 Then
Matriz_Nodos(i).Capacidad_Nodo =1.1 * Matriz_Nodos(i).Capacidad_Nodo
End If
End If
For j =1 To Matriz_Nodos(i).Num_Enlaces_Nodo
'solo para los enlaces de salida del nodo se aumenta a su retardo el retardo introducido por el nodo
If Matriz_Nodos(i).lee1(j) =0 Then
Matriz_Enlaces(Matriz_Nodos(i).lee(j)).Retardo_Canal =
Matriz_Enlaces(Matriz_Nodos(i).lee(j)).Retardo_Canal +Matriz_Nodos(i).Retardo_Cola
End If
If Matriz_Nodos(i).lee1(j) =1 Then
Matriz_Enlaces(Matriz_Nodos(i).lee(j)).Retardo_Canal =
Matriz_Enlaces(Matriz_Nodos(i).lee(j)).Retardo_Canal
End If
Next j
Next i
Cdigo del Programa 12
'se calcula el trfico, retardo, y trfico interno total de la red con los nuevos parmetros
For i =1 To Num_Enlaces - 1
Temp3 =(Matriz_Enlaces(i).Traf_Canal / Traf_Total_Red) * Matriz_Enlaces(i).Retardo_Canal
Retardo_Total_Red =Retardo_Total_Red +Temp3
Next i
If Retardo_Total_Red <0 Then
Retardo_Total_Red =0
End If
For i =1 To Num_Enlaces - 1
Temp4 =Matriz_Enlaces(i).Traf_Canal
Traf_Int_Total =Traf_Int_Total +Temp4
Next i
'control de congestin
'disminuyo el trfico en enlaces saturados o mayormente utilizados
If chkControl.Value =1 Then 'slo si est habilitado el control de congestin
For i =1 To Num_Enlaces - 1 'si hay saturacin se indica con una alarma visual
If Matriz_Enlaces(i).Flujo_Bits_Canal >=0.7 * Matriz_Enlaces(i).Capacidad_Canal Then
Matriz_Enlaces(i).Prob_Conexin =0.9 * Matriz_Enlaces(i).Prob_Conexin
PctMain.Line (Matriz_Enlaces(i).X1, Matriz_Enlaces(i).Y1)-(Matriz_Enlaces(i).X2,
Matriz_Enlaces(i).Y2), &HFF&
Saturacion =True 'indica que hay saturacin en la red
End If
Next i
End If
If chkControl.Value =1 Then 'si hay control de congestin se habilita esta rutina
For i =1 To Num_Nodos - 1 'si hay saturacin se indica con una alarma visual
If Matriz_Nodos(i).Pocentaje_Llegada_Nodo >0.7 * Matriz_Nodos(i).Porcentaje_Serv_Nodo Then
PctMain.PaintPicture pctSel, Matriz_Nodos(i).X1, Matriz_Nodos(i).Y1, 500, 500
Matriz_Nodos(i).Capacidad_Nodo =1.4 * Matriz_Nodos(i).Capacidad_Nodo
Saturacion =True 'indica que hay saturacin en la red
For j =1 To Matriz_Nodos(i).Num_Enlaces_Nodo
If Matriz_Nodos(i).lee1(j) =1 Then
Matriz_Enlaces(Matriz_Nodos(i).lee(j)).Prob_Conexin =0.9 *
Matriz_Enlaces(Matriz_Nodos(i).lee(j)).Prob_Conexin
End If
Next j
End If
Next i
End If
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'este procedimiento limpia la pantalla para poder crear una nueva aplicacin
If Sale =True Then
If Num_Nodos =1 Then 'si no se han creado nodos o ni enlaces, limpia la pantalla
If Num_Enlaces =1 Then
End 'termina la subrutina si no hay una red dibujada
End If
End If
If Num_Nodos >1 Then 'comprueba si se ha creado por lo menos un nodo
frmGuardarTrabajo.Show 1 'muestra el formulario de guardar trabajo
If Guardar =True Then 'prueba si se quiere o no guardar el trabajo
mnuGuardar_Click 'llama al procedimiento para guardar el trabajo
End 'sale de la subrutina luego de haber guardado el trabajo
End If
If Guardar =False Then
End 'sale de la subrutina sin guardar el trabajo
Cdigo del Programa 13
End If
End If
If Num_Enlaces >1 Then 'comprueba si se ha creado por lo menos un enlace
frmGuardarTrabajo.Show 1 'muestra el formulario de guardar trabajo
If Guardar =True Then 'prueba si se quiere o no guardar el trabajo
mnuGuardar_Click 'llama al procedimiento para guardar el trabajo
End 'sale de la subrutina
End If
If Guardar =False Then
End 'sale de la subrutina
End If
End If
End If
End Sub
'esta subrutina abre un archivo que contiene una red y la carga en el programa
Private Sub mnuAbrir_Click()
Cancela =False
On Error GoTo ErrorPoint1 ' si se produce un error se ejecuta un procedimiento
'que est al final de esta subrutina
mnuNuevo_Click 'con esto se comprueba si hay un trabajo existente, y si lo hay,
'se pregunta si se quiere guardar el mismo en un archivo
OptDiseo.Enabled =True
OptEjecucion.Enabled =True
cmdCalcularParametros.Enabled =False
mnuCalculaParametros.Enabled =False
cmdReiniciar.Enabled =False
cmdSimula.Enabled =False
mnuSimulaRed.Enabled =False
cmdDetener.Enabled =False
OptNodp.Enabled =False
OptNodo.Enabled =False
OptEnlace.Enabled =False
OptSel.Enabled =False
mnuMover.Enabled =False
OptBorrar.Enabled =False
mnuBorrar.Enabled =False
OptCambiar.Enabled =False
mnuModPar.Enabled =False
mnuMostResul.Enabled =False
optCambProb.Enabled =False
mnuCambProb.Enabled =False
'muestra el formulario para guardar el archivo
frmGuardar.Show 1
'se declaran las variables
If Cancela =False Then
Dim j As Double
Dim a As Variant
Dim prueba As Integer
Num_Nodos =1
Num_Enlaces =1
Open RUTA For Input As #1 ' Abre el archivo.
Do While Not EOF(1) ' Repite el bucle hasta el final del archivo.
prueba =1
j =1
Line Input #1, LineaTexto ' Lee el carcter en la variable.
Line Input #1, LineaTexto1 ' Lee el carcter en la variable.
Cdigo del Programa 14
If LineaTexto ="@" Then 'idicacin de inicio de un nuevo nodo
'creo un nuevo nodo
Set Matriz_Nodos(Num_Nodos) =New ClsNodo
Matriz_Nodos(Num_Nodos).Nodo_Activo =1 'quiere decir que est activo, 0 =inactivo
Matriz_Nodos(Num_Nodos).Num_Nodo =Num_Nodos
Matriz_Nodos(Num_Nodos).Num_Canal =1
End If
'leo del archivo los valores de los parmetros y los cargo en el nodo
If LineaTexto ="CapacidadNodo" Then
Matriz_Nodos(Num_Nodos).Capacidad_Nodo =LineaTexto1
End If
If LineaTexto ="ClaseNodo" Then
Matriz_Nodos(Num_Nodos).Clase_Nodo =LineaTexto1
End If
If LineaTexto ="NumAbonados" Then
Matriz_Nodos(Num_Nodos).Num_Abonados =LineaTexto1
End If
If LineaTexto ="#" Then 'indica que se va aguardar la matriz
' aqui se guarda la matriz de enlaces del nodo
While prueba =1
Line Input #1, LineaTexto ' Lee el carcter en la variable.
Line Input #1, LineaTexto1 ' Lee el carcter en la variable.
If LineaTexto <>"" Then 'comprueba el fin de los datos de la matriz
'guarda el dato en la matriz y actualiza valores
a =Matriz_Nodos(Num_Nodos).guarda(j, LineaTexto, LineaTexto1)
Matriz_Nodos(Num_Nodos).Num_Enlaces_Nodo =
Matriz_Nodos(Num_Nodos).Num_Enlaces_Nodo +1
If LineaTexto1 =1 Then
Matriz_Nodos(Num_Nodos).Num_Enlaces_Llegada =
Matriz_Nodos(Num_Nodos).Num_Enlaces_Llegada +1
End If
j =j +1
End If
If LineaTexto ="" Then ' =Alt +789
prueba =2 'sale del procedimiento de guardar la matriz del nodo
End If
Wend
End If
If LineaTexto ="X1" Then
Matriz_Nodos(Num_Nodos).X1 =LineaTexto1
End If
If LineaTexto ="Y1" Then
Matriz_Nodos(Num_Nodos).Y1 =LineaTexto1
End If
If LineaTexto ="%" Then 'comprueba el fin de datos del nodo y dibuja el nodo correspondiente
If Matriz_Nodos(Num_Nodos).Clase_Nodo =1 Then
PctMain.PaintPicture PctNodoP, Matriz_Nodos(Num_Nodos).X1,
Matriz_Nodos(Num_Nodos).Y1, 500, 500
End If
If Matriz_Nodos(Num_Nodos).Clase_Nodo =2 Then
PctMain.PaintPicture PctNodo, Matriz_Nodos(Num_Nodos).X1,
Matriz_Nodos(Num_Nodos).Y1, 500, 500
End If
Num_Nodos =Num_Nodos +1
End If
If LineaTexto ="/" Then 'indica el inicio de los datos de los enlaces
Cdigo del Programa 15
'crea un nuevo enlace
Set Matriz_Enlaces(Num_Enlaces) =New ClsEnlace
Matriz_Enlaces(Num_Enlaces).Enlace_Activo =1
End If
'se lee del archivo los datos y se cargan en los enlaces
If LineaTexto ="CapacidadCanal" Then
Matriz_Enlaces(Num_Enlaces).Capacidad_Canal =LineaTexto1
End If
If LineaTexto ="CapacidadModul" Then
Matriz_Enlaces(Num_Enlaces).CapacidadMod =LineaTexto1
End If
If LineaTexto ="AnchodeBanda" Then
Matriz_Enlaces(Num_Enlaces).AnchodeBanda =LineaTexto1
End If
If LineaTexto ="FlujoCanal" Then
Matriz_Enlaces(Num_Enlaces).Flujo_Canal =LineaTexto1
End If
If LineaTexto ="NodoDestino" Then
Matriz_Enlaces(Num_Enlaces).Nodo_Destino =LineaTexto1
End If
If LineaTexto ="NodoOrigen" Then
Matriz_Enlaces(Num_Enlaces).Nodo_Origen =LineaTexto1
End If
If LineaTexto ="ProbConexin" Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =LineaTexto1
End If
If LineaTexto ="ProbError" Then
Matriz_Enlaces(Num_Enlaces).Prob_Error =LineaTexto1
End If
If LineaTexto ="TipoTx" Then
Matriz_Enlaces(Num_Enlaces).Tipo_tx =LineaTexto1
End If
If LineaTexto ="xX1" Then
Matriz_Enlaces(Num_Enlaces).X1 =LineaTexto1
End If
If LineaTexto ="xX2" Then
Matriz_Enlaces(Num_Enlaces).X2 =LineaTexto1
End If
If LineaTexto ="yY1" Then
Matriz_Enlaces(Num_Enlaces).Y1 =LineaTexto1
End If
If LineaTexto ="yY2" Then
Matriz_Enlaces(Num_Enlaces).Y2 =LineaTexto1
End If
If LineaTexto ="!" Then 'comprueba el fin de los datos de los enlaces y dibuja el mismo
Xmed =(Matriz_Enlaces(Num_Enlaces).X1 +Matriz_Enlaces(Num_Enlaces).X2) / 2
Ymed =(Matriz_Enlaces(Num_Enlaces).Y1 +Matriz_Enlaces(Num_Enlaces).Y2) / 2
PctMain.Line (Matriz_Enlaces(Num_Enlaces).X1, Matriz_Enlaces(Num_Enlaces).Y1)-(Xmed,
Ymed)
PctMain.Line (Xmed, Ymed)-(Matriz_Enlaces(Num_Enlaces).X2,
Matriz_Enlaces(Num_Enlaces).Y2), &HC0&
'carga valores de construccin del enlace y actualiza datos
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Num_Canal =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Num_Canal +1
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Num_Canal =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Num_Canal +1
Cdigo del Programa 16
'se asigna una probabilidad de conexin al enlace dependiendo de los nodos que enlaza
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =1 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =1 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.3
End If
End If
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =1 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =2 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.7
End If
End If
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =2 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =1 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.7
End If
End If
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =2 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =2 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.7
End If
End If
Num_Enlaces =Num_Enlaces +1
End If
Loop
Close #1 ' Cierra el archivo.
mnuGuardar1_Click
End If
Exit Sub 'sale del procedimiento y evita el cdigo de control de error
ErrorPoint1: 'si se ha producido un error al abrir el archivo, se repite la accin
MsgBox "Se ha producido un error, verifique el nombre del archivo"
Unload frmGuardar 'se descarga del programa el formulario para abrir un archivo
mnuAbrir_Click 'se inicia el proceso nuevamente
End Sub
Private Sub mnuAbrir1_Click()
'esta subrutina abre internamente un archivo que contiene cambios en la red que
'no son definitivos, y se emplea para mover elementos, borrarlos, etc,
'estos cambios se guardan en un archivo temporal PRUEBA1.SIM
'el procedimiento es el mismo que al abrir un archivo con los siguientes cambios:
Dim j As Double
Dim a As Variant
Dim b As Double
Dim c As Double
Dim prueba As Integer
Num_Nodos =1
Num_Enlaces =1
Open "PRUEBA1.SIM" For Input As #1 'siempre abre el mismo archivo
Do While Not EOF(1)
prueba =1
j =1
Line Input #1, LineaTexto
Line Input #1, LineaTexto1
If LineaTexto ="@" Then
Set Matriz_Nodos(Num_Nodos) =New ClsNodo
Matriz_Nodos(Num_Nodos).Nodo_Activo =1
Matriz_Nodos(Num_Nodos).Num_Canal =1
Matriz_Nodos(Num_Nodos).Num_Nodo =Num_Nodos
Cdigo del Programa 17
End If
If LineaTexto ="CapacidadNodo" Then
Matriz_Nodos(Num_Nodos).Capacidad_Nodo =LineaTexto1
End If
If LineaTexto ="ClaseNodo" Then
Matriz_Nodos(Num_Nodos).Clase_Nodo =LineaTexto1
End If
If LineaTexto ="NumAbonados" Then
Matriz_Nodos(Num_Nodos).Num_Abonados =LineaTexto1
End If
If LineaTexto ="#" Then
While prueba =1
Line Input #1, LineaTexto
Line Input #1, LineaTexto1
If LineaTexto <>"" Then
a =Matriz_Nodos(Num_Nodos).guarda(j, LineaTexto, LineaTexto1)
Matriz_Nodos(Num_Nodos).Num_Enlaces_Nodo =
Matriz_Nodos(Num_Nodos).Num_Enlaces_Nodo +1
If LineaTexto1 =1 Then
Matriz_Nodos(Num_Nodos).Num_Enlaces_Llegada =
Matriz_Nodos(Num_Nodos).Num_Enlaces_Llegada +1
End If
j =j +1
End If
If LineaTexto ="" Then
prueba =2
End If
Wend
End If
If LineaTexto ="X1" Then
Matriz_Nodos(Num_Nodos).X1 =LineaTexto1
End If
If LineaTexto ="Y1" Then
Matriz_Nodos(Num_Nodos).Y1 =LineaTexto1
End If
If LineaTexto ="%" Then
If Matriz_Nodos(Num_Nodos).Clase_Nodo =1 Then
PctMain.PaintPicture PctNodoP, Matriz_Nodos(Num_Nodos).X1, Matriz_Nodos(Num_Nodos).Y1,
500, 500
End If
If Matriz_Nodos(Num_Nodos).Clase_Nodo =2 Then
PctMain.PaintPicture PctNodo, Matriz_Nodos(Num_Nodos).X1, Matriz_Nodos(Num_Nodos).Y1,
500, 500
End If
Num_Nodos =Num_Nodos +1
End If
If LineaTexto ="/" Then
Set Matriz_Enlaces(Num_Enlaces) =New ClsEnlace
Matriz_Enlaces(Num_Enlaces).Enlace_Activo =1
End If
If LineaTexto ="CapacidadCanal" Then
Matriz_Enlaces(Num_Enlaces).Capacidad_Canal =LineaTexto1
End If
If LineaTexto ="CapacidadModul" Then
Matriz_Enlaces(Num_Enlaces).CapacidadMod =LineaTexto1
End If
Cdigo del Programa 18
If LineaTexto ="AnchodeBanda" Then
Matriz_Enlaces(Num_Enlaces).AnchodeBanda =LineaTexto1
End If
If LineaTexto ="FlujoCanal" Then
Matriz_Enlaces(Num_Enlaces).Flujo_Canal =LineaTexto1
End If
If LineaTexto ="NodoDestino" Then
Matriz_Enlaces(Num_Enlaces).Nodo_Destino =LineaTexto1
End If
If LineaTexto ="NodoOrigen" Then
Matriz_Enlaces(Num_Enlaces).Nodo_Origen =LineaTexto1
End If
If LineaTexto ="ProbConexin" Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =LineaTexto1
End If
If LineaTexto ="ProbError" Then
Matriz_Enlaces(Num_Enlaces).Prob_Error =LineaTexto1
End If
If LineaTexto ="TipoTx" Then
Matriz_Enlaces(Num_Enlaces).Tipo_tx =LineaTexto1
End If
If LineaTexto ="xX1" Then
Matriz_Enlaces(Num_Enlaces).X1 =LineaTexto1
End If
If LineaTexto ="xX2" Then
Matriz_Enlaces(Num_Enlaces).X2 =LineaTexto1
End If
If LineaTexto ="yY1" Then
Matriz_Enlaces(Num_Enlaces).Y1 =LineaTexto1
End If
If LineaTexto ="yY2" Then
Matriz_Enlaces(Num_Enlaces).Y2 =LineaTexto1
End If
If LineaTexto ="!" Then
Xmed =(Matriz_Enlaces(Num_Enlaces).X1 +Matriz_Enlaces(Num_Enlaces).X2) / 2
Ymed =(Matriz_Enlaces(Num_Enlaces).Y1 +Matriz_Enlaces(Num_Enlaces).Y2) / 2
PctMain.Line (Matriz_Enlaces(Num_Enlaces).X1, Matriz_Enlaces(Num_Enlaces).Y1)-(Xmed,
Ymed)
PctMain.Line (Xmed, Ymed)-(Matriz_Enlaces(Num_Enlaces).X2,
Matriz_Enlaces(Num_Enlaces).Y2), &HC0&
'se guarda en la matriz del nodo los cambios que ha sufrido la configuracin de la red
c =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).guarda(Matriz_Nodos(Matriz_Enlaces(Num_E
nlaces).Nodo_Origen).Num_Canal, Num_Enlaces, 0)
b =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).guarda(Matriz_Nodos(Matriz_Enlaces(Num_
Enlaces).Nodo_Destino).Num_Canal, Num_Enlaces, 1)
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Num_Canal =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Num_Canal +1
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Num_Canal =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Num_Canal +1
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =1 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =1 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.3
End If
End If
Cdigo del Programa 19
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =1 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =2 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.7
End If
End If
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =2 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =1 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.7
End If
End If
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =2 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =2 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.7
End If
End If
Num_Enlaces =Num_Enlaces +1
End If
Loop
Close #1 ' Cierra el archivo.
mnuGuardar1_Click 'se guarda nuevamente la red con todos sus cambios y se vuelve a cargar
mnuAbrir2_Click 'abre un archivo y carga la red ya modificada
End Sub
Private Sub mnuAbrir2_Click()
'este es el procedimiento que abre el archivo que contiene ya todos los cambios y actualizaciones de datos de
la red que se han efectuado, luego de abrir y cargar la red actualizada, el usuario puede o no guardar
definitivamente estos cambios. la diferencia con el procedimiento de abrir es que siempre se abre el mismo
archivo, y con abrir1 es que ya no tiene que guardar y cargar nuevos cambios, lo dems es igual
Dim j As Double
Dim a As Variant
Dim prueba As Integer
Num_Nodos =1
Num_Enlaces =1
Open "PRUEBA1.SIM" For Input As #1
Do While Not EOF(1)
prueba =1
j =1
Line Input #1, LineaTexto
Line Input #1, LineaTexto1
If LineaTexto ="@" Then
Set Matriz_Nodos(Num_Nodos) =New ClsNodo
Matriz_Nodos(Num_Nodos).Nodo_Activo =1
Matriz_Nodos(Num_Nodos).Num_Nodo =Num_Nodos
Matriz_Nodos(Num_Nodos).Num_Canal =1
End If
If LineaTexto ="CapacidadNodo" Then
Matriz_Nodos(Num_Nodos).Capacidad_Nodo =LineaTexto1
End If
If LineaTexto ="ClaseNodo" Then
Matriz_Nodos(Num_Nodos).Clase_Nodo =LineaTexto1
End If
If LineaTexto ="NumAbonados" Then
Matriz_Nodos(Num_Nodos).Num_Abonados =LineaTexto1
End If
If LineaTexto ="#" Then
While prueba =1
Line Input #1, LineaTexto
Cdigo del Programa 20
Line Input #1, LineaTexto1
If LineaTexto <>"" Then
a =Matriz_Nodos(Num_Nodos).guarda(j, LineaTexto, LineaTexto1)
Matriz_Nodos(Num_Nodos).Num_Enlaces_Nodo =
Matriz_Nodos(Num_Nodos).Num_Enlaces_Nodo +1
If LineaTexto1 =1 Then
Matriz_Nodos(Num_Nodos).Num_Enlaces_Llegada =
Matriz_Nodos(Num_Nodos).Num_Enlaces_Llegada +1
End If
j =j +1
End If
If LineaTexto ="" Then
prueba =2
End If
Wend
End If
If LineaTexto ="X1" Then
Matriz_Nodos(Num_Nodos).X1 =LineaTexto1
End If
If LineaTexto ="Y1" Then
Matriz_Nodos(Num_Nodos).Y1 =LineaTexto1
End If
If LineaTexto ="%" Then
If Matriz_Nodos(Num_Nodos).Clase_Nodo =1 Then
PctMain.PaintPicture PctNodoP, Matriz_Nodos(Num_Nodos).X1, Matriz_Nodos(Num_Nodos).Y1,
500, 500
End If
If Matriz_Nodos(Num_Nodos).Clase_Nodo =2 Then
PctMain.PaintPicture PctNodo, Matriz_Nodos(Num_Nodos).X1, Matriz_Nodos(Num_Nodos).Y1,
500, 500
End If
Num_Nodos =Num_Nodos +1
End If
If LineaTexto ="/" Then
Set Matriz_Enlaces(Num_Enlaces) =New ClsEnlace
Matriz_Enlaces(Num_Enlaces).Enlace_Activo =1
End If
If LineaTexto ="CapacidadCanal" Then
Matriz_Enlaces(Num_Enlaces).Capacidad_Canal =LineaTexto1
End If
If LineaTexto ="CapacidadModul" Then
Matriz_Enlaces(Num_Enlaces).CapacidadMod =LineaTexto1
End If
If LineaTexto ="AnchodeBanda" Then
Matriz_Enlaces(Num_Enlaces).AnchodeBanda =LineaTexto1
End If
If LineaTexto ="FlujoCanal" Then
Matriz_Enlaces(Num_Enlaces).Flujo_Canal =LineaTexto1
End If
If LineaTexto ="NodoDestino" Then
Matriz_Enlaces(Num_Enlaces).Nodo_Destino =LineaTexto1
End If
If LineaTexto ="NodoOrigen" Then
Matriz_Enlaces(Num_Enlaces).Nodo_Origen =LineaTexto1
End If
If LineaTexto ="ProbConexin" Then
Cdigo del Programa 21
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =LineaTexto1
End If
If LineaTexto ="ProbError" Then
Matriz_Enlaces(Num_Enlaces).Prob_Error =LineaTexto1
End If
If LineaTexto ="TipoTx" Then
Matriz_Enlaces(Num_Enlaces).Tipo_tx =LineaTexto1
End If
If LineaTexto ="xX1" Then
Matriz_Enlaces(Num_Enlaces).X1 =LineaTexto1
End If
If LineaTexto ="xX2" Then
Matriz_Enlaces(Num_Enlaces).X2 =LineaTexto1
End If
If LineaTexto ="yY1" Then
Matriz_Enlaces(Num_Enlaces).Y1 =LineaTexto1
End If
If LineaTexto ="yY2" Then
Matriz_Enlaces(Num_Enlaces).Y2 =LineaTexto1
End If
If LineaTexto ="!" Then
Xmed =(Matriz_Enlaces(Num_Enlaces).X1 +Matriz_Enlaces(Num_Enlaces).X2) / 2
Ymed =(Matriz_Enlaces(Num_Enlaces).Y1 +Matriz_Enlaces(Num_Enlaces).Y2) / 2
PctMain.Line (Matriz_Enlaces(Num_Enlaces).X1, Matriz_Enlaces(Num_Enlaces).Y1)-(Xmed,
Ymed)
PctMain.Line (Xmed, Ymed)-(Matriz_Enlaces(Num_Enlaces).X2,
Matriz_Enlaces(Num_Enlaces).Y2), &HC0&
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Num_Canal =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Num_Canal +1
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Num_Canal =
Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Num_Canal +1
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =1 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =1 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.3
End If
End If
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =1 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =2 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.7
End If
End If
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =2 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =1 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.7
End If
End If
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Origen).Clase_Nodo =2 Then
If Matriz_Nodos(Matriz_Enlaces(Num_Enlaces).Nodo_Destino).Clase_Nodo =2 Then
Matriz_Enlaces(Num_Enlaces).Prob_Conexin =0.7
End If
End If
Num_Enlaces =Num_Enlaces +1
End If
Loop
Close #1 ' Cierra el archivo.
End Sub
Cdigo del Programa 22
'muestra el formulario de datos del autor cuando se presiona esta opcin en el men Acerca de
Private Sub mnuAcerca_Click()
frmAcerca.Show 1 'muestra el formulario
End Sub
'Activa el procedimiento de borrado de elementos
Private Sub mnuBorrar_Click()
OptBorrar.Value =True 'habilita la opcin de borrado
End Sub
'Activa el clculo de parmetros de la red
Private Sub mnuCalculaParametros_Click()
cmdCalcularParametros_Click 'llama al procedimiento de clculo de parmetros de red
End Sub
'activa el procedimiento de cambio de probabilidad de conexin
Private Sub mnuCambProb_Click()
optCambProb.Value =True 'habilita la opcin de cambio de probabilidad
End Sub
'Cierra la aplicacin
Private Sub mnuCerrar_Click()
Cerrar =True
Salir =False
Nuevo =False
Sale =False
'este procedimiento limpia la pantalla para poder crear una nueva aplicacin
While Cerrar =True
If Num_Nodos =1 Then 'si no se han creado nodos o ni enlaces, limpia la pantalla
If Num_Enlaces =1 Then
Cerrar =False
Unload frmSimulacin 'descarga el formulario simulacin
Unload MDIForm1 'descarga el formulario principal
MDIForm1.Show 'carga el formulario principal
End If
End If
If Num_Nodos >1 Then 'comprueba si se ha creado por lo menos un nodo
frmGuardarTrabajo.Show 1 'muestra el formulario de guardar trabajo
If Guardar =True Then 'prueba si se quiere o no guardar el trabajo
Cerrar =False
mnuGuardar_Click 'llama al procedimiento para guardar el trabajo
Unload frmSimulacin 'descarga el formulario simulacin
Unload MDIForm1 'descarga el formulario principal
MDIForm1.Show 'carga el formulario principal
End If
If Guardar =False Then
Cerrar =False
Unload frmSimulacin 'descarga el formulario simulacin
Unload MDIForm1 'descarga el formulario principal
MDIForm1.Show 'carga el formulario principal
End If
End If
If Num_Enlaces >1 Then 'comprueba si se ha creado por lomenos un enlace
frmGuardarTrabajo.Show 1 'muestra el formulario de guardar trabajo
If Guardar =True Then 'prueba si se quiere o no guardar el trabajo
Cerrar =False
mnuGuardar_Click 'llama al procedimiento para guardar el trabajo
Unload frmSimulacin 'descarga el formulario simulacin
Unload MDIForm1 'descarga el formulario principal
MDIForm1.Show 'carga el formulario principal
Cdigo del Programa 23
End If
If Guardar =False Then
Cerrar =False
Unload frmSimulacin 'descarga el formulario simulacin
Unload MDIForm1 'descarga el formulario principal
MDIForm1.Show 'carga el formulario principal
End If
End If
Wend
Sale =True
End Sub
Private Sub mnuGuardar_Click()
'este procedimiento guarda la red diseada en un archivo .sim que escoge el usuario
Cancela =False
frmGuardar.Show 1 'muestra el formulario para guardar el archivo
'se declaran variables
If Cancela =False Then
Dim fs, f, ts, s
Dim i As Integer
Dim j As Double
Dim a As Double
'se crea el archivo
Set fs =CreateObject("Scripting.FileSystemObject")
fs.CreateTextFile RUTA 'Crear un archivo en el path RUTA
Set f =fs.GetFile(RUTA)
Set ts =f.OpenAsTextStream(2, -2) 'se abre este archivo como texto
'escribe en el archivo todos los parmetros de la red, nodos primero y luego enlaces
For i =1 To Num_Nodos - 1
If Matriz_Nodos(i).Nodo_Activo =1 Then
ts.write "@" & Chr(13) 'indica nuevo nodo
ts.write " " & Chr(13)
ts.write "CapacidadNodo" & Chr(13)
ts.write Matriz_Nodos(i).Capacidad_Nodo & Chr(13)
ts.write "ClaseNodo" & Chr(13)
ts.write Matriz_Nodos(i).Clase_Nodo & Chr(13)
ts.write "NumAbonados" & Chr(13)
ts.write Matriz_Nodos(i).Num_Abonados & Chr(13)
ts.write "NumEnlacesLlegada" & Chr(13)
ts.write Matriz_Nodos(i).Num_Enlaces_Llegada & Chr(13)
ts.write "NumEnlacesNodo" & Chr(13)
ts.write Matriz_Nodos(i).Num_Enlaces_Nodo & Chr(13)
ts.write "#" & Chr(13) 'indica matriz del nodo
ts.write " " & Chr(13)
For j =1 To Matriz_Nodos(i).Num_Enlaces_Nodo
a =Matriz_Nodos(i).lee2(j, 0)
ts.write a & Chr(13)
a =Matriz_Nodos(i).lee2(j, 1)
ts.write a & Chr(13)
Next j
ts.write "" & Chr(13) 'indica el final de la matriz del nodo
ts.write " " & Chr(13)
ts.write "NumNodo" & Chr(13)
ts.write Matriz_Nodos(i).Num_Nodo & Chr(13)
ts.write "X1" & Chr(13)
ts.write Matriz_Nodos(i).X1 & Chr(13)
ts.write "Y1" & Chr(13)
Cdigo del Programa 24
ts.write Matriz_Nodos(i).Y1 & Chr(13)
ts.write "%" & Chr(13) ' fin de datos del nodo
ts.write " " & Chr(13)
End If
Next i
'guarda los datos de los enlaces
For i =1 To Num_Enlaces - 1
If Matriz_Enlaces(i).Enlace_Activo =1 Then
ts.write "/" & Chr(13)
ts.write " " & Chr(13)
ts.write "CapacidadCanal" & Chr(13)
ts.write Matriz_Enlaces(i).Capacidad_Canal & Chr(13)
ts.write "CapacidadModul" & Chr(13)
ts.write Matriz_Enlaces(i).CapacidadMod & Chr(13)
ts.write "AnchodeBanda" & Chr(13)
ts.write Matriz_Enlaces(i).AnchodeBanda & Chr(13)
ts.write "FlujoCanal" & Chr(13)
ts.write Matriz_Enlaces(i).Flujo_Canal & Chr(13)
ts.write "NodoDestino" & Chr(13)
ts.write Matriz_Enlaces(i).Nodo_Destino & Chr(13)
ts.write "NodoOrigen" & Chr(13)
ts.write Matriz_Enlaces(i).Nodo_Origen & Chr(13)
ts.write "ProbConexin" & Chr(13)
ts.write Matriz_Enlaces(i).Prob_Conexin & Chr(13)
ts.write "ProbError" & Chr(13)
ts.write Matriz_Enlaces(i).Prob_Error & Chr(13)
ts.write "TipoTx" & Chr(13)
ts.write Matriz_Enlaces(i).Tipo_tx & Chr(13)
ts.write "xX1" & Chr(13)
ts.write Matriz_Enlaces(i).X1 & Chr(13)
ts.write "xX2" & Chr(13)
ts.write Matriz_Enlaces(i).X2 & Chr(13)
ts.write "yY1" & Chr(13)
ts.write Matriz_Enlaces(i).Y1 & Chr(13)
ts.write "yY2" & Chr(13)
ts.write Matriz_Enlaces(i).Y2 & Chr(13)
ts.write "!" & Chr(13) 'fin de datos del enlace
ts.write " " & Chr(13)
End If
Next i
ts.Close 'cierra el archivo
End If
End Sub
Private Sub mnuGuardar1_Click()
'este procedimiento guarda en el archivo PRUEBA1.SIM los cambios temporales de la red al mover o borrar
elementos. las diferencias con el procedimiento guardar se detallan:
Dim fs, f, ts, s
Dim i As Integer
Dim j As Double
Dim a As Double
Dim contenls As Double
Set fs =CreateObject("Scripting.FileSystemObject")
fs.CreateTextFile "prueba1.sim" 'guarda siempre en el mismo archivo
Set f =fs.GetFile("prueba1.sim")
Set ts =f.OpenAsTextStream(2, -2)
For i =1 To Num_Nodos - 1
Cdigo del Programa 25
If Matriz_Nodos(i).Nodo_Activo =1 Then 'si el nodo ha sido borrado lo ignora
If Matriz_Nodos(i).Num_Enlaces_Nodo <>0 Then
ts.write "@" & Chr(13)
ts.write " " & Chr(13)
ts.write "CapacidadNodo" & Chr(13)
ts.write Matriz_Nodos(i).Capacidad_Nodo & Chr(13)
ts.write "ClaseNodo" & Chr(13)
ts.write Matriz_Nodos(i).Clase_Nodo & Chr(13)
ts.write "NumAbonados" & Chr(13)
ts.write Matriz_Nodos(i).Num_Abonados & Chr(13)
ts.write "NumEnlacesLlegada" & Chr(13)
ts.write Matriz_Nodos(i).Num_Enlaces_Llegada & Chr(13)
ts.write "NumEnlacesNodo" & Chr(13)
ts.write Matriz_Nodos(i).Num_Enlaces_Nodo & Chr(13)
ts.write "#" & Chr(13)
ts.write " " & Chr(13)
For j =1 To Matriz_Nodos(i).Num_Enlaces_Nodo
a =Matriz_Nodos(i).lee2(j, 0)
If a <>100 Then 'si el elemento ha sido borrado, no lo guarda
ts.write a & Chr(13)
a =Matriz_Nodos(i).lee2(j, 1)
ts.write a & Chr(13)
End If
Next j
ts.write "" & Chr(13)
ts.write " " & Chr(13)
ts.write "NumNodo" & Chr(13)
ts.write Matriz_Nodos(i).Num_Nodo & Chr(13)
ts.write "X1" & Chr(13)
ts.write Matriz_Nodos(i).X1 & Chr(13)
ts.write "Y1" & Chr(13)
ts.write Matriz_Nodos(i).Y1 & Chr(13)
ts.write "%" & Chr(13)
ts.write " " & Chr(13)
End If
End If
Next i
For i =1 To Num_Enlaces - 1
If Matriz_Enlaces(i).Enlace_Activo =1 Then 'si el enlace se borr es ignorado
ts.write "/" & Chr(13)
ts.write " " & Chr(13)
ts.write "CapacidadCanal" & Chr(13)
ts.write Matriz_Enlaces(i).CapacidadMod & Chr(13)
ts.write "AnchodeBanda" & Chr(13)
ts.write Matriz_Enlaces(i).AnchodeBanda & Chr(13)
ts.write "CapacidadModul" & Chr(13)
ts.write Matriz_Enlaces(i).CapacidadMod & Chr(13)
ts.write "FlujoCanal" & Chr(13)
ts.write Matriz_Enlaces(i).Flujo_Canal & Chr(13)
ts.write "NodoDestino" & Chr(13)
ts.write Matriz_Enlaces(i).Nodo_Destino & Chr(13)
ts.write "NodoOrigen" & Chr(13)
ts.write Matriz_Enlaces(i).Nodo_Origen & Chr(13)
ts.write "ProbConexin" & Chr(13)
ts.write Matriz_Enlaces(i).Prob_Conexin & Chr(13)
ts.write "ProbError" & Chr(13)
Cdigo del Programa 26
ts.write Matriz_Enlaces(i).Prob_Error & Chr(13)
ts.write "TipoTx" & Chr(13)
ts.write Matriz_Enlaces(i).Tipo_tx & Chr(13)
ts.write "xX1" & Chr(13)
ts.write Matriz_Enlaces(i).X1 & Chr(13)
ts.write "xX2" & Chr(13)
ts.write Matriz_Enlaces(i).X2 & Chr(13)
ts.write "yY1" & Chr(13)
ts.write Matriz_Enlaces(i).Y1 & Chr(13)
ts.write "yY2" & Chr(13)
ts.write Matriz_Enlaces(i).Y2 & Chr(13)
ts.write "!" & Chr(13)
ts.write " " & Chr(13)
End If
Next i
ts.Close
End Sub
'modifica parmetros de los elementos de una red
Private Sub mnuModPar_Click()
OptCambiar.Value =True 'activa la opcin de cambio de parmetros
End Sub
'muestra resultados de simulacin
Private Sub mnuMostResul_Click()
FrmResultados.Show 1 'muestra el formulario de visualizacin de resultados
End Sub
'mueve y reubica elementod de red
Private Sub mnuMover_Click()
OptSel.Value =True 'activa la opcin de mover elementos
End Sub
'limpia la pantalla para una apliacin nueva
Public Sub mnuNuevo_Click()
Nuevo =True
Cerrar =False
Salir =False
Sale =False
'este procedimiento limpia la pantalla para poder crear una nueva aplicacin
While Nuevo =True
If Num_Nodos =1 Then 'si no se han creado nodos o ni enlaces, limpia la pantalla
If Num_Enlaces =1 Then
Nuevo =False
Unload frmSimulacin 'descarga el formulario simulacin
Unload MDIForm1 'descarga el formulario principal
MDIForm1.Show 'carga el formulario principal
End If
End If
If Num_Nodos >1 Then 'comprueba si se ha creado por lo menos un nodo
frmGuardarTrabajo.Show 1 'muestra el formulario de guardar trabajo
If Guardar =True Then 'prueba si se quiere o no guardar el trabajo
Nuevo =False
mnuGuardar_Click 'llama al procedimiento para guardar el trabajo
Unload frmSimulacin 'descarga el formulario simulacin
Unload MDIForm1 'descarga el formulario principal
MDIForm1.Show 'carga el formulario principal
End If
If Guardar =False Then
Nuevo =False
Cdigo del Programa 27
Unload frmSimulacin 'descarga el formulario simulacin
Unload MDIForm1 'descarga el formulario principal
MDIForm1.Show 'carga el formulario principal
End If
End If
If Num_Enlaces >1 Then 'comprueba si se ha creado por lomenos un enlace
frmGuardarTrabajo.Show 1 'muestra el formulario de guardar trabajo
If Guardar =True Then 'prueba si se quiere o no guardar el trabajo
Nuevo =False
mnuGuardar_Click 'llama al procedimiento para guardar el trabajo
Unload frmSimulacin 'descarga el formulario simulacin
Unload MDIForm1 'descarga el formulario principal
MDIForm1.Show 'carga el formulario principal
End If
If Guardar =False Then
Nuevo =False
Unload frmSimulacin 'descarga el formulario simulacin
Unload MDIForm1 'descarga el formulario principal
MDIForm1.Show 'carga el formulario principal
End If
End If
Wend
Sale =True
End Sub
'Sale del programa
Private Sub mnuSalir_Click()
Salir =True
Cerrar =False
Nuevo =False
Sale =True
While Salir =True
If Num_Nodos =1 Then 'si no se han creado nodos o ni enlaces, limpia la pantalla
If Num_Enlaces =1 Then
Salir =False
End 'sale de la rutina
End If
End If
If Num_Nodos >1 Then 'comprueba si se ha creado por lo menos un nodo
frmGuardarTrabajo.Show 1 'muestra el formulario de guardar trabajo
If Guardar =True Then 'prueba si se quiere o no guardar el trabajo
Salir =False
mnuGuardar_Click 'llama al procedimiento para guardar el trabajo
End 'sale de la rutina
End If
If Guardar =False Then
Salir =False
End 'sale de la rutina
End If
End If
If Num_Enlaces >1 Then 'comprueba si se ha creado por lomenos un enlace
frmGuardarTrabajo.Show 1 'muestra el formulario de guardar trabajo
If Guardar =True Then 'prueba si se quiere o no guardar el trabajo
Salir =False
mnuGuardar_Click 'llama al procedimiento para guardar el trabajo
End
End If
Cdigo del Programa 28
If Guardar =False Then
Salir =False
End 'sale de la rutina
End If
End If
Wend
End Sub
'inicia la simulacin de la red
Private Sub mnuSimulaRed_Click()
cmdSimula_Click 'llama al procedimiento de simulacin de la red
End Sub
'procedimiento para borrar
Private Sub OptBorrar_Click()
'se encera la variable para poder iniciar una nueva secuencia
ContClick =0
End Sub
Private Sub OptDiseo_Click()
'habilita las herramientas de diseo cuando se selecciona esta opcin y deshabilita las de ejecucin
OptNodp.Enabled =True
OptNodo.Enabled =True
OptEnlace.Enabled =True
OptSel.Enabled =True
mnuMover.Enabled =True
OptBorrar.Enabled =True
mnuBorrar.Enabled =True
OptCambiar.Enabled =True
mnuModPar.Enabled =True
optCambProb.Enabled =True
mnuCambProb.Enabled =True
cmdCalcularParametros.Enabled =False
mnuCalculaParametros.Enabled =False
cmdReiniciar.Enabled =False
cmdSimula.Enabled =False
mnuSimulaRed.Enabled =False
cmdDetener.Enabled =False
OptEjecucion.Enabled =True
mnuMostResul.Enabled =False
End Sub
Private Sub OptEjecucion_Click()
'habilita las herramientas de ejecucin cuando se selecciona esta opcin y deshabilita las de diseo
cmdCalcularParametros.Enabled =True
mnuCalculaParametros.Enabled =True
cmdReiniciar.Enabled =True
cmdSimula.Enabled =False
mnuSimulaRed.Enabled =False
cmdDetener.Enabled =False
OptNodp.Enabled =False
OptNodo.Enabled =False
OptEnlace.Enabled =False
OptSel.Enabled =False
mnuMover.Enabled =False
OptBorrar.Enabled =False
mnuBorrar.Enabled =False
OptCambiar.Enabled =False
mnuModPar.Enabled =False
optCambProb.Enabled =False
Cdigo del Programa 29
mnuCambProb.Enabled =False
mnuMostResul.Enabled =False
End Sub
Private Sub OptEnlace_Click()
'se encera la variable para poder iniciar una nueva secuencia
ContClick =0
End Sub
Private Sub OptNodo_Click()
'se encera la variable para poder iniciar una nueva secuencia
ContClick =0
End Sub
Private Sub OptNodp_Click()
'se encera la variable para poder iniciar una nueva secuencia
ContClick =0
End Sub
Private Sub OptSel_Click()
'se encera la variable para poder iniciar una nueva secuencia
ContClick =0
End Sub
Private Sub PctMain_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
'procedimiento en modo grfico que se utiliza para dibujar la red, borrar elementos, moverlos, selecionarlos,
cambiar sus parmetros, etc.
'declaracin de variables del procedimiento
On Error GoTo puntoerror 'si hay un error se ejecuta un cdigo de control
Dim i As Integer
Dim j As Double
Dim k As Double
Dim l As Double
Dim m As Double
Dim a As Double
Dim b As Double
Dim c As Double
Dim d As Double
Dim Encontrar As Integer
i =1
Encontrar =1
ContClick =ContClick +1 'cuenta el nmero de clicks realizados por el usuario
'si la opcin seleccionada es esta se crea y se dibuja el nodo en las coordenadas indicadas con el click
If OptNodo.Value =True Then 'es un nodo secundario
PctMain.PaintPicture PctNodo, X, Y, 500, 500
X1nod =X
Y1nod =Y
Principal =2
cmdCreaNodo_Click
ContClick =0
End If
If OptNodp.Value =True Then 'es un nodo principal
PctMain.PaintPicture PctNodoP, X, Y, 500, 500
X1nod =X
Y1nod =Y
Principal =1
cmdCreaNodo_Click
ContClick =0
End If
If OptEnlace.Value =True Then 'se va a dibujar un enlace
If ContClick =1 Then 'si es el primer click comprueba que est dentro de un nodo existente (origen)
Cdigo del Programa 30
While Encontrar =1
If i =Num_Nodos Then
ContClick =ContClick - 1
MsgBox ("El punto indicado no est en un nodo")
i =i - 1
Encontrar =0
End If
If X >=Matriz_Nodos(i).X1 Then
If X <=Matriz_Nodos(i).X1 +500 Then
X1lin =Matriz_Nodos(i).X1 +250
End If
End If
If Y >=Matriz_Nodos(i).Y1 Then
If Y <=Matriz_Nodos(i).Y1 +500 Then
Y1lin =Matriz_Nodos(i).Y1 +250
End If
End If
If X1lin =Matriz_Nodos(i).X1 +250 Then
If Y1lin =Matriz_Nodos(i).Y1 +250 Then
Encontrar =0
EnlOrg =i
End If
End If
i =i +1
Wend
End If
If ContClick =2 Then 'se comprueba que sea un nodo destino existente
While Encontrar =1
If i =Num_Nodos Then
ContClick =ContClick - 1 'si no lo es, se resta un click
MsgBox ("El punto indicado no est en un nodo")
i =i - 1
Encontrar =0
End If
If X >=Matriz_Nodos(i).X1 Then
If X <=Matriz_Nodos(i).X1 +500 Then
X2lin =Matriz_Nodos(i).X1 +250
End If
End If
If Y >=Matriz_Nodos(i).Y1 Then
If Y <=Matriz_Nodos(i).Y1 +500 Then
Y2lin =Matriz_Nodos(i).Y1 +250
End If
End If
If X2lin =Matriz_Nodos(i).X1 +250 Then
If Y2lin =Matriz_Nodos(i).Y1 +250 Then
Encontrar =0
EnlDest =i
End If
End If
i =i +1
Wend
'si se han selecionado dos puntos vlidos, se crea y se dibuja el enlace
If ContClick =2 Then
cmdCreaEnlace_Click 'se llama al procedimiento que crea el enlace
PctMain.Line (X1lin, Y1lin)-(Xmed, Ymed)
Cdigo del Programa 31
PctMain.Line (Xmed, Ymed)-(X2lin, Y2lin), &HC0&
'se intercambian los nodos origen y destino y se dibuja el segundo enlace para que sea bidireccional
EnlOrgT =EnlDest
EnlDestT =EnlOrg
EnlOrg =EnlOrgT
EnlDest =EnlDestT
X1lin =X1lin +100
X2lin =X2lin +100
Y1lin =Y1lin +100
Y2lin =Y2lin +100
X1T =X2lin
X2lin =X1lin
X1lin =X1T
Y1T =Y2lin
Y2lin =Y1lin
Y1lin =Y1T
Xmed =(X1lin +X2lin) / 2
Ymed =(Y1lin +Y2lin) / 2
cmdCreaEnlace_Click 'se crea el nuevo enlace
PctMain.Line (X1lin, Y1lin)-(Xmed, Ymed)
PctMain.Line (Xmed, Ymed)-(X2lin, Y2lin), &HC0&
'se vuelven a inicializar los contadores y registros
ContClick =0
X1lin =0
Y1lin =0
X2lin =0
Y2lin =0
End If
End If
End If
'si est seleccionado se activa el cdigo de seleccin y movimiento de los elementos tan solo se pueden mover
los nodos ya que son puntos de llegada de enlaces, al mover un nodo se mueven tambin todos sus enlaces, no
se puede mover un solo enlace porque no es un elemento independiente.
If OptSel.Value =True Then
Xsel =X 'tomo las coordenadas del click
Ysel =Y
If ContClick =1 Then 'se comprueba que el punto indicado est dentro de un nodo
While Encontrar =1
If i =Num_Nodos Then
Encontrar =0
i =i - 1
MsgBox ("El punto indicado no est en un nodo")
ContClick =ContClick - 1
End If
If X >=Matriz_Nodos(i).X1 Then
If X <=Matriz_Nodos(i).X1 +500 Then
Xsel =Matriz_Nodos(i).X1 +250
End If
End If
If Y >=Matriz_Nodos(i).Y1 Then
If Y <=Matriz_Nodos(i).Y1 +500 Then
Ysel =Matriz_Nodos(i).Y1 +250
End If
End If
If Xsel =Matriz_Nodos(i).X1 +250 Then
If Ysel =Matriz_Nodos(i).Y1 +250 Then
Cdigo del Programa 32
NodoSel =i 'se toma el nodo seleccionado y se cambia de figura
PctMain.PaintPicture pctSel, Matriz_Nodos(NodoSel).X1, Matriz_Nodos(NodoSel).Y1, 500,
500
Encontrar =0
End If
End If
i =i +1
Wend
End If
'con el segundo click indico las coordenadas donde estar el nodo se asegura que no se dibuje
sobremontado en otro nodo si se seleccion un punto dentro de otro nodo, se vuelve a especificar el punto
If ContClick =2 Then
While Encontrar =1
If X >=Matriz_Nodos(i).X1 Then
If X <=Matriz_Nodos(i).X1 +500 Then
Xsel =Matriz_Nodos(i).X1 +250
End If
End If
If Y >=Matriz_Nodos(i).Y1 Then
If Y <=Matriz_Nodos(i).Y1 +500 Then
Ysel =Matriz_Nodos(i).Y1 +250
End If
End If
If Xsel =Matriz_Nodos(i).X1 +250 Then
If Ysel =Matriz_Nodos(i).Y1 +250 Then
MsgBox ("El punto seleccionado est sobre un nodo existente")
ContClick =ContClick - 1
Encontrar =0
End If
End If
If i =Num_Nodos - 1 Then
Encontrar =0
'se toman todos los enlaces que pertenecen al nodo seleccionado y se les asigna sus nuevas coordenadas de
acuerdo a la nueva posicin del nodo de acuerdo a si es de llegada o de origen
For j =1 To Matriz_Nodos(NodoSel).Num_Enlaces_Nodo
a =Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Nodo_Origen
b =Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Nodo_Destino
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Nodo_Origen =NodoSel Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X1 =Matriz_Nodos(NodoSel).X1 +250
Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y1 =Matriz_Nodos(NodoSel).Y1 +
250 Then
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X1 =X +250
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y1 =Y +250
End If
End If
End If
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Nodo_Destino =NodoSel Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X1 =Matriz_Nodos(NodoSel).X1 +250
Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y1 =Matriz_Nodos(NodoSel).Y1 +
250 Then
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X1 =X +250
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y1 =Y +250
End If
End If
Cdigo del Programa 33
End If
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Nodo_Origen =NodoSel Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X2 =Matriz_Nodos(NodoSel).X1 +250
Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y2 =Matriz_Nodos(NodoSel).Y1 +
250 Then
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X2 =X +250
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y2 =Y +250
End If
End If
End If
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Nodo_Destino =NodoSel Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X2 =Matriz_Nodos(NodoSel).X1 +250
Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y2 =Matriz_Nodos(NodoSel).Y1 +
250 Then
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X2 =X +250
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y2 =Y +250
End If
End If
End If
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Nodo_Origen =NodoSel Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X1 =Matriz_Nodos(NodoSel).X1 +350
Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y1 =Matriz_Nodos(NodoSel).Y1 +
350 Then
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X1 =X +350
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y1 =Y +350
End If
End If
End If
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Nodo_Destino =NodoSel Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X1 =Matriz_Nodos(NodoSel).X1 +350
Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y1 =Matriz_Nodos(NodoSel).Y1 +
350 Then
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X1 =X +350
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y1 =Y +350
End If
End If
End If
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Nodo_Origen =NodoSel Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X2 =Matriz_Nodos(NodoSel).X1 +350
Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y2 =Matriz_Nodos(NodoSel).Y1 +
350 Then
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X2 =X +350
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y2 =Y +350
End If
End If
End If
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Nodo_Destino =NodoSel Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X2 =Matriz_Nodos(NodoSel).X1 +350
Then
If Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y2 =Matriz_Nodos(NodoSel).Y1 +
350 Then
Cdigo del Programa 34
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).X2 =X +350
Matriz_Enlaces(Matriz_Nodos(NodoSel).lee(j)).Y2 =Y +350
End If
End If
End If
Next j
Matriz_Nodos(NodoSel).X1 =X
Matriz_Nodos(NodoSel).Y1 =Y
mnuGuardar1_Click 'guarda los cambios y lus actualiza
PctMain.Cls 'borra el contenido del rea de trabajo
mnuAbrir1_Click 'abre el archivo modificado y carga la red cambiada
ContClick =0
End If
i =i +1
Wend
End If
End If
If OptBorrar.Value =True Then 'si se selecciona se pueden borrar los elementos
Xsel =X 'tomo los valores del click (coordenadas)
Ysel =Y 'guardo el valor de los contadores de nodos y enlaces
NumNodosB =Num_Nodos
NumEnlB =Num_Enlaces
'se busca si el punto indicado pertenece a un nodo, enlace o ninguno
While Encontrar =1
If X >=Matriz_Nodos(i).X1 Then
If X <=Matriz_Nodos(i).X1 +500 Then
Xsel =Matriz_Nodos(i).X1 +250
End If
End If
If Y >=Matriz_Nodos(i).Y1 Then
If Y <=Matriz_Nodos(i).Y1 +500 Then
Ysel =Matriz_Nodos(i).Y1 +250
End If
End If
If Xsel =Matriz_Nodos(i).X1 +250 Then
If Ysel =Matriz_Nodos(i).Y1 +250 Then
NodoSel =i
'con el nodo seleccionado se cambia su figura o dibujo por el que representa el proceso de borrado, se muestra
un mensaje y se borra
PctMain.PaintPicture pctBorr, Matriz_Nodos(NodoSel).X1, Matriz_Nodos(NodoSel).Y1, 500,
500
MsgBox ("Se borrar el nodo seleccionado y todos sus enlaces")
'esta es la condicin de que el nodo ya no est activo y debe ser borrado
Matriz_Nodos(NodoSel).Nodo_Activo =0
NumNodosB =NumNodosB - 1 'reduzco el nmero de nodos
For l =1 To Num_Enlaces - 1
Matriz_Enlaces(l).Nodo_Origen_Borra =Matriz_Enlaces(l).Nodo_Origen
Matriz_Enlaces(l).Nodo_Destino_Borra =Matriz_Enlaces(l).Nodo_Destino
Next l
se vuelve a enumerar los nodos luego de que se ha borrado uno de ellos los enlaces tambin son enumerados
nuevamente
For l =NodoSel To Num_Nodos - 1
For m =1 To Matriz_Nodos(l).Num_Enlaces_Nodo
If Matriz_Enlaces(Matriz_Nodos(l).lee(m)).Nodo_Origen_Borra >=NodoSel Then
Matriz_Enlaces(Matriz_Nodos(l).lee(m)).Nodo_Origen_Borra =
Matriz_Enlaces(Matriz_Nodos(l).lee(m)).Nodo_Origen_Borra - 1
Cdigo del Programa 35
End If
If Matriz_Enlaces(Matriz_Nodos(l).lee(m)).Nodo_Destino_Borra >=NodoSel Then
Matriz_Enlaces(Matriz_Nodos(l).lee(m)).Nodo_Destino_Borra =
Matriz_Enlaces(Matriz_Nodos(l).lee(m)).Nodo_Destino_Borra - 1
End If
Next m
Next l
'se deshabilitan los enlaces conectados al nodo para ser borrados
For j =1 To Matriz_Nodos(NodoSel).Num_Enlaces_Nodo
a =Matriz_Nodos(NodoSel).lee(j)
Matriz_Enlaces(a).Enlace_Activo =0
NumEnlNodO =Matriz_Nodos(Matriz_Enlaces(a).Nodo_Origen).Num_Enlaces_Nodo
NumEnlNodD =Matriz_Nodos(Matriz_Enlaces(a).Nodo_Destino).Num_Enlaces_Nodo
'se guarda un indicador en la matriz de los nodos que tienen los enlaces borrados para que puedan ser
actualizados
For k =1 To Matriz_Nodos(Matriz_Enlaces(a).Nodo_Origen).Num_Enlaces_Nodo
If Matriz_Nodos(Matriz_Enlaces(a).Nodo_Origen).lee(k) =a Then
b =Matriz_Nodos(Matriz_Enlaces(a).Nodo_Origen).guarda1(k, 100, 0)
NumEnlB =NumEnlB - 1
End If
Next k
For k =1 To Matriz_Nodos(Matriz_Enlaces(a).Nodo_Destino).Num_Enlaces_Nodo
If Matriz_Nodos(Matriz_Enlaces(a).Nodo_Destino).lee(k) =a Then
b =Matriz_Nodos(Matriz_Enlaces(a).Nodo_Destino).guarda1(k, 100, 0)
NumEnlB =NumEnlB - 1
End If
Next k
Next j
'se actualizan los nuevos valores luego de que se han borrado elementos
For l =1 To Num_Enlaces - 1
Matriz_Enlaces(l).Nodo_Origen =Matriz_Enlaces(l).Nodo_Origen_Borra
Matriz_Enlaces(l).Nodo_Destino =Matriz_Enlaces(l).Nodo_Destino_Borra
Next l
'se guardan los cambios, se limpia la pantalla, se eliminan los objetos existentes y se carga la red modificada
guardada
mnuGuardar1_Click
PctMain.Cls
For k =1 To Num_Nodos - 1 'elimino todos los nodos
Set Matriz_Nodos(k) =Nothing
Next k
For k =1 To Num_Enlaces - 1 'elimino los enlaces
Set Matriz_Enlaces(k) =Nothing
Next k
mnuAbrir1_Click
Encontrar =0
End If
End If
If i =Num_Nodos - 1 Then 'si no se seleccion un nodo se comprueba si es un enlace
Encontrar =0
End If
i =i +1
Wend
Encontrar =1
i =1
While Encontrar =1
'se determinan distancias y pendientes para comprobar si el punto indicado pertenece a un enlace
Cdigo del Programa 36
mlin =(Matriz_Enlaces(i).Y2 - Matriz_Enlaces(i).Y1) / (Matriz_Enlaces(i).X2 -
Matriz_Enlaces(i).X1)
mp1psel =(Matriz_Enlaces(i).Y1 - Y) / (Matriz_Enlaces(i).X1 - X)
mp2psel =(Matriz_Enlaces(i).Y2 - Y) / (Matriz_Enlaces(i).X2 - X)
dlin =(Matriz_Enlaces(i).X1 - Matriz_Enlaces(i).X2) ^2 +(Matriz_Enlaces(i).Y1 -
Matriz_Enlaces(i).Y2) ^2
dp1psel =(Matriz_Enlaces(i).X1 - X) ^2 +(Matriz_Enlaces(i).Y1 - Y) ^2
dp2psel =(Matriz_Enlaces(i).X2 - X) ^2 +(Matriz_Enlaces(i).Y2 - Y) ^2
'se comprueba que el punto est cercano a un enlace para ser seleccionado este rango es el que indica la
presicin del punto de seleccin
If mp1psel <=mlin +0.05 Then
'si el punto seleccionado forma una pendiente similar con los puntos extremos del enlace, se ve si su distancia
a estos puntos no sea mayor a la del enlace, con lo que se comprueba que si seleccion un enlace o no
If mp1psel >=mlin Then
If dlin >=dp1psel Then
If dlin >=dp2psel Then
EnlaceSel =i
MsgBox ("Se borrar el enlace")
PctMain.Line (Matriz_Enlaces(EnlaceSel).X1, Matriz_Enlaces(EnlaceSel).Y1)-
(Matriz_Enlaces(EnlaceSel).X2, Matriz_Enlaces(EnlaceSel).Y2), &HFF0000
Matriz_Enlaces(EnlaceSel).Enlace_Activo =0
se deshabilita el enlace seleccionado y se actualizan las matrices de los nodos que estn conectados por el
enlace
c =Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Origen).Num_Enlaces_Nodo
For k =1 To Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Origen).Num_Enlaces_Nodo
If Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Origen).lee(k) =EnlaceSel Then
b =Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Origen).guarda1(k, 100, 0)
c =c - 1
End If
Next k
Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Origen).Num_Enlaces_Nodo =c
d =Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Destino).Num_Enlaces_Nodo
For k =1 To
Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Destino).Num_Enlaces_Nodo
If Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Destino).lee(k) =EnlaceSel Then
b =Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Destino).guarda1(k, 100, 0)
d =d - 1
End If
Next k
Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Destino).Num_Enlaces_Nodo =d
'se guardan los cambios, se limpia la pantalla y se abre el archivo nuevamente
mnuGuardar1_Click
PctMain.Cls
mnuAbrir1_Click
Encontrar =0
End If
End If
End If
End If
'se repite todo el proceso de seleccin y borrado pero para el otro extremo del enlace
If mp1psel >=mlin - 0.05 Then
If mp1psel <=mlin Then
If dlin >=dp1psel Then
If dlin >=dp2psel Then
EnlaceSel =i
MsgBox ("Se borrar el enlace")
Cdigo del Programa 37
PctMain.Line (Matriz_Enlaces(EnlaceSel).X1, Matriz_Enlaces(EnlaceSel).Y1)-
(Matriz_Enlaces(EnlaceSel).X2, Matriz_Enlaces(EnlaceSel).Y2), &HFF0000
Matriz_Enlaces(EnlaceSel).Enlace_Activo =0
c =Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Origen).Num_Enlaces_Nodo
For k =1 To Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Origen).Num_Enlaces_Nodo
If Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Origen).lee(k) =EnlaceSel Then
b =Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Origen).guarda1(k, 100, 0)
c =c - 1
End If
Next k
Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Origen).Num_Enlaces_Nodo =c
d =Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Destino).Num_Enlaces_Nodo
For k =1 To
Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Destino).Num_Enlaces_Nodo
If Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Destino).lee(k) =EnlaceSel Then
b =Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Destino).guarda1(k, 100, 0)
d =d - 1
End If
Next k
Matriz_Nodos(Matriz_Enlaces(EnlaceSel).Nodo_Destino).Num_Enlaces_Nodo =d
mnuGuardar1_Click
PctMain.Cls
mnuAbrir1_Click
Encontrar =0
End If
End If
End If
End If
If i =Num_Enlaces - 1 Then
Encontrar =0
End If
i =i +1
Wend
End If
'si se selecciona esta opcin, se cambian los parmetros de los elementos seleccionados
If OptCambiar.Value =True Then
Xsel =X 'se toman las coordenadas del click
Ysel =Y
While Encontrar =1 'se verifica si el punto indicado pertenece a un nodo
If X >=Matriz_Nodos(i).X1 Then
If X <=Matriz_Nodos(i).X1 +500 Then
Xsel =Matriz_Nodos(i).X1 +250
End If
End If
If Y >=Matriz_Nodos(i).Y1 Then
If Y <=Matriz_Nodos(i).Y1 +500 Then
Ysel =Matriz_Nodos(i).Y1 +250
End If
End If
If Xsel =Matriz_Nodos(i).X1 +250 Then
If Ysel =Matriz_Nodos(i).Y1 +250 Then
NodoSel =i
PctMain.PaintPicture pctcamb, Matriz_Nodos(NodoSel).X1, Matriz_Nodos(NodoSel).Y1, 500,
500
'al seleccionarse un nodo, se cambia su figura o dibujo por el que indica que se realiza un cambio
frmDatosNodosc.Show 1 'se muestra el formulario de cambio de datos
Cdigo del Programa 38
If Matriz_Nodos(NodoSel).Clase_Nodo =2 Then
PctMain.PaintPicture PctNodo, Matriz_Nodos(NodoSel).X1, Matriz_Nodos(NodoSel).Y1,
500, 500
End If
'se verifica si el nodo es principal para dibujar su grfico corresp.
If Matriz_Nodos(NodoSel).Clase_Nodo =1 Then
PctMain.PaintPicture PctNodoP, Matriz_Nodos(NodoSel).X1, Matriz_Nodos(NodoSel).Y1,
500, 500
End If
'se actualizan los datos
Matriz_Nodos(NodoSel).Capacidad_Nodo =CapNodo
Matriz_Nodos(NodoSel).Num_Abonados =NumAbon
Encontrar =0
End If
End If
If i =Num_Nodos - 1 Then
Encontrar =0
End If
i =i +1
Wend
Encontrar =1
i =1
'se comprueba que el punto seleccionado sea de un enlace
While Encontrar =1
mlin =(Matriz_Enlaces(i).Y2 - Matriz_Enlaces(i).Y1) / (Matriz_Enlaces(i).X2 -
Matriz_Enlaces(i).X1)
mp1psel =(Matriz_Enlaces(i).Y1 - Y) / (Matriz_Enlaces(i).X1 - X)
mp2psel =(Matriz_Enlaces(i).Y2 - Y) / (Matriz_Enlaces(i).X2 - X)
dlin =(Matriz_Enlaces(i).X1 - Matriz_Enlaces(i).X2) ^2 +(Matriz_Enlaces(i).Y1 -
Matriz_Enlaces(i).Y2) ^2
dp1psel =(Matriz_Enlaces(i).X1 - X) ^2 +(Matriz_Enlaces(i).Y1 - Y) ^2
dp2psel =(Matriz_Enlaces(i).X2 - X) ^2 +(Matriz_Enlaces(i).Y2 - Y) ^2
If mp1psel <=mlin +0.05 Then
If mp1psel >=mlin Then
If dlin >=dp1psel Then
If dlin >=dp2psel Then
EnlaceSel =i
'al seleccionar un enlace este se lo pinta de azul para indicar que est seleccionado
PctMain.Line (Matriz_Enlaces(EnlaceSel).X1, Matriz_Enlaces(EnlaceSel).Y1)-
(Matriz_Enlaces(EnlaceSel).X2, Matriz_Enlaces(EnlaceSel).Y2), &HFF0000
'se muestra el formulario de cambio de datos del enlace
frmDatosEnlacescc.Show 1
'se vuelve a dibujar el enlace, negro el origen y rojo el destino
Xmed =(Matriz_Enlaces(EnlaceSel).X1 +Matriz_Enlaces(EnlaceSel).X2) / 2
Ymed =(Matriz_Enlaces(EnlaceSel).Y1 +Matriz_Enlaces(EnlaceSel).Y2) / 2
PctMain.Line (Matriz_Enlaces(EnlaceSel).X1, Matriz_Enlaces(EnlaceSel).Y1)-(Xmed,
Ymed)
PctMain.Line (Xmed, Ymed)-(Matriz_Enlaces(EnlaceSel).X2,
Matriz_Enlaces(EnlaceSel).Y2), &HC0&
'se actualizan los datos cambiados
Matriz_Enlaces(EnlaceSel).Capacidad_Canal =CapEnl * AnchoBanda
Matriz_Enlaces(EnlaceSel).CapacidadMod =CapEnl
Matriz_Enlaces(EnlaceSel).Tipo_tx =TipoTx
Encontrar =0
End If
End If
Cdigo del Programa 39
End If
End If
'se repite el proceso con el otro extremo del enlace
If mp1psel >=mlin - 0.05 Then
If mp1psel <=mlin Then
If dlin >=dp1psel Then
If dlin >=dp2psel Then
EnlaceSel =i
PctMain.Line (Matriz_Enlaces(EnlaceSel).X1, Matriz_Enlaces(EnlaceSel).Y1)-
(Matriz_Enlaces(EnlaceSel).X2, Matriz_Enlaces(EnlaceSel).Y2), &HFF0000
frmDatosEnlacescc.Show 1
Xmed =(Matriz_Enlaces(EnlaceSel).X1 +Matriz_Enlaces(EnlaceSel).X2) / 2
Ymed =(Matriz_Enlaces(EnlaceSel).Y1 +Matriz_Enlaces(EnlaceSel).Y2) / 2
PctMain.Line (Matriz_Enlaces(EnlaceSel).X1, Matriz_Enlaces(EnlaceSel).Y1)-(Xmed,
Ymed)
PctMain.Line (Xmed, Ymed)-(Matriz_Enlaces(EnlaceSel).X2,
Matriz_Enlaces(EnlaceSel).Y2), &HC0&
Matriz_Enlaces(EnlaceSel).Capacidad_Canal =CapEnl * AnchoBanda
Matriz_Enlaces(EnlaceSel).CapacidadMod =CapEnl
Matriz_Enlaces(EnlaceSel).Tipo_tx =TipoTx
Encontrar =0
End If
End If
End If
End If
If i =Num_Enlaces - 1 Then
Encontrar =0
End If
i =i +1
Wend
End If
'se se selecciona esta opcin se cambia la probabilidad de conexin de los enlaces los nodos no poseen este
parmetro y por eso no se los considera
If optCambProb.Value =True Then
Xsel =X 'tomo valores del click
Ysel =Y
Encontrar =1
i =1
'se comprueba que se ha seleccionado un enlace
While Encontrar =1
mlin =(Matriz_Enlaces(i).Y2 - Matriz_Enlaces(i).Y1) / (Matriz_Enlaces(i).X2 -
Matriz_Enlaces(i).X1)
mp1psel =(Matriz_Enlaces(i).Y1 - Y) / (Matriz_Enlaces(i).X1 - X)
mp2psel =(Matriz_Enlaces(i).Y2 - Y) / (Matriz_Enlaces(i).X2 - X)
dlin =(Matriz_Enlaces(i).X1 - Matriz_Enlaces(i).X2) ^2 +(Matriz_Enlaces(i).Y1 -
Matriz_Enlaces(i).Y2) ^2
dp1psel =(Matriz_Enlaces(i).X1 - X) ^2 +(Matriz_Enlaces(i).Y1 - Y) ^2
dp2psel =(Matriz_Enlaces(i).X2 - X) ^2 +(Matriz_Enlaces(i).Y2 - Y) ^2
If mp1psel <=mlin +0.05 Then
If mp1psel >=mlin Then
If dlin >=dp1psel Then
If dlin >=dp2psel Then
EnlaceSel =i
'se pinta el enlace de azul (seleccionado)
PctMain.Line (Matriz_Enlaces(EnlaceSel).X1, Matriz_Enlaces(EnlaceSel).Y1)-
(Matriz_Enlaces(EnlaceSel).X2, Matriz_Enlaces(EnlaceSel).Y2), &HFF0000
Cdigo del Programa 40
frmCambioProb.Show 1 'formulario de cambio de valor
'dibujo el enlace nuevamente negro origen, rojo destino
Xmed =(Matriz_Enlaces(EnlaceSel).X1 +Matriz_Enlaces(EnlaceSel).X2) / 2
Ymed =(Matriz_Enlaces(EnlaceSel).Y1 +Matriz_Enlaces(EnlaceSel).Y2) / 2
PctMain.Line (Matriz_Enlaces(EnlaceSel).X1, Matriz_Enlaces(EnlaceSel).Y1)-(Xmed,
Ymed)
PctMain.Line (Xmed, Ymed)-(Matriz_Enlaces(EnlaceSel).X2,
Matriz_Enlaces(EnlaceSel).Y2), &HC0&
'actualizo datos modificados
Matriz_Enlaces(EnlaceSel).Prob_Conexin =ProbCon
Encontrar =0
End If
End If
End If
End If
'repito el proceso para el otro extremo del enlace
If mp1psel >=mlin - 0.05 Then
If mp1psel <=mlin Then
If dlin >=dp1psel Then
If dlin >=dp2psel Then
EnlaceSel =i
PctMain.Line (Matriz_Enlaces(EnlaceSel).X1, Matriz_Enlaces(EnlaceSel).Y1)-
(Matriz_Enlaces(EnlaceSel).X2, Matriz_Enlaces(EnlaceSel).Y2), &HFF0000
frmCambioProb.Show 1
Xmed =(Matriz_Enlaces(EnlaceSel).X1 +Matriz_Enlaces(EnlaceSel).X2) / 2
Ymed =(Matriz_Enlaces(EnlaceSel).Y1 +Matriz_Enlaces(EnlaceSel).Y2) / 2
PctMain.Line (Matriz_Enlaces(EnlaceSel).X1, Matriz_Enlaces(EnlaceSel).Y1)-(Xmed,
Ymed)
PctMain.Line (Xmed, Ymed)-(Matriz_Enlaces(EnlaceSel).X2,
Matriz_Enlaces(EnlaceSel).Y2), &HC0&
Matriz_Enlaces(EnlaceSel).Prob_Conexin =ProbCon
Encontrar =0
End If
End If
End If
End If
If i =Num_Enlaces - 1 Then
Encontrar =0
MsgBox "No se ha seleccionado ningn enlace"
End If
i =i +1
Wend
End If
Exit Sub
puntoerror: 'cdigo de control de error en la subrutina
End Sub

Cdigo del Programa 41

Private cambiar As Boolean 'Declaracin de variable local
Private Sub cmdAceptar_Click()
'carga valores ingresados
CapEnl =txtCapEnl.Text * 1000
'FlujoEnl =txtFlujo.Text
'carga tipo de Tx seleccionada
If optFSKRD.Value =True Then
TipoTx =1
AnchoBanda =1
End If
If optPSKRD.Value =True Then
TipoTx =2
AnchoBanda =1
End If
If optBPSKRD.Value =True Then
TipoTx =3
AnchoBanda =1
End If
If optQPSKRD.Value =True Then
TipoTx =4
AnchoBanda =2
End If
If opt8PSKRD.Value =True Then
TipoTx =5
AnchoBanda =3
End If
If opt16PSKRD.Value =True Then
TipoTx =6
AnchoBanda =4
End If
If optQAMRD.Value =True Then
TipoTx =7
Cdigo del Programa 42
AnchoBanda =2
End If
If opt8QAMRD.Value =True Then
TipoTx =8
AnchoBanda =3
End If
If opt16QAMRD.Value =True Then
TipoTx =9
AnchoBanda =4
End If
If optFSKST.Value =True Then
TipoTx =10
AnchoBanda =1
End If
If optPSKST.Value =True Then
TipoTx =11
AnchoBanda =1
End If
If optBPSKST.Value =True Then
TipoTx =12
AnchoBanda =1
End If
If optQPSKST.Value =True Then
TipoTx =13
AnchoBanda =2
End If
If opt8PSKST.Value =True Then
TipoTx =14
AnchoBanda =3
End If
If opt16PSKST.Value =True Then
TipoTx =15
IncremPotencia =8
AnchoBanda =4
End If
If optQAMST.Value =True Then
TipoTx =16
AnchoBanda =2
End If
If opt8QAMST.Value =True Then
TipoTx =17
AnchoBanda =3
End If
If opt16QAMST.Value =True Then
TipoTx =18
AnchoBanda =4
End If
If optUPNRZ.Value =True Then
TipoTx =19
AnchoBanda =2
End If
If optUPRZ.Value =True Then
TipoTx =20
AnchoBanda =1
End If
If optBPNRZ.Value =True Then
Cdigo del Programa 43
TipoTx =21
AnchoBanda =2
End If
If optBPRZ.Value =True Then
TipoTx =22
AnchoBanda =1
End If
If optAMI.Value =True Then
TipoTx =23
AnchoBanda =2
End If
Unload frmDatosEnlaces 'descarga el formulario
End Sub
Private Sub Form_Load()
'deshabilita Aceptar y limpia textboxes
cmdAceptar.Enabled =False
txtCapEnl.Text =""
End Sub
Private Sub txtCapEnl_Change()
'actualiza datos ingresados
If cambiar =False Then
txtCapEnl.Text =valido
End If
'habilita Aceptar si hay datos vlidos
If txtCapEnl.Text <>"" Then
cmdAceptar.Enabled =True
End If
End Sub
Private Sub txtCapEnl_KeyPress(KeyAscii As Integer)
'valida datos de ingreso para que sean slo nmeros
If KeyAscii >57 Or KeyAscii <48 Then 'busca que los caracteres ascii sean nmeros
valido =txtCapEnl.Text
cambiar =False
Else
cambiar =True
End If
End Sub



Private cambiar As Boolean 'declaro variable
Private Sub cmdOK_Click()
'actualizo datos de ingreso
CapNodo =txtCapNodo.Text * 1000000
NumAbon =txtNumAbon.Text
Unload frmDatosNodos 'descargo el formulario
End Sub
Private Sub Form_Load()
Cdigo del Programa 44
'deshabilito Aceptar y limpio textboxes
cmdOK.Enabled =False
txtCapNodo.Text =""
txtNumAbon.Text =""
End Sub
Private Sub txtCapNodo_Change()
'actualiza textbox con valores nuevos
If cambiar =False Then
txtCapNodo.Text =valido
End If
'habilito Aceptar si hay datos vlidos
If txtCapNodo.Text <>"" Then
If txtNumAbon.Text <>"" Then
cmdOK.Enabled =True
End If
End If
End Sub
Private Sub txtCapNodo_KeyPress(KeyAscii As Integer)
'valida datos de ingreso para que sean solo nmeros
If KeyAscii >57 Or KeyAscii <48 Then
valido =txtCapNodo.Text
cambiar =False
Else
cambiar =True
End If
End Sub
Private Sub txtNumAbon_Change()
'actualiza textbox con valores nuevos
If cambiar =False Then
txtNumAbon.Text =valido
End If
'habilito Aceptar si hay datos vlidos
If txtNumAbon.Text <>"" Then
If txtCapNodo.Text <>"" Then
cmdOK.Enabled =True
End If
End If
End Sub
Private Sub txtNumAbon_KeyPress(KeyAscii As Integer)
'valida datos de ingreso para que sean solo nmeros
If KeyAscii >57 Or KeyAscii <48 Then
valido =txtNumAbon.Text
cambiar =False
Else
cambiar =True
End If
End Sub

Cdigo del Programa 45

Private cambiar As Boolean
Private Sub cmdAceptar_Click()
'carga los valores nuevos, adems indica el factor de uso de ancho de banda
CapEnl =txtCapEnl.Text * 1000
If optFSKRD.Value =True Then
TipoTx =1
AnchoBanda =1
End If
If optPSKRD.Value =True Then
TipoTx =2
AnchoBanda =1
End If
If optBPSKRD.Value =True Then
TipoTx =3
AnchoBanda =1
End If
If optQPSKRD.Value =True Then
TipoTx =4
AnchoBanda =2
End If
If opt8PSKRD.Value =True Then
TipoTx =5
AnchoBanda =3
End If
If opt16PSKRD.Value =True Then
TipoTx =6
AnchoBanda =4
End If
If optQAMRD.Value =True Then
TipoTx =7
Cdigo del Programa 46
AnchoBanda =2
End If
If opt8QAMRD.Value =True Then
TipoTx =8
AnchoBanda =3
End If
If opt16QAMRD.Value =True Then
TipoTx =9
AnchoBanda =4
End If
If optFSKST.Value =True Then
TipoTx =10
AnchoBanda =1
End If
If optPSKST.Value =True Then
TipoTx =11
AnchoBanda =1
End If
If optBPSKST.Value =True Then
TipoTx =12
AnchoBanda =1
End If
If optQPSKST.Value =True Then
TipoTx =13
AnchoBanda =2
End If
If opt8PSKST.Value =True Then
TipoTx =14
AnchoBanda =3
End If
If opt16PSKST.Value =True Then
TipoTx =15
AnchoBanda =4
End If
If optQAMST.Value =True Then
TipoTx =16
AnchoBanda =2
End If
If opt8QAMST.Value =True Then
TipoTx =17
AnchoBanda =3
End If
If opt16QAMST.Value =True Then
TipoTx =18
AnchoBanda =4
End If
If optUPNRZ.Value =True Then
TipoTx =19
AnchoBanda =2
End If
If optUPRZ.Value =True Then
TipoTx =20
AnchoBanda =1
End If
If optBPNRZ.Value =True Then
TipoTx =21
Cdigo del Programa 47
AnchoBanda =2
End If
If optBPRZ.Value =True Then
TipoTx =22
AnchoBanda =1
End If
If optAMI.Value =True Then
TipoTx =23
AnchoBanda =2
End If
Unload frmDatosEnlacescc 'descarga el formulario
End Sub
Private Sub Form_Load() 'procedimiento que carga los valores al formulario
'deshabilita Aceptar y muestra valores a ser modificados
cmdAceptar.Enabled =False
txtCapacidadAnt.Text =Matriz_Enlaces(EnlaceSel).CapacidadMod / 1000
txtTipoTx.Text =Matriz_Enlaces(EnlaceSel).Tipo_tx
TipoTx =Matriz_Enlaces(EnlaceSel).Tipo_tx
'determina el tipo de Tx usada para seleccionarla
If TipoTx =1 Then
optFSKRD.Value =True
End If
If TipoTx =2 Then
optPSKRD.Value =True
End If
If TipoTx =3 Then
optBPSKRD.Value =True
End If
If TipoTx =4 Then
optQPSKRD.Value =True
End If
If TipoTx =5 Then
opt8PSKRD.Value =True
End If
If TipoTx =6 Then
opt16PSKRD.Value =True
End If
If TipoTx =7 Then
optQAMRD.Value =True
End If
If TipoTx =8 Then
opt8QAMRD.Value =True
End If
If TipoTx =9 Then
opt16QAMRD.Value =True
End If
If TipoTx =10 Then
optFSKST.Value =True
End If
If TipoTx =11 Then
optPSKST.Value =True
End If
If TipoTx =12 Then
optBPSKST.Value =True
End If
If TipoTx =13 Then
Cdigo del Programa 48
optQPSKST.Value =True
End If
If TipoTx =14 Then
opt8PSKST.Value =True
End If
If TipoTx =15 Then
opt16PSKST.Value =True
End If
If TipoTx =16 Then
optQAMST.Value =True
End If
If TipoTx =17 Then
opt8QAMST.Value =True
End If
If TipoTx =18 Then
opt16QAMST.Value =True
End If
If TipoTx =19 Then
optUPNRZ.Value =True
End If
If TipoTx =20 Then
optUPRZ.Value =True
End If
If TipoTx =21 Then
optBPNRZ.Value =True
End If
If TipoTx =22 Then
optBPRZ.Value =True
End If
If TipoTx =23 Then
optAMI.Value =True
End If
End Sub
Private Sub txtCapEnl_Change()
'actualiza datos ingresados
If cambiar =False Then
txtCapEnl.Text =valido
End If
'habilita Aceptar si hay datos vlidos
If txtCapEnl.Text <>"" Then
cmdAceptar.Enabled =True
End If
End Sub
Private Sub txtCapEnl_KeyPress(KeyAscii As Integer)
'valida los datos de ingreso para que sean nmeros
If KeyAscii >57 Or KeyAscii <48 Then
valido =txtCapEnl.Text
cambiar =False
Else
cambiar =True
End If
End Sub

Cdigo del Programa 49


Private cambiar As Boolean 'declaracin de varible local
Private Sub cmdOK_Click() 'procedimiento de aceptacin de datos
CapNodo =txtCapNodo.Text * 1000000 'convierte a bps
NumAbon =txtNumAbon.Text 'carga nmero de abonados
Unload frmDatosNodosc 'descarga el formulario
End Sub
Private Sub Form_Load()
'deshabilito el botn de aceptar al cargar el formulario
cmdOK.Enabled =False
'visualizo valores anteriores a ser cambiados
txtCapAnt.Text =Matriz_Nodos(NodoSel).Capacidad_Nodo / 1000000
txtNumAbAnt.Text =Matriz_Nodos(NodoSel).Num_Abonados
End Sub
Private Sub txtCapNodo_Change()
'actualiza el textbox con los nuevos datos
If cambiar =False Then
txtCapNodo.Text =valido
End If
'habilita Aceptar si se tienen datos vlidos
If txtCapNodo.Text <>"" Then
If txtNumAbon.Text <>"" Then
cmdOK.Enabled =True
End If
End If
End Sub
Private Sub txtCapNodo_KeyPress(KeyAscii As Integer)
'realizo una validacin de datos de ingreso par que sean slo nmeros
If KeyAscii >57 Or KeyAscii <48 Then
'si est dentro del rango de nmeros es aceptado
valido =txtCapNodo.Text
cambiar =False
Else
cambiar =True 'indica que el dato no es numrico
End If
End Sub
Private Sub txtNumAbon_Change()
'actualiza textbox con datos nuevos
If cambiar =False Then
txtNumAbon.Text =valido
Cdigo del Programa 50
End If
'habilita Aceptar si son datos vlidos
If txtNumAbon.Text <>"" Then
If txtCapNodo.Text <>"" Then
cmdOK.Enabled =True
End If
End If
End Sub
Private Sub txtNumAbon_KeyPress(KeyAscii As Integer)
'valida los datos de ingreso para que sean nmeros
If KeyAscii >57 Or KeyAscii <48 Then
valido =txtNumAbon.Text
cambiar =False
Else
cambiar =True
End If
End Sub



Private Sub cmdAceptarGuardar_Click()
'se determina la ruta del archivo a abrir/guardar y se le pone extencin .sim
If InStr(TexArchivo.Text, ".") Then
archivo =Left(TexArchivo.Text, InStr(TexArchivo.Text, ".")) & "SIM"
Else
archivo =TexArchivo.Text & ".SIM"
End If
RUTA =Dir1.Path & "\" & archivo
Unload frmGuardar 'descargo el formulario
End Sub
Private Sub cmdCancelar_Click()
Cancela =True
Unload frmGuardar
End Sub
Private Sub Dir1_Change()
'se actualiza en la pantalla el path que se vaya seleccionando
File1.Path =Dir1
File1.Pattern ="*.sim" 'muestra solo los archivos .sim
Cdigo del Programa 51
End Sub
Private Sub Drive1_Change()
On Error GoTo ErrorPoint 'va al control de error
Dir1.Path =Drive1 'actualiza el path en pantalla
Exit Sub 'evita el cdigo de error
ErrorPoint: 'al producirse un error se pide que se especifique el path nuevamente
MsgBox "Se ha producido un error, verifique que la unidad sea vlida"
Unload frmGuardar 'descargo el formulario
frmGuardar.Show 1 'muestro nuevamente el formulario
Dir1.Path =Drive1 'actualizo el path en pantalla
End Sub
Private Sub File1_Click()
TexArchivo.Text =File1.FileName 'se escribe el nombre del archivo en el textbox
End Sub
Private Sub Form_Load()
'deshabilito el boton de aceptar al cargar el formulario
cmdAceptarGuardar.Enabled =False
End Sub
Private Sub TexArchivo_Change()
'se activa el botn de aceptar al tener todos los datos vlidos
If TexArchivo.Text <>"" Then
cmdAceptarGuardar.Enabled =True
End If
End Sub



Option Explicit
Private Sub cmdNo_Click()
Guardar =False 'indica que no se quiere guardar el trabajo
Unload frmGuardarTrabajo 'descarga el formulario
End Sub
Private Sub cmdSi_Click()
Guardar =True 'indica que si se quiere guardar el trabajo
Unload frmGuardarTrabajo 'descarga el formulario
End Sub

Cdigo del Programa 52


Option Explicit 'requiere de declaracin de variables
Private Sub cmdAceptar_Click()
Unload FrmResultados 'acepta la visualizacin y descarga el formulario
End Sub
'rutina que carga los valores en el formulario
Private Sub Form_Load()
'actualiza los valores de resultados en la pantalla
txtAbonados.Text =Num_Abonados_Total
txtNodos.Text =Num_Nodos
txtEnlaces.Text =Num_Enlaces
txtRetardoTotal.Text =Retardo_Total_Red
txtRetardoVacio.Text =Retardo_Vacio
txtTraficoInterno.Text =Traf_Int_Total
txtCapacidadTotal.Text =Capacidad_Total_Enlaces
txtPuntoSaturacion.Text =Punto_Satura
txtNumeroSaltos.Text =Num_Saltos
'comprueba is hay o no control de congestin
If frmSimulacin.chkControl.Value =1 Then
txtControlCongestion.Text ="SI"
End If
If frmSimulacin.chkControl.Value =0 Then
txtControlCongestion.Text ="NO"
End If
'comprueba si hay o no control de retardo
If frmSimulacin.chkRetardo.Value =1 Then
txtControlRetardo.Text ="SI"
End If
If frmSimulacin.chkRetardo.Value =0 Then
txtControlRetardo.Text ="NO"
End If
'comprueba si hay o no saturacin en la red
If Saturacion =True Then
txtCongestionSaturacion.Text ="SI"
Cdigo del Programa 53
End If
If Saturacion =False Then
txtCongestionSaturacion.Text ="NO"
End If
End Sub



'Option Explicit
Dim cambiar As Boolean
Private Sub cmdCambiarProb_Click()
'cargo valor modificado y descargo el formulario
ProbCon =TxtProbNueva.Text
ProbCon =ProbCon / 100
Unload frmCambioProb
End Sub
Private Sub Form_Load()
'deshabilito Aceptar y muestro valor a modificar
cmdCambiarProb.Enabled =False
txtProbAnt.Text =Matriz_Enlaces(EnlaceSel).Prob_Conexin * 100
End Sub
Private Sub TxtProbNueva_Change()
'actualizo dato de ingreso
If cambiar =False Then
TxtProbNueva.Text =valido
End If
'habilito Aceptar si hay datos vlidos
If TxtProbNueva.Text <>"" Then
cmdCambiarProb.Enabled =True
End If
End Sub
Private Sub TxtProbNueva_KeyPress(KeyAscii As Integer)
'valido los datos de ingreso para que sean slo nmeros
If KeyAscii >57 Or KeyAscii <48 Then
valido =TxtProbNueva.Text
cambiar =False
Else
cambiar =True
End If
End Sub

Cdigo del Programa 54



Private Sub Command1_Click()
Unload frmAcerca descarga el formulario
End Sub

Mdulo Global

Option Explicit 'requerido para la declaracin obligatoria de variables
'Variables globales para uso del programa
Public Cancela As Boolean
Public Saturacion As Boolean
Public Detener As Boolean
Public Nuevo As Boolean
Public Sale As Boolean
Public Cerrar As Boolean
Public Salir As Boolean
Public Xmed As Double
Public Ymed As Double
Public Guardar As Boolean
Public ProbCon As Double
Public AnchoBanda As Double
Public Error As Boolean
Public RUTA As String
Public IncremPotencia As Double
Public Matriz_Enlaces(1000) As ClsEnlace
Public Matriz_Nodos(300) As ClsNodo
Public Num_Nodos As Double
Public Num_Enlaces As Double
Public Num_Abonados_Total As Double
Public Traf_Abonados_Voz As Double
Public Traf_Abonados_Datos As Double
Public Traf_Total_Red As Double
Public Retardo_Total_Red As Double
Public Traf_Int_Total As Double
Public Num_Saltos As Double
Public Retardo_Vacio As Double
Public Punto_Satura As Double
Public Num_Iter As Integer
Public Tasa_Inc_Costos As Double
Public Tasa_Costos_Nueva As Double
Public Capacidad_Total_Enlaces As Double
Public Valor_Error As Double
Public Retardo_Nuevo_Red As Double
Public ContClick As Integer
Public X1lin As Double
Cdigo del Programa 55
Public X2lin As Double
Public Y1lin As Double
Public Y2lin As Double
Public X1T As Double
Public Y1T As Double
Public X1nod As Double
Public Y1nod As Double
Public EnlOrg As Integer
Public EnlDest As Integer
Public EnlOrgT As Integer
Public EnlDestT As Integer
Public Xsel As Double
Public TipoTx As Integer
Public Ysel As Double
Public NodoSel As Integer
Public Principal As Integer
Public Secundario As Integer
Public EnlaceSel As Integer
Public mlin As Double
Public mp1psel As Double
Public mp2psel As Double
Public dlin As Double
Public dp1psel As Double
Public dp2psel As Double
Public CapEnl As Double
Public FlujoEnl As Double
Public CapNodo As Double
Public NumAbon As Double
Public LineaTexto As Variant
Public LineaTexto1 As Variant
Public NumEnlNodO As Double
Public NumEnlNodD As Double
Public NumNodosB As Double
Public NumEnlB As Double

Mdulos de clase

Clase de Enlaces

Option Explicit
Private mvarNodo_Origen As Integer 'copia local
Private mvarNodo_Destino As Integer 'copia local
Private mvarCapacidad_Canal As Double 'copia local
Private mvarTipo_tx As String 'copia local
Private mvarProb_Error As Double 'copia local
Private mvarFlujo_Canal As Double 'copia local
Private mvarProb_Conexin As Double 'copia local
Private mvarTraf_Canal As Double 'copia local
Private mvarRetardo_Canal As Double 'copia local
Private mvarFlujo_Bits_Canal As Double 'copia local
Private mvarFactor_Utilizacin As Double 'copia local
Private mvarSensib_Canal As Double 'copia local
Private mvarTraf_Canal_Nuevo As Double 'copia local
Private mvarFlujo_Bits_Nuevo As Double 'copia local
Private mvarCapacidad_porcentual As Double 'copia local
Private mvarGen_Aleat As Double 'copia local
Cdigo del Programa 56
Private mvarNum_Aleat As Double 'copia local
Private mvarNum_Exp_Aleat As Double 'copia local
Private mvarNum_Aleat2 As Double 'copia local
Private mvarNum_Exp_Aleat2 As Double 'copia local
Private mvarX1 As Double 'copia local
Private mvarX2 As Double 'copia local
Private mvarY1 As Double 'copia local
Private mvarY2 As Double 'copia local
Private mvarEnlace_Activo As Integer 'copia local
Private mvarNodo_Origen_Borra As Double 'copia local
Private mvarNodo_Destino_Borra As Double 'copia local
Private mvarCapacidadMod As Double 'copia local
Private mvarAnchodeBanda As Double 'copia local
Public Property Let AnchodeBanda(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.AnchodeBanda =5
mvarAnchodeBanda =vData
End Property
Public Property Get AnchodeBanda() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.AnchodeBanda
AnchodeBanda =mvarAnchodeBanda
End Property
Public Property Let CapacidadMod(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.CapacidadMod =5
mvarCapacidadMod =vData
End Property
Public Property Get CapacidadMod() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.CapacidadMod
CapacidadMod =mvarCapacidadMod
End Property
Public Property Let Nodo_Destino_Borra(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Nodo_Destino_Borra =5
mvarNodo_Destino_Borra =vData
End Property
Public Property Get Nodo_Destino_Borra() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Nodo_Destino_Borra
Nodo_Destino_Borra =mvarNodo_Destino_Borra
End Property
Public Property Let Nodo_Origen_Borra(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Nodo_Origen_Borra =5
mvarNodo_Origen_Borra =vData
End Property
Public Property Get Nodo_Origen_Borra() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Nodo_Origen_Borra
Nodo_Origen_Borra =mvarNodo_Origen_Borra
End Property
Public Property Let Enlace_Activo(ByVal vData As Integer)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Enlace_Activo =5
Cdigo del Programa 57
mvarEnlace_Activo =vData
End Property
Public Property Get Enlace_Activo() As Integer
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Enlace_Activo
Enlace_Activo =mvarEnlace_Activo
End Property
Public Property Let Y2(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Y2 =5
mvarY2 =vData
End Property
Public Property Get Y2() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Y2
Y2 =mvarY2
End Property
Public Property Let Y1(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Y1 =5
mvarY1 =vData
End Property
Public Property Get Y1() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Y1
Y1 =mvarY1
End Property
Public Property Let X2(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.X2 =5
mvarX2 =vData
End Property
Public Property Get X2() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.X2
X2 =mvarX2
End Property
Public Property Let X1(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.X1 =5
mvarX1 =vData
End Property
Public Property Get X1() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.X1
X1 =mvarX1
End Property
Public Property Let Num_Exp_Aleat2(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Num_Exp_Aleat2 =5
mvarNum_Exp_Aleat2 =vData
End Property
Public Property Get Num_Exp_Aleat2() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Num_Exp_Aleat2
Num_Exp_Aleat2 =mvarNum_Exp_Aleat2
Cdigo del Programa 58
End Property
Public Property Let Num_Aleat2(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Num_Aleat2 =5
mvarNum_Aleat2 =vData
End Property
Public Property Get Num_Aleat2() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Num_Aleat2
Num_Aleat2 =mvarNum_Aleat2
End Property
Public Property Let Num_Exp_Aleat(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Num_Exp_Aleat =5
mvarNum_Exp_Aleat =vData
End Property
Public Property Get Num_Exp_Aleat() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Num_Exp_Aleat
Num_Exp_Aleat =mvarNum_Exp_Aleat
End Property
Public Property Let Num_Aleat(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Num_Aleat =5
mvarNum_Aleat =vData
End Property
Public Property Get Num_Aleat() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Num_Aleat
Num_Aleat =mvarNum_Aleat
End Property
Public Property Let Gen_Aleat(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Gen_Aleat =5
mvarGen_Aleat =vData
End Property
Public Property Get Gen_Aleat() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Gen_Aleat
Gen_Aleat =mvarGen_Aleat
End Property
Public Property Let Capacidad_porcentual(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Capacidad_porcentual =5
mvarCapacidad_porcentual =vData
End Property
Public Property Get Capacidad_porcentual() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Capacidad_porcentual
Capacidad_porcentual =mvarCapacidad_porcentual
End Property
'funcin pblica de generacin aleatoria de nmeros
Public Function GenAleat() As Double
'declaracin de variables e inicializacin de las mismas
Dim Parar As Integer
Dim a As Double
Cdigo del Programa 59
Dim NumAleat As Double
Dim NumExpAleat As Double
Parar =0
While Parar <=10
a =Matriz_Enlaces(1).Flujo_Canal
'Inicializar el generador
Randomize
'a es la Tasa de llegadas
'a =2
'b es la Tasa de servicio (debe ser >a
'para que la cola no crezca indefinidamente
'b =5
'Genera un nmero entre 0 y 1
NumAleat =1 * Rnd
'Muestrea la funcin exponencial
NumExpAleat =Log(-1 / (NumAleat - 1)) / (a)
GenAleat =NumAleat
Parar =Parar +1
Wend
End Function
Public Property Let Flujo_Bits_Nuevo(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Flujo_Bits_Nuevo =5
mvarFlujo_Bits_Nuevo =vData
End Property
Public Property Get Flujo_Bits_Nuevo() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Flujo_Bits_Nuevo
Flujo_Bits_Nuevo =mvarFlujo_Bits_Nuevo
End Property
Public Property Let Traf_Canal_Nuevo(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Traf_Canal_Nuevo =5
mvarTraf_Canal_Nuevo =vData
End Property
Public Property Get Traf_Canal_Nuevo() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Traf_Canal_Nuevo
Traf_Canal_Nuevo =mvarTraf_Canal_Nuevo
End Property
Public Property Let Sensib_Canal(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Sensib_Canal =5
mvarSensib_Canal =vData
End Property
Public Property Get Sensib_Canal() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Sensib_Canal
Sensib_Canal =mvarSensib_Canal
End Property
Public Property Let Factor_Utilizacin(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Factor_Utilizacin =5
mvarFactor_Utilizacin =vData
End Property
Public Property Get Factor_Utilizacin() As Double
Cdigo del Programa 60
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Factor_Utilizacin
Factor_Utilizacin =mvarFactor_Utilizacin
End Property
Public Property Let Flujo_Bits_Canal(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Flujo_Bits_Canal =5
mvarFlujo_Bits_Canal =vData
End Property
Public Property Get Flujo_Bits_Canal() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Flujo_Bits_Canal
Flujo_Bits_Canal =mvarFlujo_Bits_Canal
End Property
Public Property Let Retardo_Canal(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Retardo_Canal =5
mvarRetardo_Canal =vData
End Property
Public Property Get Retardo_Canal() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Retardo_Canal
Retardo_Canal =mvarRetardo_Canal
End Property
Public Property Let Traf_Canal(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Traf_Canal =5
mvarTraf_Canal =vData
End Property
Public Property Get Traf_Canal() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Traf_Canal
Traf_Canal =mvarTraf_Canal
End Property
Public Property Let Prob_Conexin(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Prob_Conexin =5
mvarProb_Conexin =vData
End Property
Public Property Get Prob_Conexin() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Prob_Conexin
Prob_Conexin =mvarProb_Conexin
End Property
Public Property Let Flujo_Canal(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Flujo_Canal =5
mvarFlujo_Canal =vData
End Property
Public Property Get Flujo_Canal() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Flujo_Canal
Flujo_Canal =mvarFlujo_Canal
End Property
Public Property Let Prob_Error(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
Cdigo del Programa 61
'Syntax: X.Prob_Error =5
mvarProb_Error =vData
End Property
Public Property Get Prob_Error() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Prob_Error
Prob_Error =mvarProb_Error
End Property
Public Property Let Tipo_tx(ByVal vData As String)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Tipo_tx =5
mvarTipo_tx =vData
End Property
Public Property Get Tipo_tx() As String
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Tipo_tx
Tipo_tx =mvarTipo_tx
End Property
Public Property Let Capacidad_Canal(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Capacidad_Canal =5
mvarCapacidad_Canal =vData
End Property
Public Property Get Capacidad_Canal() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Capacidad_Canal
Capacidad_Canal =mvarCapacidad_Canal
End Property
Public Property Let Nodo_Destino(ByVal vData As Integer)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Nodo_Destino =5
mvarNodo_Destino =vData
End Property
Public Property Get Nodo_Destino() As Integer
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Nodo_Destino
Nodo_Destino =mvarNodo_Destino
End Property
Public Property Let Nodo_Origen(ByVal vData As Integer)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Nodo_Origen =5
mvarNodo_Origen =vData
End Property
Public Property Get Nodo_Origen() As Integer
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Nodo_Origen
Nodo_Origen =mvarNodo_Origen
End Property

Clase de Nodos

'variables locales para almacenar los valores de las propiedades
Private Mat_Nodos_Enlaces(100, 1) As Double
Private mvarNum_Enlaces_Nodo As Integer 'copia local
Private mvarNum_Abonados As Double 'copia local
Private mvarCapacidad_Nodo As Double 'copia local
Cdigo del Programa 62
Private mvarClase_Nodo As Double 'copia local
Private mvarTraf_Int_Nodo As Double 'copia local
Private mvarTraf_Ext_Nodo As Double 'copia local
Private mvarMatriz_Nodos_Enlaces(100) As Double 'copia local
Private mvarFlujo_bps_Ext As Double 'copia local
Private mvarFlujo_bps_Int As Double 'copia local
Private mvarFlujo_Llegada_Nodo As Double 'copia local
Private mvarCap_Tot_Enlaces_Nodo As Double 'copia local
Private mvarPorcentaje_Serv_Nodo As Double 'copia local
Private mvarRetardo_Cola As Double 'copia local
Private mvarNum_Nodo As Integer 'copia local
Private mvarNum_Canal As Double 'copia local
Private mvarNum_Enlaces_Llegada As Integer 'copia local
Private mvarX1 As Double 'copia local
Private mvarY1 As Double 'copia local
Private mvarX2 As Double 'copia local
Private mvarY2 As Double 'copia local
Private mvarNodo_Activo As Integer 'copia local
Private mvarIntervalo As Double 'copia local
Private mvarHoraLlegada As Double 'copia local
Private mvarServicio As Double 'copia local
Private mvarEntraServicio As Double 'copia local
Private mvarTerminaServicio As Double 'copia local
Private mvarEspera As Double 'copia local
Private mvarEsperaProm As Double 'copia local
Private mvarHoraLlegada2 As Double 'copia local
Private mvarVeces As Double 'copia local
Private mvarEspera1 As Double 'copia local
Private mvarEsperaTotal As Double 'copia local
Private mvarCapTotalEnlacesLlegada As Double 'copia local
Private mvarPocentaje_Llegada_Nodo As Double 'copia local
Public Property Let Pocentaje_Llegada_Nodo(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Pocentaje_Llegada_Nodo =5
mvarPocentaje_Llegada_Nodo =vData
End Property
Public Property Get Pocentaje_Llegada_Nodo() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Pocentaje_Llegada_Nodo
Pocentaje_Llegada_Nodo =mvarPocentaje_Llegada_Nodo
End Property
Public Property Let CapTotalEnlacesLlegada(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.CapTotalEnlacesLlegada =5
mvarCapTotalEnlacesLlegada =vData
End Property
Public Property Get CapTotalEnlacesLlegada() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.CapTotalEnlacesLlegada
CapTotalEnlacesLlegada =mvarCapTotalEnlacesLlegada
End Property
Public Property Let EsperaTotal(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.EsperaTotal =5
mvarEsperaTotal =vData
End Property
Cdigo del Programa 63
Public Property Get EsperaTotal() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.EsperaTotal
EsperaTotal =mvarEsperaTotal
End Property
Public Property Let Espera1(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Espera1 =5
mvarEspera1 =vData
End Property
Public Property Get Espera1() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Espera1
Espera1 =mvarEspera1
End Property
Public Property Let Veces(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Veces =5
mvarVeces =vData
End Property
Public Property Get Veces() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Veces
Veces =mvarVeces
End Property
Public Property Let HoraLlegada2(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.HoraLlegada2 =5
mvarHoraLlegada2 =vData
End Property
Public Property Get HoraLlegada2() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.HoraLlegada2
HoraLlegada2 =mvarHoraLlegada2
End Property
Public Property Let EsperaProm(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.EsperaProm=5
mvarEsperaProm =vData
End Property
Public Property Get EsperaProm() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.EsperaProm
EsperaProm =mvarEsperaProm
End Property
Public Property Let Espera(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Espera =5
mvarEspera =vData
End Property
Public Property Get Espera() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Espera
Espera =mvarEspera
End Property
Public Property Let TerminaServicio(ByVal vData As Double)
Cdigo del Programa 64
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.TerminaServicio =5
mvarTerminaServicio =vData
End Property
Public Property Get TerminaServicio() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.TerminaServicio
TerminaServicio =mvarTerminaServicio
End Property
Public Property Let EntraServicio(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.EntraServicio =5
mvarEntraServicio =vData
End Property
Public Property Get EntraServicio() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.EntraServicio
EntraServicio =mvarEntraServicio
End Property
Public Property Let Servicio(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Servicio =5
mvarServicio =vData
End Property
Public Property Get Servicio() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Servicio
Servicio =mvarServicio
End Property
Public Property Let HoraLlegada(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.HoraLlegada =5
mvarHoraLlegada =vData
End Property
Public Property Get HoraLlegada() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.HoraLlegada
HoraLlegada =mvarHoraLlegada
End Property
Public Property Let Intervalo(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Intervalo =5
mvarIntervalo =vData
End Property
Public Property Get Intervalo() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Intervalo
Intervalo =mvarIntervalo
End Property
Public Property Let Nodo_Activo(ByVal vData As Integer)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Nodo_Activo =5
mvarNodo_Activo =vData
End Property
Public Property Get Nodo_Activo() As Integer
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
Cdigo del Programa 65
'Syntax: Debug.Print X.Nodo_Activo
Nodo_Activo =mvarNodo_Activo
End Property
Public Property Let Y2(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Y2 =5
mvarY2 =vData
End Property
Public Property Get Y2() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Y2
Y2 =mvarY2
End Property
Public Property Let X2(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.X2 =5
mvarX2 =vData
End Property
Public Property Get X2() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.X2
X2 =mvarX2
End Property
Public Property Let Y1(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Y1 =5
mvarY1 =vData
End Property
Public Property Get Y1() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Y1
Y1 =mvarY1
End Property
Public Property Let X1(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.X1 =5
mvarX1 =vData
End Property
Public Property Get X1() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.X1
X1 =mvarX1
End Property
Public Property Let Num_Enlaces_Llegada(ByVal vData As Integer)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Num_Enlaces_Llegada =5
mvarNum_Enlaces_Llegada =vData
End Property
Public Property Get Num_Enlaces_Llegada() As Integer
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Num_Enlaces_Llegada
Num_Enlaces_Llegada =mvarNum_Enlaces_Llegada
End Property
'variables locales para almacenar los valores de las propiedades
Public Function guarda(ind As Double, canal As Variant, destino As Variant)
Mat_Nodos_Enlaces(ind, 0) =canal
Cdigo del Programa 66
Mat_Nodos_Enlaces(ind, 1) =destino
End Function
'este mtodo de la clase guarda informacin de la red en la matriz de cada nodo
Public Function guarda1(ind As Double, canal As Variant, destino As Variant)
Mat_Nodos_Enlaces(ind, 0) =canal
Mat_Nodos_Enlaces(ind, 1) =destino
End Function
'recupera valores de la matriz de cada nodo
Public Function lee2(ind As Double, ind1 As Double) As Double
lee2 =Mat_Nodos_Enlaces(ind, ind1)
End Function
'recupera valores de la matriz de cada nodo
Public Function lee(ind As Double) As Double
lee =Mat_Nodos_Enlaces(ind, 0)
End Function
'recupera valores de la matriz de cada nodo
Public Function lee1(ind As Double) As Double
lee1 =Mat_Nodos_Enlaces(ind, 1)
End Function
Public Property Let Num_Canal(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Num_Canal =5
mvarNum_Canal =vData
End Property
Public Property Get Num_Canal() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Num_Canal
Num_Canal =mvarNum_Canal
End Property
Public Property Let Num_Nodo(ByVal vData As Integer)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Num_Nodo =5
mvarNum_Nodo =vData
End Property
Public Property Get Num_Nodo() As Integer
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Num_Nodo
Num_Nodo =mvarNum_Nodo
End Property
Public Property Let Retardo_Cola(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Retardo_Cola =5
mvarRetardo_Cola =vData
End Property
Public Property Get Retardo_Cola() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Retardo_Cola
Retardo_Cola =mvarRetardo_Cola
End Property
Public Property Let Porcentaje_Serv_Nodo(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Porcentaje_Serv_Nodo =5
mvarPorcentaje_Serv_Nodo =vData
End Property
Public Property Get Porcentaje_Serv_Nodo() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
Cdigo del Programa 67
'Syntax: Debug.Print X.Porcentaje_Serv_Nodo
Porcentaje_Serv_Nodo =mvarPorcentaje_Serv_Nodo
End Property
Public Property Let Cap_Tot_Enlaces_Nodo(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Cap_Tot_Enlaces_Nodo =5
mvarCap_Tot_Enlaces_Nodo =vData
End Property
Public Property Get Cap_Tot_Enlaces_Nodo() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Cap_Tot_Enlaces_Nodo
Cap_Tot_Enlaces_Nodo =mvarCap_Tot_Enlaces_Nodo
End Property
Public Property Let Flujo_Llegada_Nodo(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Flujo_Llegada_Nodo =5
mvarFlujo_Llegada_Nodo =vData
End Property
Public Property Get Flujo_Llegada_Nodo() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Flujo_Llegada_Nodo
Flujo_Llegada_Nodo =mvarFlujo_Llegada_Nodo
End Property
Public Property Let Flujo_bps_Int(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Flujo_bps_Int =5
mvarFlujo_bps_Int =vData
End Property
Public Property Get Flujo_bps_Int() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Flujo_bps_Int
Flujo_bps_Int =mvarFlujo_bps_Int
End Property
Public Property Let Flujo_bps_Ext(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Flujo_bps_Ext =5
mvarFlujo_bps_Ext =vData
End Property
Public Property Get Flujo_bps_Ext() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Flujo_bps_Ext
Flujo_bps_Ext =mvarFlujo_bps_Ext
End Property
'calcula el retardo que experimenta el mensaje al entrar a la cola de espera del nodo
Public Function Cola_Espera(a As Double, b As Double, Cont_Enlace As Integer) As Double
'Declaracin de la variable
Dim i As Integer
Dim Temp As Double
Dim Parar As Integer
i =Cont_Enlace
a =Matriz_Nodos(i).Pocentaje_Llegada_Nodo
b =Matriz_Nodos(i).Porcentaje_Serv_Nodo
Dim RNum1
Dim RExp1
Dim RNum2 As Double
Dim RExp2 As Double
Cdigo del Programa 68
'Inicializar el generador
Randomize
RNum1 =1 * Rnd
RNum2 =1 * Rnd
'Muestrea la funcin exponencial
RExp1 =Log(-1 / (RNum1 - 1)) / (a)
RExp2 =Log(-1 / (RNum2 - 1)) / (b)
'Realiza los clculos de la cola de espera
Matriz_Nodos(i).Intervalo =RExp1
Matriz_Nodos(i).HoraLlegada2 =Matriz_Nodos(i).HoraLlegada +Matriz_Nodos(i).Intervalo
Matriz_Nodos(i).HoraLlegada =Matriz_Nodos(i).HoraLlegada2
Matriz_Nodos(i).Servicio =RExp2
If Matriz_Nodos(i).TerminaServicio >Matriz_Nodos(i).HoraLlegada2 Then
Matriz_Nodos(i).EntraServicio =Matriz_Nodos(i).TerminaServicio
End If
If Matriz_Nodos(i).TerminaServicio <Matriz_Nodos(i).HoraLlegada2 Then
Matriz_Nodos(i).EntraServicio =Matriz_Nodos(i).HoraLlegada2
End If
Matriz_Nodos(i).TerminaServicio =Matriz_Nodos(i).EntraServicio +Matriz_Nodos(i).Servicio
Matriz_Nodos(i).Espera =Matriz_Nodos(i).EntraServicio - Matriz_Nodos(i).HoraLlegada2
Matriz_Nodos(i).Espera1 =Matriz_Nodos(i).Espera
Matriz_Nodos(i).Veces =Matriz_Nodos(i).Veces +1
Matriz_Nodos(i).EsperaTotal =Matriz_Nodos(i).Espera +Matriz_Nodos(i).Espera1
Matriz_Nodos(i).EsperaProm =Matriz_Nodos(i).EsperaTotal / Matriz_Nodos(i).Veces
Cola_Espera =Matriz_Nodos(i).Espera 'actualiza el retardo al parmetro correspondiente
End Function
Public Property Let Traf_Ext_Nodo(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Traf_Ext_Nodo =5
mvarTraf_Ext_Nodo =vData
End Property
Public Property Get Traf_Ext_Nodo() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Traf_Ext_Nodo
Traf_Ext_Nodo =mvarTraf_Ext_Nodo
End Property
Public Property Let Traf_Int_Nodo(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Traf_Int_Nodo =5
mvarTraf_Int_Nodo =vData
End Property
Public Property Get Traf_Int_Nodo() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Traf_Int_Nodo
Traf_Int_Nodo =mvarTraf_Int_Nodo
End Property
Public Property Let Clase_Nodo(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Clase_Nodo =5
mvarClase_Nodo =vData
End Property
Public Property Get Clase_Nodo() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Clase_Nodo
Clase_Nodo =mvarClase_Nodo
End Property
Cdigo del Programa 69
Public Property Let Capacidad_Nodo(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Capacidad_Nodo =5
mvarCapacidad_Nodo =vData
End Property
Public Property Get Capacidad_Nodo() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Capacidad_Nodo
Capacidad_Nodo =mvarCapacidad_Nodo
End Property
Public Property Let Num_Abonados(ByVal vData As Double)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Num_Abonados =5
mvarNum_Abonados =vData
End Property
Public Property Get Num_Abonados() As Double
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Num_Abonados
Num_Abonados =mvarNum_Abonados
End Property
Public Property Let Num_Enlaces_Nodo(ByVal vData As Integer)
'se usa al asignar un valor a la propiedad, en la parte izquierda de una asignacin.
'Syntax: X.Num_Enlaces_Nodo =5
mvarNum_Enlaces_Nodo =vData
End Property
Public Property Get Num_Enlaces_Nodo() As Integer
'se usa al recuperar un valor de una propiedad, en la parte derecha de una asignacin.
'Syntax: Debug.Print X.Num_Enlaces_Nodo
Num_Enlaces_Nodo =mvarNum_Enlaces_Nodo
End Property
Private Sub Class_Initialize()
End Sub

También podría gustarte