first commit
This commit is contained in:
216
Graph/WindowsFormsApp2/MainForm.cs
Normal file
216
Graph/WindowsFormsApp2/MainForm.cs
Normal file
@ -0,0 +1,216 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.IO.Ports;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms.DataVisualization.Charting;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Net;
|
||||
|
||||
namespace WindowsFormsApp1
|
||||
{
|
||||
public partial class MainForm : Form
|
||||
{
|
||||
public MainForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
foreach (var s in chart_Graph.Series) s.XValueType = ChartValueType.DateTime;
|
||||
chart_Graph.ChartAreas[0].AxisX.LabelStyle.Format = "mm:ss";
|
||||
|
||||
chart_Graph.ChartAreas[0].AxisX.Minimum = DateTime.Now.ToOADate();
|
||||
chart_Graph.ChartAreas[0].AxisX.Maximum = DateTime.Now.AddSeconds(trackBar_GraphX_Down.Value).ToOADate();
|
||||
chart_Graph.ChartAreas[0].AxisX.IntervalAutoMode = IntervalAutoMode.FixedCount;
|
||||
chart_Graph.ChartAreas[0].AxisX.Interval = (new DateTime(1, 1, 1, 0, 0, 1)).ToOADate();
|
||||
|
||||
}
|
||||
|
||||
private const int RecvCount = 4;
|
||||
private byte[] RecvData = new byte[RecvCount];
|
||||
private int RecvSize = 0;
|
||||
|
||||
private enum RecvModeEnum : byte { Begin, Data, Done };
|
||||
|
||||
private int TimerStop = 0;
|
||||
|
||||
private DateTime GraphLast = DateTime.Now;
|
||||
|
||||
private RecvModeEnum RecvMode;
|
||||
|
||||
private void DrawGraph(byte[] data, int from, int size)
|
||||
{
|
||||
if (checkBox_Track.Checked)
|
||||
{
|
||||
chart_Graph.ChartAreas[0].AxisX.Minimum = DateTime.Now.AddSeconds(-trackBar_GraphX_Down.Value).ToOADate();
|
||||
chart_Graph.ChartAreas[0].AxisX.Maximum = DateTime.Now.ToOADate();
|
||||
}
|
||||
else
|
||||
{
|
||||
TimeSpan shift = DateTime.Now.Subtract(GraphLast);
|
||||
if (shift.TotalSeconds > trackBar_GraphX_Down.Value)
|
||||
{
|
||||
GraphLast = DateTime.Now;
|
||||
for (int a = 0; a < chart_Graph.Series.Count; a++) chart_Graph.Series[a].Points.Clear();
|
||||
chart_Graph.ChartAreas[0].AxisX.Minimum = DateTime.Now.ToOADate();
|
||||
chart_Graph.ChartAreas[0].AxisX.Maximum = DateTime.Now.AddSeconds(trackBar_GraphX_Down.Value).ToOADate();
|
||||
}
|
||||
}
|
||||
|
||||
float[] lines = new float[1];
|
||||
Buffer.BlockCopy(data, from, lines, 0, size);
|
||||
|
||||
chart_Graph.Series[0].Points.AddXY(DateTime.Now, lines[0]);
|
||||
|
||||
if (checkBox_Track.Checked)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
if ((DateTime.Now - DateTime.FromOADate(chart_Graph.Series[0].Points[0].XValue)).TotalSeconds > trackBar_GraphX_Down.Value + 1)
|
||||
chart_Graph.Series[0].Points.RemoveAt(0);
|
||||
else break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void button_Connect_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (button_Connect.Text == "Connect")
|
||||
{
|
||||
try { serialPort_COM.PortName = comboBox_Port.Text; } catch { MessageBox.Show("Error to set port", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }
|
||||
try
|
||||
{
|
||||
serialPort_COM.Open();
|
||||
serialPort_COM.DiscardInBuffer();
|
||||
}
|
||||
catch { MessageBox.Show("Error to connect", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }
|
||||
|
||||
timer_Tick.Enabled = true;
|
||||
button_Connect.Text = "Disonnect";
|
||||
}
|
||||
else
|
||||
{
|
||||
serialPort_COM.Close();
|
||||
timer_Tick.Enabled = false;
|
||||
button_Connect.Text = "Connect";
|
||||
}
|
||||
}
|
||||
|
||||
private void timer_Tick_Tick(object sender, EventArgs e)
|
||||
{
|
||||
switch (RecvMode)
|
||||
{
|
||||
case RecvModeEnum.Begin:
|
||||
{
|
||||
TimerStop = 20;
|
||||
|
||||
byte[] recv = new byte[1];
|
||||
int len;
|
||||
try { len = serialPort_COM.Read(recv, 0, 1); } catch { break; }
|
||||
if (recv[0] == 'Z')
|
||||
{
|
||||
RecvMode = RecvModeEnum.Data;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case RecvModeEnum.Data:
|
||||
{
|
||||
int len;
|
||||
try { len = serialPort_COM.Read(RecvData, RecvSize, RecvData.Length - RecvSize); } catch { break; }
|
||||
RecvSize += len;
|
||||
if (RecvSize < RecvData.Length) break;
|
||||
RecvSize = 0;
|
||||
|
||||
DrawGraph(RecvData, 0, RecvData.Length);
|
||||
RecvMode = RecvModeEnum.Begin;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
RecvMode = RecvModeEnum.Begin;
|
||||
break;
|
||||
}
|
||||
}
|
||||
TimerStop--;
|
||||
if (TimerStop <= 0)
|
||||
{
|
||||
RecvMode = RecvModeEnum.Begin;
|
||||
}
|
||||
}
|
||||
|
||||
private void comboBox_Port_DropDown(object sender, EventArgs e)
|
||||
{
|
||||
comboBox_Port.Items.Clear();
|
||||
foreach (string p in SerialPort.GetPortNames()) comboBox_Port.Items.Add(p);
|
||||
}
|
||||
|
||||
private void numericUpDown_Min_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
trackBar_GraphX_Down.Maximum = (int)numericUpDown_Min.Value;
|
||||
if (sender == numericUpDown_Min) trackBar_GraphX_Down.Value = trackBar_GraphX_Down.Maximum;
|
||||
else foreach (var s in chart_Graph.Series) s.Points.Clear();
|
||||
GraphLast = DateTime.Now;
|
||||
chart_Graph.ChartAreas[0].AxisX.Minimum = DateTime.Now.ToOADate();
|
||||
chart_Graph.ChartAreas[0].AxisX.Maximum = DateTime.Now.AddSeconds(trackBar_GraphX_Down.Value).ToOADate();
|
||||
chart_Graph.ChartAreas[0].AxisX.Interval = (new DateTime(1, 1, 1, 0, 0, 0).AddSeconds(((double)trackBar_GraphX_Down.Value) / 10)).ToOADate();
|
||||
if (trackBar_GraphX_Down.Value < 10) chart_Graph.ChartAreas[0].AxisX.LabelStyle.Format = "mm:ss.f";
|
||||
else chart_Graph.ChartAreas[0].AxisX.LabelStyle.Format = "mm:ss";
|
||||
}
|
||||
|
||||
private void numericUpDown_Graph_MaxY_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
chart_Graph.ChartAreas[0].AxisY.Minimum = (double)numericUpDown_Graph_MinY.Value;
|
||||
chart_Graph.ChartAreas[0].AxisY.Maximum = (double)numericUpDown_Graph_MaxY.Value;
|
||||
trackBar_GraphY_Left.Maximum = (int)numericUpDown_Graph_MaxY.Value;
|
||||
trackBar_GraphY_Left.Minimum = (int)numericUpDown_Graph_MinY.Value;
|
||||
trackBar_GraphY_Right.Maximum = (int)numericUpDown_Graph_MaxY.Value;
|
||||
trackBar_GraphY_Right.Minimum = (int)numericUpDown_Graph_MinY.Value;
|
||||
}
|
||||
|
||||
private void checkBox_AutoY_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (checkBox_AutoY.Checked)
|
||||
{
|
||||
chart_Graph.ChartAreas[0].AxisY.Minimum = double.NaN;
|
||||
chart_Graph.ChartAreas[0].AxisY.Maximum = double.NaN;
|
||||
numericUpDown_Graph_MinY.Enabled = false;
|
||||
numericUpDown_Graph_MaxY.Enabled = false;
|
||||
panel_GraphY.Enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
numericUpDown_Graph_MaxY_ValueChanged(null, null);
|
||||
numericUpDown_Graph_MinY.Enabled = true;
|
||||
numericUpDown_Graph_MaxY.Enabled = true;
|
||||
panel_GraphY.Enabled = true;
|
||||
trackBar_GraphY_Left.Value = trackBar_GraphY_Left.Minimum;
|
||||
trackBar_GraphY_Right.Value = trackBar_GraphY_Right.Maximum;
|
||||
}
|
||||
}
|
||||
|
||||
private void trackBar_GraphY_Left_Scroll(object sender, EventArgs e)
|
||||
{
|
||||
int min = trackBar_GraphY_Left.Value;
|
||||
int max = trackBar_GraphY_Right.Value;
|
||||
if (min > max)
|
||||
{
|
||||
int sub = min;
|
||||
min = max;
|
||||
max = sub;
|
||||
}
|
||||
|
||||
if (max == min) max += 1;
|
||||
|
||||
chart_Graph.ChartAreas[0].AxisY.Minimum = min;
|
||||
chart_Graph.ChartAreas[0].AxisY.Maximum = max;
|
||||
}
|
||||
|
||||
private void button_Update_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user