public void DealPacket_AppTraQos(object pack) { if (this.state.isSceneSetUp == false)//因为确定是主线程才会调用此函数所以不用锁 { return; } //this.RdXml.packetNum2[7]++; //for test RD_QosPerfomance rd = (RD_QosPerfomance)pack; Chart chart; int index = this.chartView.m_chartParam.mIx_TraQos.FindIndex(str => str == rd.TrafficName_SD); int bit2Ratio = 1000; //bit单位转换的比率 //kb/s if (index == -1) //未添加过该条业务流,新建chart { TreeNode node = new TreeNode(rd.TrafficName_SD); int index2 = this.chartView.AddNodeOn2(node, "业务流Qos性能"); if (index2 == -1) //node添加失败 { return; } chart = ChartParam.CreateChart(this.chartView.m_chartTemplate, 4, 4); chart.Name = "chart" + (this.chartView.m_chartParam.chartCount++).ToString(); //所有chart名称不一样 chart.Series[0].Name = "发送量(kb/s)"; //如果修改转换比率要修改上面的bit2Ratio chart.Series[1].Name = "接收量(kb/s)"; chart.Series[2].Name = "时延(ms)"; //"时延(ms)";//20150928修改 chart.Series[3].Name = "时延抖动(ms)"; //"时延抖动(ms)"; this.chartView.Controls.Add(chart); this.chartView.m_chartParam.mIx_TraQos.Add(rd.TrafficName_SD); this.chartView.m_chartParam.mCs_TraQos.Add(chart); TreeNodeTag nodeTag = new TreeNodeTag(2, chart, index2);//index2为添加的节点在其父节点的子节点的索引 node.Tag = nodeTag; } else { chart = this.chartView.m_chartParam.mCs_TraQos[index]; } chart.Series[0].Points.AddXY(rd.simTime, rd.AppTrafficSend / bit2Ratio); chart.Series[1].Points.AddXY(rd.simTime, rd.AppTrafficRcvd / bit2Ratio); if (rd.DelayTime != -1) { chart.Series[2].Points.AddXY(rd.simTime, rd.DelayTime * 1000); //单位ms 20150928修改 } if (rd.DelayVar != -1) { chart.Series[3].Points.AddXY(rd.simTime, rd.DelayVar * 1000); //单位ms 20150928修改 } }
public void DealPacket_S2gLinkTraffic(object pack) { if (this.state.isSceneSetUp == false)//因为确定是主线程才会调用此函数所以不用锁 { return; } //this.RdXml.packetNum2[3]++; RD_S2GLinkAbility rd = (RD_S2GLinkAbility)pack; double dBytes; double UplinkUtilizationRadio; double DownlinkUtilizationRadio; int index = this.chartView.m_chartParam.mIx_S2GLink_Sat.FindIndex(str => str == rd.SatName); int bit2Ratio = 1000; //bit单位转换的比率 //kb/s if (index == -1) //未添加过该颗星,新建chart { TreeNode node = new TreeNode(rd.SatName); int index2 = this.chartView.AddNodeOn2(node, "对地链路传输能力"); if (index2 == -1) //node添加失败 { return; } List <int> thisBeam = new List <int>(); this.chartView.m_chartParam.mIx_S2GLink_Beam.Add(thisBeam); List <double> thisUp = new List <double>(); this.chartView.m_chartParam.mDt_S2GLink_Up.Add(thisUp); List <double> thisDw = new List <double>(); this.chartView.m_chartParam.mDt_S2GLink_Dw.Add(thisDw); Chart chart = ChartParam.CreateChart(this.chartView.m_chartTemplate, 4, 4); chart.Name = "chart" + (this.chartView.m_chartParam.chartCount++).ToString(); //所有chart名称不一样 chart.Series[0].Name = "上行速率(kb/s)"; //如果修改转换比率要修改上面的bit2Ratio chart.Series[1].Name = "下行速率(kb/s)"; chart.Series[2].Name = "上行利用率(%)"; chart.Series[3].Name = "下行利用率(%)"; dBytes = rd.UplinkTrafficBps / bit2Ratio; thisUp.Add(dBytes); this.chartView.m_chartParam.mDt_S2GLink_Up_Sum.Add(dBytes); chart.Series[0].Points.AddXY(rd.simTime, dBytes); dBytes = rd.DownlinkTrafficBps / bit2Ratio; thisDw.Add(dBytes); this.chartView.m_chartParam.mDt_S2GLink_Dw_Sum.Add(dBytes); chart.Series[1].Points.AddXY(rd.simTime, dBytes); UplinkUtilizationRadio = rd.UplinkTrafficBps * 100 / (2000000.0 * 32 * 32);//占该颗星总的上行速率百分比:2Mbps(速率/信道)*32(信道/波束)*32(波束/星) chart.Series[2].Points.AddXY(rd.simTime, UplinkUtilizationRadio); DownlinkUtilizationRadio = rd.DownlinkTrafficBps * 100 / (10000000.0 * 32 * 32); chart.Series[3].Points.AddXY(rd.simTime, DownlinkUtilizationRadio * 100); this.chartView.Controls.Add(chart); this.chartView.m_chartParam.mCs_S2GLink.Add(chart); this.chartView.m_chartParam.mIx_S2GLink_Sat.Add(rd.SatName); thisBeam.Add(rd.SatbeamID); TreeNodeTag nodeTag = new TreeNodeTag(2, chart, index2);//index2为添加的节点在其父节点的子节点的索引 node.Tag = nodeTag; } else { int index2 = this.chartView.m_chartParam.mIx_S2GLink_Beam[index].FindIndex(beam => beam == rd.SatbeamID); if (index2 == -1) //未添加过此波束,累加并添加到List { this.chartView.m_chartParam.mIx_S2GLink_Beam[index].Add(rd.SatbeamID); dBytes = rd.UplinkTrafficBps / bit2Ratio; //kb/s this.chartView.m_chartParam.mDt_S2GLink_Up[index].Add(dBytes); this.chartView.m_chartParam.mDt_S2GLink_Up_Sum[index] += dBytes; //累加 dBytes = rd.DownlinkTrafficBps / bit2Ratio; //kb/s this.chartView.m_chartParam.mDt_S2GLink_Dw[index].Add(dBytes); this.chartView.m_chartParam.mDt_S2GLink_Dw_Sum[index] += dBytes; //累加 } else //已添加过此波束,减去再添加,同时更新原来的值 { this.chartView.m_chartParam.mDt_S2GLink_Up_Sum[index] -= this.chartView.m_chartParam.mDt_S2GLink_Up[index][index2]; this.chartView.m_chartParam.mDt_S2GLink_Dw_Sum[index] -= this.chartView.m_chartParam.mDt_S2GLink_Dw[index][index2]; dBytes = rd.UplinkTrafficBps / 1000; //kb/s this.chartView.m_chartParam.mDt_S2GLink_Up[index][index2] = dBytes; //更新原来的值 this.chartView.m_chartParam.mDt_S2GLink_Up_Sum[index] += dBytes; //累加 dBytes = rd.DownlinkTrafficBps / 1000; //kb/s this.chartView.m_chartParam.mDt_S2GLink_Dw[index][index2] = dBytes; //更新原来的值 this.chartView.m_chartParam.mDt_S2GLink_Dw_Sum[index] += dBytes; //累加 } this.chartView.m_chartParam.mCs_S2GLink[index].Series[0].Points.AddXY(rd.simTime, this.chartView.m_chartParam.mDt_S2GLink_Up_Sum[index]); this.chartView.m_chartParam.mCs_S2GLink[index].Series[1].Points.AddXY(rd.simTime, this.chartView.m_chartParam.mDt_S2GLink_Dw_Sum[index]); UplinkUtilizationRadio = this.chartView.m_chartParam.mDt_S2GLink_Up_Sum[index] * bit2Ratio * 100 / (2000000.0 * 32 * 32);//占该颗星总的上行速率百分比:2Mbps(速率/信道)*32(信道/波束)*32(波束/星) DownlinkUtilizationRadio = this.chartView.m_chartParam.mDt_S2GLink_Dw_Sum[index] * bit2Ratio * 100 / (10000000.0 * 32 * 32); this.chartView.m_chartParam.mCs_S2GLink[index].Series[2].Points.AddXY(rd.simTime, UplinkUtilizationRadio); this.chartView.m_chartParam.mCs_S2GLink[index].Series[3].Points.AddXY(rd.simTime, DownlinkUtilizationRadio); } }
/// <summary> /// 初始化表格和图表的大小、位置 /// </summary> public void Initial() { this.Text = "指标显示"; chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;//不显示chart的横竖线 chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false; chart1.Name = "chartTemplate"; chart1.Visible = false; m_chartTemplate = chart1;//暂存chart1用于删除chart后恢复默认视图,主要用于保存chart大小和位置 listView_zhibiao.Visible = true; listView_zhibiao.View = View.Details; listView_jieru.Visible = true; listView_jieru.View = View.Details; listView_yonghu.Visible = true; listView_yonghu.View = View.Details; panel_listView.Location = m_chartTemplate.Location; panel_listView.Size = m_chartTemplate.Size; panel_listView.Visible = false; int listViewCount = 3; //panel中表格个数,这里目前只有listView_zhibiao listView_jieru listView_yonghu三个 int listViewHeight = panel_listView.Height / listViewCount; //3个表格的大小和位置 listView_zhibiao.Location = new Point(0, panel_listView.Location.Y + listViewHeight * 0);//listView_zhibiao是以子窗体的形式加入到panel,计算相对坐标 listView_zhibiao.Height = listViewHeight; listView_zhibiao.Width = panel_listView.Width; listView_yonghu.Location = new Point(0, panel_listView.Location.Y + listViewHeight * 1); listView_yonghu.Height = listViewHeight; listView_yonghu.Width = panel_listView.Width; listView_jieru.Location = new Point(0, panel_listView.Location.Y + listViewHeight * 2); listView_jieru.Height = listViewHeight; listView_jieru.Width = panel_listView.Width; //设置各表格的各列 int column = 4; int wid = panel_listView.Width / column; listView_zhibiao.Columns.Add("星地下行设计速率", wid, HorizontalAlignment.Left); listView_zhibiao.Columns.Add("星地上行设计速率", wid, HorizontalAlignment.Left); listView_zhibiao.Columns.Add("星间传输设计速率", wid, HorizontalAlignment.Left); m_listItem_zhibiao = new ListViewItem(new string[] { "", "", "" }, 0); listView_zhibiao.Items.Add(m_listItem_zhibiao); listView_jieru.Columns.Add("全局接入成功率(%)", wid, HorizontalAlignment.Left); listView_jieru.Columns.Add("用户平均接入时间", wid, HorizontalAlignment.Left); listView_jieru.Columns.Add("业务平均接入时间", wid, HorizontalAlignment.Left); listView_jieru.Columns.Add("接入管理信令开销", wid, HorizontalAlignment.Left); m_listItem_jieru = new ListViewItem(new string[] { "", "", "", "" }, 0); listView_jieru.Items.Add(m_listItem_jieru); listView_yonghu.Columns.Add("移动用户总数", wid, HorizontalAlignment.Left); listView_yonghu.Columns.Add("在线用户数目", wid, HorizontalAlignment.Left); //listView_yonghu.Columns.Add("网络丢包率(%)", wid, HorizontalAlignment.Left); m_listItem_yonghu = new ListViewItem(new string[] { "0", "0", "" }, 0); listView_yonghu.Items.Add(m_listItem_yonghu); m_chartParam = new ChartParam(); TreeNode node; TreeNodeTag nodeTag; Chart chart; //-------------"表格显示的指标"-------------------- node = new TreeNode("表格显示的指标"); nodeTag = new TreeNodeTag(1, listView_zhibiao, listView_jieru); node.Tag = nodeTag; this.treeView1.Nodes.Add(node); //暂时去掉表格的指标 //-------------"网络吞吐量"-------------------- chart = ChartParam.CreateChart(m_chartTemplate, 1); //有几个chartarea(series)就设几个 m_chartParam.mC_NetTra = chart; chart.Name = "chart" + (m_chartParam.chartCount++).ToString(); //所有chart名称不一样 chart.ChartAreas[0].Position.Auto = false; chart.ChartAreas[0].Position.Height = 50F; //因为只有一张表所以只设为50%的大小 chart.ChartAreas[0].Position.Width = 70F; chart.ChartAreas[0].Position.X = 10F; //x方向在10%处显示纵坐标 chart.ChartAreas[0].Position.Y = 20F; chart.Series[0].Name = "吞吐量(kb/s)"; this.Controls.Add(chart); node = new TreeNode("网络吞吐量"); nodeTag = new TreeNodeTag(2, chart);//绑定tag node.Tag = nodeTag; this.treeView1.Nodes.Add(node); /*//不再程序启动就新建此顶层节点,而是在第一次收到相应包才新建 * //-------------"各星资源占用"-------------------- * node = new TreeNode("各星资源占用率"); * nodeTag = new TreeNodeTag(0);//0-不包含chart,只起标签作用 * node.Tag = nodeTag; * this.treeView1.Nodes.Add(node); * //-------------"对地链路传输能力"-------------------- * node = new TreeNode("对地链路传输能力"); * nodeTag = new TreeNodeTag(0);//0-不包含chart,只起标签作用 * node.Tag = nodeTag; * this.treeView1.Nodes.Add(node);//暂时去掉对地链路指标 * //-------------"星间链路传输能力"-------------------- * node = new TreeNode("星间链路传输能力"); * nodeTag = new TreeNodeTag(0);//0-不包含chart,只起标签作用 * node.Tag = nodeTag; * this.treeView1.Nodes.Add(node);//暂时去掉星间链路指标 * //-------------"业务流Qos性能"-------------------- * node = new TreeNode("业务流Qos性能"); * nodeTag = new TreeNodeTag(0);//0-不包含chart,只起标签作用 * node.Tag = nodeTag; * this.treeView1.Nodes.Add(node); */ }