下面是主窗口代码,主要功能是将回收的数据计算然后导出曲线图和图表excel,接收单个从机时无闪退问题,但是连接两个从机后闪退,断点错误的截图提示如下,
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OfficeOpenXml;
using OfficeOpenXml.Drawing.Chart;
using OfficeOpenXml.Style;
using System.Data;
using System.Drawing;
using System.IO;
using System.Data.SqlClient;
using 项目1.MySql;
namespace 项目1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//为6个曲线图创建初始值
#region
List<double> list1 = new List<double>(0);
double g_datanext1;
List<double> list2 = new List<double>(0);
double g_datanext2;
List<double> list3 = new List<double>(0);
double g_datanext3;
List<double> list4 = new List<double>(0);
double g_datanext4;
List<double> list5 = new List<double>(0);
double g_datanext5;
List<double> list6 = new List<double>(0);
double g_datanext6;
#endregion
private MyDbContext MyDb=new MyDbContext();
bool isOpen = false; //打开串口标志位
bool isSetProperty = false;//属性设置标志位
int spProcessStep = 0;
Crc_Check crcCheck = new Crc_Check();//CrC检测
SerialPort sp = new SerialPort();
private void Form1_Load(object sender, EventArgs e)//总设置 初始化
#region
{
cBoxCOMPORTSet();
CBoxBaudRateSet();
cBoxDataBitsSet();
cBoxStopBitsSet();
cBoxparityBitsSet();
measuring();
InitMySql();
}
#endregion
private void InitMySql()//新建navicat mysql
#region
{
try
{
MyDb.Database.EnsureCreated();//尝试初始化数据库,如果存在则不会新建数据库和表
}
catch (Exception e)
{
MessageBox.Show(e.Message);//截取异常原因
}
}
#endregion
void Disp_charts()//曲线图绘制方法
#region
{
chart1.Series[0].Points.DataBindY(list1);
chart2.Series[0].Points.DataBindY(list2);
chart3.Series[0].Points.DataBindY(list3);
chart4.Series[0].Points.DataBindY(list4);
chart5.Series[0].Points.DataBindY(list5);
chart6.Series[0].Points.DataBindY(list6);
}
#endregion
private void measuring()//量程设置初始化
#region
{
Voltage.Text = "400";
electric.Text = "5";
accuracy.Items.Add("0 1/10000度");
accuracy.SelectedIndex = 0;
Mutualism1.Items.Add("1");
Mutualism1.Items.Add("2");
Mutualism2.Items.Add("1");
Mutualism2.Items.Add("2");
Mutualism1.SelectedIndex = 0;
Mutualism2.SelectedIndex = 0;
}
#endregion
private void cBoxparityBitsSet()//校验位初始
#region
{
cBoxparityBits.Items.Add("无");
cBoxparityBits.Items.Add("奇校验");
cBoxparityBits.Items.Add("偶校验");
cBoxparityBits.SelectedIndex = 0;//默认设置为无校验
}
#endregion
private void cBoxStopBitsSet()//停止位初始
#region
{
cBoxStopBits.Items.Add("0");
cBoxStopBits.Items.Add("1");
cBoxStopBits.Items.Add("1.5");
cBoxStopBits.Items.Add("2");
cBoxStopBits.SelectedIndex = 1;
}
#endregion
private void cBoxDataBitsSet()//数据位初始
#region
{
cBoxDataBits.Items.Add("8");
cBoxDataBits.Items.Add("7");
cBoxDataBits.Items.Add("5");
cBoxDataBits.SelectedIndex = 0;
int[] datas = new int[] { 5, 6, 7, 8 };//数据位
cBoxDataBits.DataSource = datas;
cBoxDataBits.SelectedIndex = 3;
}
#endregion
private void CBoxBaudRateSet()//波特率初始
#region
{
{
CBoxBaudRate.Items.Add("1200");
CBoxBaudRate.Items.Add("2400");
CBoxBaudRate.Items.Add("4800");
CBoxBaudRate.Items.Add("9600");
CBoxBaudRate.Items.Add("19200");
CBoxBaudRate.Items.Add("38400");
CBoxBaudRate.Items.Add("57600");
CBoxBaudRate.Items.Add("115200");
CBoxBaudRate.SelectedIndex = 3;
}
}
#endregion
private void cBoxCOMPORTSet()//com口初始
#region
{
for (int i = 0; i < 10; i++) //预示10个com口
{
cBoxCOMPORT.Items.Add("COM" + (i + 1).ToString());//增加combox中items;
}
cBoxCOMPORT.SelectedIndex = 1;//默认设置为com1口
}
#endregion
private bool CheckProtSetting()//检测串口配置是否为空
#region
{
if (CBoxBaudRate.Text.Trim() == "") return false;
if (cBoxCOMPORT.Text.Trim() == "") return false;
if (cBoxDataBits.Text.Trim() == "") return false;
//if (cBoxparityBits.Text.Trim() == "") return false;
if (cBoxStopBits.Text.Trim() == "") return false;
return true;
}
#endregion
private void SetPortProperty()//发送以下信息给串口
#region
{
sp.PortName = cBoxCOMPORT.Text.Trim();//串口的名字,combox中的文本内容
sp.BaudRate = Convert.ToInt32(CBoxBaudRate.Text.Trim());//波特率为cbxbaudrate内的内容
float f = Convert.ToSingle(cBoxStopBits.Text.Trim());//声明一个float类型的变量f;值为cbxstopbits中的内容
if (f == 0)
{
sp.StopBits = StopBits.None;
}
else if (f == 1.5)
{
sp.StopBits = StopBits.OnePointFive;
}
else if (f == 1)
{
sp.StopBits = StopBits.One;
}
else if (f == 2)
{
sp.StopBits = StopBits.Two;
}
else
{
sp.StopBits = StopBits.One;
}
sp.DataBits = Convert.ToInt16(cBoxDataBits.Text.Trim());//通信
string s = cBoxparityBits.Text.Trim();//声明一个string类型的 s储存 cbxparity中的内容
if (s.CompareTo("无") == 0)
{
sp.Parity = Parity.None;
}
else if (s.CompareTo("奇校验") == 0)
{
sp.Parity = Parity.Odd;
}
else if (s.CompareTo("偶校验") == 0)
{
sp.Parity = Parity.Even;
}
else
{
sp.Parity = Parity.None;
}
sp.ReadTimeout = -1;//
sp.RtsEnable = true;//
sp.DataReceived += new SerialDataReceivedEventHandler(SpDataReceived);//
}
#endregion
private void OpenCom()//打开串口设置
#region
{
if (isOpen == false)//
{
lblStatusCom.Text = "ON";
progressBar1.Value = 100;
if (!CheckProtSetting())//
{
MessageBox.Show("串口未设置!", "错误提示");//
return;
}
if (!isSetProperty)//
{
SetPortProperty();//
isSetProperty = true;//
}
try//
{
sp.Open();//
isOpen = true;//
btnOpen.Text = "关闭串口";//
cBoxparityBits.Enabled = false;//
cBoxDataBits.Enabled = false;//
cBoxCOMPORT.Enabled = false;//
cBoxStopBits.Enabled = false;//
CBoxBaudRate.Enabled = false;//
// progressBar1.Value = 100;
}
catch (Exception)//
{
isSetProperty = false;//
isOpen = false;//
MessageBox.Show("串口无效或被占用!", "错误提示");//
progressBar1.Value = 0;
lblStatusCom.Text = "OFF";
}
}
else
{
progressBar1.Value = 0;
lblStatusCom.Text = "OFF";
try//
{
sp.Close();//
isOpen = false;//
isSetProperty = false;//
btnOpen.Text = "打开串口";//
CBoxBaudRate.Enabled = true;//
cBoxCOMPORT.Enabled = true;//
cBoxDataBits.Enabled = true;//
cBoxparityBits.Enabled = true;//
cBoxStopBits.Enabled = true;//
}
catch (Exception)//
{
//label6.Text = "关闭串口时发生错误";//
}
}
}
#endregion
private void btnOpen_Click(object sender, EventArgs e)//调用opencom方法
#region
{
OpenCom();
}
#endregion
void SpDataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)//委托
#region
{
//System.Threading.Thread.Sleep(30);//线程挂起100ms(等待100ms)
//委托
this.Invoke((EventHandler)(delegate
{
Byte[] ReceivedData = new Byte[sp.BytesToRead];// 申明一个byte类数组,用于储存接收的数据(sp.BytesToRead读取串口接收区总长度)
sp.Read(ReceivedData, 0, ReceivedData.Length);//
RecvDate1(ReceivedData);
sp.DiscardOutBuffer();//
sp.DiscardInBuffer();//
if (tBoxDataIN.Text.Length > 1000)
{
tBoxDataIN.Text = "";
}
}));
}
#endregion
private void RecvDate1(byte[] bte)//回收数据流
#region
{
if (bte.Length > 4)
{
if (bte[1].ToString("X2") == "02")
{
byte Byt = bte[4];//转换为10进制
string strbit = bitTostring(Convert.ToString(Byt, 2));//将10进制转换为二进制
}
else if (bte[1].ToString("X2") == "01")
{
byte Byt = bte[4];//转换为10进制
string strbit = bitTostring(Convert.ToString(Byt, 2));
}
}
string displayDate = null;
for (int i = 0; i < bte.Length; i++)//
{
displayDate += bte[i].ToString("X2");
}
if (displayDate.Length > 9)
{
tBoxDataIN.Text = tBoxDataIN.Text + "接收:" + displayDate + "\r\n";//临时显示数据传输状态
}
else
return;
if (textBox2.Text == "04")
{
Chulishuju(displayDate);
}
else
{
MessageBox.Show("功能码错误");
}
}
#endregion
private string bitTostring(string str)//调节数据长度为两个字节
#region
{
{
string Str;
if (str.Length == 0)
{
Str = "0000";
}
else if (str.Length == 1)
{
Str = "000" + str;
}
else if (str.Length == 2)
{
Str = "00" + str;
}
else if (str.Length == 3)
{
Str = "0" + str;
}
else
{
Str = str;
}
return Str;
}
}
#endregion
private void Chulishuju(string displayDate)//04功能码,切割接收框数据 从第六位开始 每4位生成一个新的数据
#region
{
int z = 4;
//电流
string AI = displayDate.Substring(6, z);
string BI = displayDate.Substring(10, z);
string CI = displayDate.Substring(14, z);
//电压
string AU = displayDate.Substring(18, z);
string BU = displayDate.Substring(22, z);
string CU = displayDate.Substring(26, z);
Fangfa(AI, BI, CI, AU, BU, CU);
}
#endregion
private void Fangfa(string aI, string bI, string cI, string aU, string bU, string cU)//将接收框数据转换成int类型
#region
{
int num1 = Int32.Parse(aI, System.Globalization.NumberStyles.HexNumber);
int num2 = Int32.Parse(bI, System.Globalization.NumberStyles.HexNumber);
int num3 = Int32.Parse(cI, System.Globalization.NumberStyles.HexNumber);
int num4 = Int32.Parse(aU, System.Globalization.NumberStyles.HexNumber);
int num5 = Int32.Parse(bU, System.Globalization.NumberStyles.HexNumber);
int num6 = Int32.Parse(cU, System.Globalization.NumberStyles.HexNumber);
//textBox9.Text = num7.ToString("f2");
jisuan(num1, num2, num3, num4, num5, num6);
#endregion
}
private void jisuan(int num1, int num2, int num3, int num4, int num5, int num6)//将int类型转换成double类型 计算 可视化
#region
{
double num7 = Convert.ToDouble(num1);
double num8 = Convert.ToDouble(num2);
double num9 = Convert.ToDouble(num3);
double num10 = Convert.ToDouble(num4);
double num11 = Convert.ToDouble(num5);
double num12 = Convert.ToDouble(num6);
if (Mutualism1.Text == "1")
{
if (Mutualism2.Text == "1")
{
double IA = num7 / 65535 * 5 * 1;
txbAI.Text = IA.ToString("f5");
double IB = num8 / 65535 * 5 * 1;
txbBI.Text = IB.ToString("f5");
double IC = num9 / 65535 * 5 * 1;
txbCI.Text = IC.ToString("f5");
double UA = num10 / 65535 * 400 * 1;
txbAU.Text = UA.ToString("f2");
double UB = num11 / 65535 * 400 * 1;
txbBU.Text = UB.ToString("f2");
double UC = num11 / 65535 * 400 * 1;
txbCU.Text = UC.ToString("f2");
double XUA = num10 / 65535 * 800 * 1;
txbXAU.Text = XUA.ToString("f2");
double XUB = num11 / 65535 * 800 * 1;
txbXBU.Text = XUB.ToString("f2");
double XUC = num11 / 65535 * 800 * 1;
txbXCU.Text = XUC.ToString("f2");
}
else if (Mutualism2.Text == "2")
{
double IA = num7 / 65535 * 5 * 1;
txbAI.Text = IA.ToString("f5");
double IB = num8 / 65535 * 5 * 1;
txbBI.Text = IB.ToString("f5");
double IC = num9 / 65535 * 5 * 1;
txbCI.Text = IC.ToString("f5");
double UA = num10 / 65535 * 400 * 2;
txbAU.Text = UA.ToString("f2");
double UB = num11 / 65535 * 400 * 2;
txbBU.Text = UB.ToString("f2");
double UC = num11 / 65535 * 400 * 2;
txbCU.Text = UC.ToString("f2");
double XUA = num10 / 65535 * 800 * 2;
txbXAU.Text = XUA.ToString("f2");
double XUB = num11 / 65535 * 800 * 2;
txbXBU.Text = XUB.ToString("f2");
double XUC = num11 / 65535 * 800 * 2;
txbXCU.Text = XUC.ToString("f2");
}
}
else if (Mutualism1.Text == "2")
{
if (Mutualism2.Text == "1")
{
double IA = num7 / 65535 * 5 * 2;
txbAI.Text = IA.ToString("f5");
double IB = num8 / 65535 * 5 * 2;
txbBI.Text = IB.ToString("f5");
double IC = num9 / 65535 * 5 * 2;
txbCI.Text = IC.ToString("f5");
double UA = num10 / 65535 * 400 * 1;
txbAU.Text = UA.ToString("f2");
double UB = num11 / 65535 * 400 * 1;
txbBU.Text = UB.ToString("f2");
double UC = num11 / 65535 * 400 * 1;
txbCU.Text = UC.ToString("f2");
double XUA = num10 / 65535 * 800 * 1;
txbXAU.Text = XUA.ToString("f2");
double XUB = num11 / 65535 * 800 * 1;
txbXBU.Text = XUB.ToString("f2");
double XUC = num11 / 65535 * 800 * 1;
txbXCU.Text = XUC.ToString("f2");
}
else if (Mutualism2.Text == "2")
{
double IA = num7 / 65535 * 5 * 2;
txbAI.Text = IA.ToString("f5");
double IB = num8 / 65535 * 5 * 2;
txbBI.Text = IB.ToString("f5");
double IC = num9 / 65535 * 5 * 2;
txbCI.Text = IC.ToString("f5");
double UA = num10 / 65535 * 400 * 2;
txbAU.Text = UA.ToString("f2");
double UB = num11 / 65535 * 400 * 2;
txbBU.Text = UB.ToString("f2");
double UC = num11 / 65535 * 400 * 2;
txbCU.Text = UC.ToString("f2");
double XUA = num10 / 65535 * 800 * 2;
txbXAU.Text = XUA.ToString("f2");
double XUB = num11 / 65535 * 800 * 2;
txbXBU.Text = XUB.ToString("f2");
double XUC = num11 / 65535 * 800 * 2;
txbXCU.Text = XUC.ToString("f2");
}
}
//写入DataGridView
DataGridView table = dataGridView1;//设置datagridview的列名
int cel = 0;
int index = table.Rows.Add();
table.Rows[index].Cells[cel++].Value = DateTime.Now.ToString();//时间
table.Rows[index].Cells[cel++].Value = txbAI.Text;
table.Rows[index].Cells[cel++].Value = txbBI.Text;
table.Rows[index].Cells[cel++].Value = txbCI.Text;
table.Rows[index].Cells[cel++].Value = txbAU.Text;
table.Rows[index].Cells[cel++].Value = txbBU.Text;
table.Rows[index].Cells[cel++].Value = txbCU.Text;
//写入navicat for mysql
data1 data = new data1();
data.A相电流 = txbAI.Text;
data.B相电流 = txbBI.Text;
data.C相电流 = txbCI.Text;
data.A相电压 = txbAU.Text;
data.B相电压 = txbBU.Text;
data.C相电压 = txbCU.Text;
MyDb.tb_data1.Add(data);
if (MyDb.SaveChanges() > 0)
{
}
else
{
MessageBox.Show("导入失败");
}
#endregion
}
//未使用
#region
private void SendDateTo7(string str)//未使用
{
Random random = new Random();
int rand = random.Next(0, 300);
string temp = Convert.ToString(rand);
string c;
string[] crc = new string[2];
if (temp.Length < 2)
{
c = "000" + temp;
}
else if (temp.Length < 3)
{
c = "00" + temp;
}
else if (temp.Length < 4)
{
c = "0" + temp;
}
else
{
c = temp;
}
str += c;
string sum = null;
sum = str.Substring(0, 2) + " " + str.Substring(2, 2) + " " + str.Substring(4, 2) + " " + str.Substring(6, 2) + " " + str.Substring(0, 2);
crc[0] = crcCheck.GetHexStr(crcCheck.Check_CRC(crcCheck.GetStrHex(sum)), crcCheck.Check_CRC(crcCheck.GetStrHex(sum)).Length).Substring(3, 2); //将crc校验低位赋值给strsend
crc[1] = crcCheck.GetHexStr(crcCheck.Check_CRC(crcCheck.GetStrHex(sum)), crcCheck.Check_CRC(crcCheck.GetStrHex(sum)).Length).Substring(0, 2);//将crc校验高位赋值给strsend
str += crc[0];
str += crc[1];
byte[] HexSendData = new byte[7];
for (int i = 0; i < (str.Length + 1) / 2; i++)
{
HexSendData[i] = Convert.ToByte(str.Substring(i * 2, 2), 16);// 将16进制表示的str,转换为byte类型的十进制数据发送即可
//MessageBox .Show (HexSendData[i].ToString ());
}
if (sp.IsOpen != true)
{
SetPortProperty();
}
else
{
try
{
sp.Write(HexSendData, 0, HexSendData.Length);
System.Threading.Thread.Sleep(100);
tBoxDataIN.Text = tBoxDataIN.Text + "发送:" + str + "\r\n";//临时显示数据传输状态
}
catch (Exception)
{
MessageBox.Show("发送数据时发生错误!", "错误提示");
return;
}
}
}
#endregion
private void COMchexk_Click(object sender, EventArgs e)//检测串口
#region
{
bool comExistence = false;
cBoxCOMPORT.Items.Clear(); //串口清零,将默认的串口位置清除
for (int i = 0; i < 10; i++)// 分别检测0-9个串口是否可用
{
try//??????怎么用
{
SerialPort sp = new SerialPort("COM" + (i + 1).ToString());
sp.Open();
sp.Close();
cBoxCOMPORT.Items.Add("COM" + (i + 1).ToString());
comExistence = true;
}
catch (Exception)//??????怎么用
{
continue;
}
}
}
#endregion
private void button1_Click(object sender, EventArgs e)//单步采集
{
listTostring();
}
private void listTostring()//单步采集 回收数据至文本框
#region
{
string str = "";
if (listView1.Items.Count != 0)//判断是否有内容
{
if (listView1.Items.Count > spProcessStep)
{
listView1.Items[spProcessStep].Selected = true;
listView1.Items[0].BackColor = Color.White;
listView1.Items[spProcessStep].BackColor = Color.SkyBlue;
for (int i = 1; i < 9; i++)
{
str = str + listView1.Items[spProcessStep].SubItems[i].Text;
}
// MessageBox .Show (str);
if (spProcessStep > 1) listView1.Items[spProcessStep - 1].BackColor = Color.White;
}
else
{
listView1.Items[listView1.Items.Count - 1].BackColor = Color.White;
spProcessStep = 0;
listView1.Items[spProcessStep].Selected = true;
listView1.Items[spProcessStep].BackColor = Color.SkyBlue;
for (int i = 1; i < 9; i++)
{
str = str + listView1.Items[spProcessStep].SubItems[i].Text;
}
}
SendDateTo8(str);
spProcessStep++;
}
System.Threading.Thread.Sleep(50);//线程挂起100ms(等待100ms)
readIOIN();
}
#endregion
private void SendDateTo8(string str)//发送数据的方法
#region
{
tBoxDataIN.Text = tBoxDataIN.Text + "发送:" + str + "\r\n";//临时显示数据传输状态
byte[] HexSendData = new byte[8];
for (int i = 0; i < (str.Length + 1) / 2; i++)
{
HexSendData[i] = Convert.ToByte(str.Substring(i * 2, 2), 16);// 将16进制表示的str,转换为byte类型的十进制数据发送即可
//MessageBox .Show (HexSendData[i].ToString ());
}
if (sp.IsOpen != true)
{
SetPortProperty();
}
else
{
try
{
sp.Write(HexSendData, 0, HexSendData.Length);
}
catch (Exception)
{
MessageBox.Show("发送数据时发生错误!", "错误提示");
return;
}
}
}
#endregion
private void readIOIN()
#region
{
string[] str = new string[8];
string strSenddata = "";
str[0] = "02";
str[1] = "02";
str[2] = "00";
str[3] = "20";
str[4] = "00";
str[5] = "04";
strSenddata = str[0] + " " + str[1] + " " + str[2] + " " + str[3] + " " + str[4] + " " + str[5];
//str[6] = CRC_Check.GetHexStr(CRC_Check.Check_CRC(CRC_Check.GetStrHex(strSenddata)), CRC_Check.Check_CRC(CRC_Check.GetStrHex(strSenddata)).Length).Substring(3, 2); //将crc校验低位赋值给strsend
//str[7] = CRC_Check.GetHexStr(CRC_Check.Check_CRC(CRC_Check.GetStrHex(strSenddata)), CRC_Check.Check_CRC(CRC_Check.GetStrHex(strSenddata)).Length).Substring(0, 2);//将crc校验高位赋值给strsend
str[6] = crcCheck.GetHexStr(crcCheck.Check_CRC(crcCheck.GetStrHex(strSenddata)), crcCheck.Check_CRC(crcCheck.GetStrHex(strSenddata)).Length).Substring(3, 2); //将crc校验低位赋值给strsend
str[7] = crcCheck.GetHexStr(crcCheck.Check_CRC(crcCheck.GetStrHex(strSenddata)), crcCheck.Check_CRC(crcCheck.GetStrHex(strSenddata)).Length).Substring(0, 2);//将crc校验高位赋值给strsend
strSenddata = str[0] + str[1] + str[2] + str[3] + str[4] + str[5] + str[6] + str[7];
SendDateTo8(strSenddata);
}
#endregion
private void btnSendData_Click(object sender, EventArgs e) //发送数据到listview
#region
{
{
if (textBox1.Text == "")
{
MessageBox.Show("发送信息为空");
return;
}
else
{
string strSenddata = "";
strSenddata = textBox1.Text.ToString();
strSenddata = strSenddata + " " + textBox2.Text.ToString();
strSenddata = strSenddata + " " + textBox3.Text.ToString();
strSenddata = strSenddata + " " + textBox4.Text.ToString();
strSenddata = strSenddata + " " + textBox5.Text.ToString();
strSenddata = strSenddata + " " + textBox6.Text.ToString();
string[] str = new string[8];
textBox7.Text = crcCheck.GetHexStr(crcCheck.Check_CRC(crcCheck.GetStrHex(strSenddata)), crcCheck.Check_CRC(crcCheck.GetStrHex(strSenddata)).Length).Substring(3, 2); //将crc校验低位赋值给strsend
textBox8.Text = crcCheck.GetHexStr(crcCheck.Check_CRC(crcCheck.GetStrHex(strSenddata)), crcCheck.Check_CRC(crcCheck.GetStrHex(strSenddata)).Length).Substring(0, 2);//将crc校验高位赋值给strsend
str[0] = textBox1.Text;
str[1] = textBox2.Text;
str[2] = textBox3.Text;
str[3] = textBox4.Text;
str[4] = textBox5.Text;
str[5] = textBox6.Text;
str[6] = textBox7.Text;
str[7] = textBox8.Text;
saveprestolist(str);
tBoxDataIN.Text = "";
}
}
}
#endregion
private void saveprestolist(string[] strpres)//listview控件处理数据 可视化
#region
{
ListViewItem myItem = new ListViewItem(); //实例化一个listviewitem
myItem = listView1.Items.Add((listView1.Items.Count + 1).ToString());//加载砖块样式
for (int i = 0; i < strpres.Length; i++)
{
myItem.SubItems.Add(strpres[i].ToString());
}
}
#endregion
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
timer1.Start();
Disp_charts();
}
private void timer1_Tick(object sender, EventArgs e)//设置时间多步采集,并将新的数据处理传输给图像处理位置
#region
{
listTostring();
double a = Convert.ToDouble(txbAI.Text);
g_datanext1 = a;
list1.Remove(0);
list1.Add(g_datanext1);
double b = Convert.ToDouble(txbBI.Text);
g_datanext2 = b;
list2.Remove(0);
list2.Add(g_datanext2);
double c = Convert.ToDouble(txbCI.Text);
g_datanext3 = c;
list3.Remove(0);
list3.Add(g_datanext3);
double d = Convert.ToDouble(txbAU.Text);
g_datanext4 = d;
list4.Remove(0);
list4.Add(g_datanext4);
double f = Convert.ToDouble(txbBU.Text);
g_datanext5 = f;
list5.Remove(0);
list5.Add(g_datanext5);
double g = Convert.ToDouble(txbCU.Text);
g_datanext6 = g;
list6.Remove(0);
list6.Add(g_datanext6);
Disp_charts();
}
#endregion
private void timer2_Tick(object sender, EventArgs e)
{
}
private void tBoxDataIN_TextChanged(object sender, EventArgs e)//文本框改变时输出数据长度
{
int s = tBoxDataIN.Text.Length;
lblDataINLength.Text = Convert.ToString(s);
}
private void btnClearDataOut_Click(object sender, EventArgs e)//清空
#region
{
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";
}
#endregion
private void btnClearDataIN_Click(object sender, EventArgs e)//清空
{
tBoxDataIN.Text = "";
}
private void button3_Click(object sender, EventArgs e)//停止采集
{
timer1.Enabled = false;
timer1.Stop();
}
private void button4_Click(object sender, EventArgs e)//导出数据至控件按钮
#region
{
new Excel().WriteExcel_Table("table1.xlsx", GetDgvToTable(dataGridView1));
}
#endregion
private DataTable GetDgvToTable(DataGridView dgv)//datagridview设置行列
#region
{
DataTable dt = new DataTable();
// 列强制转换
for (int count = 0; count < dgv.Columns.Count; count++)
{
DataColumn dc = new DataColumn(dgv.Columns[count].Name.ToString());
dt.Columns.Add(dc);
}
// 循环行
for (int count = 0; count < dgv.Rows.Count; count++)
{
DataRow dr = dt.NewRow();
for (int countsub = 0; countsub < dgv.Columns.Count; countsub++)
{
dr[countsub] = Convert.ToString(dgv.Rows[count].Cells[countsub].Value);
}
dt.Rows.Add(dr);
}
return dt;
}
#endregion
}
}
使用到了null值的属性导致的,在箭头代码打断点,f11一步一步执行看是那句