217 lines
7.0 KiB
C#
217 lines
7.0 KiB
C#
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)
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|