/// <summary> /// intilize the MAC /// </summary> /// <param name="_Node"></param> public BoXMAC(Sensor _Node) { Node = _Node; if (Node != null) { if (Node.ID != PublicParamerters.SinkNode.ID) { double xpasn = 1 + UnformRandomNumberGenerator.GetUniformSleepSec(MacStartUp); // the swich on timer. SwichOnTimer.Interval = TimeSpan.FromSeconds(xpasn); SwichOnTimer.Start(); SwichOnTimer.Tick += ASwichOnTimer_Tick; ActiveCounter = 0; // active/sleep timer: ActiveSleepTimer.Interval = TimeSpan.FromSeconds(1);// the intervale is one second. ActiveSleepTimer.Tick += ActiveSleepTimer_Tick;; SleepCounter = 0; // intialized: Node.CurrentSensorState = SensorStatus.intalized; Node.Ellipse_MAC.Fill = NodeStateColoring.IntializeColor; } } else { // the PublicParamerters.SinkNode.CurrentSensorState = SensorStatus.Active; } }
private int GetUniformDirection() { int nd = Convert.ToInt16(Math.Abs(UnformRandomNumberGenerator.GetUniform(8))); //checkTheNewDirection(nd); return(nd); }
private void btn_compute_Click(object sender, RoutedEventArgs e) { PublicParamerters.FinishedRoutedPackets.Clear(); int NOS = Convert.ToInt16(com_nos.Text); int NOP = Convert.ToInt16(com_nop.Text); double dist = Convert.ToDouble(com_distance.Text); List <Sensor> SelectNodesWithinDistanceN = SelectNodesWithinDistance(dist); if (SelectNodesWithinDistanceN != null) { // selecte The Nodes: List <Sensor> SelectedSn = new List <Sensor>(NOS); for (int i = 0; i < NOS; i++) { int ran = Convert.ToInt16(UnformRandomNumberGenerator.GetUniform(SelectNodesWithinDistanceN.Count - 1)); if (ran > 0) { SelectedSn.Add(SelectNodesWithinDistanceN[ran]); } else { SelectedSn.Add(SelectNodesWithinDistanceN[1]); } } foreach (Sensor sen in SelectedSn) { sen.GenerateMultipleDataPackets(NOP); } } }
/// <summary> /// how many sensor to be slected. /// how many packet each sensor will sent. /// </summary> /// <param name="NOS"></param> /// <param name="NOP"></param> public void RandimSelect(List <Sensor> Network, int NOS, int NOP) { // selecte The Nodes: List <Sensor> SelectedSn = new List <Modules.Sensor>(NOS); for (int i = 0; i < NOS; i++) { int ran = Convert.ToInt16(UnformRandomNumberGenerator.GetUniform(Network.Count - 1)); if (ran > 0) { SelectedSn.Add(Network[ran]); } else { SelectedSn.Add(Network[1]); } } // each packet sendt NOP: for (int i = 0; i < NOP; i++) { foreach (Sensor sen in SelectedSn) { sen.GeneratePacketAndSent(false, Settings.Default.EnergyDistCnt, Settings.Default.TransDistanceDistCnt, Settings.Default.DirectionDistCnt, Settings.Default.PrepDistanceDistCnt); } } } // end class random generated.
/// <summary> /// how many sensor to be slected. /// how many packet each sensor will sent. /// </summary> /// <param name="NOS"></param> /// <param name="NOP"></param> public void RandimSelect(List <Sensor> Network, int NOS, int NOP) { // selecte The Nodes: List <Sensor> SelectedSn = new List <Modules.Sensor>(NOS); for (int i = 0; i < NOS; i++) { int ran = Convert.ToInt16(UnformRandomNumberGenerator.GetUniform(Network.Count - 1)); if (ran > 0) { SelectedSn.Add(Network[ran]); } else { SelectedSn.Add(Network[1]); } } // each packet sendt NOP: for (int i = 0; i < NOP; i++) { foreach (Sensor sen in SelectedSn) { sen.GeneratePacekts(); } } } // end class random generated.
/// <summary> /// perform the experment. /// </summary> /// <param name="distance"></param> /// <param name="NOS"></param> /// <param name="NOP"></param> public EnergyConsmption2 DoExperment(double distance, int NOS, int NOP) { List <Sensor> SelectNodesWithinDistanceN = SelectNodesWithinDistance(distance); if (SelectNodesWithinDistanceN != null) { // selecte The Nodes: List <Sensor> SelectedSn = new List <Modules.Sensor>(NOS); for (int i = 0; i < NOS; i++) { int ran = Convert.ToInt16(UnformRandomNumberGenerator.GetUniform(SelectNodesWithinDistanceN.Count - 1)); if (ran > 0) { SelectedSn.Add(SelectNodesWithinDistanceN[ran]); } else { SelectedSn.Add(SelectNodesWithinDistanceN[1]); } } // each packet sendt NOP: for (int i = 0; i < NOP; i++) { foreach (Sensor sen in SelectedSn) { sen.GeneratePacketAndSent(); // sen.GeneratePacketAndSent(false, Settings.Default.EnergyDistCnt, Settings.Default.TransDistanceDistCnt, Settings.Default.DirectionDistCnt, Settings.Default.PrepDistanceDistCnt); } } EnergyConsmption2 re = new ExpermentsResults.EnergyConsmption2(); re.Distance = distance; re.NOP = NOP; re.Nodes = SelectedSn; re.NOS = NOS; re.Number_of_RecievedPackets = PublicParamerters.SinkNode.PacketsList.Count; foreach (DataPacket.Datapacket pa in PublicParamerters.SinkNode.PacketsList) { re.EnergyConsumption += pa.UsedEnergy_Joule; re.SumRoutingEfficiency += pa.RoutingEfficiency; } PublicParamerters.SinkNode.PacketsList.Clear();// clear. return(re); } else { System.Windows.MessageBox.Show("Distance is too short it should be 2*sensang range"); return(null); } }
private void RandomSelectNodes_Tick(object sender, EventArgs e) { // start sending after the nodes are intilized all. if (PublicParamerters.SimulationTime > PublicParamerters.MacStartUp) { int index = 1 + Convert.ToInt16(UnformRandomNumberGenerator.GetUniform(PublicParamerters.NumberofNodes - 2)); if (index != PublicParamerters.SinkNode.ID) { myNetWork[index].GeneratePacketAndSent(); } } }
private void RandomSelectNodes_Tick(object sender, EventArgs e) { // start sending after the nodes are intilized all. if (PublicParamerters.SimulationTime < stopSimlationWhen) { int index = 1 + Convert.ToInt16(UnformRandomNumberGenerator.GetUniform(myNetWork.Count - 2)); if (index != PublicParamerters.SinkNode.ID) { myNetWork[index].GeneratePacketAndSent(false, Settings.Default.EnergyDistCnt, Settings.Default.TransDistanceDistCnt, Settings.Default.DirectionDistCnt, Settings.Default.PrepDistanceDistCnt); } } }
public void RandomSelectEndNodes(int numOFpACKETS) { if (PublicParamerters.SimulationTime > PublicParamerters.MacStartUp) { int index = 1 + Convert.ToInt16(UnformRandomNumberGenerator.GetUniform(PublicParamerters.NumberofNodes - 2)); if (index != PublicParamerters.SinkNode.ID) { Sensor endNode = MainWindow.myNetWork[index]; GenerateMultipleControlPackets(numOFpACKETS, endNode); } } }
private void UplinkPacketsGenerate_Tirk(object sender, EventArgs e) { UplinkalreadyGeneratedPackets++; if (UplinkalreadyGeneratedPackets <= UplinkTobeGeneratedPackets) { int index = 1 + Convert.ToInt16(UnformRandomNumberGenerator.GetUniform(PublicParamerters.NumberofNodes - 2)); // myNetWork[index].GenerateDataPacket(); } else { RandomSelectSourceNodesTimer.Interval = TimeSpan.FromSeconds(0); RandomSelectSourceNodesTimer.Stop(); UplinkalreadyGeneratedPackets = 0; UplinkTobeGeneratedPackets = 0; } }
private void RandomSelectSourceNodesTimer_Tick(object sender, EventArgs e) { if (PublicParamerters.NumberofGeneratedPackets < xPackets) { int index = 1 + Convert.ToInt16(UnformRandomNumberGenerator.GetUniform(PublicParamerters.NumberofNodes - 2)); myNetWork[index].GeneratePacketAndSent(); Console.WriteLine("Target" + xPackets + ". Generated:" + PublicParamerters.NumberofGeneratedPackets.ToString()); } else { RandomSelectSourceNodesTimer.Interval = TimeSpan.FromSeconds(0); RandomSelectSourceNodesTimer.Stop(); xPackets = 0; Console.WriteLine("Finised"); } }
private void DownLINKRandomSentAnumberofPackets(object sender, EventArgs e) { DownlinkAlreadyGenerated++; if (DownlinkAlreadyGenerated <= DownlinkTobeGenerated) { int index = Convert.ToInt16(UnformRandomNumberGenerator.GetUniform(PublicParameters.NumberofNodes - 2)); Sensor EndNode = myNetWork[index]; PublicParameters.SinkNode.GenerateControlPacket(EndNode); } else { RandomSelectSourceNodesTimer.Interval = TimeSpan.FromSeconds(0); RandomSelectSourceNodesTimer.Stop(); DownlinkAlreadyGenerated = 0; DownlinkTobeGenerated = 0; } }
/// <summary> /// how many sensor to be slected. /// how many packet each sensor will sent. /// </summary> /// <param name="NOS"></param> /// <param name="NOP"></param> public void RandimSelect(List <Sensor> Network, int NOS, int NOP) { // selecte The Nodes: List <Sensor> SelectedSn = new List <Dataplane.Sensor>(NOS); for (int i = 0; i < NOS; i++) { int ran = 1 + Convert.ToInt16(UnformRandomNumberGenerator.GetUniform(Network.Count - 2)); SelectedSn.Add(Network[ran]); } // each packet sendt NOP: for (int i = 0; i < NOP; i++) { foreach (Sensor sen in SelectedSn) { sen.GenerateDataPacket(); } } } // end class random generated.
/// <summary> /// intilize the MAC /// </summary> /// <param name="_Node"></param> public BoXMAC(Sensor _Node) { Node = _Node; ActivePeriod = Periods.ActivePeriod; //初始值为系统默认值 SleepPeriod = Periods.SleepPeriod; //初始值为系统默认值 if (Node != null) { if (Node.ID != PublicParamerters.SinkNode.ID)//设置非sink节点的醒睡模式 { //为了实现异步通信,每个节点开启醒睡模式的时刻不同 double xpasn = UnformRandomNumberGenerator.GetUniformSleepSec(MacStartUp); // the swich on timer. SwichOnTimer.Interval = TimeSpan.FromSeconds(xpasn); SwichOnTimer.Start(); SwichOnTimer.Tick += ASwichOnTimer_Tick; SleepCounter = 0; //睡计时器 ActiveCounter = 0; //醒计数器,表示节点处于当前模式的时间 // active/sleep timer:定时改变SensorState的值,分别用Active表示醒,Sleep表示睡 // ActiveSleepTimer.Interval = TimeSpan.FromSeconds(1); ActiveSleepTimer.Interval = TimeSpan.FromMilliseconds(CheckActiveSleepTime); ActiveSleepTimer.Tick += ActiveSleepTimer_Tick; //检测节点等待队列定时器的相关设置 QueueTimer.Interval = TimeSpan.FromMilliseconds(CheckQueueTime); QueueTimer.Tick += QueueTimer_Tick; // intialized: Node.CurrentSensorState = SensorState.intalized; Node.Ellipse_MAC.Fill = NodeStateColoring.IntializeColor; } else { // sink节点的状态永远是Active PublicParamerters.SinkNode.CurrentSensorState = SensorState.Active; } } }
/// <summary> /// generate packet. start by obtian. /// </summary> private void GenerateRandomPacket() { int index = 1 + Convert.ToInt16(UnformRandomNumberGenerator.GetUniform(PublicParamerters.NumberofNodes - 2)); Sensor sensor = myNetWork[index]; ObtainSinkFreshPositionMessage ob = new ObtainSinkFreshPositionMessage(sensor); }