Beispiel #1
0
        /// <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;
        }