Esempio n. 1
0
        private void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            int n = ListenPort.BytesToRead;

            byte[] buf = new byte[n];
            ListenPort.Read(buf, 0, n);
            m_inputBuffer.AddRange(buf);
            //获取结束符号的位置
            var count = (from r in m_inputBuffer where (r == 59) select r).Count();

            Debug.WriteLine(count + " ----- " + Encoding.ASCII.GetString(buf));
            string           tmp        = Encoding.ASCII.GetString(m_inputBuffer.ToArray <byte>());
            WriteToFileClass writeClass = new WriteToFileClass("ReceivedLog");
            Thread           t          = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile));

            t.Start("GPRS: " + "长度:" + tmp.Length + " " + tmp + "\r\n");
            if (tmp.Contains("$"))
            {
                string data = Encoding.ASCII.GetString(m_inputBuffer.ToArray <byte>());
                //判定短信接收的标志符号
                if (data.Contains("CMT"))
                {
                    if (data.EndsWith("\r\n"))
                    {
                        string[] a = new string[] { "CMT" };
                        //按CMT划分字符串
                        string[] ArrData = data.Split(a, StringSplitOptions.None);
                        for (int i = 1; i < ArrData.Count(); i++)
                        {
                            //增加一层调用,支持多线程
                            Thread t1 = new Thread(new ParameterizedThreadStart(parse_Updata));
                            t1.Start(ArrData[i]);
                        }
                        //如果判定到结束符号,则清空缓冲区
                        m_inputBuffer.Clear();
                    }
                }
            }
        }
        // 处理COUT类型数据
        private void DealCOUT(string msg)
        //  private String DealCOUT(string msg)
        {
            string result = null;

            InvokeMessage("通信输出  " + msg, "接收");
            SendBackTTCAString = msg;
            if (msg.Contains("COUT"))
            {
                if (msg.Contains("COUT"))
                {
                    num = num + 1;
                    FileStream   fs = new FileStream("numbd.txt", FileMode.Create);
                    StreamWriter sw = new StreamWriter(fs);
                    //开始写入
                    sw.Write(num);
                    //清空缓冲区
                    sw.Flush();
                    //关闭流
                    sw.Close();
                    fs.Close();
                }
            }
            // InvokeString(msg);
            var cout = BeidouHelper.GetCOUTInfo(msg);

            if (cout == null)
            {
                return;
            }

            //  return result;
            //  发送COSS指令
            //  必须在1秒内发送给卫星终端,否则会重新发送“通信输出”
            var coss = new CCOSSStruct();

            coss.SuccessStatus = true;          //  终端接收到外设通信申请,并校验成功
            SendCOSS(coss);
            //  发送CACA指令
            //  每隔一分钟发送回执$CACA
            //  65秒左右发一条
            var caca = new CCACAStruct();

            caca.SenderID              = "1";                 //  发信方ID为1,表示本机ID,默认
            caca.RecvType              = cout.SenderType;     //  回执的收信方类型  ==  通信输出中的发信方类型
            caca.RecvAddr              = cout.SenderAddr;     //  回执的收信方地址  ==  通信输出中的发信方地址
            caca.Requirements          = "1";                 //  不保密
            caca.ReceiptMsgSequenceNum = cout.MsgSequenceNum; // 回执的报文顺序号  ==  通信输出中的报文顺序号
            caca.ReceiptContent        = "1";
            SendCACA(caca);

            //  解析通信输出中的内容
            string content = cout.MsgContent;

            //通信输出gm8  $60131G2201161111040003046112271367
            try
            {
                string           rawMsg     = content;
                string           sid        = null;
                string           dealMsg    = ProtocolHelpers.dealBCD(rawMsg);
                WriteToFileClass writeClass = new WriteToFileClass("ReceivedLog");
                Thread           t          = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile));
                t.Start("COUT Message: " + " " + dealMsg + "\r\n");
                string bdid = cout.SenderAddr;
                //InvokeMessage("gm3  " + content, "接收");
                //sid需要根据北斗卫星号获取
                try
                {
                    sid = Manager.XmlStationDataSerializer.Instance.GetStationByBDID(bdid);
                }
                catch (Exception e)
                {
                    sid = "5712";
                    Debug.WriteLine("获取站号失败" + e.Message);
                }
                EMessageType type       = ProtocolMaps.MessageTypeMap.FindKey(dealMsg.Substring(0, 2));
                string       reportType = dealMsg.Substring(0, 2);
                if (reportType == "21" || reportType == "22")   //   定时报,加报
                {
                    //  YAC设备的墒情协议:
                    string stationType = dealMsg.Substring(2, 2);
                    switch (stationType)
                    {
                    //  站类为04时墒情站 05墒情雨量站 06,16墒情水位站 07,17墒情水文站
                    case "04":
                    case "05":
                    case "06":
                    case "07":
                    case "17":
                    {
                        //    var station = FindStationByBeidouID(cout.SenderAddr);
                        //    string currentMsg = rawMsg.Insert(0, "$" + station.StationID + "1G");
                        //    CEntitySoilData soil = new CEntitySoilData();
                        //    CReportStruct soilReport = new CReportStruct();
                        //    if (Soil.Parse(currentMsg, out soil, out soilReport))
                        //    {
                        //        soil.ChannelType = EChannelType.BeiDou;

                        //        if (null != this.SoilDataReceived)
                        //            this.SoilDataReceived(null, new CEventSingleArgs<CEntitySoilData>(soil));

                        //        if (null != soilReport && null != this.UpDataReceived)
                        //        {
                        //            soilReport.ChannelType = EChannelType.BeiDou;
                        //            soilReport.ListenPort = "COM" + this.Port.PortName;
                        //            this.UpDataReceived(null, new UpEventArgs() { RawData = rawMsg, Value = soilReport });
                        //        }
                        //    }

                        //}
                        //1111gm
                        string          newMsg     = dealMsg.Substring(1, dealMsg.Length - 1);
                        CEntitySoilData soil       = new CEntitySoilData();
                        CReportStruct   soilReport = new CReportStruct();
                        if (Soil.Parse(newMsg, out soil, out soilReport))
                        {
                            soilReport.ChannelType = EChannelType.BeiDou;
                            if (null != this.SoilDataReceived)
                            {
                                this.SoilDataReceived(null, new CEventSingleArgs <CEntitySoilData>(soil));
                            }

                            if (null != soilReport && null != this.UpDataReceived)
                            {
                                soilReport.ChannelType = EChannelType.GPRS;
                                soilReport.ListenPort  = "COM" + this.Port.PortName;
                                soilReport.flagId      = bdid;
                                this.UpDataReceived(null, new UpEventArgs()
                                    {
                                        RawData = newMsg, Value = soilReport
                                    });
                            }
                        }
                    }
                    break;

                    //  站类为01,02,03,12,13时,不是墒情站
                    case "01":
                    case "02":
                    case "03":
                    case "12":
                    case "13":
                    {
                        //1111gm
                        //string newMsg = dealMsg.Substring(1, dealMsg.Length - 1);
                        //CReportStruct report = new CReportStruct();
                        //if (Up.Parse(newMsg, out report))
                        //{
                        //    //6013 $60131G2201161111040003046112271367
                        //    report.ChannelType = EChannelType.BeiDou;
                        //    report.ListenPort = "COM" + this.Port.PortName;
                        //    if (this.UpDataReceived != null)
                        //    {
                        //        this.UpDataReceived.Invoke(null, new UpEventArgs() { Value = report, RawData = newMsg });
                        //    }
                        //}
                        CReportStruct report = new CReportStruct();
                        UpParser      Up1    = new UpParser();
                        if (Up1.Parse_beidou(sid, type, rawMsg, out report))
                        {
                            //InvokeMessage("gm6  " + rawMsg, "接收");
                            //$60131G2201161111040003046112271367
                            report.ChannelType = EChannelType.BeiDou;
                            report.ListenPort  = "COM" + this.Port.PortName;
                            report.flagId      = bdid;
                            if (this.UpDataReceived != null)
                            {
                                //InvokeMessage("gm7  " + rawMsg, "接收");
                                this.UpDataReceived.Invoke(null, new UpEventArgs()
                                    {
                                        Value = report, RawData = rawMsg
                                    });
                            }
                        }
                    }
                    break;

                    default:
                        break;
                    }
                }
                else if (reportType == "11")    //  人工水位
                {
                }
                else if (reportType == "23")    //  人工流量
                {
                }
                else if (reportType == "25")
                {
                    var    station    = FindStationByBeidouID(cout.SenderAddr);
                    string currentMsg = dealMsg.Insert(0, "$" + station.StationID + "1G");

                    CEntitySoilData soil       = new CEntitySoilData();
                    CReportStruct   soilReport = new CReportStruct();
                    if (Soil.Parse(currentMsg, out soil, out soilReport))
                    {
                        soil.ChannelType = EChannelType.BeiDou;

                        if (null != this.SoilDataReceived)
                        {
                            this.SoilDataReceived(null, new CEventSingleArgs <CEntitySoilData>(soil));
                        }

                        if (null != soilReport && null != this.UpDataReceived)
                        {
                            soilReport.ChannelType = EChannelType.BeiDou;
                            soilReport.ListenPort  = "COM" + this.Port.PortName;
                            soilReport.flagId      = bdid;
                            this.UpDataReceived(null, new UpEventArgs()
                            {
                                RawData = dealMsg, Value = soilReport
                            });
                        }
                    }
                }
            }
            catch (Exception exp)
            {
                System.Diagnostics.Debug.WriteLine("Beidou 数据解析出错 !" + content + "\r\n" + exp.Message);
            }
            //result = msg;
            //return result;
        }
        // 处理缓冲区中的数据
        private void DealData()
        {
            while (true)
            {
                try
                {
                    m_semephoreData.WaitOne();
                    m_mutexListByte.WaitOne(); //等待内存互斥量
                    var count = (from r in m_inputBuffer where (r == 13) select r).Count();
                    if (count == 0)
                    {
                        m_mutexListByte.ReleaseMutex(); //内存操作完毕,释放互斥量
                        continue;
                    }

                    //xcj 180407
                    m_mutexListByte.ReleaseMutex();
                    // gm 1117
                    List <byte>   inputBytes = m_inputBuffer;
                    StringBuilder sb         = new StringBuilder();

                    foreach (byte b in inputBytes)
                    {
                        int    i = (int)b;
                        String s = "";
                        s += (char)i;
                        sb.Append(s);
                    }



                    string flag = sb.ToString();

                    //1119
                    WriteToFileClass writeClass = new WriteToFileClass("ReceivedLog");
                    Thread           t          = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile));
                    t.Start("Beidou: " + "长度:" + flag.Length + " " + flag + "\r\n");

                    Debug.WriteLine("接收消息:  " + flag);
                    if (flag.Contains(CCASSStruct.CMD_PREFIX) || flag.Contains(CTSTAStruct.CMD_PREFIX) ||
                        flag.Contains(CTTCAStruct.CMD_PREFIX) || flag.Contains(CCOUTStruct.CMD_PREFIX) ||
                        flag.Contains(CTINFStruct.CMD_PREFIX))
                    {
                        if (flag.Contains("?\n"))
                        {
                            flag = flag.Replace("?\n", "?\r\n");
                        }
                        if (flag.EndsWith("\r\n"))
                        {
                            int      indexOfFirstCASS = 0;
                            int      indexOfFirstTSTA = 0;
                            int      indexOfFirstTTCA = 0;
                            int      indexOfFirstCOUT = 0;
                            int      indexOfFirstTINF = 0;
                            string[] a       = new string[] { "\r\n" };
                            string[] ArrData = flag.Split(a, StringSplitOptions.None);
                            for (int i = 0; i < ArrData.Count(); i++)
                            {
                                if (ArrData[i].Contains(CCASSStruct.CMD_PREFIX))
                                {
                                    indexOfFirstCASS = ArrData[i].IndexOf("CASS");
                                    string msg = ArrData[i].Substring(indexOfFirstCASS);
                                    DealCASS(msg);
                                }
                                if (ArrData[i].Contains(CTSTAStruct.CMD_PREFIX))
                                {
                                    indexOfFirstTSTA = ArrData[i].IndexOf("TSTA");
                                    string msg = ArrData[i].Substring(indexOfFirstTSTA);
                                    DealTSTA(msg);
                                }
                                if (ArrData[i].Contains(CTTCAStruct.CMD_PREFIX))
                                {
                                    indexOfFirstTSTA = ArrData[i].IndexOf("TTCA");
                                    string msg = ArrData[i].Substring(indexOfFirstTTCA);
                                    DealTTCA(msg);
                                }
                                //顶时报待测
                                if (ArrData[i].Contains(CCOUTStruct.CMD_PREFIX))
                                {
                                    indexOfFirstTSTA = ArrData[i].IndexOf("COUT");
                                    string msg = ArrData[i].Substring(indexOfFirstCOUT);
                                    DealCOUT(msg);
                                }
                                if (ArrData[i].Contains(CTINFStruct.CMD_PREFIX))
                                {
                                    indexOfFirstTSTA = ArrData[i].IndexOf("TINF");
                                    string msg = ArrData[i].Substring(indexOfFirstTINF);
                                    DealTAPP(msg);
                                }
                            }
                            m_inputBuffer.Clear();
                        }
                    }

                    //int indexOfFirst13 = 0;


                    //  // int indexOfFirst13 = 0;
                    //   //indexOfFirst13 = m_inputBuffer.IndexOf(13);
                    //   //var msgBytes = m_inputBuffer.GetRange(0, indexOfFirst13 + 1);

                    //   //this.m_inputBuffer.RemoveRange(0, indexOfFirst13 + 1);
                    //   m_mutexListByte.ReleaseMutex(); //内存操作完毕,释放互斥量

                    //   //string msg = System.Text.Encoding.Default.GetString(msgBytes.ToArray());

                    //   int indexOfDollar = msg.IndexOf('$');
                    //   string tag = msg.Substring(indexOfDollar + 1, 4);

                    //   msg = msg.Replace("\r", "").Replace("\n", "");
                    //   Debug.WriteLine("接收消息:  " + msg);
                    ////   InvokeMessage("dealdata  " + msg.Trim().Length, ",,,接收");
                    //   switch (tag)
                    //   {
                    //       case CCASSStruct.CMD_PREFIX: DealCASS(msg); break;
                    //       case CTSTAStruct.CMD_PREFIX: DealTSTA(msg); break;
                    //       case CTTCAStruct.CMD_PREFIX: DealTTCA(msg); break;
                    //       case CCOUTStruct.CMD_PREFIX: { DealCOUT(msg);  break; }
                    //       case CTINFStruct.CMD_PREFIX: { DealTAPP(msg); InvokeMessage("TAPP...", "接收"); break; }
                    //       default: break;
                    //   }
                }
                catch (Exception exp)
                {
                    Debug.WriteLine(exp.Message);
                }
            }//end of while
        }
