C#串口编程及DatagridView用法

using System;
using System.Collections.Generic;
using https://www.360docs.net/doc/e0439058.html,ponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


using System.IO.Ports;

using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;

namespace UART_Current
{
public partial class Form1 : Form
{
byte[] RBuf = new byte[14];
int RowNum = 100;
int DataNum = 0;

UInt16 Time = 0;
long CommErr = 0;
public Form1()
{
InitializeComponent();
comboBox2.SelectedIndex = 1;
comboBox1.SelectedIndex = 0;
dataGridView1.RowHeadersVisible = false;
dataGridView1.ColumnCount = 9;
dataGridView1.Columns[0].Width = 40;
dataGridView1.Columns[1].Width = 60;
dataGridView1.Columns[2].Width = 60;
dataGridView1.Columns[3].Width = 60;
dataGridView1.Columns[4].Width = 60;
dataGridView1.Columns[5].Width = 60;
dataGridView1.Columns[6].Width = 60;
dataGridView1.Columns[7].Width = 60;
dataGridView1.Columns[8].Width = 160;

dataGridView1.Columns[0].Name = "序号";
// dataGridView1.Columns[1].Name = "ID()";
dataGridView1.Columns[1].Name = "上传电流(A)";
dataGridView1.Columns[2].Name = "计算电流(A)";
dataGridView1.Columns[3].Name = "电流表值(mA)";
dataGridView1.Columns[4].Name = "差值(A)";
dataGridView1.Columns[5].Name = "上传温度";
dataGridView1.Columns[6].Name = "系数";
dataGridView1.Columns[7].Name = "箱子温度";
dataGridView1.Columns[8].Name = "时间";


dataGridView1.ReadOnly = true;
dataGridView1.Rows.Add(100);
RowNum = 100;
textBox8.Text = "500";
}
public void OpenComm()
{
if (serialPort1.IsOpen)
serialPort1.Close();
serialPort1.PortName = https://www.360docs.net/doc/e0439058.html,M[comboBox1.SelectedIndex];
serialPort1.DataBits = 8;
serialPort1.BaudRate = DataPool.BARDRATE[comboBox2.SelectedIndex];
serialPort1.StopBits = StopBits.One;
serialPort1.Parity = Parity.None;
serialPort1.ReadBufferSize = 2048;
serialPort1.WriteBufferSize = 2048;
serialPort1.ReadTimeout = 500;
serialPort1.WriteTimeout = 500;
serialPort1.ReceivedBytesThreshold = 14;
try
{
serialPort1.Open();
}
catch (Exception e)
{
MessageBox.Show("串口打开失败");
}
}


void Send()
{
byte[] rece_temp_buff = { 0x

AA, 0x55, 0xF0, 0xE9, 0x02, 0, 0, 1, 2 };
UInt16 Crc;
Crc = CRC_Class.CRC16(rece_temp_buff, 5);
rece_temp_buff[5] = (byte)(Crc / 256);
rece_temp_buff[6] = (byte)(Crc % 256);
serialPort1.Write(rece_temp_buff, 0, 9);
}
private void button9_Click(object sender, EventArgs e)
{
Time = Convert.ToUInt16(textBox8.Text);
timer1.Interval = Time;
timer1.Start();

}

private void button1_Click_1(object sender, EventArgs e)
{
OpenComm();
}

private void button11_Click(object sender, EventArgs e)
{
SaveFileDialog f = new SaveFileDialog();
f.InitialDirectory = DataPool.path + "\\data";
f.Filter = "DataFile (*.dat)|*.dat";
if (f.ShowDialog() == DialogResult.OK)
{
textBox10.Text = f.FileName;
}
}

private void button8_Click(object sender, EventArgs e)
{
timer1.Stop();
}

private void button10_Click(object sender, EventArgs e)
{
dataGridView1.Rows.Clear();
dataGridView1.Rows.Add(100);
RowNum = 100;
DataNum = 0;
}
private void operateData()
{
DateTime dt = DateTime.Now;

Int16 va;
float cv, cv1, cv2, cv3;
string str2, str3;
byte[] Data = new byte[14] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,13,14 };

for (int j = 0; j < 14; j++)
Data[j]=RBuf[j];
str3 = DataNum.ToString();
va = (Int16)((Int16)Data[6] + (Int16)Data[7] * 256);
cv = (float)va;
cv /= 10.0f;
cv1 = cv;//上传值
str2 = string.Format("{0:F1}", cv);
dataGridView1.Rows[DataNum].Cells[0].Value = str3;
dataGridView1.Rows[DataNum].Cells[1].Value = str2;

DataPool.sd.UploadCurrent = cv;

cv = Convert.ToSingle(textBox2.Text);
if(textBox4.Text.Length>0)
cv *= Convert.ToSingle(textBox4.Text);
else
cv *= 0;
if (textBox5.Text.Length > 0)
cv /= Convert.ToSingle(textBox5.Text);
else
cv /= 1;
cv2 = cv;//计算值
str2 = string.Format("{0:F1}", cv);
// va = (Int16)(cv * 10.0);
// str2 = va.ToString();
dataGridView1.Rows[DataNum].Cells[2].Value = str2;
dataGridView1.Rows[DataNum].Cells[3].Value = textBox4.Text;

DataPool.sd.CacuCurrent = cv;
if (textBox4.Text.Length > 0)
DataPool.sd.MeterCurrent = Convert.ToSingle(textBox4.Text);
else
DataPoo

l.sd.MeterCurrent = 0;

cv3 = cv1 - cv2;//差值
str2 = string.Format("{0:F1}", cv3);
dataGridView1.Rows[DataNum].Cells[4].Value = str2;

DataPool.sd.DelCurrent = cv3;

if (Math.Abs(cv3) >= 0.6)
{
dataGridView1.Rows[DataNum].DefaultCellStyle.BackColor = Color.Red;
}
else if (Math.Abs(cv3) < 0.6 && Math.Abs(cv3) >= 0.4)
dataGridView1.Rows[DataNum].DefaultCellStyle.BackColor = Color.Yellow;
else if (Math.Abs(cv3) < 0.4 && Math.Abs(cv3) >= 0.2)
dataGridView1.Rows[DataNum].DefaultCellStyle.BackColor = Color.Goldenrod;
else
dataGridView1.Rows[DataNum].DefaultCellStyle.BackColor = Color.Green;

cv3 = cv2 - cv1;
cv3 /= cv1;
str2 = string.Format("{0:F4}", cv3);
dataGridView1.Rows[DataNum].Cells[6].Value = str2;

DataPool.sd.Coff = cv3;

dataGridView1.Rows[DataNum].Cells[8].Value = string.Format("{0:yyyy-MM-dd HH:mm:ss:ffff}", dt);
dataGridView1.Rows[DataNum].Cells[7].Value = numericUpDown1.Value.ToString();// textBox9.Text;
/*
if (textBox9.Text.Length > 0)
DataPool.sd.BoxTem = Convert.ToSingle(textBox9.Text);
else
DataPool.sd.BoxTem = 0;
*/
DataPool.sd.BoxTem = (float)numericUpDown1.Value;
DataPool.sd.Time = dt;

DataNum++;
if (DataNum > 18)
dataGridView1.FirstDisplayedScrollingRowIndex = (DataNum / 17) * 17 - 1;
if (DataNum >= RowNum)
{
dataGridView1.Rows.Add(20);
RowNum += 20;
}

if (checkBox1.Checked)
{
DataPool.WriteData(textBox10.Text);
}
if (DataNum >= 10000)
{
dataGridView1.Rows.Clear();
dataGridView1.Rows.Add(100);
RowNum = 100;
DataNum = 0;
}
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// string str;
UInt32 le = 0;
UInt16 Crc;
le = (UInt32)serialPort1.BytesToRead;
if (le >= 14)
{
serialPort1.Read(RBuf, 0, 14);

Crc = CRC_Class.CRC16(RBuf,12);
if (Crc == RBuf[12] * 256 + RBuf[13])
{
if(RBuf[4]==0x82)
operateData();
else if (RBuf[4] == 0x92)
{
textBox2.Text = (RBuf[6] + RBuf[7] * 256).ToString();
}
}
else
{
CommErr++;
textBox1.Text = CommErr.ToStrin

g();
}
// str="";
// for(int ii=0;ii<14;ii++)
// str += RBuf[ii].ToString();
// MessageBox.Show(str);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
Send();
}
void ReadHisDats(string FileName)
{
int DataNum1, RowNum1;
IFormatter serializer = new BinaryFormatter();
FileStream LoadFile = new FileStream(FileName, FileMode.Open, FileAccess.Read);
DataPool.SampleRealData s;
long Len = 0;
Len = LoadFile.Length;
if (Len == 0)
return;
dataGridView1.Rows.Clear();
dataGridView1.Rows.Add(100);
RowNum1 = 100;
DataNum1 = 0;

DateTime dt = DateTime.Now;

float cv, cv1, cv2, cv3;
string str2, str3;

while (Len != LoadFile.Position)
{
s = (DataPool.SampleRealData)serializer.Deserialize(LoadFile);

str3 = DataNum1.ToString();
cv = s.UploadTem;
str2 = string.Format("{0:F1}", cv);
dataGridView1.Rows[DataNum1].Cells[5].Value = str2;


cv = s.UploadCurrent;
cv1 = cv;//上传值
str2 = string.Format("{0:F1}", cv);
dataGridView1.Rows[DataNum1].Cells[0].Value = str3;//序号
dataGridView1.Rows[DataNum1].Cells[1].Value = str2;//上传电流

cv = s.CacuCurrent;
cv2 = cv;//计算值
str2 = string.Format("{0:F1}", cv);
str3 = string.Format("{0:F1}", s.MeterCurrent);

dataGridView1.Rows[DataNum1].Cells[2].Value = str2;//计算电流
dataGridView1.Rows[DataNum1].Cells[3].Value = str3;//电流表值

cv3 = s.DelCurrent;
str2 = string.Format("{0:F1}", cv3);
dataGridView1.Rows[DataNum1].Cells[4].Value = str2;//差值

if (Math.Abs(cv3) >= 0.6)
{
dataGridView1.Rows[DataNum1].DefaultCellStyle.BackColor = Color.Red;
}
else if (Math.Abs(cv3) < 0.6 && Math.Abs(cv3) >= 0.4)
dataGridView1.Rows[DataNum1].DefaultCellStyle.BackColor = Color.Yellow;
else if (Math.Abs(cv3) < 0.4 && Math.Abs(cv3) >= 0.2)
dataGridView1.Rows[DataNum1].DefaultCellStyle.BackColor = Color.Goldenrod;
else
dataGridView1.Rows[DataNum1].DefaultCellStyle.BackColor = Color.Green;

cv3 = s.Coff;
str2 = string.Format("{0:F4}", cv3);
dataGridView1.Rows[DataNum1].Cells[6].Value = str2;//系数


str2 = string.Format("{0:F4}", s.BoxTem);
dataGridView1.Rows[DataNum1].Cells[8].Value = string.Format("{0:yyyy-MM-dd HH:mm:ss:ffff}", s.Time);
dataGridView1.Rows[DataNum1].Cells[7].Value = str2;
DataNum1++;
if (DataNum1 > 18)
dataGridView1.FirstDisplayedScrollingRowIndex = (DataNum1 / 17) * 17 - 1;
if (DataNum1 >= RowNum1)
{
dataGridView1.Rows.Add(20);
RowNum1 += 20;
}

}
LoadFile.Close();
}
private void button13_Click(object sender, EventArgs e)
{
OpenFileDialog f = new OpenFileDialog();
f.InitialDirectory = DataPool.path + "\\data";
f.Filter = "DataFile (*.dat)|*.dat";
if (f.ShowDialog() == DialogResult.OK)
{
textBox12.Text = f.FileName;
ReadHisDats(textBox12.Text);
}
}

private void Form1_Load(object sender, EventArgs e)
{
Form1.CheckForIllegalCrossThreadCalls = false;
textBox2.Text = "100";
textBox5.Text = "100";
}

private void button5_Click(object sender, EventArgs e)
{
byte[] rece_temp_buff = { 0xAA, 0x55, 0xF0, 0xE9, 0x91, 0, 0, 1, 2 };
UInt16 Crc;
UInt16 RateCurrent = 0;
RateCurrent = Convert.ToUInt16(textBox2.Text);
rece_temp_buff[5] = (byte)(RateCurrent % 256);
rece_temp_buff[6] = (byte)(RateCurrent / 256);
Crc = CRC_Class.CRC16(rece_temp_buff, 7);
rece_temp_buff[7] = (byte)(Crc / 256);
rece_temp_buff[8] = (byte)(Crc % 256);
serialPort1.Write(rece_temp_buff, 0, 9);
}

private void button2_Click(object sender, EventArgs e)
{
byte[] rece_temp_buff = { 0xAA, 0x55, 0xF0, 0xE9, 0x92, 0, 0, 1, 2 };
UInt16 Crc;
Crc = CRC_Class.CRC16(rece_temp_buff, 5);
rece_temp_buff[5] = (byte)(Crc / 256);
rece_temp_buff[6] = (byte)(Crc % 256);
serialPort1.Write(rece_temp_buff, 0, 9);
}
}
}

相关文档
最新文档