示例#1
0
        //打开端口按钮
        private void Opencom_button_Click(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            bool   a, b;

            a = CTSerialPort.SetSP(com_list.Text, bode_list.Text, data_box.Text, stop_box.Text);
            b = CTSerialPort.OpenSP();
            if (a && b)
            {
                MessageBox.Show("打开成功");
                //保存串口参数
                controlconfig.AddOrModifyItem("portnum", com_list.Text);
                controlconfig.AddOrModifyItem("bodenum", bode_list.Text);
                controlconfig.AddOrModifyItem("datanum", data_box.Text);
                controlconfig.AddOrModifyItem("stopnum", stop_box.Text);

                if (btn.FindForm().IsMdiChild)
                {
                    return;
                }
                this.Close();
                Form_SP_Test form_sp_test = new Form_SP_Test();
                form_sp_test.ShowDialog();
                return;
            }
            return;
        }
示例#2
0
 //断开连接按钮    点击
 private void SP_Close_Click(object sender, EventArgs e)
 {
     if (!IsSignIn())
     {
         return;
     }
     CTSerialPort.CloseSP();
 }
示例#3
0
        //读取并转换串口数据的线程
        void ManageReadDataThread()
        {
            Console.WriteLine("开始接收数据线程");
            int dataID = 1, oldID = 0;       //定义通道一和二的数据ID变量

            byte[] bt       = new byte[200]; //定义接收数据的byte数组
            string dateTime = "";

            UInt16[] channel1 = new UInt16[50];
            UInt16[] channel2 = new UInt16[50];
            //cTMySql.CreateNewTable(tablename + "_channel1");
            //cTMySql.CreateNewTable(tablename + "_channel2");

            while (manageReadDataFlag)
            {
                //object lockthis = new object();
                //lock (lockthis)
                //{
                if (CTSerialPort.ReadSP(ref bt, ref dateTime, 200))
                {
                    for (int i = 0; i < 50; i++)
                    {
                        byte temp = 0;

                        temp          = bt[i * 4];
                        bt[i * 4]     = bt[i * 4 + 1];
                        bt[i * 4 + 1] = temp;

                        channel1[i] = BitConverter.ToUInt16(bt, i * 4);

                        temp          = bt[i * 4 + 2];
                        bt[i * 4 + 2] = bt[i * 4 + 3];
                        bt[i * 4 + 3] = temp;

                        channel2[i] = BitConverter.ToUInt16(bt, i * 4 + 2);
                    }
                    list1.AddRange(channel1);
                    list2.AddRange(channel2);

                    textBox1.AppendText(string.Join(" ", channel1));
                    textBox2.AppendText(string.Join(" ", channel2));

                    cTMySql.InsertData2DSTable(tablename + "_channel1", dataID, dateTime.ToString(), ref channel1);
                    cTMySql.InsertData2DSTable(tablename + "_channel2", dataID, dateTime.ToString(), ref channel2);
                    //if (dataID - oldID >= 100)
                    //{
                    //    oldID = dataID;
                    //    cTMySql.AddOrUpdataTableFromDataset2Databass(tablename + "_channel1");
                    //    cTMySql.AddOrUpdataTableFromDataset2Databass(tablename + "_channel2");
                    //}
                    dataID += 50;
                }

                //}
            }
            manageReadDataFlag = false;//线程结束后将信号灯标志置为禁止
        }
示例#4
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("串口通信参数有误,请重新设置");
            }
        }
示例#5
0
        //控件刷新
        void Form1Reflash()
        {
            while (true)
            {
                Thread.Sleep(500);
                xxxxxxx++;
                //Console.WriteLine("From1 Reflash:{0}", xxxxxxx);
                /******************用户登录、管理员权限检测***************************************************************/
                if (CTMySql.isSignIn)           //用户已登录时
                {
                    UserLogOut.Enabled = true;  //退出登录按钮 解锁
                    UserSwitch.Enabled = true;  //切换用户按钮 解锁
                    UserSignIn.Enabled = false; //用户登录按钮 锁定

                    SP_Set.Enabled = true;      //串口设置按钮 解锁
                }
                else                            //用户未登录时
                {
                    UserManage.Enabled = false; //用户管理按钮 锁定
                    UserLogOut.Enabled = false; //退出登录按钮 锁定
                    UserSwitch.Enabled = false; //切换用户按钮 锁定
                    UserSignIn.Enabled = true;  //用户登录按钮 解锁

                    SP_Set.Enabled = false;     //串口设置按钮     锁定
                }
                if (CTMySql.isUserAdmin)        //用户是管理员用户时
                {
                    UserManage.Enabled = true;  //用户管理按钮 解锁
                }
                else                            //用户非管理员用户时
                {
                    UserManage.Enabled = false; //用户管理按钮 锁定
                }
                /****************串口开启检测********************************************************************************/
                if (CTSerialPort.IsComOpen())     //串口开启时
                {
                    this.SP_Ttest.Enabled = true; //连接测试按钮  解锁
                    this.SP_Close.Enabled = true; //断开连接按钮  解锁
                }
                else//串口关闭时
                {
                    this.SP_Ttest.Enabled = false; //连接测试按钮  锁定
                    this.SP_Close.Enabled = false; //断开连接按钮  锁定
                }
            }
        }
        //读取串口数据    开始之前要先让信号灯通过
        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;
        }
        //开始测试按钮    点击
        public void Button_sp_test_Click(object sender, EventArgs e)
        {
            if (!CTSerialPort.IsComOpen())
            {
                MessageBox.Show("串口未打开");
                return;
            }
            button_sp_test_close.Focus();          //焦点置于停止测试按钮
            button_sp_test_close.Enabled  = true;  //停止测试按钮    解锁
            button_sp_tests_start.Enabled = false; //开始测试按钮  锁定

            //开始读取串口数据线程
            Thread readData = new Thread(ReadSpData);       //实例一个读取数据线程

            readData.IsBackground = true;                   //设置为后台线程
            readData.Priority     = ThreadPriority.Highest; //设置线程优先级为高
            flag1 = true;                                   //读数据线程信号灯通过
            readData.Start(4);                              //开始线程

            SendSpData("A");                                //给下位机发送开始发送数据信号
        }
 //发送串口数据
 public void SendSpData(string sendData)
 {
     CTSerialPort.SendSP(sendData);
 }