Esempio n. 4
0
        private void DealData()
        {
            while (true)
            {
                try
                {
                    m_semephoreData.WaitOne();
                    Thread.Sleep(1000);
                    string           data       = string.Empty;
                    string           rawdata    = System.Text.Encoding.ASCII.GetString(m_inputBuffer.ToArray());
                    WriteToFileClass writeClass = new WriteToFileClass("ReceivedLog");
                    Thread           t          = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile));
                    t.Start("GPRS: " + "长度:" + rawdata.Length + " " + rawdata + "\r\n");
                    //InvokeMessage(rawdata, "原始数据");
                    if (rawdata == null || rawdata == "")
                    {
                        continue;
                    }
                    if (!rawdata.EndsWith(";") && !rawdata.Contains(";") && !rawdata.Contains(";") && !rawdata.Contains(";"))
                    {
                        InvokeMessage("未包含结束符号", "输出");
                        continue;
                    }
                    m_inputBuffer.Clear();
                    string temp   = rawdata.Trim();
                    string result = string.Empty;
                    //InvokeMessage(temp, "原始数据");
                    //TODO 判定结束符
                    if (rawdata.Contains("$"))
                    {
                        data = rawdata;
                        string[] dataList = data.Split('$');
                        //上行报文接收需回复TRU

                        //数据解析
                        for (int i = 0; i < dataList.Count(); i++)
                        {
                            string        oneGram          = dataList[i];
                            CReportStruct report           = new CReportStruct();
                            Protocol.Data.ZFXY.UpParse up1 = new Data.ZFXY.UpParse();
                            //UpPaser up = new UpPaser();
                            if (up1.Parse(oneGram, out report))
                            {
                                report.ChannelType = EChannelType.Cable;
                                report.ListenPort  = "COM" + this.Port.PortName;
                                if (this.UpDataReceived != null)
                                {
                                    InvokeMessage(oneGram, "[CABLE]接收");
                                    this.UpDataReceived.Invoke(null, new UpEventArgs()
                                    {
                                        Value = report, RawData = oneGram
                                    });
                                }
                            }
                        }
                    }
                }
                catch (Exception exp)
                {
                    Debug.WriteLine(exp.Message);
                    m_inputBuffer.Clear();
                    //InvokeMessage(rawdata, "接收");
                }
            }//end of while
        }
        // 处理缓冲区中的数据
        //private void DealData()
        //{
        //    while (true)
        //    {
        //        try
        //        {
        //            m_semephoreData.WaitOne();
        //            m_mutexListByte.WaitOne(); //等待内存互斥量

        //            var count = (from r in m_inputBuffer where (r == 13) select r).Count();

        //            if (count == 0)
        //            {
        //                m_mutexListByte.ReleaseMutex(); //内存操作完毕,释放互斥量
        //                continue;
        //            }

        //            int indexOfFirst13 = 0;
        //            indexOfFirst13 = m_inputBuffer.IndexOf(13);
        //            var msgBytes = m_inputBuffer.GetRange(0, indexOfFirst13 + 1);
        //            this.m_inputBuffer.RemoveRange(0, indexOfFirst13 + 1);
        //            m_mutexListByte.ReleaseMutex(); //内存操作完毕,释放互斥量

        //            string msg = System.Text.Encoding.Default.GetString(msgBytes.ToArray());
        //           // InvokeMessage(msg.ToString()+"..."+msg.Length,"测试");
        //            int indexOfDollar = msg.IndexOf('$');
        //            string tag = msg.Substring(indexOfDollar + 1, 4);

        //            msg = msg.Replace("\r", "").Replace("\n", "");
        //            Debug.WriteLine("接收消息:  " + msg);

        //            switch (tag)
        //            {
        //                case CBeiDouBJXX.CMD_PREFIX: DealBJXX(msg); break;
        //                case CBeiDouZTXX.CMD_PREFIX: DealZTXX(msg); break;
        //                case CBeiDouSJXX.CMD_PREFIX: DealSJXX(msg); break;
        //                case CBeiDouCOUT.CMD_PREFIX: DealCOUT(msg); break;
        //                default: break;
        //            }
        //        }
        //        catch (Exception exp)
        //        {
        //            Debug.WriteLine(exp.Message);
        //        }
        //    }//end of while
        //}

        //  处理本机信息  BJXX数据类型

        private void DealData()
        {
            while (true)
            {
                try
                {
                    m_semephoreData.WaitOne();
                    m_mutexListByte.WaitOne(); //等待内存互斥量

                    var count = (from r in m_inputBuffer where (r == 13) select r).Count();

                    if (count == 0)
                    {
                        m_mutexListByte.ReleaseMutex(); //内存操作完毕,释放互斥量
                        continue;
                    }

                    m_mutexListByte.ReleaseMutex(); //内存操作完毕,释放互斥量
                    //gm1118
                    string flag = Encoding.ASCII.GetString(m_inputBuffer.ToArray <byte>());

                    //1119
                    WriteToFileClass writeClass = new WriteToFileClass("ReceivedLog");
                    Thread           t          = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile));
                    t.Start("Beidou500: " + "长度:" + " " + flag + "\r\n");

                    Debug.WriteLine("接收消息:  " + flag);
                    if (flag.Contains(CBeiDouBJXX.CMD_PREFIX) || flag.Contains(CBeiDouZTXX.CMD_PREFIX) ||
                        flag.Contains(CBeiDouSJXX.CMD_PREFIX) || flag.Contains(CBeiDouCOUT.CMD_PREFIX))
                    {
                        if (flag.EndsWith("\r\n"))
                        {
                            int      indexOfFirstBJXX = 0;
                            int      indexOfFirstZTXX = 0;
                            int      indexOfFirstSJXX = 0;
                            int      indexOfFirstCOUT = 0;
                            string[] a       = new string[] { "\r\n" };
                            string[] ArrData = flag.Split(a, StringSplitOptions.None);
                            for (int i = 0; i < ArrData.Count(); i++)
                            {
                                if (ArrData[i].Contains(CBeiDouBJXX.CMD_PREFIX))
                                {
                                    indexOfFirstBJXX = ArrData[i].IndexOf("BJXX");
                                    string msg = ArrData[i].Substring(indexOfFirstBJXX);
                                    DealBJXX(msg);
                                }
                                if (ArrData[i].Contains(CBeiDouZTXX.CMD_PREFIX))
                                {
                                    indexOfFirstZTXX = ArrData[i].IndexOf("ZTXX");
                                    string msg = ArrData[i].Substring(indexOfFirstZTXX);
                                    DealZTXX(msg);
                                }
                                if (ArrData[i].Contains(CBeiDouSJXX.CMD_PREFIX))
                                {
                                    indexOfFirstSJXX = ArrData[i].IndexOf("SJXX");
                                    string msg = ArrData[i].Substring(indexOfFirstSJXX);
                                    DealSJXX(msg);
                                }
                                //顶时报待测
                                if (ArrData[i].Contains(CBeiDouCOUT.CMD_PREFIX))
                                {
                                    indexOfFirstCOUT = ArrData[i].IndexOf("COUT");
                                    string msg = ArrData[i].Substring(indexOfFirstCOUT);
                                    DealCOUT(msg);
                                }
                            }
                            m_inputBuffer.Clear();
                        }
                    }
                }
                catch (Exception exp)
                {
                    Debug.WriteLine(exp.Message);
                }
            }//end of while
        }
        // 处理通信输出 COUT类型数据
        public void DealCOUT(string msg)
        {
            InvokeMessage("通信输出  " + msg, "接收");
            string str = msg.Trim();

            if (str.Contains("COUT"))
            {
                if (str.Contains("COUT"))
                {
                    num = num + 1;
                    FileStream   fs = new FileStream("numbd.txt", FileMode.Create);
                    StreamWriter sw = new StreamWriter(fs);
                    //开始写入
                    sw.Write(num);
                    //清空缓冲区
                    sw.Flush();
                    //关闭流
                    sw.Close();
                    fs.Close();
                }
            }

            var cout = Beidou500Helper.GetCOUTInfo(msg);

            //InvokeMessage("gm1  " + "通过截取", "接收");
            if (cout == null)
            {
                //InvokeMessage("gm2  " + "通过截取", "接收");
                return;
            }

            //TODO
            //需要处理dealbcd码的走这里
            //  解析通信输出中的内容
            string           content = cout.MsgContent;
            UpParser         up      = new UpParser();
            List <CUpReport> reports = new List <CUpReport>();

            //TODO
            //添加调用代码

            try
            {
                string           rawMsg     = content;
                string           sid        = null;
                string           dealMsg    = ProtocolHelpers.dealBCD(rawMsg);
                WriteToFileClass writeClass = new WriteToFileClass("ReceivedLog");
                Thread           t          = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile));
                t.Start("COUT Message: " + " " + dealMsg + "\r\n");
                //InvokeMessage("gm3  " + content, "接收");
                //sid需要根据北斗卫星号获取
                try
                {
                    string bdid = cout.SenderAddr;
                    sid = Manager.XmlStationDataSerializer.Instance.GetStationByBDID(bdid);
                }
                catch (Exception e)
                {
                    sid = "5712";
                    Debug.WriteLine("获取站号失败" + e.Message);
                }
                EMessageType type       = ProtocolMaps.MessageTypeMap.FindKey(dealMsg.Substring(0, 2));
                string       reportType = dealMsg.Substring(0, 2);
                //InvokeMessage("gm4  " + reportType, "接收");
                if (reportType == "21" || reportType == "22")   //   定时报,加报
                {
                    //  YAC设备的墒情协议:
                    string stationType = dealMsg.Substring(2, 2);
                    //InvokeMessage("gm5  " + stationType, "接收");
                    switch (stationType)
                    {
                    //  站类为04时墒情站 05墒情雨量站 06,16墒情水位站 07,17墒情水文站
                    case "04":
                    case "05":
                    case "06":
                    case "07":
                    case "17":
                    {
                        //var station = FindStationByBeidouID(cout.SenderAddr);
                        //string currentMsg = rawMsg.Insert(0, "$" + station.StationID + "1G");
                        //CEntitySoilData soil = new CEntitySoilData();
                        //CReportStruct soilReport = new CReportStruct();
                        //if (Soil.Parse(currentMsg, out soil, out soilReport))
                        //{
                        //    soil.ChannelType = EChannelType.BeiDou;

                        //    if (null != this.SoilDataReceived)
                        //        this.SoilDataReceived(null, new CEventSingleArgs<CEntitySoilData>(soil));

                        //    if (null != soilReport && null != this.UpDataReceived)
                        //    {
                        //        soilReport.ChannelType = EChannelType.BeiDou;
                        //        soilReport.ListenPort = "COM" + this.Port.PortName;
                        //        this.UpDataReceived(null, new UpEventArgs() { RawData = rawMsg, Value = soilReport });
                        //    }
                        //}
                        // string newMsg = rawMsg.Substring(1, rawMsg.Length - 1);
                        CEntitySoilData soil       = new CEntitySoilData();
                        CReportStruct   soilReport = new CReportStruct();
                        if (Soil.Parse(rawMsg, out soil, out soilReport))
                        {
                            soilReport.ChannelType = EChannelType.BeiDou;
                            if (null != this.SoilDataReceived)
                            {
                                this.SoilDataReceived(null, new CEventSingleArgs <CEntitySoilData>(soil));
                            }

                            if (null != soilReport && null != this.UpDataReceived)
                            {
                                soilReport.ChannelType = EChannelType.GPRS;
                                soilReport.ListenPort  = "COM" + this.Port.PortName;
                                this.UpDataReceived(null, new UpEventArgs()
                                    {
                                        RawData = rawMsg, Value = soilReport
                                    });
                            }
                        }
                    }
                    break;

                    //  站类为01,02,03,12,13时,不是墒情站
                    case "01":
                    case "02":
                    case "03":
                    case "12":
                    case "13":
                    {
                        //var station = FindStationByBeidouID(cout.SenderAddr);
                        //rawMsg = rawMsg.Insert(0, station.StationID + "  ");

                        //CReportStruct report = new CReportStruct();
                        //if (Up.Parse(rawMsg, out report))
                        //{
                        //    report.ChannelType = EChannelType.BeiDou;
                        //    report.ListenPort = "COM" + this.Port.PortName;
                        //    if (this.UpDataReceived != null)
                        //        this.UpDataReceived.Invoke(null, new UpEventArgs() { Value = report, RawData = msg });
                        //}
                        //string newMsg = rawMsg.Substring(1, rawMsg.Length - 1);
                        CReportStruct report = new CReportStruct();
                        UpParser      Up1    = new UpParser();
                        if (Up1.Parse_beidou(sid, type, rawMsg, out report))
                        {
                            //InvokeMessage("gm6  " + rawMsg, "接收");
                            //$60131G2201161111040003046112271367
                            report.ChannelType = EChannelType.BeiDou;
                            report.ListenPort  = "COM" + this.Port.PortName;
                            if (this.UpDataReceived != null)
                            {
                                //InvokeMessage("gm7  " + rawMsg, "接收");
                                this.UpDataReceived.Invoke(null, new UpEventArgs()
                                    {
                                        Value = report, RawData = rawMsg
                                    });
                            }
                        }
                    }
                    break;

                    default:
                        break;
                    }
                }
                else if (reportType == "11")    //  人工水位
                {
                }
                else if (reportType == "23")    //  人工流量
                {
                }
                else if (reportType == "25")
                {
                    var    station    = FindStationByBeidouID(cout.SenderAddr);
                    string currentMsg = rawMsg.Insert(0, "$" + station.StationID + "1G");

                    CEntitySoilData soil       = new CEntitySoilData();
                    CReportStruct   soilReport = new CReportStruct();
                    if (Soil.Parse(currentMsg, out soil, out soilReport))
                    {
                        soil.ChannelType = EChannelType.BeiDou;

                        if (null != this.SoilDataReceived)
                        {
                            this.SoilDataReceived(null, new CEventSingleArgs <CEntitySoilData>(soil));
                        }

                        if (null != soilReport && null != this.UpDataReceived)
                        {
                            soilReport.ChannelType = EChannelType.BeiDou;
                            soilReport.ListenPort  = "COM" + this.Port.PortName;
                            this.UpDataReceived(null, new UpEventArgs()
                            {
                                RawData = rawMsg, Value = soilReport
                            });
                        }
                    }
                }
            }
            catch (Exception exp)
            {
                System.Diagnostics.Debug.WriteLine("北斗卫星指挥机 数据解析出错 !" + content + "\r\n" + exp.Message);
            }
        }
        // 处理缓冲区中的数据
        //private void DealData()
        //{
        //    while (true)
        //    {
        //        try
        //        {
        //            m_semephoreData.WaitOne();
        //            m_mutexListByte.WaitOne(); //等待内存互斥量

        //            var count = (from r in m_inputBuffer where (r == 13) select r).Count();

        //            if (count == 0)
        //            {
        //                m_mutexListByte.ReleaseMutex(); //内存操作完毕,释放互斥量
        //                continue;
        //            }

        //            int indexOfFirst13 = 0;
        //            indexOfFirst13 = m_inputBuffer.IndexOf(13);
        //            var msgBytes = m_inputBuffer.GetRange(0, indexOfFirst13 + 1);
        //            this.m_inputBuffer.RemoveRange(0, indexOfFirst13 + 1);
        //            m_mutexListByte.ReleaseMutex(); //内存操作完毕,释放互斥量

        //            string msg = System.Text.Encoding.Default.GetString(msgBytes.ToArray());
        //           // InvokeMessage(msg.ToString()+"..."+msg.Length,"测试");
        //            int indexOfDollar = msg.IndexOf('$');
        //            string tag = msg.Substring(indexOfDollar + 1, 4);

        //            msg = msg.Replace("\r", "").Replace("\n", "");
        //            Debug.WriteLine("接收消息:  " + msg);

        //            switch (tag)
        //            {
        //                case CBeiDouBJXX.CMD_PREFIX: DealBJXX(msg); break;
        //                case CBeiDouZTXX.CMD_PREFIX: DealZTXX(msg); break;
        //                case CBeiDouSJXX.CMD_PREFIX: DealSJXX(msg); break;
        //                case CBeiDouCOUT.CMD_PREFIX: DealCOUT(msg); break;
        //                default: break;
        //            }
        //        }
        //        catch (Exception exp)
        //        {
        //            Debug.WriteLine(exp.Message);
        //        }
        //    }//end of while
        //}

        //  处理本机信息  BJXX数据类型

        private void DealData()
        {
            while (true)
            {
                try
                {
                    m_semephoreData.WaitOne();
                    m_mutexListByte.WaitOne(); //等待内存互斥量

                    var count = (from r in m_inputBuffer where (r == 13) select r).Count();

                    if (count == 0)
                    {
                        m_mutexListByte.ReleaseMutex(); //内存操作完毕,释放互斥量
                        continue;
                    }

                    m_mutexListByte.ReleaseMutex();
                    //内存操作完毕,释放互斥量
                    //gm1118
                    //TODO
                    //判定是ascma 还是16进制
                    //string flag = Encoding.ASCII.GetString(m_inputBuffer.ToArray<byte>());


                    //StringBuilder flag = new StringBuilder();
                    //foreach (byte b in m_inputBuffer.ToArray<byte>)
                    //{
                    //    string s = System.Text.Encoding.Default.GetString(b);
                    //    flag.Append(s);
                    //}

                    //ASCIIEncoding aSCIIEncoding = new ASCIIEncoding();
                    //StringBuilder sb = new StringBuilder();
                    //byte[] bt = m_inputBuffer.ToArray<byte>();
                    //string flag = aSCIIEncoding.GetString(bt);

                    List <byte>   inputBytes = m_inputBuffer;
                    StringBuilder sb         = new StringBuilder();

                    foreach (byte b in inputBytes)
                    {
                        int    i = (int)b;
                        String s = "";
                        s += (char)i;
                        sb.Append(s);
                    }



                    string flag = sb.ToString();

                    //1119
                    WriteToFileClass writeClass = new WriteToFileClass("ReceivedLog");
                    Thread           t          = new Thread(new ParameterizedThreadStart(writeClass.WriteInfoToFile));
                    t.Start("Beidou500: " + "Length:" + " " + flag + "\r\n");

                    Debug.WriteLine("接收消息:  " + flag);
                    if (flag.Contains(CBeiDouBJXX.CMD_PREFIX) || flag.Contains(CBeiDouZTXX.CMD_PREFIX) ||
                        flag.Contains(CBeiDouSJXX.CMD_PREFIX) || flag.Contains(CBeiDouCOUT.CMD_PREFIX))
                    {
                        if (flag.Contains("?\n"))
                        {
                            flag = flag.Replace("?\n", "?\r\n");
                        }
                        if (flag.EndsWith("\r\n"))
                        {
                            //flag = flag.Substring(flag.LastIndexOf("\r\n"));
                            int      indexOfFirstBJXX = 0;
                            int      indexOfFirstZTXX = 0;
                            int      indexOfFirstSJXX = 0;
                            int      indexOfFirstCOUT = 0;
                            string[] a       = new string[] { "\r\n" };
                            string[] ArrData = flag.Split(a, StringSplitOptions.None);
                            for (int i = 0; i < ArrData.Count(); i++)
                            {
                                if (ArrData[i].Contains(CBeiDouBJXX.CMD_PREFIX))
                                {
                                    indexOfFirstBJXX = ArrData[i].IndexOf("BJXX");
                                    string msg = ArrData[i].Substring(indexOfFirstBJXX);
                                    DealBJXX(msg);
                                }
                                if (ArrData[i].Contains(CBeiDouZTXX.CMD_PREFIX))
                                {
                                    indexOfFirstZTXX = ArrData[i].IndexOf("ZTXX");
                                    string msg = ArrData[i].Substring(indexOfFirstZTXX);
                                    DealZTXX(msg);
                                }
                                if (ArrData[i].Contains(CBeiDouSJXX.CMD_PREFIX))
                                {
                                    indexOfFirstSJXX = ArrData[i].IndexOf("SJXX");
                                    string msg = ArrData[i].Substring(indexOfFirstSJXX);
                                    DealSJXX(msg);
                                }
                                //顶时报待测
                                if (ArrData[i].Contains(CBeiDouCOUT.CMD_PREFIX))
                                {
                                    indexOfFirstCOUT = ArrData[i].IndexOf("COUT");
                                    string msg = ArrData[i].Substring(indexOfFirstCOUT);
                                    DealCOUT(msg);
                                }
                            }
                            m_inputBuffer.Clear();
                        }
                    }
                }
                catch (Exception exp)
                {
                    Debug.WriteLine(exp.Message);
                }
            }//end of while
        }