/// <summary> /// 开始按钮 点击 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ButtonStart_Click(object sender, EventArgs e) { //判断manageReadData线程是否在运行 //如果是,则直接return //如果不是,继续下边动作 if (manageReadDataFlag) { MessageBox.Show("already start!"); return; } if (CTSerialPort.SetSP() && CTSerialPort.OpenSP()) //判断串口是否能开启 { tablename = DateTime.Now.ToString(); //定义内存表名时间前缀 cTMySql.CreateDSTable(tablename + "_channel1"); //创建内存表 cTMySql.CreateDSTable(tablename + "_channel2"); //创建内存表 CTSerialPort.SendSP("E"); Thread.Sleep(10); CTSerialPort.ClearInBuffer(); manageReadDataFlag = true; //线程红绿灯信号 通过 Thread mrd = new Thread(ManageReadDataThread); //实例化ManageReadData线程 mrd.IsBackground = true; //设为后台线程 mrd.Start(); //线程开始 CTSerialPort.SendSP("A"); //给下位机发送开始信号 //波形1绘制线程 reflashWave1ThreadFlag = true; Thread rfwave1 = new Thread(ReflashWave1Thread); rfwave1.IsBackground = true; rfwave1.Start(tablename + "_channel1"); //波形2绘制线程 reflashWave2ThreadFlag = true; Thread rfwave2 = new Thread(ReflashWave2Thread); rfwave2.IsBackground = true; rfwave2.Start(tablename + "_channel2"); Console.WriteLine("开始接收数据"); ButtonStop.Enabled = true; ButtonStart.Enabled = false; } else { MessageBox.Show("串口通信参数有误,请重新设置"); } }
//读取串口数据 开始之前要先让信号灯通过 public void ReadSpData(object readSize) { UpdataCOMandBoud(); byte[] spData = new byte[4]; int num = 0; CTSerialPort.ClearInBuffer(); boxtest_result.Text = null; while (flag1) { if (CTSerialPort.ReadSP(ref spData, (int)readSize)) { for (int n = 0; n < 4; n++) { boxtest_result.AppendText(spData[n].ToString() + " "); //boxtest_result.Text += spData[n].ToString(); //this.boxtest_result.Focus();//获取焦点 //this.boxtest_result.Select(this.boxtest_result.TextLength, 0);//光标定位到文本最后 //this.boxtest_result.ScrollToCaret();//滚动到光标处 } //boxtest_result.Text += " "; //this.boxtest_result.Focus();//获取焦点 //this.boxtest_result.Select(this.boxtest_result.TextLength, 0);//光标定位到文本最后 //this.boxtest_result.ScrollToCaret();//滚动到光标处 System.DateTime currentTime = new System.DateTime(); currentTime = System.DateTime.Now; Console.WriteLine("Min:" + currentTime.Minute.ToString() + " Sec:" + currentTime.Second.ToString() + " MsecL" + currentTime.Millisecond.ToString() + "\r\n"); num++; } if (num >= 10) { boxtest_result.Text += "\r\n测试成功\r\n"; flag1 = false; SendSpData("E"); return; } } boxtest_result.Text += "\r\n测试失败,未接收到完整数据\r\n"; SendSpData("E"); return; }