论文部分代码

        private void DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            IsReceving = true;
            datainput = 0;
            string line = "";
            if (catch_2 == true)//接收GPS数据
            {
                line = serialPort1.ReadExisting();
                if (gps_text != string.Empty && gps_text[0] != '$')
                {
                    gps_text = "";
                }
                else
                {
                    gps_text += line;
                    char[] anyOf = { '$', 'G', 'P', 'G', 'G', 'A' };
                    if (gps_text.IndexOfAny(anyOf) == 0 && gps_text.Length > 74)
                    {
                        Invoke(new EventHandler(update_data));
                        gps_text = "";
                    }
                }
            }
            else
            {//接收传感器的数据
                int Len = serialPort1.BytesToRead;
                byte[] buf = new byte[Len];
                //声明一个临时数组存储当前来的串口数据
                serialPort1.Read(buf, 0, Len);
                //声明一个字符串数组存储输入的数值信息,方便存进数据库                                              
                catch_1 = false;//缓冲记录数据是佛捕获到
                //缓存数据
                buffer.AddRange(buf);
                if (buffer.Count >= 17)
                {
                    if (buffer[0] == 0x68)
                    {
                        if (buffer[16] != 0x16)
                        {
                            //如果校验失败,就丢失这一包数据
                            buffer.RemoveRange(0, buffer.Count);
                            //  buffer.RemoveAt(0);
                        }
                        else
                        {
                            catch_2 = true;
                            buffer.CopyTo(0, data, 0, 17);
                            buffer.RemoveRange(0, buffer.Count);
                            catch_1 = true;
                        }
                    }
                    else
                    {
                        //如果数据不是头,则删除数据
                        buffer.RemoveRange(0, buffer.Count);
                        //如果数据不是头,则删除数据
                        //buffer.RemoveAt(0);
                    }
                }
            }

            if (catch_1 == true)
            {
                star = Convert.ToInt32(data[0]);
                en = Convert.ToInt32(data[16]);
                flag = Convert.ToInt32(data[1]);
                datainput = Convert.ToInt32(data[2]);
                datainput_C2H4 = (datainput << 8) | Convert.ToInt32(data[3]);
                datainput = Convert.ToInt32(data[5]);
                datainput_O2 = (datainput << 8) | Convert.ToInt32(data[6]);
                datainput = Convert.ToInt32(data[8]);
                datainput_Humi = (datainput << 8) | Convert.ToInt32(data[9]);
                datainput = Convert.ToInt32(data[11]);
                datainput_Temp = (datainput << 8) | Convert.ToInt32(data[12]);
                catch_1 = false;
            }  

                if (star == 0x68 && en == 0x16 && flag == 0x03)
                {
                    //传感器1
                    analyseData(1);
                }

                if (star == 0x68 && en == 0x16 && flag == 0x33)
                {
                    //传感器2
                    analyseData(2);
                }
                Application.DoEvents();
        }

你可能感兴趣的:(c#)