using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using ZedGraph; namespace MOTINOVA_MC_Test { public partial class Form2 : Form { //力矩曲线 private PointPairList list_TorqueData = new PointPairList(); private LineItem myCurve_TorqueData; //传感器1曲线 private PointPairList list_Sensor1 = new PointPairList(); private LineItem myCurve_Sensor1; //传感器2曲线 private PointPairList list_Sensor2 = new PointPairList(); private LineItem myCurve_Sensor2; //传感器3曲线 private PointPairList list_Sensor3 = new PointPairList(); private LineItem myCurve_Sensor3; //电流曲线 private PointPairList list_CurrentData = new PointPairList(); private LineItem myCurve_CurrentData; //马达转速曲线 private PointPairList list_MotorSpeedData = new PointPairList(); private LineItem myCurve_MotorSpeedData; public Form2() { InitializeComponent(); this.ControlBox = false; } private void Form2_Load(object sender, EventArgs e) { ZedGraphControl1Init(); } #region ZedGraphControlInit() private void ZedGraphControl1Init() { this.zedGraphControl1.IsShowPointValues = true; this.zedGraphControl1.GraphPane.Title.Text = "曲线采集"; this.zedGraphControl1.GraphPane.XAxis.Title.Text = "时间"; this.zedGraphControl1.GraphPane.YAxis.Title.Text = "数值"; this.zedGraphControl1.GraphPane.XAxis.Type = ZedGraph.AxisType.Ordinal; this.zedGraphControl1.IsEnableHZoom = true; this.zedGraphControl1.IsEnableVZoom = false; this.zedGraphControl1.IsZoomOnMouseCenter = true; this.zedGraphControl1.ZoomStepFraction = 0.1; this.zedGraphControl1.GraphPane.Chart.Fill.Color = Color.Black;//图表颜色 this.zedGraphControl1.GraphPane.Fill.Color = Color.Gray;//背景 this.zedGraphControl1.GraphPane.Chart.Fill.Type = FillType.Solid; this.zedGraphControl1.GraphPane.XAxis.MajorGrid.IsVisible = true; this.zedGraphControl1.GraphPane.YAxis.MajorGrid.IsVisible = true; this.zedGraphControl1.GraphPane.XAxis.MinorGrid.IsVisible = false; this.zedGraphControl1.GraphPane.YAxis.MinorGrid.IsVisible = false; this.zedGraphControl1.GraphPane.XAxis.MajorGrid.DashOff = 1f; this.zedGraphControl1.GraphPane.YAxis.MajorGrid.DashOff = 1f; this.zedGraphControl1.GraphPane.XAxis.MajorGrid.Color = Color.Gray; this.zedGraphControl1.GraphPane.YAxis.MajorGrid.Color = Color.Gray; this.zedGraphControl1.GraphPane.YAxis.Scale.Min = -5; this.zedGraphControl1.GraphPane.YAxis.Scale.Max = 200; this.zedGraphControl1.GraphPane.YAxis.Scale.MinorStep = 1; this.zedGraphControl1.GraphPane.YAxis.Scale.MajorStep = 5; this.zedGraphControl1.GraphPane.XAxis.Scale.MinorStep = 10; this.zedGraphControl1.GraphPane.XAxis.Scale.MajorStep = 50; for (int i = 0; i < 500; i++) { double x = (double)new XDate(DateTime.Now.AddSeconds(-(500 - i))); double y = 0;//ran.NextDouble(); list_TorqueData.Add(x, y); list_Sensor1.Add(x, y); list_Sensor2.Add(x, y); list_Sensor3.Add(x, y); list_CurrentData.Add(x, y); list_MotorSpeedData.Add(x, y); } myCurve_TorqueData = zedGraphControl1.GraphPane.AddCurve("(黄色)TqSensor * 1N.m", list_TorqueData, Color.Yellow, SymbolType.None); myCurve_Sensor1 = zedGraphControl1.GraphPane.AddCurve("(粉色)Sensor1 * 1N.m", list_Sensor1, Color.Pink, SymbolType.None); myCurve_Sensor2 = zedGraphControl1.GraphPane.AddCurve("(紫色)Sensor2 * 1N.m", list_Sensor2, Color.Purple, SymbolType.None); myCurve_Sensor3 = zedGraphControl1.GraphPane.AddCurve("(青色)Sensor3 * 1N.m", list_Sensor3, Color.Cyan, SymbolType.None); myCurve_CurrentData = zedGraphControl1.GraphPane.AddCurve("(红色)BusCurrent * 0.1A", list_CurrentData, Color.Red, SymbolType.None); myCurve_MotorSpeedData = zedGraphControl1.GraphPane.AddCurve("(绿色)MotorSpeed * 10rpm", list_MotorSpeedData, Color.Green, SymbolType.None); this.zedGraphControl1.AxisChange(); this.zedGraphControl1.Refresh(); } #endregion private void timer1_Tick(object sender, EventArgs e) { DataRefresh(); WaveRefresh(); } private void DataRefresh() { textBox_Torque.Text = Class_TorqueData.String; textBox_Sensor1.Text = Class_Sensor1Data.String; textBox_Sensor2.Text = Class_Sensor2Data.String; textBox_Sensor3.Text = Class_Sensor3Data.String; textBox_Current.Text = Class_CurrentData.String; textBox_MotorSpeed.Text = Class_MotorSpeed.String; } private void WaveRefresh() { if (checkBox_ReadWave.Checked == true) { double x = (double)new XDate(DateTime.Now); /***********力矩曲线**********/ list_TorqueData.Add(x, (double)Class_TorqueData.Data); if (list_TorqueData.Count >= 500) { list_TorqueData.RemoveAt(0); } /***********传感器1曲线**********/ list_Sensor1.Add(x, (double)Class_Sensor1Data.Data); if (list_Sensor1.Count >= 500) { list_Sensor1.RemoveAt(0); } /***********传感器2曲线**********/ list_Sensor2.Add(x, (double)Class_Sensor2Data.Data); if (list_Sensor2.Count >= 500) { list_Sensor2.RemoveAt(0); } /***********传感器3曲线**********/ list_Sensor3.Add(x, (double)Class_Sensor3Data.Data); if (list_Sensor3.Count >= 500) { list_Sensor3.RemoveAt(0); } /***********电流曲线**********/ list_CurrentData.Add(x, (double)Class_CurrentData.Data / 100); if (list_CurrentData.Count >= 500) { list_CurrentData.RemoveAt(0); } /***********马达转速曲线**********/ list_MotorSpeedData.Add(x, (double)Class_MotorSpeed.Data / 10); if (list_MotorSpeedData.Count >= 500) { list_MotorSpeedData.RemoveAt(0); } } zedGraphControl1.AxisChange(); zedGraphControl1.Refresh(); } private void button1_Click(object sender, EventArgs e) { Bitmap bit = new Bitmap(this.Width, this.Height);//实例化一个和窗体一样大的bitmap Graphics g = Graphics.FromImage(bit); g.CopyFromScreen(this.Left, this.Top, 0, 0, new Size(this.Width, this.Height));//保存整个窗体为图片 SaveFileDialog sf = new SaveFileDialog(); sf.Title = "保存曲线"; if ((Class_Motor_Ver.Mode == "---") || (Class_Motor_Ver.SN == "---")) { MessageBox.Show("请查询版本信息!", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } sf.FileName = Class_Motor_Ver.Mode + "_" + Class_Motor_Ver.SN + "_"; sf.FileName += DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss").Replace("/", "-").Replace(":", string.Empty).Replace(" ", "_") + "_曲线采集" + ".png"; sf.Filter="图片|*.png"; if (sf.ShowDialog() == DialogResult.OK) { bit.Save(sf.FileName);//默认保存格式为PNG,保存成jpg格式质量不是很好 } } private void timer2_Tick(object sender, EventArgs e) { label5.Text = DateTime.Now.ToString(); } private void textBox1_TextChanged(object sender, EventArgs e) { ushort Period; Period = Convert.ToUInt16(textBox_ReadDataPeriod.Text); if (Period < 20) { Period = 20; } timer1.Interval = Period; } #region 曲线显示设置 private void checkBox_TorqueLine_CheckedChanged(object sender, EventArgs e) { if (checkBox_TorqueLine.Checked == true) { myCurve_TorqueData.IsVisible = true; } else { myCurve_TorqueData.IsVisible = false; } } private void checkBox_CurrentLine_CheckedChanged(object sender, EventArgs e) { if (checkBox_CurrentLine.Checked == true) { myCurve_CurrentData.IsVisible = true; } else { myCurve_CurrentData.IsVisible = false; } } private void checkBox_MotorSpeedLine_CheckedChanged(object sender, EventArgs e) { if (checkBox_MotorSpeedLine.Checked == true) { myCurve_MotorSpeedData.IsVisible = true; } else { myCurve_MotorSpeedData.IsVisible = false; } } private void checkBox_Sensor1_CheckedChanged(object sender, EventArgs e) { if (checkBox_Sensor1.Checked == true) { myCurve_Sensor1.IsVisible = true; } else { myCurve_Sensor1.IsVisible = false; } } private void checkBox_Sensor2_CheckedChanged(object sender, EventArgs e) { if (checkBox_Sensor2.Checked == true) { myCurve_Sensor2.IsVisible = true; } else { myCurve_Sensor2.IsVisible = false; } } private void checkBox_Sensor3_CheckedChanged(object sender, EventArgs e) { if (checkBox_Sensor3.Checked == true) { myCurve_Sensor3.IsVisible = true; } else { myCurve_Sensor3.IsVisible = false; } } #endregion } }